@excalidraw/excalidraw 0.14.1-e6de1fe → 0.14.2

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.
Files changed (292) hide show
  1. package/CHANGELOG.md +37 -1
  2. package/README.md +0 -4
  3. package/dist/excalidraw-assets-dev/vendor-e6df8519da951026ff69.js +1 -1
  4. package/dist/excalidraw.development.js +39 -39
  5. package/dist/excalidraw.production.min.js +1 -1
  6. package/package.json +2 -2
  7. package/types/bug-issue-template.d.ts +2 -0
  8. package/types/components/ActiveFile.d.ts +7 -0
  9. package/types/components/ClearCanvas.d.ts +4 -0
  10. package/types/components/CollabButton.d.ts +7 -0
  11. package/types/components/MenuItem.d.ts +11 -0
  12. package/types/components/MenuUtils.d.ts +2 -0
  13. package/types/components/TopErrorBoundary.d.ts +15 -0
  14. package/types/components/WelcomeScreen.d.ts +8 -0
  15. package/types/components/WelcomeScreenDecor.d.ts +6 -0
  16. package/types/components/context/tunnels.d.ts +16 -0
  17. package/types/components/mainMenu/DefaultItems.d.ts +44 -0
  18. package/types/components/mainMenu/MainMenu.d.ts +44 -0
  19. package/types/excalidraw-app/CustomStats.d.ts +9 -0
  20. package/types/excalidraw-app/app_constants.d.ts +32 -0
  21. package/types/excalidraw-app/collab/Collab.d.ts +163 -0
  22. package/types/excalidraw-app/collab/Portal.d.ts +28 -0
  23. package/types/excalidraw-app/collab/RoomDialog.d.ts +13 -0
  24. package/types/excalidraw-app/collab/reconciliation.d.ts +10 -0
  25. package/types/excalidraw-app/components/EncryptedIcon.d.ts +1 -0
  26. package/types/excalidraw-app/components/ExcalidrawPlusAppLink.d.ts +1 -0
  27. package/types/excalidraw-app/components/ExportToExcalidrawPlus.d.ts +9 -0
  28. package/types/excalidraw-app/components/LanguageList.d.ts +4 -0
  29. package/types/excalidraw-app/components/icons.d.ts +1 -0
  30. package/types/excalidraw-app/data/FileManager.d.ts +66 -0
  31. package/types/excalidraw-app/data/LocalData.d.ts +32 -0
  32. package/types/excalidraw-app/data/Locker.d.ts +8 -0
  33. package/types/excalidraw-app/data/firebase.d.ts +25 -0
  34. package/types/excalidraw-app/data/index.d.ts +183 -0
  35. package/types/excalidraw-app/data/localStorage.d.ts +109 -0
  36. package/types/excalidraw-app/data/tabSync.d.ts +9 -0
  37. package/types/excalidraw-app/index.d.ts +26 -0
  38. package/types/packages/excalidraw/dist/excalidraw-assets/bug-issue-template-7628a1d844446e5ca713.d.ts +0 -0
  39. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ar-SA-json-1bb6302a93fa38d23d93.d.ts +0 -0
  40. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ar-SA-json-7880ce61551376011ec8.d.ts +0 -0
  41. package/types/packages/excalidraw/dist/excalidraw-assets/locales/bg-BG-json-04c32894a53ff1b841f2.d.ts +0 -0
  42. package/types/packages/excalidraw/dist/excalidraw-assets/locales/bg-BG-json-a1facb11dbb377c90536.d.ts +0 -0
  43. package/types/packages/excalidraw/dist/excalidraw-assets/locales/bn-BD-json-634967cdb3ba0649af4d.d.ts +0 -0
  44. package/types/packages/excalidraw/dist/excalidraw-assets/locales/bn-BD-json-c8a37406c9152cd7acf4.d.ts +0 -0
  45. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ca-ES-json-319bfc63af7c5cf7ec18.d.ts +0 -0
  46. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ca-ES-json-55c9b183f935a5d11aca.d.ts +0 -0
  47. package/types/packages/excalidraw/dist/excalidraw-assets/locales/cs-CZ-json-63e64aea4eee696f6560.d.ts +0 -0
  48. package/types/packages/excalidraw/dist/excalidraw-assets/locales/cs-CZ-json-6d90332bcb443eb42802.d.ts +0 -0
  49. package/types/packages/excalidraw/dist/excalidraw-assets/locales/da-DK-json-3537795fe77f731fa73b.d.ts +0 -0
  50. package/types/packages/excalidraw/dist/excalidraw-assets/locales/da-DK-json-d3633cf24300764ec674.d.ts +0 -0
  51. package/types/packages/excalidraw/dist/excalidraw-assets/locales/de-DE-json-1e0ab10e858bdd7cd5c7.d.ts +0 -0
  52. package/types/packages/excalidraw/dist/excalidraw-assets/locales/de-DE-json-f02ac029c64432725793.d.ts +0 -0
  53. package/types/packages/excalidraw/dist/excalidraw-assets/locales/el-GR-json-041566c45d784db853b3.d.ts +0 -0
  54. package/types/packages/excalidraw/dist/excalidraw-assets/locales/el-GR-json-72b6ce23553a9c8e270b.d.ts +0 -0
  55. package/types/packages/excalidraw/dist/excalidraw-assets/locales/es-ES-json-124029c5c7386ccbce1c.d.ts +0 -0
  56. package/types/packages/excalidraw/dist/excalidraw-assets/locales/es-ES-json-8791f8a3ec6253466a9b.d.ts +0 -0
  57. package/types/packages/excalidraw/dist/excalidraw-assets/locales/eu-ES-json-2debb0a180f671e8c417.d.ts +0 -0
  58. package/types/packages/excalidraw/dist/excalidraw-assets/locales/eu-ES-json-f959c593c0f00edff67b.d.ts +0 -0
  59. package/types/packages/excalidraw/dist/excalidraw-assets/locales/fa-IR-json-1a48b1b4d36c56bc98b2.d.ts +0 -0
  60. package/types/packages/excalidraw/dist/excalidraw-assets/locales/fa-IR-json-901375a61be9b3ebce1d.d.ts +0 -0
  61. package/types/packages/excalidraw/dist/excalidraw-assets/locales/fi-FI-json-5f4fce8f7a54b9660c99.d.ts +0 -0
  62. package/types/packages/excalidraw/dist/excalidraw-assets/locales/fi-FI-json-b5f1567c3ca0a897e452.d.ts +0 -0
  63. package/types/packages/excalidraw/dist/excalidraw-assets/locales/fr-FR-json-9a524eca06b781609d92.d.ts +0 -0
  64. package/types/packages/excalidraw/dist/excalidraw-assets/locales/fr-FR-json-cb24197bbfb2a4788fde.d.ts +0 -0
  65. package/types/packages/excalidraw/dist/excalidraw-assets/locales/gl-ES-json-24ddd1aea2914489d66b.d.ts +0 -0
  66. package/types/packages/excalidraw/dist/excalidraw-assets/locales/gl-ES-json-bff1413c13a0b907cd6d.d.ts +0 -0
  67. package/types/packages/excalidraw/dist/excalidraw-assets/locales/he-IL-json-2686abc8b155be579d06.d.ts +0 -0
  68. package/types/packages/excalidraw/dist/excalidraw-assets/locales/he-IL-json-bcfe172e6fc193bbf5f1.d.ts +0 -0
  69. package/types/packages/excalidraw/dist/excalidraw-assets/locales/hi-IN-json-a86588d386d42bea67ad.d.ts +0 -0
  70. package/types/packages/excalidraw/dist/excalidraw-assets/locales/hi-IN-json-efc9f7ef04774f58cbad.d.ts +0 -0
  71. package/types/packages/excalidraw/dist/excalidraw-assets/locales/hu-HU-json-3b647d54caa9cd086abc.d.ts +0 -0
  72. package/types/packages/excalidraw/dist/excalidraw-assets/locales/hu-HU-json-9eced03fca421da9dc33.d.ts +0 -0
  73. package/types/packages/excalidraw/dist/excalidraw-assets/locales/id-ID-json-7b86bce77d4d5a362f05.d.ts +0 -0
  74. package/types/packages/excalidraw/dist/excalidraw-assets/locales/id-ID-json-7d938493c5aa6afef186.d.ts +0 -0
  75. package/types/packages/excalidraw/dist/excalidraw-assets/locales/it-IT-json-9ecc203d696bd8ab1e5c.d.ts +0 -0
  76. package/types/packages/excalidraw/dist/excalidraw-assets/locales/it-IT-json-a909a4d4bb19af207fff.d.ts +0 -0
  77. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ja-JP-json-3ca539ebaf199164dd7f.d.ts +0 -0
  78. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ja-JP-json-9e961616beed862eac56.d.ts +0 -0
  79. package/types/packages/excalidraw/dist/excalidraw-assets/locales/kab-KAB-json-2d1204c965bc93f5754b.d.ts +0 -0
  80. package/types/packages/excalidraw/dist/excalidraw-assets/locales/kab-KAB-json-4cd28c882b4db23990d8.d.ts +0 -0
  81. package/types/packages/excalidraw/dist/excalidraw-assets/locales/kk-KZ-json-0d11cd6204ccf3fe525f.d.ts +0 -0
  82. package/types/packages/excalidraw/dist/excalidraw-assets/locales/kk-KZ-json-f89d72504164df84c087.d.ts +0 -0
  83. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ko-KR-json-3d69fbb43c407fca47d3.d.ts +0 -0
  84. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ko-KR-json-6ee79cc1ac4f34e85f50.d.ts +0 -0
  85. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ku-TR-json-04cd173683d79bb264e7.d.ts +0 -0
  86. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ku-TR-json-6077b8b65644d4b19461.d.ts +0 -0
  87. package/types/packages/excalidraw/dist/excalidraw-assets/locales/lt-LT-json-07a117096cba0d54446a.d.ts +0 -0
  88. package/types/packages/excalidraw/dist/excalidraw-assets/locales/lt-LT-json-0d6150d8b3d418652fe9.d.ts +0 -0
  89. package/types/packages/excalidraw/dist/excalidraw-assets/locales/lv-LV-json-24ab5a572ca1e9899a88.d.ts +0 -0
  90. package/types/packages/excalidraw/dist/excalidraw-assets/locales/lv-LV-json-5ff95e7961229ff568fb.d.ts +0 -0
  91. package/types/packages/excalidraw/dist/excalidraw-assets/locales/mr-IN-json-069b53ee4b91eda493ce.d.ts +0 -0
  92. package/types/packages/excalidraw/dist/excalidraw-assets/locales/mr-IN-json-a7a04f967d1b0df28700.d.ts +0 -0
  93. package/types/packages/excalidraw/dist/excalidraw-assets/locales/my-MM-json-354b418b74398f6efb2b.d.ts +0 -0
  94. package/types/packages/excalidraw/dist/excalidraw-assets/locales/my-MM-json-7a5e168f3c205e6dc827.d.ts +0 -0
  95. package/types/packages/excalidraw/dist/excalidraw-assets/locales/nb-NO-json-4424f16783be9dc1b68c.d.ts +0 -0
  96. package/types/packages/excalidraw/dist/excalidraw-assets/locales/nb-NO-json-df3df0be06e3f1bf4b06.d.ts +0 -0
  97. package/types/packages/excalidraw/dist/excalidraw-assets/locales/nl-NL-json-4b701336a4c5c331d25a.d.ts +0 -0
  98. package/types/packages/excalidraw/dist/excalidraw-assets/locales/nl-NL-json-85d5f44469db5c5e6124.d.ts +0 -0
  99. package/types/packages/excalidraw/dist/excalidraw-assets/locales/nn-NO-json-72c1151e278eaa3007da.d.ts +0 -0
  100. package/types/packages/excalidraw/dist/excalidraw-assets/locales/nn-NO-json-d566f1edbd6be33a70b3.d.ts +0 -0
  101. package/types/packages/excalidraw/dist/excalidraw-assets/locales/oc-FR-json-1d888554c45e5174ede4.d.ts +0 -0
  102. package/types/packages/excalidraw/dist/excalidraw-assets/locales/oc-FR-json-24548a7feecb4c99eaa3.d.ts +0 -0
  103. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pa-IN-json-0ef170e4e8fc90c8b8c0.d.ts +0 -0
  104. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pa-IN-json-9ffe63db0e1a6b0274f7.d.ts +0 -0
  105. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pa-IN-json-d4f592694e6f6af11450.d.ts +0 -0
  106. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pl-PL-json-a8ddc96c59a92fca9d77.d.ts +0 -0
  107. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pl-PL-json-eec56b7a089b7cb68635.d.ts +0 -0
  108. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pt-BR-json-1317f88b4d299ad9a2ce.d.ts +0 -0
  109. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pt-BR-json-1e850bd4508a5abf6aec.d.ts +0 -0
  110. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pt-PT-json-0d63b7c4b4188b9378b8.d.ts +0 -0
  111. package/types/packages/excalidraw/dist/excalidraw-assets/locales/pt-PT-json-37c5101916c53869cd8c.d.ts +0 -0
  112. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ro-RO-json-97f37a829dc90dfcc450.d.ts +0 -0
  113. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ro-RO-json-bdd13022520b63c2e758.d.ts +0 -0
  114. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ru-RU-json-1ac97d5e23a89ebff869.d.ts +0 -0
  115. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ru-RU-json-c7b2021bbfe94a4c3b92.d.ts +0 -0
  116. package/types/packages/excalidraw/dist/excalidraw-assets/locales/si-LK-json-1444e979b8c965d31530.d.ts +0 -0
  117. package/types/packages/excalidraw/dist/excalidraw-assets/locales/si-LK-json-99d0a5a652dbc68ed47d.d.ts +0 -0
  118. package/types/packages/excalidraw/dist/excalidraw-assets/locales/sk-SK-json-02cfad34246f8cfedd42.d.ts +0 -0
  119. package/types/packages/excalidraw/dist/excalidraw-assets/locales/sk-SK-json-39a1277ee816fa9d9661.d.ts +0 -0
  120. package/types/packages/excalidraw/dist/excalidraw-assets/locales/sl-SI-json-239877b5b4b9450f4ff8.d.ts +0 -0
  121. package/types/packages/excalidraw/dist/excalidraw-assets/locales/sl-SI-json-c8c152fc0e647c41b0b9.d.ts +0 -0
  122. package/types/packages/excalidraw/dist/excalidraw-assets/locales/sv-SE-json-8930dabe22b7aabb2293.d.ts +0 -0
  123. package/types/packages/excalidraw/dist/excalidraw-assets/locales/sv-SE-json-dbe06cf14132b3898415.d.ts +0 -0
  124. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ta-IN-json-860e88f005450b4f47b0.d.ts +0 -0
  125. package/types/packages/excalidraw/dist/excalidraw-assets/locales/ta-IN-json-fb0ad99371cc9d395a4a.d.ts +0 -0
  126. package/types/packages/excalidraw/dist/excalidraw-assets/locales/tr-TR-json-2e9abe9bb4deaf4dd351.d.ts +0 -0
  127. package/types/packages/excalidraw/dist/excalidraw-assets/locales/tr-TR-json-787da8dfc2342305e3a6.d.ts +0 -0
  128. package/types/packages/excalidraw/dist/excalidraw-assets/locales/uk-UA-json-31b987b925c003b67518.d.ts +0 -0
  129. package/types/packages/excalidraw/dist/excalidraw-assets/locales/uk-UA-json-e1832968cea3ac1b1f14.d.ts +0 -0
  130. package/types/packages/excalidraw/dist/excalidraw-assets/locales/vi-VN-json-238d97c20e7382d8d408.d.ts +0 -0
  131. package/types/packages/excalidraw/dist/excalidraw-assets/locales/vi-VN-json-8e07b04b68ca2190a3ba.d.ts +0 -0
  132. package/types/packages/excalidraw/dist/excalidraw-assets/locales/zh-CN-json-0c84694ac9a1000f2eda.d.ts +0 -0
  133. package/types/packages/excalidraw/dist/excalidraw-assets/locales/zh-CN-json-ee9966d1cd4ff9e87533.d.ts +0 -0
  134. package/types/packages/excalidraw/dist/excalidraw-assets/locales/zh-HK-json-3a8d1819016d2ff6a8a5.d.ts +0 -0
  135. package/types/packages/excalidraw/dist/excalidraw-assets/locales/zh-HK-json-a90c2e97d0115af3affe.d.ts +0 -0
  136. package/types/packages/excalidraw/dist/excalidraw-assets/locales/zh-TW-json-1f855b7f18a6b359ad85.d.ts +0 -0
  137. package/types/packages/excalidraw/dist/excalidraw-assets/locales/zh-TW-json-a4a2e5b4cc51ab083773.d.ts +0 -0
  138. package/types/packages/excalidraw/dist/excalidraw-assets/socketIoClient-9dfbabed609bb6017f9b.d.ts +0 -0
  139. package/types/packages/excalidraw/dist/excalidraw-assets/vendor-1e6c2df4e69cc1956ad5.d.ts +0 -0
  140. package/types/packages/excalidraw/dist/excalidraw-assets-dev/bug-issue-template-28bde25b78f0c2ca82bd.d.ts +0 -0
  141. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ar-SA-json-808d2efbf452212f669d.d.ts +2 -0
  142. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ar-SA-json-b6404a304896578c57e7.d.ts +2 -0
  143. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/bg-BG-json-27fa33071eaa81394d61.d.ts +2 -0
  144. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/bg-BG-json-e9f8c439c703b9c46f8f.d.ts +2 -0
  145. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/bn-BD-json-6b8f0d28591eb6926c5a.d.ts +2 -0
  146. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/bn-BD-json-b181d32e04f431472a00.d.ts +2 -0
  147. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ca-ES-json-0f0e2e2efe8081b84670.d.ts +2 -0
  148. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ca-ES-json-b8795d2c06e02f8459d2.d.ts +2 -0
  149. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/cs-CZ-json-101521a09a7715f909be.d.ts +2 -0
  150. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/cs-CZ-json-96005b5d91bada4af762.d.ts +2 -0
  151. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/da-DK-json-291963ff7bdf063a3414.d.ts +2 -0
  152. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/da-DK-json-4d9054b3dd4ff8de7bfa.d.ts +2 -0
  153. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/de-DE-json-0dfed44e094e5e7647ea.d.ts +2 -0
  154. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/de-DE-json-c4d1b52feda557945ecf.d.ts +2 -0
  155. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/el-GR-json-6b618647cd5dc299d56b.d.ts +2 -0
  156. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/el-GR-json-cc428d6d24413e24785d.d.ts +2 -0
  157. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/es-ES-json-93b74ae63ccd847c1735.d.ts +2 -0
  158. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/es-ES-json-f300883866a6249a4943.d.ts +2 -0
  159. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/eu-ES-json-2ce16fff0331672e3630.d.ts +2 -0
  160. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/eu-ES-json-5321ea491e8c1e8e265c.d.ts +2 -0
  161. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/fa-IR-json-607ddee328d9a13e688d.d.ts +2 -0
  162. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/fa-IR-json-d8736c460ba5f77209bf.d.ts +2 -0
  163. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/fi-FI-json-29f534e1e3daf160eb2c.d.ts +2 -0
  164. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/fi-FI-json-92708cde694d0f77df88.d.ts +2 -0
  165. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/fr-FR-json-4a98afe80b0f71441e85.d.ts +2 -0
  166. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/fr-FR-json-fc60b276b98e6bc57ae8.d.ts +2 -0
  167. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/gl-ES-json-210eff58e4414a5490e8.d.ts +2 -0
  168. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/gl-ES-json-4e726abf2864318b51f9.d.ts +2 -0
  169. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/he-IL-json-86ff7589978ed9654753.d.ts +2 -0
  170. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/he-IL-json-9bb31b0b25e5a4e8ebec.d.ts +2 -0
  171. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/hi-IN-json-568c16b512f4c2c8dc80.d.ts +2 -0
  172. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/hi-IN-json-87d2ac812dc34ff143a2.d.ts +2 -0
  173. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/hu-HU-json-6127772c863962f7a7c9.d.ts +2 -0
  174. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/hu-HU-json-a96298a55c135b42996d.d.ts +2 -0
  175. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/id-ID-json-0850671b76921f20c9b6.d.ts +2 -0
  176. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/id-ID-json-cec1d9b72fad17e79219.d.ts +2 -0
  177. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/it-IT-json-2cef8370cf78d9233c2b.d.ts +2 -0
  178. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/it-IT-json-5436ec678e0205d56856.d.ts +2 -0
  179. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ja-JP-json-32f639470c104e80bfa4.d.ts +2 -0
  180. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ja-JP-json-ea55175bf36ae67d1486.d.ts +2 -0
  181. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/kab-KAB-json-0571060fae93fb1f4655.d.ts +2 -0
  182. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/kab-KAB-json-e40e6e3caaf73fb06f29.d.ts +2 -0
  183. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/kk-KZ-json-25ada9f88f38cfb84b18.d.ts +2 -0
  184. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/kk-KZ-json-2c2022e9751e266daf48.d.ts +2 -0
  185. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ko-KR-json-8a4074591f36df4d0c58.d.ts +2 -0
  186. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ko-KR-json-c7c136cb71decba363c7.d.ts +2 -0
  187. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ku-TR-json-7f671260a35125754327.d.ts +2 -0
  188. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ku-TR-json-d9a93bd27cba79b19aee.d.ts +2 -0
  189. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/lt-LT-json-0907f29dc7c40b6e344f.d.ts +2 -0
  190. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/lt-LT-json-6c2e9629a9ba65c0dca7.d.ts +2 -0
  191. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/lv-LV-json-a811474717b56be40608.d.ts +2 -0
  192. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/lv-LV-json-ccbb9781322782d02fae.d.ts +2 -0
  193. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/mr-IN-json-1bac19e335b1be4d57b1.d.ts +2 -0
  194. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/mr-IN-json-d8ec700e1e33441c238b.d.ts +2 -0
  195. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/my-MM-json-5c3b77241cc063b2c5b0.d.ts +2 -0
  196. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/my-MM-json-bf5438b8b540213e7b7d.d.ts +2 -0
  197. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/nb-NO-json-354ad83d68de9511218b.d.ts +2 -0
  198. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/nb-NO-json-d7ca016e9141141cf6d2.d.ts +2 -0
  199. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/nl-NL-json-1690236e0232b67cd430.d.ts +2 -0
  200. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/nl-NL-json-3ba3e0f154412bbcf188.d.ts +2 -0
  201. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/nn-NO-json-75b6725e1dfad76dd3d6.d.ts +2 -0
  202. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/nn-NO-json-cd35c740e50d116d56a0.d.ts +2 -0
  203. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/oc-FR-json-54e22feb16f23f963b44.d.ts +2 -0
  204. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/oc-FR-json-e352ed207a2bc6ff2f9a.d.ts +2 -0
  205. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/pa-IN-json-2ad0a6609c7ab52d467d.d.ts +2 -0
  206. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/pa-IN-json-66af94286f884f29d157.d.ts +2 -0
  207. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/pl-PL-json-5e2c724996753a370f00.d.ts +2 -0
  208. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/pl-PL-json-e9d55427ccc0a3ee2287.d.ts +2 -0
  209. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/pt-BR-json-3756b9371bfb0744a247.d.ts +2 -0
  210. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/pt-BR-json-b51075fd4a34edc98c62.d.ts +2 -0
  211. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/pt-PT-json-54efec7908df52d47dd5.d.ts +2 -0
  212. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/pt-PT-json-f580e6aa27acd18cf7eb.d.ts +2 -0
  213. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ro-RO-json-7d91654ae261bb9d572c.d.ts +2 -0
  214. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ro-RO-json-f62b471f8125751df395.d.ts +2 -0
  215. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ru-RU-json-0b36410a81160861bfbe.d.ts +2 -0
  216. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ru-RU-json-807c094575141684a23c.d.ts +2 -0
  217. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/si-LK-json-338de2463f06f3a76069.d.ts +2 -0
  218. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/si-LK-json-d6a06f63464d79fd36eb.d.ts +2 -0
  219. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/sk-SK-json-b8a13e82d3ccc25365ff.d.ts +2 -0
  220. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/sk-SK-json-dc42543f0ffa26f7e2de.d.ts +2 -0
  221. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/sl-SI-json-79d34e23c08ceec64254.d.ts +2 -0
  222. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/sl-SI-json-7f2b05323ad2e88110b3.d.ts +2 -0
  223. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/sv-SE-json-053d2c3abda7dcc70df7.d.ts +2 -0
  224. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/sv-SE-json-0aec1cdc076c868b1384.d.ts +2 -0
  225. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ta-IN-json-41c81e1f857b5e0da8e5.d.ts +2 -0
  226. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/ta-IN-json-82adc75c8ce42916819b.d.ts +2 -0
  227. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/tr-TR-json-662131ef5ef936bed6fc.d.ts +2 -0
  228. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/tr-TR-json-745c327779771326407a.d.ts +2 -0
  229. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/uk-UA-json-0e7734abfada3d4d8c23.d.ts +2 -0
  230. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/uk-UA-json-a91561233fde5c47199c.d.ts +2 -0
  231. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/vi-VN-json-24e0a602b51ae02a9396.d.ts +2 -0
  232. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/vi-VN-json-da80feb32fd43849da41.d.ts +2 -0
  233. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/zh-CN-json-9a4f14a3964c94a3b1d0.d.ts +2 -0
  234. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/zh-CN-json-cfa7b0a95405aae3bd85.d.ts +2 -0
  235. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/zh-HK-json-d549d0545edbb2c9b957.d.ts +2 -0
  236. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/zh-HK-json-d621701ec05102b37e3b.d.ts +2 -0
  237. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/zh-TW-json-67cab9706c94be113c72.d.ts +2 -0
  238. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/zh-TW-json-8e24a4e83f3a0e4ae157.d.ts +2 -0
  239. package/types/packages/excalidraw/dist/excalidraw-assets-dev/socketIoClient-fa4b6d469c39d45f2e09.d.ts +0 -0
  240. package/types/packages/excalidraw/dist/excalidraw-assets-dev/vendor-cdf32fffa1d8406fcad7.d.ts +0 -0
  241. package/types/packages/excalidraw/example/public/bundle.d.ts +4 -0
  242. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/ar-SA-json-422720aeae76b43f4e34.d.ts +2 -0
  243. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/bg-BG-json-ae0d3ff13ac91abf996f.d.ts +2 -0
  244. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/bn-BD-json-32cdc6ced24b13f36bbc.d.ts +2 -0
  245. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/ca-ES-json-a49f03ca494b1ca8ed9b.d.ts +2 -0
  246. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/cs-CZ-json-2f07dbffe26aa12a024c.d.ts +2 -0
  247. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/da-DK-json-6ae97a313d4264946e31.d.ts +2 -0
  248. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/de-DE-json-c80daaed2a67b2f15223.d.ts +2 -0
  249. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/el-GR-json-51bfd33c7f83bbd7f6db.d.ts +2 -0
  250. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/es-ES-json-8b67d656368fbf73428a.d.ts +2 -0
  251. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/eu-ES-json-5e56699d66f76750fe41.d.ts +2 -0
  252. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/fa-IR-json-d0c9c049db458a8ca59b.d.ts +2 -0
  253. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/fi-FI-json-1ae181bce5d26c50d814.d.ts +2 -0
  254. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/fr-FR-json-0956ba0a6dca32f13c7c.d.ts +2 -0
  255. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/gl-ES-json-1d1f4fc2134412b9c96a.d.ts +2 -0
  256. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/he-IL-json-1f78737fd8e123db1288.d.ts +2 -0
  257. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/hi-IN-json-5be1ea05cc7ee8432cb8.d.ts +2 -0
  258. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/hu-HU-json-107000c3f76466f229a2.d.ts +2 -0
  259. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/id-ID-json-f782bb0be319848f497f.d.ts +2 -0
  260. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/it-IT-json-c10398560de544c3d260.d.ts +2 -0
  261. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/ja-JP-json-e6171aca80f24923fe78.d.ts +2 -0
  262. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/kab-KAB-json-24afe8bf173c1ff2b0fb.d.ts +2 -0
  263. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/kk-KZ-json-ebcf4e820011c8b8947f.d.ts +2 -0
  264. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/ko-KR-json-8ea51a4ccc4dcc5ad697.d.ts +2 -0
  265. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/lt-LT-json-5bbbf30868522c7bc767.d.ts +2 -0
  266. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/lv-LV-json-b098759876ad0f66ffeb.d.ts +2 -0
  267. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/mr-IN-json-095d9331dce2f1e28fe2.d.ts +2 -0
  268. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/my-MM-json-6d5eac0f31d26c9151d0.d.ts +2 -0
  269. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/nb-NO-json-3212c5604c8178216a20.d.ts +2 -0
  270. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/nl-NL-json-a0917464058630804509.d.ts +2 -0
  271. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/nn-NO-json-acadf455071816b2e1ed.d.ts +2 -0
  272. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/oc-FR-json-09009791e68cc185268f.d.ts +2 -0
  273. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/pa-IN-json-0b4a87b2f3a174822e14.d.ts +2 -0
  274. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/pl-PL-json-e9f93bc2be954bd5cd6f.d.ts +2 -0
  275. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/pt-BR-json-1d39c9c817cafb4df7bc.d.ts +2 -0
  276. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/pt-PT-json-bf4365a3b12692290c60.d.ts +2 -0
  277. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/ro-RO-json-b5a994918893bdb7f12a.d.ts +2 -0
  278. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/ru-RU-json-4ca260298f98f8b9d64b.d.ts +2 -0
  279. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/si-LK-json-036efbecc1473ea2654c.d.ts +2 -0
  280. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/sk-SK-json-01a56bd743bfafa0ea7f.d.ts +2 -0
  281. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/sl-SI-json-7c07dba5b6bcb7072b72.d.ts +2 -0
  282. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/sv-SE-json-344d32171a6dcaa49e4b.d.ts +2 -0
  283. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/ta-IN-json-972a32d06dc37eae0265.d.ts +2 -0
  284. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/tr-TR-json-fe7706a48e8c387f0efa.d.ts +2 -0
  285. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/uk-UA-json-3530ec9aa3e0e74258f2.d.ts +2 -0
  286. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/vi-VN-json-8787bf8cf6bfb42f8db7.d.ts +2 -0
  287. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/zh-CN-json-973f54c2e185ded6c3aa.d.ts +2 -0
  288. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/zh-HK-json-327e43ba85bde53f4508.d.ts +2 -0
  289. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/locales/zh-TW-json-76cff34960ab6a8ef9ae.d.ts +2 -0
  290. package/types/packages/excalidraw/example/public/excalidraw-assets-dev/vendor-045ba36ab51d57ee5669.d.ts +0 -0
  291. package/types/packages/excalidraw/example/public/excalidraw.development.d.ts +4 -0
  292. package/types/components/tunnels.d.ts +0 -37
@@ -19,6 +19,17 @@
19
19
  return /******/ (() => { // webpackBootstrap
20
20
  /******/ var __webpack_modules__ = ({
21
21
 
22
+ /***/ "../../../node_modules/@dwelle/tunnel-rat/dist/index.js":
23
+ /*!**************************************************************!*\
24
+ !*** ../../../node_modules/@dwelle/tunnel-rat/dist/index.js ***!
25
+ \**************************************************************/
26
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27
+
28
+ "use strict";
29
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ tunnel)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand */ \"../../../node_modules/zustand/esm/index.mjs\");\n\n\n\nfunction tunnel() {\n const useStore = (0,zustand__WEBPACK_IMPORTED_MODULE_1__.create)(set => ({\n current: new Array(),\n version: 0,\n set\n }));\n return {\n In: ({\n children\n }) => {\n const set = useStore(state => state.set);\n const version = useStore(state => state.version);\n /* When this component mounts, we increase the store's version number.\n This will cause all existing rats to re-render (just like if the Out component\n were mapping items to a list.) The re-rendering will cause the final \n order of rendered components to match what the user is expecting. */\n\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n set(state => ({\n version: state.version + 1\n }));\n }, []);\n /* Any time the children _or_ the store's version number change, insert\n the specified React children into the list of rats. */\n\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n set(({\n current\n }) => ({\n current: [...current, children]\n }));\n return () => set(({\n current\n }) => ({\n current: current.filter(c => c !== children)\n }));\n }, [children, version]);\n return null;\n },\n Out: () => {\n const current = useStore(state => state.current);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, current);\n }\n };\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvdHVubmVsLXJhdC9kaXN0L2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0M7QUFDZDs7QUFFakM7QUFDQSxtQkFBbUIsK0NBQU07QUFDekI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxzREFBZTtBQUNyQjtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBLE1BQU0sc0RBQWU7QUFDckI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsMEJBQTBCLDBEQUFtQixDQUFDLHVEQUFjO0FBQzVEO0FBQ0E7QUFDQTs7QUFFNkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvdHVubmVsLXJhdC9kaXN0L2luZGV4LmpzPzRlM2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZSB9IGZyb20gJ3p1c3RhbmQnO1xuXG5mdW5jdGlvbiB0dW5uZWwoKSB7XG4gIGNvbnN0IHVzZVN0b3JlID0gY3JlYXRlKHNldCA9PiAoe1xuICAgIGN1cnJlbnQ6IG5ldyBBcnJheSgpLFxuICAgIHZlcnNpb246IDAsXG4gICAgc2V0XG4gIH0pKTtcbiAgcmV0dXJuIHtcbiAgICBJbjogKHtcbiAgICAgIGNoaWxkcmVuXG4gICAgfSkgPT4ge1xuICAgICAgY29uc3Qgc2V0ID0gdXNlU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0KTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VTdG9yZShzdGF0ZSA9PiBzdGF0ZS52ZXJzaW9uKTtcbiAgICAgIC8qIFdoZW4gdGhpcyBjb21wb25lbnQgbW91bnRzLCB3ZSBpbmNyZWFzZSB0aGUgc3RvcmUncyB2ZXJzaW9uIG51bWJlci5cbiAgICAgIFRoaXMgd2lsbCBjYXVzZSBhbGwgZXhpc3RpbmcgcmF0cyB0byByZS1yZW5kZXIgKGp1c3QgbGlrZSBpZiB0aGUgT3V0IGNvbXBvbmVudFxuICAgICAgd2VyZSBtYXBwaW5nIGl0ZW1zIHRvIGEgbGlzdC4pIFRoZSByZS1yZW5kZXJpbmcgd2lsbCBjYXVzZSB0aGUgZmluYWwgXG4gICAgICBvcmRlciBvZiByZW5kZXJlZCBjb21wb25lbnRzIHRvIG1hdGNoIHdoYXQgdGhlIHVzZXIgaXMgZXhwZWN0aW5nLiAqL1xuXG4gICAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgICB2ZXJzaW9uOiBzdGF0ZS52ZXJzaW9uICsgMVxuICAgICAgICB9KSk7XG4gICAgICB9LCBbXSk7XG4gICAgICAvKiBBbnkgdGltZSB0aGUgY2hpbGRyZW4gX29yXyB0aGUgc3RvcmUncyB2ZXJzaW9uIG51bWJlciBjaGFuZ2UsIGluc2VydFxuICAgICAgdGhlIHNwZWNpZmllZCBSZWFjdCBjaGlsZHJlbiBpbnRvIHRoZSBsaXN0IG9mIHJhdHMuICovXG5cbiAgICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldCgoe1xuICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgfSkgPT4gKHtcbiAgICAgICAgICBjdXJyZW50OiBbLi4uY3VycmVudCwgY2hpbGRyZW5dXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHNldCgoe1xuICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgfSkgPT4gKHtcbiAgICAgICAgICBjdXJyZW50OiBjdXJyZW50LmZpbHRlcihjID0+IGMgIT09IGNoaWxkcmVuKVxuICAgICAgICB9KSk7XG4gICAgICB9LCBbY2hpbGRyZW4sIHZlcnNpb25dKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgT3V0OiAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdXNlU3RvcmUoc3RhdGUgPT4gc3RhdGUuY3VycmVudCk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGN1cnJlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IHsgdHVubmVsIGFzIGRlZmF1bHQgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@dwelle/tunnel-rat/dist/index.js\n");
30
+
31
+ /***/ }),
32
+
22
33
  /***/ "../../../node_modules/clsx/dist/clsx.m.js":
23
34
  /*!*************************************************!*\
24
35
  !*** ../../../node_modules/clsx/dist/clsx.m.js ***!
@@ -1166,17 +1177,6 @@ eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElem
1166
1177
 
1167
1178
  /***/ }),
1168
1179
 
1169
- /***/ "../../../node_modules/tunnel-rat/dist/index.js":
1170
- /*!******************************************************!*\
1171
- !*** ../../../node_modules/tunnel-rat/dist/index.js ***!
1172
- \******************************************************/
1173
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1174
-
1175
- "use strict";
1176
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ tunnel)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand */ \"../../../node_modules/zustand/esm/index.mjs\");\n\n\n\nfunction tunnel() {\n const useStore = (0,zustand__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(set => ({\n current: new Array(),\n version: 0,\n set\n }));\n return {\n In: ({\n children\n }) => {\n const set = useStore(state => state.set);\n const version = useStore(state => state.version);\n /* When this component mounts, we increase the store's version number.\n This will cause all existing rats to re-render (just like if the Out component\n were mapping items to a list.) The re-rendering will cause the final \n order of rendered components to match what the user is expecting. */\n\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n set(state => ({\n version: state.version + 1\n }));\n }, []);\n /* Any time the children _or_ the store's version number change, insert\n the specified React children into the list of rats. */\n\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n set(({\n current\n }) => ({\n current: [...current, children]\n }));\n return () => set(({\n current\n }) => ({\n current: current.filter(c => c !== children)\n }));\n }, [children, version]);\n return null;\n },\n Out: () => {\n const current = useStore(state => state.current);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, current);\n }\n };\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3R1bm5lbC1yYXQvZGlzdC9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStDO0FBQ2xCOztBQUU3QjtBQUNBLG1CQUFtQixtREFBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLHNEQUFlO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUEsTUFBTSxzREFBZTtBQUNyQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSwwQkFBMEIsMERBQW1CLENBQUMsdURBQWM7QUFDNUQ7QUFDQTtBQUNBOztBQUU2QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHVubmVsLXJhdC9kaXN0L2luZGV4LmpzP2VmNGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGUgZnJvbSAnenVzdGFuZCc7XG5cbmZ1bmN0aW9uIHR1bm5lbCgpIHtcbiAgY29uc3QgdXNlU3RvcmUgPSBjcmVhdGUoc2V0ID0+ICh7XG4gICAgY3VycmVudDogbmV3IEFycmF5KCksXG4gICAgdmVyc2lvbjogMCxcbiAgICBzZXRcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIEluOiAoe1xuICAgICAgY2hpbGRyZW5cbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBzZXQgPSB1c2VTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXQpO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZVN0b3JlKHN0YXRlID0+IHN0YXRlLnZlcnNpb24pO1xuICAgICAgLyogV2hlbiB0aGlzIGNvbXBvbmVudCBtb3VudHMsIHdlIGluY3JlYXNlIHRoZSBzdG9yZSdzIHZlcnNpb24gbnVtYmVyLlxuICAgICAgVGhpcyB3aWxsIGNhdXNlIGFsbCBleGlzdGluZyByYXRzIHRvIHJlLXJlbmRlciAoanVzdCBsaWtlIGlmIHRoZSBPdXQgY29tcG9uZW50XG4gICAgICB3ZXJlIG1hcHBpbmcgaXRlbXMgdG8gYSBsaXN0LikgVGhlIHJlLXJlbmRlcmluZyB3aWxsIGNhdXNlIHRoZSBmaW5hbCBcbiAgICAgIG9yZGVyIG9mIHJlbmRlcmVkIGNvbXBvbmVudHMgdG8gbWF0Y2ggd2hhdCB0aGUgdXNlciBpcyBleHBlY3RpbmcuICovXG5cbiAgICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICAgIHZlcnNpb246IHN0YXRlLnZlcnNpb24gKyAxXG4gICAgICAgIH0pKTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIC8qIEFueSB0aW1lIHRoZSBjaGlsZHJlbiBfb3JfIHRoZSBzdG9yZSdzIHZlcnNpb24gbnVtYmVyIGNoYW5nZSwgaW5zZXJ0XG4gICAgICB0aGUgc3BlY2lmaWVkIFJlYWN0IGNoaWxkcmVuIGludG8gdGhlIGxpc3Qgb2YgcmF0cy4gKi9cblxuICAgICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0KCh7XG4gICAgICAgICAgY3VycmVudFxuICAgICAgICB9KSA9PiAoe1xuICAgICAgICAgIGN1cnJlbnQ6IFsuLi5jdXJyZW50LCBjaGlsZHJlbl1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gKCkgPT4gc2V0KCh7XG4gICAgICAgICAgY3VycmVudFxuICAgICAgICB9KSA9PiAoe1xuICAgICAgICAgIGN1cnJlbnQ6IGN1cnJlbnQuZmlsdGVyKGMgPT4gYyAhPT0gY2hpbGRyZW4pXG4gICAgICAgIH0pKTtcbiAgICAgIH0sIFtjaGlsZHJlbiwgdmVyc2lvbl0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBPdXQ6ICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB1c2VTdG9yZShzdGF0ZSA9PiBzdGF0ZS5jdXJyZW50KTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY3VycmVudCk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgeyB0dW5uZWwgYXMgZGVmYXVsdCB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/tunnel-rat/dist/index.js\n");
1177
-
1178
- /***/ }),
1179
-
1180
1180
  /***/ "../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js":
1181
1181
  /*!*****************************************************************************************************!*\
1182
1182
  !*** ../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js ***!
@@ -2338,7 +2338,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2338
2338
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2339
2339
 
2340
2340
  "use strict";
2341
- 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;\nconst trackEvent = typeof process !== \"undefined\" &&\n ((_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\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"FAST_REFRESH\":\"false\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.14.1-e6de1fe\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\n typeof window !== \"undefined\" &&\n window.gtag\n ? (category, action, label, value) => {\n try {\n window.gtag(\"event\", action, {\n event_category: category,\n event_label: label,\n value,\n });\n }\n catch (error) {\n console.error(\"error logging to ga\", error);\n }\n }\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\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"FAST_REFRESH\":\"false\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.14.1-e6de1fe\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\n ? (category, action, label, value) => { }\n : (category, action, label, value) => {\n // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIsdzVCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksdzVCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
2341
+ 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;\nconst trackEvent = typeof process !== \"undefined\" &&\n ((_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\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"FAST_REFRESH\":\"false\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.14.2\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\n typeof window !== \"undefined\" &&\n window.gtag\n ? (category, action, label, value) => {\n try {\n window.gtag(\"event\", action, {\n event_category: category,\n event_label: label,\n value,\n });\n }\n catch (error) {\n console.error(\"error logging to ga\", error);\n }\n }\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\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"FAST_REFRESH\":\"false\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.14.2\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\n ? (category, action, label, value) => { }\n : (category, action, label, value) => {\n // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIsZzVCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksZzVCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
2342
2342
 
2343
2343
  /***/ }),
2344
2344
 
@@ -2679,7 +2679,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2679
2679
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2680
2680
 
2681
2681
  "use strict";
2682
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\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 _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data */ \"../../data/index.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _ErrorDialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ErrorDialog */ \"../../components/ErrorDialog.tsx\");\n/* harmony import */ var _ImageExportDialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ImageExportDialog */ \"../../components/ImageExportDialog.tsx\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _LoadingMessage__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./LoadingMessage */ \"../../components/LoadingMessage.tsx\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _MobileMenu__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./MobileMenu */ \"../../components/MobileMenu.tsx\");\n/* harmony import */ var _PasteChartDialog__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./PasteChartDialog */ \"../../components/PasteChartDialog.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _HelpDialog__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./HelpDialog */ \"../../components/HelpDialog.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _JSONExportDialog__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./JSONExportDialog */ \"../../components/JSONExportDialog.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _LibraryMenu__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./LibraryMenu */ \"../../components/LibraryMenu.tsx\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./LayerUI.scss */ \"../../components/LayerUI.scss\");\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./Toolbar.scss */ \"../../components/Toolbar.scss\");\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../components/App */ \"../../components/App.tsx\");\n/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./Stats */ \"../../components/Stats.tsx\");\n/* harmony import */ var _actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../actions/actionToggleStats */ \"../../actions/actionToggleStats.tsx\");\n/* harmony import */ var _footer_Footer__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./footer/Footer */ \"../../components/footer/Footer.tsx\");\n/* harmony import */ var _Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./Sidebar/Sidebar */ \"../../components/Sidebar/Sidebar.tsx\");\n/* harmony import */ var _jotai__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../jotai */ \"../../jotai.ts\");\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! jotai */ \"../../../node_modules/jotai/esm/index.js\");\n/* harmony import */ var _main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./main-menu/MainMenu */ \"../../components/main-menu/MainMenu.tsx\");\n/* harmony import */ var _ActiveConfirmDialog__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ActiveConfirmDialog */ \"../../components/ActiveConfirmDialog.tsx\");\n/* harmony import */ var _HandButton__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./HandButton */ \"../../components/HandButton.tsx\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _tunnels__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./tunnels */ \"../../components/tunnels.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst DefaultMainMenu = ({ UIOptions }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"], Object.assign({ __fallback: true }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.LoadScene, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.SaveToActiveFile, {}), UIOptions.canvasActions.export && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.Export, {}), UIOptions.canvasActions.saveAsImage && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.SaveAsImage, {})), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.Help, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.ClearCanvas, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].Separator, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].Group, Object.assign({ title: \"Excalidraw links\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.Socials, {}) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].Separator, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.ToggleTheme, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.ChangeCanvasBackground, {})] })));\n};\nconst LayerUI = ({ actionManager, appState, files, setAppState, elements, canvas, onLockToggle, onHandToolToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, renderTopRightUI, renderCustomStats, renderCustomSidebar, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, renderWelcomeScreen, children, }) => {\n const device = (0,_components_App__WEBPACK_IMPORTED_MODULE_31__.useDevice)();\n const renderJSONExportDialog = () => {\n if (!UIOptions.canvasActions.export) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_JSONExportDialog__WEBPACK_IMPORTED_MODULE_23__.JSONExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, exportOpts: UIOptions.canvasActions.export, canvas: canvas, setAppState: setAppState }));\n };\n const renderImageExportDialog = () => {\n if (!UIOptions.canvasActions.saveAsImage) {\n return null;\n }\n const createExporter = (type) => (exportedElements) => __awaiter(void 0, void 0, void 0, function* () {\n (0,_analytics__WEBPACK_IMPORTED_MODULE_30__.trackEvent)(\"export\", type, \"ui\");\n const fileHandle = yield (0,_data__WEBPACK_IMPORTED_MODULE_4__.exportCanvas)(type, exportedElements, appState, files, {\n exportBackground: appState.exportBackground,\n name: appState.name,\n viewBackgroundColor: appState.viewBackgroundColor,\n })\n .catch(_utils__WEBPACK_IMPORTED_MODULE_8__.muteFSAbortError)\n .catch((error) => {\n console.error(error);\n setAppState({ errorMessage: error.message });\n });\n if (appState.exportEmbedScene &&\n fileHandle &&\n (0,_data_blob__WEBPACK_IMPORTED_MODULE_25__.isImageFileHandle)(fileHandle)) {\n setAppState({ fileHandle });\n }\n });\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ImageExportDialog__WEBPACK_IMPORTED_MODULE_11__.ImageExportDialog, { elements: elements, appState: appState, setAppState: setAppState, files: files, actionManager: actionManager, onExportToPng: createExporter(\"png\"), onExportToSvg: createExporter(\"svg\"), onExportToClipboard: createExporter(\"clipboard\") }));\n };\n const renderCanvasActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { position: \"relative\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_41__.mainMenuTunnel.Out, {}), renderWelcomeScreen && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_41__.welcomeScreenMenuHintTunnel.Out, {})] })));\n const renderSelectedShapeActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_19__.Section, Object.assign({ heading: \"selectedShapeActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"selected-shape-actions zen-mode-transition\", {\n \"transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_14__.Island, Object.assign({ className: _constants__WEBPACK_IMPORTED_MODULE_3__.CLASSES.SHAPE_ACTIONS_MENU, padding: 2, style: {\n // we want to make sure this doesn't overflow so subtracting the\n // approximate height of hamburgerMenu + footer\n maxHeight: `${appState.height - 166}px`,\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction }) })) })));\n const renderFixedSideContainer = () => {\n const shouldRenderSelectedShapeActions = (0,_element__WEBPACK_IMPORTED_MODULE_5__.showSelectedShapeActions)(appState, elements);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_12__.FixedSideContainer, Object.assign({ side: \"top\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-menu App-menu_top\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_21__[\"default\"].Col, Object.assign({ gap: 6, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-menu_top__left\", {\n \"disable-pointerEvents\": appState.zenModeEnabled,\n }) }, { children: [renderCanvasActions(), shouldRenderSelectedShapeActions && renderSelectedShapeActions()] })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_19__.Section, Object.assign({ heading: \"shapes\", className: \"shapes-section\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { position: \"relative\" } }, { children: [renderWelcomeScreen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_41__.welcomeScreenToolbarHintTunnel.Out, {})), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_21__[\"default\"].Col, Object.assign({ gap: 4, align: \"start\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_21__[\"default\"].Row, Object.assign({ gap: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar-container\", {\n \"zen-mode\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_14__.Island, Object.assign({ padding: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar\", {\n \"zen-mode\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_13__.HintViewer, { appState: appState, elements: elements, isMobile: device.isMobile, device: device }), heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_21__[\"default\"].Row, Object.assign({ gap: 1 }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_29__.PenModeButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.penMode\"), penDetected: appState.penDetected }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_16__.LockButton, { checked: appState.activeTool.locked, onChange: onLockToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.lock\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"App-toolbar__divider\" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HandButton__WEBPACK_IMPORTED_MODULE_39__.HandButton, { checked: (0,_appState__WEBPACK_IMPORTED_MODULE_40__.isHandToolActive)(appState), onChange: () => onHandToolToggle(), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.hand\"), isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\n onImageAction({\n insertOnCanvasDirectly: pointerType !== \"mouse\",\n });\n } })] }))] })) })) }))] }))) }))), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__top-right zen-mode-transition\", {\n \"transition-right\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_22__.UserList, { collaborators: appState.collaborators }), renderTopRightUI === null || renderTopRightUI === void 0 ? void 0 : renderTopRightUI(device.isMobile, appState), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_24__.LibraryButton, { appState: appState, setAppState: setAppState }))] }))] })) })));\n };\n const renderSidebars = () => {\n return appState.openSidebar === \"customSidebar\" ? ((renderCustomSidebar === null || renderCustomSidebar === void 0 ? void 0 : renderCustomSidebar()) || null) : appState.openSidebar === \"library\" ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenu__WEBPACK_IMPORTED_MODULE_26__.LibraryMenu, { appState: appState, onInsertElements: onInsertElements, libraryReturnUrl: libraryReturnUrl, focusContainer: focusContainer, library: library, id: id })) : null;\n };\n const [hostSidebarCounters] = (0,jotai__WEBPACK_IMPORTED_MODULE_42__.useAtom)(_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_35__.hostSidebarCountersAtom, _jotai__WEBPACK_IMPORTED_MODULE_36__.jotaiScope);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [children, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(DefaultMainMenu, { UIOptions: UIOptions }), appState.isLoading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LoadingMessage__WEBPACK_IMPORTED_MODULE_15__.LoadingMessage, { delay: 250 }), appState.errorMessage && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ErrorDialog__WEBPACK_IMPORTED_MODULE_10__.ErrorDialog, { message: appState.errorMessage, onClose: () => setAppState({ errorMessage: null }) })), appState.openDialog === \"help\" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HelpDialog__WEBPACK_IMPORTED_MODULE_20__.HelpDialog, { onClose: () => {\n setAppState({ openDialog: null });\n } })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ActiveConfirmDialog__WEBPACK_IMPORTED_MODULE_38__.ActiveConfirmDialog, {}), renderImageExportDialog(), renderJSONExportDialog(), appState.pasteDialog.shown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PasteChartDialog__WEBPACK_IMPORTED_MODULE_18__.PasteChartDialog, { setAppState: setAppState, appState: appState, onInsertChart: onInsertElements, onClose: () => setAppState({\n pasteDialog: { shown: false, data: null },\n }) })), device.isMobile && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MobileMenu__WEBPACK_IMPORTED_MODULE_17__.MobileMenu, { appState: appState, elements: elements, actionManager: actionManager, renderJSONExportDialog: renderJSONExportDialog, renderImageExportDialog: renderImageExportDialog, setAppState: setAppState, onLockToggle: onLockToggle, onHandToolToggle: onHandToolToggle, onPenModeToggle: onPenModeToggle, canvas: canvas, onImageAction: onImageAction, renderTopRightUI: renderTopRightUI, renderCustomStats: renderCustomStats, renderSidebars: renderSidebars, device: device })), !device.isMobile && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper\", {\n \"disable-pointerEvents\": appState.draggingElement ||\n appState.resizingElement ||\n (appState.editingElement &&\n !(0,_element__WEBPACK_IMPORTED_MODULE_5__.isTextElement)(appState.editingElement)),\n }), style: ((appState.openSidebar === \"library\" &&\n appState.isSidebarDocked) ||\n hostSidebarCounters.docked) &&\n device.canDeviceFitSidebar\n ? { width: `calc(100% - ${_constants__WEBPACK_IMPORTED_MODULE_3__.LIBRARY_SIDEBAR_WIDTH}px)` }\n : {} }, { children: [renderWelcomeScreen && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_41__.welcomeScreenCenterTunnel.Out, {}), renderFixedSideContainer(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_footer_Footer__WEBPACK_IMPORTED_MODULE_34__[\"default\"], { appState: appState, actionManager: actionManager, showExitZenModeBtn: showExitZenModeBtn, renderWelcomeScreen: renderWelcomeScreen }), appState.showStats && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stats__WEBPACK_IMPORTED_MODULE_32__.Stats, { appState: appState, setAppState: setAppState, elements: elements, onClose: () => {\n actionManager.executeAction(_actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_33__.actionToggleStats);\n }, renderCustomStats: renderCustomStats })), appState.scrolledOutside && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_7__.calculateScrollCenter)(elements, appState, canvas)));\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scrollBackToContent\") })))] })), renderSidebars()] }))] }));\n};\nconst stripIrrelevantAppStateProps = (appState) => {\n const { suggestedBindings, startBoundElement, cursorButton } = appState, ret = __rest(appState, [\"suggestedBindings\", \"startBoundElement\", \"cursorButton\"]);\n return ret;\n};\nconst areEqual = (prevProps, nextProps) => {\n // short-circuit early\n if (prevProps.children !== nextProps.children) {\n return false;\n }\n const { canvas: _prevCanvas, \n // not stable, but shouldn't matter in our case\n onInsertElements: _prevOnInsertElements, appState: prevAppState } = prevProps, prev = __rest(prevProps, [\"canvas\", \"onInsertElements\", \"appState\"]);\n const { canvas: _nextCanvas, onInsertElements: _nextOnInsertElements, appState: nextAppState } = nextProps, next = __rest(nextProps, [\"canvas\", \"onInsertElements\", \"appState\"]);\n return ((0,_utils__WEBPACK_IMPORTED_MODULE_8__.isShallowEqual)(stripIrrelevantAppStateProps(prevAppState), stripIrrelevantAppStateProps(nextAppState)) && (0,_utils__WEBPACK_IMPORTED_MODULE_8__.isShallowEqual)(prev, next));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (react__WEBPACK_IMPORTED_MODULE_2___default().memo(LayerUI, areEqual));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QThELENBQzFELENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLENBQUMsU0FBdUIsRUFBRSxTQUF1QixFQUFFLEVBQUU7SUFDcEUsc0JBQXNCO0lBQ3RCLElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFO1FBQzdDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLEVBQ0osTUFBTSxFQUFFLFdBQVc7SUFDbkIsK0NBQStDO0lBQy9DLGdCQUFnQixFQUFFLHFCQUFxQixFQUN2QyxRQUFRLEVBQUUsWUFBWSxLQUVwQixTQUFTLEVBRFIsSUFBSSxVQUNMLFNBQVMsRUFOUCwwQ0FNTCxDQUFZLENBQUM7SUFDZCxNQUFNLEVBQ0osTUFBTSxFQUFFLFdBQVcsRUFDbkIsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQ3ZDLFFBQVEsRUFBRSxZQUFZLEtBRXBCLFNBQVMsRUFEUixJQUFJLFVBQ0wsU0FBUyxFQUxQLDBDQUtMLENBQVksQ0FBQztJQUVkLE9BQU8sQ0FDTCxzREFBYyxDQUNaLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxFQUMxQyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsQ0FDM0MsSUFBSSxzREFBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDaEMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGlFQUFlLGlEQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvTGF5ZXJVSS50c3g/MDg3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9hY3Rpb25zL21hbmFnZXJcIjtcbmltcG9ydCB7IENMQVNTRVMsIExJQlJBUllfU0lERUJBUl9XSURUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGV4cG9ydENhbnZhcyB9IGZyb20gXCIuLi9kYXRhXCI7XG5pbXBvcnQgeyBpc1RleHRFbGVtZW50LCBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IExhbmd1YWdlLCB0IH0gZnJvbSBcIi4uL2kxOG5cIjtcbmltcG9ydCB7IGNhbGN1bGF0ZVNjcm9sbENlbnRlciB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZSB9IGZyb20gXCIuLi9zY2VuZS90eXBlc1wiO1xuaW1wb3J0IHsgQXBwUHJvcHMsIEFwcFN0YXRlLCBFeGNhbGlkcmF3UHJvcHMsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1NoYWxsb3dFcXVhbCwgbXV0ZUZTQWJvcnRFcnJvciB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgU2VsZWN0ZWRTaGFwZUFjdGlvbnMsIFNoYXBlc1N3aXRjaGVyIH0gZnJvbSBcIi4vQWN0aW9uc1wiO1xuaW1wb3J0IHsgRXJyb3JEaWFsb2cgfSBmcm9tIFwiLi9FcnJvckRpYWxvZ1wiO1xuaW1wb3J0IHsgRXhwb3J0Q0IsIEltYWdlRXhwb3J0RGlhbG9nIH0gZnJvbSBcIi4vSW1hZ2VFeHBvcnREaWFsb2dcIjtcbmltcG9ydCB7IEZpeGVkU2lkZUNvbnRhaW5lciB9IGZyb20gXCIuL0ZpeGVkU2lkZUNvbnRhaW5lclwiO1xuaW1wb3J0IHsgSGludFZpZXdlciB9IGZyb20gXCIuL0hpbnRWaWV3ZXJcIjtcbmltcG9ydCB7IElzbGFuZCB9IGZyb20gXCIuL0lzbGFuZFwiO1xuaW1wb3J0IHsgTG9hZGluZ01lc3NhZ2UgfSBmcm9tIFwiLi9Mb2FkaW5nTWVzc2FnZVwiO1xuaW1wb3J0IHsgTG9ja0J1dHRvbiB9IGZyb20gXCIuL0xvY2tCdXR0b25cIjtcbmltcG9ydCB7IE1vYmlsZU1lbnUgfSBmcm9tIFwiLi9Nb2JpbGVNZW51XCI7XG5pbXBvcnQgeyBQYXN0ZUNoYXJ0RGlhbG9nIH0gZnJvbSBcIi4vUGFzdGVDaGFydERpYWxvZ1wiO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gXCIuL1NlY3Rpb25cIjtcbmltcG9ydCB7IEhlbHBEaWFsb2cgfSBmcm9tIFwiLi9IZWxwRGlhbG9nXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IFVzZXJMaXN0IH0gZnJvbSBcIi4vVXNlckxpc3RcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCIuLi9kYXRhL2xpYnJhcnlcIjtcbmltcG9ydCB7IEpTT05FeHBvcnREaWFsb2cgfSBmcm9tIFwiLi9KU09ORXhwb3J0RGlhbG9nXCI7XG5pbXBvcnQgeyBMaWJyYXJ5QnV0dG9uIH0gZnJvbSBcIi4vTGlicmFyeUJ1dHRvblwiO1xuaW1wb3J0IHsgaXNJbWFnZUZpbGVIYW5kbGUgfSBmcm9tIFwiLi4vZGF0YS9ibG9iXCI7XG5pbXBvcnQgeyBMaWJyYXJ5TWVudSB9IGZyb20gXCIuL0xpYnJhcnlNZW51XCI7XG5cbmltcG9ydCBcIi4vTGF5ZXJVSS5zY3NzXCI7XG5pbXBvcnQgXCIuL1Rvb2xiYXIuc2Nzc1wiO1xuaW1wb3J0IHsgUGVuTW9kZUJ1dHRvbiB9IGZyb20gXCIuL1Blbk1vZGVCdXR0b25cIjtcbmltcG9ydCB7IHRyYWNrRXZlbnQgfSBmcm9tIFwiLi4vYW5hbHl0aWNzXCI7XG5pbXBvcnQgeyB1c2VEZXZpY2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9BcHBcIjtcbmltcG9ydCB7IFN0YXRzIH0gZnJvbSBcIi4vU3RhdHNcIjtcbmltcG9ydCB7IGFjdGlvblRvZ2dsZVN0YXRzIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uVG9nZ2xlU3RhdHNcIjtcbmltcG9ydCBGb290ZXIgZnJvbSBcIi4vZm9vdGVyL0Zvb3RlclwiO1xuaW1wb3J0IHsgaG9zdFNpZGViYXJDb3VudGVyc0F0b20gfSBmcm9tIFwiLi9TaWRlYmFyL1NpZGViYXJcIjtcbmltcG9ydCB7IGpvdGFpU2NvcGUgfSBmcm9tIFwiLi4vam90YWlcIjtcbmltcG9ydCB7IHVzZUF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCBNYWluTWVudSBmcm9tIFwiLi9tYWluLW1lbnUvTWFpbk1lbnVcIjtcbmltcG9ydCB7IEFjdGl2ZUNvbmZpcm1EaWFsb2cgfSBmcm9tIFwiLi9BY3RpdmVDb25maXJtRGlhbG9nXCI7XG5pbXBvcnQgeyBIYW5kQnV0dG9uIH0gZnJvbSBcIi4vSGFuZEJ1dHRvblwiO1xuaW1wb3J0IHsgaXNIYW5kVG9vbEFjdGl2ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHtcbiAgbWFpbk1lbnVUdW5uZWwsXG4gIHdlbGNvbWVTY3JlZW5NZW51SGludFR1bm5lbCxcbiAgd2VsY29tZVNjcmVlblRvb2xiYXJIaW50VHVubmVsLFxuICB3ZWxjb21lU2NyZWVuQ2VudGVyVHVubmVsLFxufSBmcm9tIFwiLi90dW5uZWxzXCI7XG5cbmludGVyZmFjZSBMYXllclVJUHJvcHMge1xuICBhY3Rpb25NYW5hZ2VyOiBBY3Rpb25NYW5hZ2VyO1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw7XG4gIHNldEFwcFN0YXRlOiBSZWFjdC5Db21wb25lbnQ8YW55LCBBcHBTdGF0ZT5bXCJzZXRTdGF0ZVwiXTtcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdO1xuICBvbkxvY2tUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIG9uSGFuZFRvb2xUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIG9uUGVuTW9kZVRvZ2dsZTogKCkgPT4gdm9pZDtcbiAgb25JbnNlcnRFbGVtZW50czogKGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSkgPT4gdm9pZDtcbiAgc2hvd0V4aXRaZW5Nb2RlQnRuOiBib29sZWFuO1xuICBsYW5nQ29kZTogTGFuZ3VhZ2VbXCJjb2RlXCJdO1xuICByZW5kZXJUb3BSaWdodFVJPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyVG9wUmlnaHRVSVwiXTtcbiAgcmVuZGVyQ3VzdG9tU3RhdHM/OiBFeGNhbGlkcmF3UHJvcHNbXCJyZW5kZXJDdXN0b21TdGF0c1wiXTtcbiAgcmVuZGVyQ3VzdG9tU2lkZWJhcj86IEV4Y2FsaWRyYXdQcm9wc1tcInJlbmRlclNpZGViYXJcIl07XG4gIGxpYnJhcnlSZXR1cm5Vcmw6IEV4Y2FsaWRyYXdQcm9wc1tcImxpYnJhcnlSZXR1cm5VcmxcIl07XG4gIFVJT3B0aW9uczogQXBwUHJvcHNbXCJVSU9wdGlvbnNcIl07XG4gIGZvY3VzQ29udGFpbmVyOiAoKSA9PiB2b2lkO1xuICBsaWJyYXJ5OiBMaWJyYXJ5O1xuICBpZDogc3RyaW5nO1xuICBvbkltYWdlQWN0aW9uOiAoZGF0YTogeyBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBib29sZWFuIH0pID0+IHZvaWQ7XG4gIHJlbmRlcldlbGNvbWVTY3JlZW46IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5jb25zdCBEZWZhdWx0TWFpbk1lbnU6IFJlYWN0LkZDPHtcbiAgVUlPcHRpb25zOiBBcHBQcm9wc1tcIlVJT3B0aW9uc1wiXTtcbn0+ID0gKHsgVUlPcHRpb25zIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8TWFpbk1lbnUgX19mYWxsYmFjaz5cbiAgICAgIDxNYWluTWVudS5EZWZhdWx0SXRlbXMuTG9hZFNjZW5lIC8+XG4gICAgICA8TWFpbk1lbnUuRGVmYXVsdEl0ZW1zLlNhdmVUb0FjdGl2ZUZpbGUgLz5cbiAgICAgIHsvKiBGSVhNRSB3ZSBzaG91bGQgdG8gdGVzdCBmb3IgdGhpcyBpbnNpZGUgdGhlIGl0ZW0gaXRzZWxmICovfVxuICAgICAge1VJT3B0aW9ucy5jYW52YXNBY3Rpb25zLmV4cG9ydCAmJiA8TWFpbk1lbnUuRGVmYXVsdEl0ZW1zLkV4cG9ydCAvPn1cbiAgICAgIHsvKiBGSVhNRSB3ZSBzaG91bGQgdG8gdGVzdCBmb3IgdGhpcyBpbnNpZGUgdGhlIGl0ZW0gaXRzZWxmICovfVxuICAgICAge1VJT3B0aW9ucy5jYW52YXNBY3Rpb25zLnNhdmVBc0ltYWdlICYmIChcbiAgICAgICAgPE1haW5NZW51LkRlZmF1bHRJdGVtcy5TYXZlQXNJbWFnZSAvPlxuICAgICAgKX1cbiAgICAgIDxNYWluTWVudS5EZWZhdWx0SXRlbXMuSGVscCAvPlxuICAgICAgPE1haW5NZW51LkRlZmF1bHRJdGVtcy5DbGVhckNhbnZhcyAvPlxuICAgICAgPE1haW5NZW51LlNlcGFyYXRvciAvPlxuICAgICAgPE1haW5NZW51Lkdyb3VwIHRpdGxlPVwiRXhjYWxpZHJhdyBsaW5rc1wiPlxuICAgICAgICA8TWFpbk1lbnUuRGVmYXVsdEl0ZW1zLlNvY2lhbHMgLz5cbiAgICAgIDwvTWFpbk1lbnUuR3JvdXA+XG4gICAgICA8TWFpbk1lbnUuU2VwYXJhdG9yIC8+XG4gICAgICA8TWFpbk1lbnUuRGVmYXVsdEl0ZW1zLlRvZ2dsZVRoZW1lIC8+XG4gICAgICA8TWFpbk1lbnUuRGVmYXVsdEl0ZW1zLkNoYW5nZUNhbnZhc0JhY2tncm91bmQgLz5cbiAgICA8L01haW5NZW51PlxuICApO1xufTtcblxuY29uc3QgTGF5ZXJVSSA9ICh7XG4gIGFjdGlvbk1hbmFnZXIsXG4gIGFwcFN0YXRlLFxuICBmaWxlcyxcbiAgc2V0QXBwU3RhdGUsXG4gIGVsZW1lbnRzLFxuICBjYW52YXMsXG4gIG9uTG9ja1RvZ2dsZSxcbiAgb25IYW5kVG9vbFRvZ2dsZSxcbiAgb25QZW5Nb2RlVG9nZ2xlLFxuICBvbkluc2VydEVsZW1lbnRzLFxuICBzaG93RXhpdFplbk1vZGVCdG4sXG4gIHJlbmRlclRvcFJpZ2h0VUksXG4gIHJlbmRlckN1c3RvbVN0YXRzLFxuICByZW5kZXJDdXN0b21TaWRlYmFyLFxuICBsaWJyYXJ5UmV0dXJuVXJsLFxuICBVSU9wdGlvbnMsXG4gIGZvY3VzQ29udGFpbmVyLFxuICBsaWJyYXJ5LFxuICBpZCxcbiAgb25JbWFnZUFjdGlvbixcbiAgcmVuZGVyV2VsY29tZVNjcmVlbixcbiAgY2hpbGRyZW4sXG59OiBMYXllclVJUHJvcHMpID0+IHtcbiAgY29uc3QgZGV2aWNlID0gdXNlRGV2aWNlKCk7XG5cbiAgY29uc3QgcmVuZGVySlNPTkV4cG9ydERpYWxvZyA9ICgpID0+IHtcbiAgICBpZiAoIVVJT3B0aW9ucy5jYW52YXNBY3Rpb25zLmV4cG9ydCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxKU09ORXhwb3J0RGlhbG9nXG4gICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgIGV4cG9ydE9wdHM9e1VJT3B0aW9ucy5jYW52YXNBY3Rpb25zLmV4cG9ydH1cbiAgICAgICAgY2FudmFzPXtjYW52YXN9XG4gICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJJbWFnZUV4cG9ydERpYWxvZyA9ICgpID0+IHtcbiAgICBpZiAoIVVJT3B0aW9ucy5jYW52YXNBY3Rpb25zLnNhdmVBc0ltYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVFeHBvcnRlciA9XG4gICAgICAodHlwZTogRXhwb3J0VHlwZSk6IEV4cG9ydENCID0+XG4gICAgICBhc3luYyAoZXhwb3J0ZWRFbGVtZW50cykgPT4ge1xuICAgICAgICB0cmFja0V2ZW50KFwiZXhwb3J0XCIsIHR5cGUsIFwidWlcIik7XG4gICAgICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBleHBvcnRDYW52YXMoXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBleHBvcnRlZEVsZW1lbnRzLFxuICAgICAgICAgIGFwcFN0YXRlLFxuICAgICAgICAgIGZpbGVzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4cG9ydEJhY2tncm91bmQ6IGFwcFN0YXRlLmV4cG9ydEJhY2tncm91bmQsXG4gICAgICAgICAgICBuYW1lOiBhcHBTdGF0ZS5uYW1lLFxuICAgICAgICAgICAgdmlld0JhY2tncm91bmRDb2xvcjogYXBwU3RhdGUudmlld0JhY2tncm91bmRDb2xvcixcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKG11dGVGU0Fib3J0RXJyb3IpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBzZXRBcHBTdGF0ZSh7IGVycm9yTWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgYXBwU3RhdGUuZXhwb3J0RW1iZWRTY2VuZSAmJlxuICAgICAgICAgIGZpbGVIYW5kbGUgJiZcbiAgICAgICAgICBpc0ltYWdlRmlsZUhhbmRsZShmaWxlSGFuZGxlKVxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRBcHBTdGF0ZSh7IGZpbGVIYW5kbGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEltYWdlRXhwb3J0RGlhbG9nXG4gICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgb25FeHBvcnRUb1BuZz17Y3JlYXRlRXhwb3J0ZXIoXCJwbmdcIil9XG4gICAgICAgIG9uRXhwb3J0VG9Tdmc9e2NyZWF0ZUV4cG9ydGVyKFwic3ZnXCIpfVxuICAgICAgICBvbkV4cG9ydFRvQ2xpcGJvYXJkPXtjcmVhdGVFeHBvcnRlcihcImNsaXBib2FyZFwiKX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJDYW52YXNBY3Rpb25zID0gKCkgPT4gKFxuICAgIDxkaXYgc3R5bGU9e3sgcG9zaXRpb246IFwicmVsYXRpdmVcIiB9fT5cbiAgICAgIHsvKiB3cmFwcGluZyB0byBGcmFnbWVudCBzdG9wcyBSZWFjdCBmcm9tIG9jY2FzaW9uYWxseSBjb21wbGFpbmluZ1xuICAgICAgICAgICAgICAgIGFib3V0IGlkZW50aWNhbCBLZXlzICovfVxuICAgICAgPG1haW5NZW51VHVubmVsLk91dCAvPlxuICAgICAge3JlbmRlcldlbGNvbWVTY3JlZW4gJiYgPHdlbGNvbWVTY3JlZW5NZW51SGludFR1bm5lbC5PdXQgLz59XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgY29uc3QgcmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgPSAoKSA9PiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIGhlYWRpbmc9XCJzZWxlY3RlZFNoYXBlQWN0aW9uc1wiXG4gICAgICBjbGFzc05hbWU9e2Nsc3goXCJzZWxlY3RlZC1zaGFwZS1hY3Rpb25zIHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICBcInRyYW5zaXRpb24tbGVmdFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIDxJc2xhbmRcbiAgICAgICAgY2xhc3NOYW1lPXtDTEFTU0VTLlNIQVBFX0FDVElPTlNfTUVOVX1cbiAgICAgICAgcGFkZGluZz17Mn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgc28gc3VidHJhY3RpbmcgdGhlXG4gICAgICAgICAgLy8gYXBwcm94aW1hdGUgaGVpZ2h0IG9mIGhhbWJ1cmdlck1lbnUgKyBmb290ZXJcbiAgICAgICAgICBtYXhIZWlnaHQ6IGAke2FwcFN0YXRlLmhlaWdodCAtIDE2Nn1weGAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTZWxlY3RlZFNoYXBlQWN0aW9uc1xuICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgLz5cbiAgICAgIDwvSXNsYW5kPlxuICAgIDwvU2VjdGlvbj5cbiAgKTtcblxuICBjb25zdCByZW5kZXJGaXhlZFNpZGVDb250YWluZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2hvdWxkUmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgPSBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMoXG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZpeGVkU2lkZUNvbnRhaW5lciBzaWRlPVwidG9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwLW1lbnUgQXBwLW1lbnVfdG9wXCI+XG4gICAgICAgICAgPFN0YWNrLkNvbFxuICAgICAgICAgICAgZ2FwPXs2fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQXBwLW1lbnVfdG9wX19sZWZ0XCIsIHtcbiAgICAgICAgICAgICAgXCJkaXNhYmxlLXBvaW50ZXJFdmVudHNcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cmVuZGVyQ2FudmFzQWN0aW9ucygpfVxuICAgICAgICAgICAge3Nob3VsZFJlbmRlclNlbGVjdGVkU2hhcGVBY3Rpb25zICYmIHJlbmRlclNlbGVjdGVkU2hhcGVBY3Rpb25zKCl9XG4gICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cInNoYXBlc1wiIGNsYXNzTmFtZT1cInNoYXBlcy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgIHsoaGVhZGluZzogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiIH19PlxuICAgICAgICAgICAgICAgICAge3JlbmRlcldlbGNvbWVTY3JlZW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8d2VsY29tZVNjcmVlblRvb2xiYXJIaW50VHVubmVsLk91dCAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxTdGFjay5Db2wgZ2FwPXs0fSBhbGlnbj1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdGFjay5Sb3dcbiAgICAgICAgICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQXBwLXRvb2xiYXItY29udGFpbmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiemVuLW1vZGVcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SXNsYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nPXsxfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQXBwLXRvb2xiYXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcInplbi1tb2RlXCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEhpbnRWaWV3ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTW9iaWxlPXtkZXZpY2UuaXNNb2JpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtoZWFkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8UGVuTW9kZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplbk1vZGVFbmFibGVkPXthcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXthcHBTdGF0ZS5wZW5Nb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvblBlbk1vZGVUb2dnbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLnBlbk1vZGVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuRGV0ZWN0ZWQ9e2FwcFN0YXRlLnBlbkRldGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TG9ja0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkxvY2tUb2dnbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLmxvY2tcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJBcHAtdG9vbGJhcl9fZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxIYW5kQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNIYW5kVG9vbEFjdGl2ZShhcHBTdGF0ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IG9uSGFuZFRvb2xUb2dnbGUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIuaGFuZFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTaGFwZXNTd2l0Y2hlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXM9e2NhbnZhc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUb29sPXthcHBTdGF0ZS5hY3RpdmVUb29sfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uPXsoeyBwb2ludGVyVHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogcG9pbnRlclR5cGUgIT09IFwibW91c2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0lzbGFuZD5cbiAgICAgICAgICAgICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fdG9wLXJpZ2h0IHplbi1tb2RlLXRyYW5zaXRpb25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1yaWdodFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVzZXJMaXN0IGNvbGxhYm9yYXRvcnM9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnN9IC8+XG4gICAgICAgICAgICB7cmVuZGVyVG9wUmlnaHRVST8uKGRldmljZS5pc01vYmlsZSwgYXBwU3RhdGUpfVxuICAgICAgICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8TGlicmFyeUJ1dHRvbiBhcHBTdGF0ZT17YXBwU3RhdGV9IHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX0gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9GaXhlZFNpZGVDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJTaWRlYmFycyA9ICgpID0+IHtcbiAgICByZXR1cm4gYXBwU3RhdGUub3BlblNpZGViYXIgPT09IFwiY3VzdG9tU2lkZWJhclwiID8gKFxuICAgICAgcmVuZGVyQ3VzdG9tU2lkZWJhcj8uKCkgfHwgbnVsbFxuICAgICkgOiBhcHBTdGF0ZS5vcGVuU2lkZWJhciA9PT0gXCJsaWJyYXJ5XCIgPyAoXG4gICAgICA8TGlicmFyeU1lbnVcbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBvbkluc2VydEVsZW1lbnRzPXtvbkluc2VydEVsZW1lbnRzfVxuICAgICAgICBsaWJyYXJ5UmV0dXJuVXJsPXtsaWJyYXJ5UmV0dXJuVXJsfVxuICAgICAgICBmb2N1c0NvbnRhaW5lcj17Zm9jdXNDb250YWluZXJ9XG4gICAgICAgIGxpYnJhcnk9e2xpYnJhcnl9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH07XG5cbiAgY29uc3QgW2hvc3RTaWRlYmFyQ291bnRlcnNdID0gdXNlQXRvbShob3N0U2lkZWJhckNvdW50ZXJzQXRvbSwgam90YWlTY29wZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgey8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHVubmVsZWQgVUkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL31cbiAgICAgIHsvKiBtYWtlIHN1cmUgd2UgcmVuZGVyIGhvc3QgYXBwIGNvbXBvbmVudHMgZmlyc3Qgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgdGhlbSBmaXJzdCBvbiBpbml0aWFsIHJlbmRlciB0byBvcHRpbWl6ZSBsYXlvdXQgc2hpZnQgKi99XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICB7LyogcmVuZGVyIGNvbXBvbmVudCBmYWxsYmFja3MuIENhbiBiZSByZW5kZXJlZCBhbnl3aGVyZSBhcyB0aGV5J2xsIGJlXG4gICAgICAgICAgdHVubmVsZWQgYXdheS4gV2Ugb25seSByZW5kZXIgdHVubmVsZWQgY29tcG9uZW50cyB0aGF0IGFjdHVhbGx5XG4gICAgICAgICAgaGF2ZSBkZWZhdWx0cyB3aGVuIGhvc3QgZG8gbm90IHJlbmRlciBhbnl0aGluZy4gKi99XG4gICAgICA8RGVmYXVsdE1haW5NZW51IFVJT3B0aW9ucz17VUlPcHRpb25zfSAvPlxuICAgICAgey8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL31cblxuICAgICAge2FwcFN0YXRlLmlzTG9hZGluZyAmJiA8TG9hZGluZ01lc3NhZ2UgZGVsYXk9ezI1MH0gLz59XG4gICAgICB7YXBwU3RhdGUuZXJyb3JNZXNzYWdlICYmIChcbiAgICAgICAgPEVycm9yRGlhbG9nXG4gICAgICAgICAgbWVzc2FnZT17YXBwU3RhdGUuZXJyb3JNZXNzYWdlfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldEFwcFN0YXRlKHsgZXJyb3JNZXNzYWdlOiBudWxsIH0pfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHthcHBTdGF0ZS5vcGVuRGlhbG9nID09PSBcImhlbHBcIiAmJiAoXG4gICAgICAgIDxIZWxwRGlhbG9nXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0QXBwU3RhdGUoeyBvcGVuRGlhbG9nOiBudWxsIH0pO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPEFjdGl2ZUNvbmZpcm1EaWFsb2cgLz5cbiAgICAgIHtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZygpfVxuICAgICAge3JlbmRlckpTT05FeHBvcnREaWFsb2coKX1cbiAgICAgIHthcHBTdGF0ZS5wYXN0ZURpYWxvZy5zaG93biAmJiAoXG4gICAgICAgIDxQYXN0ZUNoYXJ0RGlhbG9nXG4gICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICBvbkluc2VydENoYXJ0PXtvbkluc2VydEVsZW1lbnRzfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+XG4gICAgICAgICAgICBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgICAgIHBhc3RlRGlhbG9nOiB7IHNob3duOiBmYWxzZSwgZGF0YTogbnVsbCB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge2RldmljZS5pc01vYmlsZSAmJiAoXG4gICAgICAgIDxNb2JpbGVNZW51XG4gICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgIHJlbmRlckpTT05FeHBvcnREaWFsb2c9e3JlbmRlckpTT05FeHBvcnREaWFsb2d9XG4gICAgICAgICAgcmVuZGVySW1hZ2VFeHBvcnREaWFsb2c9e3JlbmRlckltYWdlRXhwb3J0RGlhbG9nfVxuICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICBvbkxvY2tUb2dnbGU9e29uTG9ja1RvZ2dsZX1cbiAgICAgICAgICBvbkhhbmRUb29sVG9nZ2xlPXtvbkhhbmRUb29sVG9nZ2xlfVxuICAgICAgICAgIG9uUGVuTW9kZVRvZ2dsZT17b25QZW5Nb2RlVG9nZ2xlfVxuICAgICAgICAgIGNhbnZhcz17Y2FudmFzfVxuICAgICAgICAgIG9uSW1hZ2VBY3Rpb249e29uSW1hZ2VBY3Rpb259XG4gICAgICAgICAgcmVuZGVyVG9wUmlnaHRVST17cmVuZGVyVG9wUmlnaHRVSX1cbiAgICAgICAgICByZW5kZXJDdXN0b21TdGF0cz17cmVuZGVyQ3VzdG9tU3RhdHN9XG4gICAgICAgICAgcmVuZGVyU2lkZWJhcnM9e3JlbmRlclNpZGViYXJzfVxuICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgeyFkZXZpY2UuaXNNb2JpbGUgJiYgKFxuICAgICAgICA8PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImxheWVyLXVpX193cmFwcGVyXCIsIHtcbiAgICAgICAgICAgICAgXCJkaXNhYmxlLXBvaW50ZXJFdmVudHNcIjpcbiAgICAgICAgICAgICAgICBhcHBTdGF0ZS5kcmFnZ2luZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICBhcHBTdGF0ZS5yZXNpemluZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICAoYXBwU3RhdGUuZWRpdGluZ0VsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICFpc1RleHRFbGVtZW50KGFwcFN0YXRlLmVkaXRpbmdFbGVtZW50KSksXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgKChhcHBTdGF0ZS5vcGVuU2lkZWJhciA9PT0gXCJsaWJyYXJ5XCIgJiZcbiAgICAgICAgICAgICAgICBhcHBTdGF0ZS5pc1NpZGViYXJEb2NrZWQpIHx8XG4gICAgICAgICAgICAgICAgaG9zdFNpZGViYXJDb3VudGVycy5kb2NrZWQpICYmXG4gICAgICAgICAgICAgIGRldmljZS5jYW5EZXZpY2VGaXRTaWRlYmFyXG4gICAgICAgICAgICAgICAgPyB7IHdpZHRoOiBgY2FsYygxMDAlIC0gJHtMSUJSQVJZX1NJREVCQVJfV0lEVEh9cHgpYCB9XG4gICAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtyZW5kZXJXZWxjb21lU2NyZWVuICYmIDx3ZWxjb21lU2NyZWVuQ2VudGVyVHVubmVsLk91dCAvPn1cbiAgICAgICAgICAgIHtyZW5kZXJGaXhlZFNpZGVDb250YWluZXIoKX1cbiAgICAgICAgICAgIDxGb290ZXJcbiAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgICBzaG93RXhpdFplbk1vZGVCdG49e3Nob3dFeGl0WmVuTW9kZUJ0bn1cbiAgICAgICAgICAgICAgcmVuZGVyV2VsY29tZVNjcmVlbj17cmVuZGVyV2VsY29tZVNjcmVlbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7YXBwU3RhdGUuc2hvd1N0YXRzICYmIChcbiAgICAgICAgICAgICAgPFN0YXRzXG4gICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvblRvZ2dsZVN0YXRzKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHJlbmRlckN1c3RvbVN0YXRzPXtyZW5kZXJDdXN0b21TdGF0c31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7YXBwU3RhdGUuc2Nyb2xsZWRPdXRzaWRlICYmIChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNjcm9sbC1iYWNrLXRvLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY2FsY3VsYXRlU2Nyb2xsQ2VudGVyKGVsZW1lbnRzLCBhcHBTdGF0ZSwgY2FudmFzKSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dChcImJ1dHRvbnMuc2Nyb2xsQmFja1RvQ29udGVudFwiKX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtyZW5kZXJTaWRlYmFycygpfVxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59O1xuXG5jb25zdCBzdHJpcElycmVsZXZhbnRBcHBTdGF0ZVByb3BzID0gKFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pOiBQYXJ0aWFsPEFwcFN0YXRlPiA9PiB7XG4gIGNvbnN0IHsgc3VnZ2VzdGVkQmluZGluZ3MsIHN0YXJ0Qm91bmRFbGVtZW50LCBjdXJzb3JCdXR0b24sIC4uLnJldCB9ID1cbiAgICBhcHBTdGF0ZTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbmNvbnN0IGFyZUVxdWFsID0gKHByZXZQcm9wczogTGF5ZXJVSVByb3BzLCBuZXh0UHJvcHM6IExheWVyVUlQcm9wcykgPT4ge1xuICAvLyBzaG9ydC1jaXJjdWl0IGVhcmx5XG4gIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBjYW52YXM6IF9wcmV2Q2FudmFzLFxuICAgIC8vIG5vdCBzdGFibGUsIGJ1dCBzaG91bGRuJ3QgbWF0dGVyIGluIG91ciBjYXNlXG4gICAgb25JbnNlcnRFbGVtZW50czogX3ByZXZPbkluc2VydEVsZW1lbnRzLFxuICAgIGFwcFN0YXRlOiBwcmV2QXBwU3RhdGUsXG4gICAgLi4ucHJldlxuICB9ID0gcHJldlByb3BzO1xuICBjb25zdCB7XG4gICAgY2FudmFzOiBfbmV4dENhbnZhcyxcbiAgICBvbkluc2VydEVsZW1lbnRzOiBfbmV4dE9uSW5zZXJ0RWxlbWVudHMsXG4gICAgYXBwU3RhdGU6IG5leHRBcHBTdGF0ZSxcbiAgICAuLi5uZXh0XG4gIH0gPSBuZXh0UHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICBpc1NoYWxsb3dFcXVhbChcbiAgICAgIHN0cmlwSXJyZWxldmFudEFwcFN0YXRlUHJvcHMocHJldkFwcFN0YXRlKSxcbiAgICAgIHN0cmlwSXJyZWxldmFudEFwcFN0YXRlUHJvcHMobmV4dEFwcFN0YXRlKSxcbiAgICApICYmIGlzU2hhbGxvd0VxdWFsKHByZXYsIG5leHQpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKExheWVyVUksIGFyZUVxdWFsKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/LayerUI.tsx\n");
2682
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\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 _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data */ \"../../data/index.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _ErrorDialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ErrorDialog */ \"../../components/ErrorDialog.tsx\");\n/* harmony import */ var _ImageExportDialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ImageExportDialog */ \"../../components/ImageExportDialog.tsx\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _LoadingMessage__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./LoadingMessage */ \"../../components/LoadingMessage.tsx\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _MobileMenu__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./MobileMenu */ \"../../components/MobileMenu.tsx\");\n/* harmony import */ var _PasteChartDialog__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./PasteChartDialog */ \"../../components/PasteChartDialog.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _HelpDialog__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./HelpDialog */ \"../../components/HelpDialog.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _JSONExportDialog__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./JSONExportDialog */ \"../../components/JSONExportDialog.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _LibraryMenu__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./LibraryMenu */ \"../../components/LibraryMenu.tsx\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./LayerUI.scss */ \"../../components/LayerUI.scss\");\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./Toolbar.scss */ \"../../components/Toolbar.scss\");\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../components/App */ \"../../components/App.tsx\");\n/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./Stats */ \"../../components/Stats.tsx\");\n/* harmony import */ var _actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../actions/actionToggleStats */ \"../../actions/actionToggleStats.tsx\");\n/* harmony import */ var _footer_Footer__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./footer/Footer */ \"../../components/footer/Footer.tsx\");\n/* harmony import */ var _Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./Sidebar/Sidebar */ \"../../components/Sidebar/Sidebar.tsx\");\n/* harmony import */ var _jotai__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../jotai */ \"../../jotai.ts\");\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! jotai */ \"../../../node_modules/jotai/esm/index.js\");\n/* harmony import */ var _main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./main-menu/MainMenu */ \"../../components/main-menu/MainMenu.tsx\");\n/* harmony import */ var _ActiveConfirmDialog__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ActiveConfirmDialog */ \"../../components/ActiveConfirmDialog.tsx\");\n/* harmony import */ var _HandButton__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./HandButton */ \"../../components/HandButton.tsx\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _context_tunnels__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./context/tunnels */ \"../../components/context/tunnels.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst DefaultMainMenu = ({ UIOptions }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"], Object.assign({ __fallback: true }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.LoadScene, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.SaveToActiveFile, {}), UIOptions.canvasActions.export && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.Export, {}), UIOptions.canvasActions.saveAsImage && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.SaveAsImage, {})), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.Help, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.ClearCanvas, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].Separator, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].Group, Object.assign({ title: \"Excalidraw links\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.Socials, {}) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].Separator, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.ToggleTheme, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_main_menu_MainMenu__WEBPACK_IMPORTED_MODULE_37__[\"default\"].DefaultItems.ChangeCanvasBackground, {})] })));\n};\nconst LayerUI = ({ actionManager, appState, files, setAppState, elements, canvas, onLockToggle, onHandToolToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, renderTopRightUI, renderCustomStats, renderCustomSidebar, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, renderWelcomeScreen, children, }) => {\n const device = (0,_components_App__WEBPACK_IMPORTED_MODULE_31__.useDevice)();\n const tunnels = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_41__.useInitializeTunnels)();\n const renderJSONExportDialog = () => {\n if (!UIOptions.canvasActions.export) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_JSONExportDialog__WEBPACK_IMPORTED_MODULE_23__.JSONExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, exportOpts: UIOptions.canvasActions.export, canvas: canvas, setAppState: setAppState }));\n };\n const renderImageExportDialog = () => {\n if (!UIOptions.canvasActions.saveAsImage) {\n return null;\n }\n const createExporter = (type) => (exportedElements) => __awaiter(void 0, void 0, void 0, function* () {\n (0,_analytics__WEBPACK_IMPORTED_MODULE_30__.trackEvent)(\"export\", type, \"ui\");\n const fileHandle = yield (0,_data__WEBPACK_IMPORTED_MODULE_4__.exportCanvas)(type, exportedElements, appState, files, {\n exportBackground: appState.exportBackground,\n name: appState.name,\n viewBackgroundColor: appState.viewBackgroundColor,\n })\n .catch(_utils__WEBPACK_IMPORTED_MODULE_8__.muteFSAbortError)\n .catch((error) => {\n console.error(error);\n setAppState({ errorMessage: error.message });\n });\n if (appState.exportEmbedScene &&\n fileHandle &&\n (0,_data_blob__WEBPACK_IMPORTED_MODULE_25__.isImageFileHandle)(fileHandle)) {\n setAppState({ fileHandle });\n }\n });\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ImageExportDialog__WEBPACK_IMPORTED_MODULE_11__.ImageExportDialog, { elements: elements, appState: appState, setAppState: setAppState, files: files, actionManager: actionManager, onExportToPng: createExporter(\"png\"), onExportToSvg: createExporter(\"svg\"), onExportToClipboard: createExporter(\"clipboard\") }));\n };\n const renderCanvasActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { position: \"relative\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(tunnels.mainMenuTunnel.Out, {}), renderWelcomeScreen && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(tunnels.welcomeScreenMenuHintTunnel.Out, {})] })));\n const renderSelectedShapeActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_19__.Section, Object.assign({ heading: \"selectedShapeActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"selected-shape-actions zen-mode-transition\", {\n \"transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_14__.Island, Object.assign({ className: _constants__WEBPACK_IMPORTED_MODULE_3__.CLASSES.SHAPE_ACTIONS_MENU, padding: 2, style: {\n // we want to make sure this doesn't overflow so subtracting the\n // approximate height of hamburgerMenu + footer\n maxHeight: `${appState.height - 166}px`,\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction }) })) })));\n const renderFixedSideContainer = () => {\n const shouldRenderSelectedShapeActions = (0,_element__WEBPACK_IMPORTED_MODULE_5__.showSelectedShapeActions)(appState, elements);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_12__.FixedSideContainer, Object.assign({ side: \"top\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-menu App-menu_top\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_21__[\"default\"].Col, Object.assign({ gap: 6, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-menu_top__left\", {\n \"disable-pointerEvents\": appState.zenModeEnabled,\n }) }, { children: [renderCanvasActions(), shouldRenderSelectedShapeActions && renderSelectedShapeActions()] })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_19__.Section, Object.assign({ heading: \"shapes\", className: \"shapes-section\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { position: \"relative\" } }, { children: [renderWelcomeScreen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(tunnels.welcomeScreenToolbarHintTunnel.Out, {})), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_21__[\"default\"].Col, Object.assign({ gap: 4, align: \"start\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_21__[\"default\"].Row, Object.assign({ gap: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar-container\", {\n \"zen-mode\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_14__.Island, Object.assign({ padding: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar\", {\n \"zen-mode\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_13__.HintViewer, { appState: appState, elements: elements, isMobile: device.isMobile, device: device }), heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_21__[\"default\"].Row, Object.assign({ gap: 1 }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_29__.PenModeButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.penMode\"), penDetected: appState.penDetected }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_16__.LockButton, { checked: appState.activeTool.locked, onChange: onLockToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.lock\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"App-toolbar__divider\" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HandButton__WEBPACK_IMPORTED_MODULE_39__.HandButton, { checked: (0,_appState__WEBPACK_IMPORTED_MODULE_40__.isHandToolActive)(appState), onChange: () => onHandToolToggle(), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.hand\"), isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\n onImageAction({\n insertOnCanvasDirectly: pointerType !== \"mouse\",\n });\n } })] }))] })) })) }))] }))) }))), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__top-right zen-mode-transition\", {\n \"transition-right\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_22__.UserList, { collaborators: appState.collaborators }), renderTopRightUI === null || renderTopRightUI === void 0 ? void 0 : renderTopRightUI(device.isMobile, appState), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_24__.LibraryButton, { appState: appState, setAppState: setAppState }))] }))] })) })));\n };\n const renderSidebars = () => {\n return appState.openSidebar === \"customSidebar\" ? ((renderCustomSidebar === null || renderCustomSidebar === void 0 ? void 0 : renderCustomSidebar()) || null) : appState.openSidebar === \"library\" ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenu__WEBPACK_IMPORTED_MODULE_26__.LibraryMenu, { appState: appState, onInsertElements: onInsertElements, libraryReturnUrl: libraryReturnUrl, focusContainer: focusContainer, library: library, id: id })) : null;\n };\n const [hostSidebarCounters] = (0,jotai__WEBPACK_IMPORTED_MODULE_42__.useAtom)(_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_35__.hostSidebarCountersAtom, _jotai__WEBPACK_IMPORTED_MODULE_36__.jotaiScope);\n const layerUIJSX = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [children, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(DefaultMainMenu, { UIOptions: UIOptions }), appState.isLoading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LoadingMessage__WEBPACK_IMPORTED_MODULE_15__.LoadingMessage, { delay: 250 }), appState.errorMessage && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ErrorDialog__WEBPACK_IMPORTED_MODULE_10__.ErrorDialog, { message: appState.errorMessage, onClose: () => setAppState({ errorMessage: null }) })), appState.openDialog === \"help\" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HelpDialog__WEBPACK_IMPORTED_MODULE_20__.HelpDialog, { onClose: () => {\n setAppState({ openDialog: null });\n } })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ActiveConfirmDialog__WEBPACK_IMPORTED_MODULE_38__.ActiveConfirmDialog, {}), renderImageExportDialog(), renderJSONExportDialog(), appState.pasteDialog.shown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PasteChartDialog__WEBPACK_IMPORTED_MODULE_18__.PasteChartDialog, { setAppState: setAppState, appState: appState, onInsertChart: onInsertElements, onClose: () => setAppState({\n pasteDialog: { shown: false, data: null },\n }) })), device.isMobile && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MobileMenu__WEBPACK_IMPORTED_MODULE_17__.MobileMenu, { appState: appState, elements: elements, actionManager: actionManager, renderJSONExportDialog: renderJSONExportDialog, renderImageExportDialog: renderImageExportDialog, setAppState: setAppState, onLockToggle: onLockToggle, onHandToolToggle: onHandToolToggle, onPenModeToggle: onPenModeToggle, canvas: canvas, onImageAction: onImageAction, renderTopRightUI: renderTopRightUI, renderCustomStats: renderCustomStats, renderSidebars: renderSidebars, device: device })), !device.isMobile && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper\", {\n \"disable-pointerEvents\": appState.draggingElement ||\n appState.resizingElement ||\n (appState.editingElement &&\n !(0,_element__WEBPACK_IMPORTED_MODULE_5__.isTextElement)(appState.editingElement)),\n }), style: ((appState.openSidebar === \"library\" &&\n appState.isSidebarDocked) ||\n hostSidebarCounters.docked) &&\n device.canDeviceFitSidebar\n ? { width: `calc(100% - ${_constants__WEBPACK_IMPORTED_MODULE_3__.LIBRARY_SIDEBAR_WIDTH}px)` }\n : {} }, { children: [renderWelcomeScreen && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(tunnels.welcomeScreenCenterTunnel.Out, {}), renderFixedSideContainer(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_footer_Footer__WEBPACK_IMPORTED_MODULE_34__[\"default\"], { appState: appState, actionManager: actionManager, showExitZenModeBtn: showExitZenModeBtn, renderWelcomeScreen: renderWelcomeScreen }), appState.showStats && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stats__WEBPACK_IMPORTED_MODULE_32__.Stats, { appState: appState, setAppState: setAppState, elements: elements, onClose: () => {\n actionManager.executeAction(_actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_33__.actionToggleStats);\n }, renderCustomStats: renderCustomStats })), appState.scrolledOutside && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_7__.calculateScrollCenter)(elements, appState, canvas)));\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scrollBackToContent\") })))] })), renderSidebars()] }))] }));\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(jotai__WEBPACK_IMPORTED_MODULE_42__.Provider, Object.assign({ scope: tunnels.jotaiScope }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_tunnels__WEBPACK_IMPORTED_MODULE_41__.TunnelsContext.Provider, Object.assign({ value: tunnels }, { children: layerUIJSX })) })));\n};\nconst stripIrrelevantAppStateProps = (appState) => {\n const { suggestedBindings, startBoundElement, cursorButton } = appState, ret = __rest(appState, [\"suggestedBindings\", \"startBoundElement\", \"cursorButton\"]);\n return ret;\n};\nconst areEqual = (prevProps, nextProps) => {\n // short-circuit early\n if (prevProps.children !== nextProps.children) {\n return false;\n }\n const { canvas: _prevCanvas, \n // not stable, but shouldn't matter in our case\n onInsertElements: _prevOnInsertElements, appState: prevAppState } = prevProps, prev = __rest(prevProps, [\"canvas\", \"onInsertElements\", \"appState\"]);\n const { canvas: _nextCanvas, onInsertElements: _nextOnInsertElements, appState: nextAppState } = nextProps, next = __rest(nextProps, [\"canvas\", \"onInsertElements\", \"appState\"]);\n return ((0,_utils__WEBPACK_IMPORTED_MODULE_8__.isShallowEqual)(stripIrrelevantAppStateProps(prevAppState), stripIrrelevantAppStateProps(nextAppState)) && (0,_utils__WEBPACK_IMPORTED_MODULE_8__.isShallowEqual)(prev, next));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (react__WEBPACK_IMPORTED_MODULE_2___default().memo(LayerUI, areEqual));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL0xheWVyVUkudHN4PzA4NzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9tYW5hZ2VyXCI7XG5pbXBvcnQgeyBDTEFTU0VTLCBMSUJSQVJZX1NJREVCQVJfV0lEVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBleHBvcnRDYW52YXMgfSBmcm9tIFwiLi4vZGF0YVwiO1xuaW1wb3J0IHsgaXNUZXh0RWxlbWVudCwgc2hvd1NlbGVjdGVkU2hhcGVBY3Rpb25zIH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBMYW5ndWFnZSwgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVTY3JvbGxDZW50ZXIgfSBmcm9tIFwiLi4vc2NlbmVcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGUgfSBmcm9tIFwiLi4vc2NlbmUvdHlwZXNcIjtcbmltcG9ydCB7IEFwcFByb3BzLCBBcHBTdGF0ZSwgRXhjYWxpZHJhd1Byb3BzLCBCaW5hcnlGaWxlcyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNTaGFsbG93RXF1YWwsIG11dGVGU0Fib3J0RXJyb3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFNlbGVjdGVkU2hhcGVBY3Rpb25zLCBTaGFwZXNTd2l0Y2hlciB9IGZyb20gXCIuL0FjdGlvbnNcIjtcbmltcG9ydCB7IEVycm9yRGlhbG9nIH0gZnJvbSBcIi4vRXJyb3JEaWFsb2dcIjtcbmltcG9ydCB7IEV4cG9ydENCLCBJbWFnZUV4cG9ydERpYWxvZyB9IGZyb20gXCIuL0ltYWdlRXhwb3J0RGlhbG9nXCI7XG5pbXBvcnQgeyBGaXhlZFNpZGVDb250YWluZXIgfSBmcm9tIFwiLi9GaXhlZFNpZGVDb250YWluZXJcIjtcbmltcG9ydCB7IEhpbnRWaWV3ZXIgfSBmcm9tIFwiLi9IaW50Vmlld2VyXCI7XG5pbXBvcnQgeyBJc2xhbmQgfSBmcm9tIFwiLi9Jc2xhbmRcIjtcbmltcG9ydCB7IExvYWRpbmdNZXNzYWdlIH0gZnJvbSBcIi4vTG9hZGluZ01lc3NhZ2VcIjtcbmltcG9ydCB7IExvY2tCdXR0b24gfSBmcm9tIFwiLi9Mb2NrQnV0dG9uXCI7XG5pbXBvcnQgeyBNb2JpbGVNZW51IH0gZnJvbSBcIi4vTW9iaWxlTWVudVwiO1xuaW1wb3J0IHsgUGFzdGVDaGFydERpYWxvZyB9IGZyb20gXCIuL1Bhc3RlQ2hhcnREaWFsb2dcIjtcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tIFwiLi9TZWN0aW9uXCI7XG5pbXBvcnQgeyBIZWxwRGlhbG9nIH0gZnJvbSBcIi4vSGVscERpYWxvZ1wiO1xuaW1wb3J0IFN0YWNrIGZyb20gXCIuL1N0YWNrXCI7XG5pbXBvcnQgeyBVc2VyTGlzdCB9IGZyb20gXCIuL1VzZXJMaXN0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwiLi4vZGF0YS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBKU09ORXhwb3J0RGlhbG9nIH0gZnJvbSBcIi4vSlNPTkV4cG9ydERpYWxvZ1wiO1xuaW1wb3J0IHsgTGlicmFyeUJ1dHRvbiB9IGZyb20gXCIuL0xpYnJhcnlCdXR0b25cIjtcbmltcG9ydCB7IGlzSW1hZ2VGaWxlSGFuZGxlIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuaW1wb3J0IHsgTGlicmFyeU1lbnUgfSBmcm9tIFwiLi9MaWJyYXJ5TWVudVwiO1xuXG5pbXBvcnQgXCIuL0xheWVyVUkuc2Nzc1wiO1xuaW1wb3J0IFwiLi9Ub29sYmFyLnNjc3NcIjtcbmltcG9ydCB7IFBlbk1vZGVCdXR0b24gfSBmcm9tIFwiLi9QZW5Nb2RlQnV0dG9uXCI7XG5pbXBvcnQgeyB0cmFja0V2ZW50IH0gZnJvbSBcIi4uL2FuYWx5dGljc1wiO1xuaW1wb3J0IHsgdXNlRGV2aWNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvQXBwXCI7XG5pbXBvcnQgeyBTdGF0cyB9IGZyb20gXCIuL1N0YXRzXCI7XG5pbXBvcnQgeyBhY3Rpb25Ub2dnbGVTdGF0cyB9IGZyb20gXCIuLi9hY3Rpb25zL2FjdGlvblRvZ2dsZVN0YXRzXCI7XG5pbXBvcnQgRm9vdGVyIGZyb20gXCIuL2Zvb3Rlci9Gb290ZXJcIjtcbmltcG9ydCB7IGhvc3RTaWRlYmFyQ291bnRlcnNBdG9tIH0gZnJvbSBcIi4vU2lkZWJhci9TaWRlYmFyXCI7XG5pbXBvcnQgeyBqb3RhaVNjb3BlIH0gZnJvbSBcIi4uL2pvdGFpXCI7XG5pbXBvcnQgeyBQcm92aWRlciwgdXNlQXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IE1haW5NZW51IGZyb20gXCIuL21haW4tbWVudS9NYWluTWVudVwiO1xuaW1wb3J0IHsgQWN0aXZlQ29uZmlybURpYWxvZyB9IGZyb20gXCIuL0FjdGl2ZUNvbmZpcm1EaWFsb2dcIjtcbmltcG9ydCB7IEhhbmRCdXR0b24gfSBmcm9tIFwiLi9IYW5kQnV0dG9uXCI7XG5pbXBvcnQgeyBpc0hhbmRUb29sQWN0aXZlIH0gZnJvbSBcIi4uL2FwcFN0YXRlXCI7XG5pbXBvcnQgeyBUdW5uZWxzQ29udGV4dCwgdXNlSW5pdGlhbGl6ZVR1bm5lbHMgfSBmcm9tIFwiLi9jb250ZXh0L3R1bm5lbHNcIjtcblxuaW50ZXJmYWNlIExheWVyVUlQcm9wcyB7XG4gIGFjdGlvbk1hbmFnZXI6IEFjdGlvbk1hbmFnZXI7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbiAgZmlsZXM6IEJpbmFyeUZpbGVzO1xuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbDtcbiAgc2V0QXBwU3RhdGU6IFJlYWN0LkNvbXBvbmVudDxhbnksIEFwcFN0YXRlPltcInNldFN0YXRlXCJdO1xuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIG9uTG9ja1RvZ2dsZTogKCkgPT4gdm9pZDtcbiAgb25IYW5kVG9vbFRvZ2dsZTogKCkgPT4gdm9pZDtcbiAgb25QZW5Nb2RlVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBvbkluc2VydEVsZW1lbnRzOiAoZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdKSA9PiB2b2lkO1xuICBzaG93RXhpdFplbk1vZGVCdG46IGJvb2xlYW47XG4gIGxhbmdDb2RlOiBMYW5ndWFnZVtcImNvZGVcIl07XG4gIHJlbmRlclRvcFJpZ2h0VUk/OiBFeGNhbGlkcmF3UHJvcHNbXCJyZW5kZXJUb3BSaWdodFVJXCJdO1xuICByZW5kZXJDdXN0b21TdGF0cz86IEV4Y2FsaWRyYXdQcm9wc1tcInJlbmRlckN1c3RvbVN0YXRzXCJdO1xuICByZW5kZXJDdXN0b21TaWRlYmFyPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyU2lkZWJhclwiXTtcbiAgbGlicmFyeVJldHVyblVybDogRXhjYWxpZHJhd1Byb3BzW1wibGlicmFyeVJldHVyblVybFwiXTtcbiAgVUlPcHRpb25zOiBBcHBQcm9wc1tcIlVJT3B0aW9uc1wiXTtcbiAgZm9jdXNDb250YWluZXI6ICgpID0+IHZvaWQ7XG4gIGxpYnJhcnk6IExpYnJhcnk7XG4gIGlkOiBzdHJpbmc7XG4gIG9uSW1hZ2VBY3Rpb246IChkYXRhOiB7IGluc2VydE9uQ2FudmFzRGlyZWN0bHk6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgcmVuZGVyV2VsY29tZVNjcmVlbjogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmNvbnN0IERlZmF1bHRNYWluTWVudTogUmVhY3QuRkM8e1xuICBVSU9wdGlvbnM6IEFwcFByb3BzW1wiVUlPcHRpb25zXCJdO1xufT4gPSAoeyBVSU9wdGlvbnMgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxNYWluTWVudSBfX2ZhbGxiYWNrPlxuICAgICAgPE1haW5NZW51LkRlZmF1bHRJdGVtcy5Mb2FkU2NlbmUgLz5cbiAgICAgIDxNYWluTWVudS5EZWZhdWx0SXRlbXMuU2F2ZVRvQWN0aXZlRmlsZSAvPlxuICAgICAgey8qIEZJWE1FIHdlIHNob3VsZCB0byB0ZXN0IGZvciB0aGlzIGluc2lkZSB0aGUgaXRlbSBpdHNlbGYgKi99XG4gICAgICB7VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0ICYmIDxNYWluTWVudS5EZWZhdWx0SXRlbXMuRXhwb3J0IC8+fVxuICAgICAgey8qIEZJWE1FIHdlIHNob3VsZCB0byB0ZXN0IGZvciB0aGlzIGluc2lkZSB0aGUgaXRlbSBpdHNlbGYgKi99XG4gICAgICB7VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuc2F2ZUFzSW1hZ2UgJiYgKFxuICAgICAgICA8TWFpbk1lbnUuRGVmYXVsdEl0ZW1zLlNhdmVBc0ltYWdlIC8+XG4gICAgICApfVxuICAgICAgPE1haW5NZW51LkRlZmF1bHRJdGVtcy5IZWxwIC8+XG4gICAgICA8TWFpbk1lbnUuRGVmYXVsdEl0ZW1zLkNsZWFyQ2FudmFzIC8+XG4gICAgICA8TWFpbk1lbnUuU2VwYXJhdG9yIC8+XG4gICAgICA8TWFpbk1lbnUuR3JvdXAgdGl0bGU9XCJFeGNhbGlkcmF3IGxpbmtzXCI+XG4gICAgICAgIDxNYWluTWVudS5EZWZhdWx0SXRlbXMuU29jaWFscyAvPlxuICAgICAgPC9NYWluTWVudS5Hcm91cD5cbiAgICAgIDxNYWluTWVudS5TZXBhcmF0b3IgLz5cbiAgICAgIDxNYWluTWVudS5EZWZhdWx0SXRlbXMuVG9nZ2xlVGhlbWUgLz5cbiAgICAgIDxNYWluTWVudS5EZWZhdWx0SXRlbXMuQ2hhbmdlQ2FudmFzQmFja2dyb3VuZCAvPlxuICAgIDwvTWFpbk1lbnU+XG4gICk7XG59O1xuXG5jb25zdCBMYXllclVJID0gKHtcbiAgYWN0aW9uTWFuYWdlcixcbiAgYXBwU3RhdGUsXG4gIGZpbGVzLFxuICBzZXRBcHBTdGF0ZSxcbiAgZWxlbWVudHMsXG4gIGNhbnZhcyxcbiAgb25Mb2NrVG9nZ2xlLFxuICBvbkhhbmRUb29sVG9nZ2xlLFxuICBvblBlbk1vZGVUb2dnbGUsXG4gIG9uSW5zZXJ0RWxlbWVudHMsXG4gIHNob3dFeGl0WmVuTW9kZUJ0bixcbiAgcmVuZGVyVG9wUmlnaHRVSSxcbiAgcmVuZGVyQ3VzdG9tU3RhdHMsXG4gIHJlbmRlckN1c3RvbVNpZGViYXIsXG4gIGxpYnJhcnlSZXR1cm5VcmwsXG4gIFVJT3B0aW9ucyxcbiAgZm9jdXNDb250YWluZXIsXG4gIGxpYnJhcnksXG4gIGlkLFxuICBvbkltYWdlQWN0aW9uLFxuICByZW5kZXJXZWxjb21lU2NyZWVuLFxuICBjaGlsZHJlbixcbn06IExheWVyVUlQcm9wcykgPT4ge1xuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcblxuICBjb25zdCB0dW5uZWxzID0gdXNlSW5pdGlhbGl6ZVR1bm5lbHMoKTtcblxuICBjb25zdCByZW5kZXJKU09ORXhwb3J0RGlhbG9nID0gKCkgPT4ge1xuICAgIGlmICghVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEpTT05FeHBvcnREaWFsb2dcbiAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgZXhwb3J0T3B0cz17VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0fVxuICAgICAgICBjYW52YXM9e2NhbnZhc31cbiAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckltYWdlRXhwb3J0RGlhbG9nID0gKCkgPT4ge1xuICAgIGlmICghVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuc2F2ZUFzSW1hZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZUV4cG9ydGVyID1cbiAgICAgICh0eXBlOiBFeHBvcnRUeXBlKTogRXhwb3J0Q0IgPT5cbiAgICAgIGFzeW5jIChleHBvcnRlZEVsZW1lbnRzKSA9PiB7XG4gICAgICAgIHRyYWNrRXZlbnQoXCJleHBvcnRcIiwgdHlwZSwgXCJ1aVwiKTtcbiAgICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IGV4cG9ydENhbnZhcyhcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGV4cG9ydGVkRWxlbWVudHMsXG4gICAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgICAgZmlsZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhwb3J0QmFja2dyb3VuZDogYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCxcbiAgICAgICAgICAgIG5hbWU6IGFwcFN0YXRlLm5hbWUsXG4gICAgICAgICAgICB2aWV3QmFja2dyb3VuZENvbG9yOiBhcHBTdGF0ZS52aWV3QmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgICAuY2F0Y2gobXV0ZUZTQWJvcnRFcnJvcilcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHNldEFwcFN0YXRlKHsgZXJyb3JNZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBhcHBTdGF0ZS5leHBvcnRFbWJlZFNjZW5lICYmXG4gICAgICAgICAgZmlsZUhhbmRsZSAmJlxuICAgICAgICAgIGlzSW1hZ2VGaWxlSGFuZGxlKGZpbGVIYW5kbGUpXG4gICAgICAgICkge1xuICAgICAgICAgIHNldEFwcFN0YXRlKHsgZmlsZUhhbmRsZSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8SW1hZ2VFeHBvcnREaWFsb2dcbiAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgZmlsZXM9e2ZpbGVzfVxuICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICBvbkV4cG9ydFRvUG5nPXtjcmVhdGVFeHBvcnRlcihcInBuZ1wiKX1cbiAgICAgICAgb25FeHBvcnRUb1N2Zz17Y3JlYXRlRXhwb3J0ZXIoXCJzdmdcIil9XG4gICAgICAgIG9uRXhwb3J0VG9DbGlwYm9hcmQ9e2NyZWF0ZUV4cG9ydGVyKFwiY2xpcGJvYXJkXCIpfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNhbnZhc0FjdGlvbnMgPSAoKSA9PiAoXG4gICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiIH19PlxuICAgICAgey8qIHdyYXBwaW5nIHRvIEZyYWdtZW50IHN0b3BzIFJlYWN0IGZyb20gb2NjYXNpb25hbGx5IGNvbXBsYWluaW5nXG4gICAgICAgICAgICAgICAgYWJvdXQgaWRlbnRpY2FsIEtleXMgKi99XG4gICAgICA8dHVubmVscy5tYWluTWVudVR1bm5lbC5PdXQgLz5cbiAgICAgIHtyZW5kZXJXZWxjb21lU2NyZWVuICYmIDx0dW5uZWxzLndlbGNvbWVTY3JlZW5NZW51SGludFR1bm5lbC5PdXQgLz59XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgY29uc3QgcmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgPSAoKSA9PiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIGhlYWRpbmc9XCJzZWxlY3RlZFNoYXBlQWN0aW9uc1wiXG4gICAgICBjbGFzc05hbWU9e2Nsc3goXCJzZWxlY3RlZC1zaGFwZS1hY3Rpb25zIHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICBcInRyYW5zaXRpb24tbGVmdFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIDxJc2xhbmRcbiAgICAgICAgY2xhc3NOYW1lPXtDTEFTU0VTLlNIQVBFX0FDVElPTlNfTUVOVX1cbiAgICAgICAgcGFkZGluZz17Mn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgc28gc3VidHJhY3RpbmcgdGhlXG4gICAgICAgICAgLy8gYXBwcm94aW1hdGUgaGVpZ2h0IG9mIGhhbWJ1cmdlck1lbnUgKyBmb290ZXJcbiAgICAgICAgICBtYXhIZWlnaHQ6IGAke2FwcFN0YXRlLmhlaWdodCAtIDE2Nn1weGAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTZWxlY3RlZFNoYXBlQWN0aW9uc1xuICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgLz5cbiAgICAgIDwvSXNsYW5kPlxuICAgIDwvU2VjdGlvbj5cbiAgKTtcblxuICBjb25zdCByZW5kZXJGaXhlZFNpZGVDb250YWluZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2hvdWxkUmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgPSBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMoXG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZpeGVkU2lkZUNvbnRhaW5lciBzaWRlPVwidG9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwLW1lbnUgQXBwLW1lbnVfdG9wXCI+XG4gICAgICAgICAgPFN0YWNrLkNvbFxuICAgICAgICAgICAgZ2FwPXs2fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQXBwLW1lbnVfdG9wX19sZWZ0XCIsIHtcbiAgICAgICAgICAgICAgXCJkaXNhYmxlLXBvaW50ZXJFdmVudHNcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cmVuZGVyQ2FudmFzQWN0aW9ucygpfVxuICAgICAgICAgICAge3Nob3VsZFJlbmRlclNlbGVjdGVkU2hhcGVBY3Rpb25zICYmIHJlbmRlclNlbGVjdGVkU2hhcGVBY3Rpb25zKCl9XG4gICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cInNoYXBlc1wiIGNsYXNzTmFtZT1cInNoYXBlcy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgIHsoaGVhZGluZzogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiIH19PlxuICAgICAgICAgICAgICAgICAge3JlbmRlcldlbGNvbWVTY3JlZW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8dHVubmVscy53ZWxjb21lU2NyZWVuVG9vbGJhckhpbnRUdW5uZWwuT3V0IC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9IGFsaWduPVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrLlJvd1xuICAgICAgICAgICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJBcHAtdG9vbGJhci1jb250YWluZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ6ZW4tbW9kZVwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJc2xhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJBcHAtdG9vbGJhclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiemVuLW1vZGVcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SGludFZpZXdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGU9e2RldmljZS5pc01vYmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXtkZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2suUm93IGdhcD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxQZW5Nb2RlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgemVuTW9kZUVuYWJsZWQ9e2FwcFN0YXRlLnplbk1vZGVFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLnBlbk1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uUGVuTW9kZVRvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIucGVuTW9kZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5EZXRlY3RlZD17YXBwU3RhdGUucGVuRGV0ZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMb2NrQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YXBwU3RhdGUuYWN0aXZlVG9vbC5sb2NrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uTG9ja1RvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIubG9ja1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyX19kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhbmRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0hhbmRUb29sQWN0aXZlKGFwcFN0YXRlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gb25IYW5kVG9vbFRvZ2dsZSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0KFwidG9vbEJhci5oYW5kXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNoYXBlc1N3aXRjaGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcz17Y2FudmFzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2w9e2FwcFN0YXRlLmFjdGl2ZVRvb2x9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb249eyh7IHBvaW50ZXJUeXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBwb2ludGVyVHlwZSAhPT0gXCJtb3VzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDwvSXNsYW5kPlxuICAgICAgICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX190b3AtcmlnaHQgemVuLW1vZGUtdHJhbnNpdGlvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJ0cmFuc2l0aW9uLXJpZ2h0XCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VXNlckxpc3QgY29sbGFib3JhdG9ycz17YXBwU3RhdGUuY29sbGFib3JhdG9yc30gLz5cbiAgICAgICAgICAgIHtyZW5kZXJUb3BSaWdodFVJPy4oZGV2aWNlLmlzTW9iaWxlLCBhcHBTdGF0ZSl9XG4gICAgICAgICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgIDxMaWJyYXJ5QnV0dG9uIGFwcFN0YXRlPXthcHBTdGF0ZX0gc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0ZpeGVkU2lkZUNvbnRhaW5lcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlclNpZGViYXJzID0gKCkgPT4ge1xuICAgIHJldHVybiBhcHBTdGF0ZS5vcGVuU2lkZWJhciA9PT0gXCJjdXN0b21TaWRlYmFyXCIgPyAoXG4gICAgICByZW5kZXJDdXN0b21TaWRlYmFyPy4oKSB8fCBudWxsXG4gICAgKSA6IGFwcFN0YXRlLm9wZW5TaWRlYmFyID09PSBcImxpYnJhcnlcIiA/IChcbiAgICAgIDxMaWJyYXJ5TWVudVxuICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgIG9uSW5zZXJ0RWxlbWVudHM9e29uSW5zZXJ0RWxlbWVudHN9XG4gICAgICAgIGxpYnJhcnlSZXR1cm5Vcmw9e2xpYnJhcnlSZXR1cm5Vcmx9XG4gICAgICAgIGZvY3VzQ29udGFpbmVyPXtmb2N1c0NvbnRhaW5lcn1cbiAgICAgICAgbGlicmFyeT17bGlicmFyeX1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgLz5cbiAgICApIDogbnVsbDtcbiAgfTtcblxuICBjb25zdCBbaG9zdFNpZGViYXJDb3VudGVyc10gPSB1c2VBdG9tKGhvc3RTaWRlYmFyQ291bnRlcnNBdG9tLCBqb3RhaVNjb3BlKTtcblxuICBjb25zdCBsYXllclVJSlNYID0gKFxuICAgIDw+XG4gICAgICB7LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0dW5uZWxlZCBVSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovfVxuICAgICAgey8qIG1ha2Ugc3VyZSB3ZSByZW5kZXIgaG9zdCBhcHAgY29tcG9uZW50cyBmaXJzdCBzbyB0aGF0IHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICB0aGVtIGZpcnN0IG9uIGluaXRpYWwgcmVuZGVyIHRvIG9wdGltaXplIGxheW91dCBzaGlmdCAqL31cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHsvKiByZW5kZXIgY29tcG9uZW50IGZhbGxiYWNrcy4gQ2FuIGJlIHJlbmRlcmVkIGFueXdoZXJlIGFzIHRoZXknbGwgYmVcbiAgICAgICAgICB0dW5uZWxlZCBhd2F5LiBXZSBvbmx5IHJlbmRlciB0dW5uZWxlZCBjb21wb25lbnRzIHRoYXQgYWN0dWFsbHlcbiAgICAgICAgICBoYXZlIGRlZmF1bHRzIHdoZW4gaG9zdCBkbyBub3QgcmVuZGVyIGFueXRoaW5nLiAqL31cbiAgICAgIDxEZWZhdWx0TWFpbk1lbnUgVUlPcHRpb25zPXtVSU9wdGlvbnN9IC8+XG4gICAgICB7LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovfVxuXG4gICAgICB7YXBwU3RhdGUuaXNMb2FkaW5nICYmIDxMb2FkaW5nTWVzc2FnZSBkZWxheT17MjUwfSAvPn1cbiAgICAgIHthcHBTdGF0ZS5lcnJvck1lc3NhZ2UgJiYgKFxuICAgICAgICA8RXJyb3JEaWFsb2dcbiAgICAgICAgICBtZXNzYWdlPXthcHBTdGF0ZS5lcnJvck1lc3NhZ2V9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IG51bGwgfSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge2FwcFN0YXRlLm9wZW5EaWFsb2cgPT09IFwiaGVscFwiICYmIChcbiAgICAgICAgPEhlbHBEaWFsb2dcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRBcHBTdGF0ZSh7IG9wZW5EaWFsb2c6IG51bGwgfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8QWN0aXZlQ29uZmlybURpYWxvZyAvPlxuICAgICAge3JlbmRlckltYWdlRXhwb3J0RGlhbG9nKCl9XG4gICAgICB7cmVuZGVySlNPTkV4cG9ydERpYWxvZygpfVxuICAgICAge2FwcFN0YXRlLnBhc3RlRGlhbG9nLnNob3duICYmIChcbiAgICAgICAgPFBhc3RlQ2hhcnREaWFsb2dcbiAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgIG9uSW5zZXJ0Q2hhcnQ9e29uSW5zZXJ0RWxlbWVudHN9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT5cbiAgICAgICAgICAgIHNldEFwcFN0YXRlKHtcbiAgICAgICAgICAgICAgcGFzdGVEaWFsb2c6IHsgc2hvd246IGZhbHNlLCBkYXRhOiBudWxsIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7ZGV2aWNlLmlzTW9iaWxlICYmIChcbiAgICAgICAgPE1vYmlsZU1lbnVcbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgcmVuZGVySlNPTkV4cG9ydERpYWxvZz17cmVuZGVySlNPTkV4cG9ydERpYWxvZ31cbiAgICAgICAgICByZW5kZXJJbWFnZUV4cG9ydERpYWxvZz17cmVuZGVySW1hZ2VFeHBvcnREaWFsb2d9XG4gICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgIG9uTG9ja1RvZ2dsZT17b25Mb2NrVG9nZ2xlfVxuICAgICAgICAgIG9uSGFuZFRvb2xUb2dnbGU9e29uSGFuZFRvb2xUb2dnbGV9XG4gICAgICAgICAgb25QZW5Nb2RlVG9nZ2xlPXtvblBlbk1vZGVUb2dnbGV9XG4gICAgICAgICAgY2FudmFzPXtjYW52YXN9XG4gICAgICAgICAgb25JbWFnZUFjdGlvbj17b25JbWFnZUFjdGlvbn1cbiAgICAgICAgICByZW5kZXJUb3BSaWdodFVJPXtyZW5kZXJUb3BSaWdodFVJfVxuICAgICAgICAgIHJlbmRlckN1c3RvbVN0YXRzPXtyZW5kZXJDdXN0b21TdGF0c31cbiAgICAgICAgICByZW5kZXJTaWRlYmFycz17cmVuZGVyU2lkZWJhcnN9XG4gICAgICAgICAgZGV2aWNlPXtkZXZpY2V9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7IWRldmljZS5pc01vYmlsZSAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwibGF5ZXItdWlfX3dyYXBwZXJcIiwge1xuICAgICAgICAgICAgICBcImRpc2FibGUtcG9pbnRlckV2ZW50c1wiOlxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLmRyYWdnaW5nRWxlbWVudCB8fFxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLnJlc2l6aW5nRWxlbWVudCB8fFxuICAgICAgICAgICAgICAgIChhcHBTdGF0ZS5lZGl0aW5nRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgIWlzVGV4dEVsZW1lbnQoYXBwU3RhdGUuZWRpdGluZ0VsZW1lbnQpKSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAoKGFwcFN0YXRlLm9wZW5TaWRlYmFyID09PSBcImxpYnJhcnlcIiAmJlxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLmlzU2lkZWJhckRvY2tlZCkgfHxcbiAgICAgICAgICAgICAgICBob3N0U2lkZWJhckNvdW50ZXJzLmRvY2tlZCkgJiZcbiAgICAgICAgICAgICAgZGV2aWNlLmNhbkRldmljZUZpdFNpZGViYXJcbiAgICAgICAgICAgICAgICA/IHsgd2lkdGg6IGBjYWxjKDEwMCUgLSAke0xJQlJBUllfU0lERUJBUl9XSURUSH1weClgIH1cbiAgICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3JlbmRlcldlbGNvbWVTY3JlZW4gJiYgPHR1bm5lbHMud2VsY29tZVNjcmVlbkNlbnRlclR1bm5lbC5PdXQgLz59XG4gICAgICAgICAgICB7cmVuZGVyRml4ZWRTaWRlQ29udGFpbmVyKCl9XG4gICAgICAgICAgICA8Rm9vdGVyXG4gICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgICAgICAgc2hvd0V4aXRaZW5Nb2RlQnRuPXtzaG93RXhpdFplbk1vZGVCdG59XG4gICAgICAgICAgICAgIHJlbmRlcldlbGNvbWVTY3JlZW49e3JlbmRlcldlbGNvbWVTY3JlZW59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2FwcFN0YXRlLnNob3dTdGF0cyAmJiAoXG4gICAgICAgICAgICAgIDxTdGF0c1xuICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGFjdGlvbk1hbmFnZXIuZXhlY3V0ZUFjdGlvbihhY3Rpb25Ub2dnbGVTdGF0cyk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICByZW5kZXJDdXN0b21TdGF0cz17cmVuZGVyQ3VzdG9tU3RhdHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2FwcFN0YXRlLnNjcm9sbGVkT3V0c2lkZSAmJiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzY3JvbGwtYmFjay10by1jb250ZW50XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNhbGN1bGF0ZVNjcm9sbENlbnRlcihlbGVtZW50cywgYXBwU3RhdGUsIGNhbnZhcyksXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoXCJidXR0b25zLnNjcm9sbEJhY2tUb0NvbnRlbnRcIil9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7cmVuZGVyU2lkZWJhcnMoKX1cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFByb3ZpZGVyIHNjb3BlPXt0dW5uZWxzLmpvdGFpU2NvcGV9PlxuICAgICAgPFR1bm5lbHNDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt0dW5uZWxzfT5cbiAgICAgICAge2xheWVyVUlKU1h9XG4gICAgICA8L1R1bm5lbHNDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUHJvdmlkZXI+XG4gICk7XG59O1xuXG5jb25zdCBzdHJpcElycmVsZXZhbnRBcHBTdGF0ZVByb3BzID0gKFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pOiBQYXJ0aWFsPEFwcFN0YXRlPiA9PiB7XG4gIGNvbnN0IHsgc3VnZ2VzdGVkQmluZGluZ3MsIHN0YXJ0Qm91bmRFbGVtZW50LCBjdXJzb3JCdXR0b24sIC4uLnJldCB9ID1cbiAgICBhcHBTdGF0ZTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbmNvbnN0IGFyZUVxdWFsID0gKHByZXZQcm9wczogTGF5ZXJVSVByb3BzLCBuZXh0UHJvcHM6IExheWVyVUlQcm9wcykgPT4ge1xuICAvLyBzaG9ydC1jaXJjdWl0IGVhcmx5XG4gIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBjYW52YXM6IF9wcmV2Q2FudmFzLFxuICAgIC8vIG5vdCBzdGFibGUsIGJ1dCBzaG91bGRuJ3QgbWF0dGVyIGluIG91ciBjYXNlXG4gICAgb25JbnNlcnRFbGVtZW50czogX3ByZXZPbkluc2VydEVsZW1lbnRzLFxuICAgIGFwcFN0YXRlOiBwcmV2QXBwU3RhdGUsXG4gICAgLi4ucHJldlxuICB9ID0gcHJldlByb3BzO1xuICBjb25zdCB7XG4gICAgY2FudmFzOiBfbmV4dENhbnZhcyxcbiAgICBvbkluc2VydEVsZW1lbnRzOiBfbmV4dE9uSW5zZXJ0RWxlbWVudHMsXG4gICAgYXBwU3RhdGU6IG5leHRBcHBTdGF0ZSxcbiAgICAuLi5uZXh0XG4gIH0gPSBuZXh0UHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICBpc1NoYWxsb3dFcXVhbChcbiAgICAgIHN0cmlwSXJyZWxldmFudEFwcFN0YXRlUHJvcHMocHJldkFwcFN0YXRlKSxcbiAgICAgIHN0cmlwSXJyZWxldmFudEFwcFN0YXRlUHJvcHMobmV4dEFwcFN0YXRlKSxcbiAgICApICYmIGlzU2hhbGxvd0VxdWFsKHByZXYsIG5leHQpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKExheWVyVUksIGFyZUVxdWFsKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/LayerUI.tsx\n");
2683
2683
 
2684
2684
  /***/ }),
2685
2685
 
@@ -2778,7 +2778,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2778
2778
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2779
2779
 
2780
2780
  "use strict";
2781
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MobileMenu\": () => (/* binding */ MobileMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../scene/scrollbars */ \"../../scene/scrollbars.ts\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Stats */ \"../../components/Stats.tsx\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../actions */ \"../../actions/index.ts\");\n/* harmony import */ var _HandButton__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./HandButton */ \"../../components/HandButton.tsx\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _tunnels__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./tunnels */ \"../../components/tunnels.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst MobileMenu = ({ appState, elements, actionManager, setAppState, onLockToggle, onHandToolToggle, onPenModeToggle, canvas, onImageAction, renderTopRightUI, renderCustomStats, renderSidebars, device, }) => {\n const renderToolbar = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__.FixedSideContainer, Object.assign({ side: \"top\", className: \"App-top-bar\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_19__.welcomeScreenCenterTunnel.Out, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4, align: \"center\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1, className: \"App-toolbar-container\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, className: \"App-toolbar App-toolbar--mobile\" }, { children: [heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\n onImageAction({\n insertOnCanvasDirectly: pointerType !== \"mouse\",\n });\n } }) }))] })), renderTopRightUI && renderTopRightUI(true, appState), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"mobile-misc-tools-container\" }, { children: [!appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_13__.LibraryButton, { appState: appState, setAppState: setAppState, isMobile: true })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_14__.PenModeButton, { checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.penMode\"), isMobile: true, penDetected: appState.penDetected }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_12__.LockButton, { checked: appState.activeTool.locked, onChange: onLockToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.lock\"), isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HandButton__WEBPACK_IMPORTED_MODULE_17__.HandButton, { checked: (0,_appState__WEBPACK_IMPORTED_MODULE_18__.isHandToolActive)(appState), onChange: () => onHandToolToggle(), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.hand\"), isMobile: true })] }))] })) }))) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_7__.HintViewer, { appState: appState, elements: elements, isMobile: true, device: device })] })));\n };\n const renderAppToolbar = () => {\n if (appState.viewModeEnabled) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_19__.mainMenuTunnel.Out, {}) })));\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_19__.mainMenuTunnel.Out, {}), actionManager.renderAction(\"toggleEditMenu\"), actionManager.renderAction(\"undo\"), actionManager.renderAction(\"redo\"), actionManager.renderAction(appState.multiElement ? \"finalize\" : \"duplicateSelection\"), actionManager.renderAction(\"deleteSelectedElements\")] })));\n };\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [renderSidebars(), !appState.viewModeEnabled && renderToolbar(), !appState.openMenu && appState.showStats && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stats__WEBPACK_IMPORTED_MODULE_15__.Stats, { appState: appState, setAppState: setAppState, elements: elements, onClose: () => {\n actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_16__.actionToggleStats);\n }, renderCustomStats: renderCustomStats })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-bottom-bar\", style: {\n marginBottom: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\n marginLeft: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\n marginRight: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 0 }, { children: [appState.openMenu === \"shape\" &&\n !appState.viewModeEnabled &&\n (0,_element__WEBPACK_IMPORTED_MODULE_4__.showSelectedShapeActions)(appState, elements) ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"selectedShapeActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction }) }))) : null, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ className: \"App-toolbar\" }, { children: [renderAppToolbar(), appState.scrolledOutside &&\n !appState.openMenu &&\n appState.openSidebar !== \"library\" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_8__.calculateScrollCenter)(elements, appState, canvas)));\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"buttons.scrollBackToContent\") })))] }))] })) }))] }));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBRSwrREFBZSxHQUFHLGdFQUFnQixHQUFHLENBQUM7b0JBQ3BELFVBQVUsRUFBRSwrREFBZSxHQUFHLGdFQUFnQixHQUFHLENBQUM7b0JBQ2xELFdBQVcsRUFBRSwrREFBZSxHQUFHLGdFQUFnQixHQUFHLENBQUM7aUJBQ3BELGdCQUVELHdEQUFDLDJDQUFNLGtCQUFDLE9BQU8sRUFBRSxDQUFDLGlCQUNmLFFBQVEsQ0FBQyxRQUFRLEtBQUssT0FBTzs0QkFDOUIsQ0FBQyxRQUFRLENBQUMsZUFBZTs0QkFDekIsa0VBQXdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM3Qyx1REFBQyw4Q0FBTyxrQkFBQyxTQUFTLEVBQUMsaUJBQWlCLEVBQUMsT0FBTyxFQUFDLHNCQUFzQixnQkFDakUsdURBQUMsMERBQW9CLElBQ25CLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWSxHQUN4QyxJQUNNLENBQ1gsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUNSLGtGQUFRLFNBQVMsRUFBQyxhQUFhLGlCQUM1QixnQkFBZ0IsRUFBRSxFQUNsQixRQUFRLENBQUMsZUFBZTtvQ0FDdkIsQ0FBQyxRQUFRLENBQUMsUUFBUTtvQ0FDbEIsUUFBUSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksQ0FDcEMsaUZBQ0UsU0FBUyxFQUFDLHdCQUF3QixFQUNsQyxPQUFPLEVBQUUsR0FBRyxFQUFFO3dDQUNaLFdBQVcsbUJBQ04sNkRBQXFCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFDcEQsQ0FBQztvQ0FDTCxDQUFDLGdCQUVBLHdDQUFDLENBQUMsNkJBQTZCLENBQUMsSUFDMUIsQ0FDVixLQUNJLEtBQ0YsSUFDTCxJQUNMLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL01vYmlsZU1lbnUudHN4PzA4YzQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIERldmljZSwgRXhjYWxpZHJhd1Byb3BzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL2FjdGlvbnMvbWFuYWdlclwiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyB9IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgRml4ZWRTaWRlQ29udGFpbmVyIH0gZnJvbSBcIi4vRml4ZWRTaWRlQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBJc2xhbmQgfSBmcm9tIFwiLi9Jc2xhbmRcIjtcbmltcG9ydCB7IEhpbnRWaWV3ZXIgfSBmcm9tIFwiLi9IaW50Vmlld2VyXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVTY3JvbGxDZW50ZXIgfSBmcm9tIFwiLi4vc2NlbmVcIjtcbmltcG9ydCB7IFNlbGVjdGVkU2hhcGVBY3Rpb25zLCBTaGFwZXNTd2l0Y2hlciB9IGZyb20gXCIuL0FjdGlvbnNcIjtcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tIFwiLi9TZWN0aW9uXCI7XG5pbXBvcnQgeyBTQ1JPTExCQVJfV0lEVEgsIFNDUk9MTEJBUl9NQVJHSU4gfSBmcm9tIFwiLi4vc2NlbmUvc2Nyb2xsYmFyc1wiO1xuaW1wb3J0IHsgTG9ja0J1dHRvbiB9IGZyb20gXCIuL0xvY2tCdXR0b25cIjtcbmltcG9ydCB7IExpYnJhcnlCdXR0b24gfSBmcm9tIFwiLi9MaWJyYXJ5QnV0dG9uXCI7XG5pbXBvcnQgeyBQZW5Nb2RlQnV0dG9uIH0gZnJvbSBcIi4vUGVuTW9kZUJ1dHRvblwiO1xuaW1wb3J0IHsgU3RhdHMgfSBmcm9tIFwiLi9TdGF0c1wiO1xuaW1wb3J0IHsgYWN0aW9uVG9nZ2xlU3RhdHMgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgSGFuZEJ1dHRvbiB9IGZyb20gXCIuL0hhbmRCdXR0b25cIjtcbmltcG9ydCB7IGlzSGFuZFRvb2xBY3RpdmUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IG1haW5NZW51VHVubmVsLCB3ZWxjb21lU2NyZWVuQ2VudGVyVHVubmVsIH0gZnJvbSBcIi4vdHVubmVsc1wiO1xuXG50eXBlIE1vYmlsZU1lbnVQcm9wcyA9IHtcbiAgYXBwU3RhdGU6IEFwcFN0YXRlO1xuICBhY3Rpb25NYW5hZ2VyOiBBY3Rpb25NYW5hZ2VyO1xuICByZW5kZXJKU09ORXhwb3J0RGlhbG9nOiAoKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIHJlbmRlckltYWdlRXhwb3J0RGlhbG9nOiAoKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNldEFwcFN0YXRlOiBSZWFjdC5Db21wb25lbnQ8YW55LCBBcHBTdGF0ZT5bXCJzZXRTdGF0ZVwiXTtcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdO1xuICBvbkxvY2tUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIG9uSGFuZFRvb2xUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIG9uUGVuTW9kZVRvZ2dsZTogKCkgPT4gdm9pZDtcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw7XG5cbiAgb25JbWFnZUFjdGlvbjogKGRhdGE6IHsgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICByZW5kZXJUb3BSaWdodFVJPzogKFxuICAgIGlzTW9iaWxlOiBib29sZWFuLFxuICAgIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG4gIHJlbmRlckN1c3RvbVN0YXRzPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyQ3VzdG9tU3RhdHNcIl07XG4gIHJlbmRlclNpZGViYXJzOiAoKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG4gIGRldmljZTogRGV2aWNlO1xufTtcblxuZXhwb3J0IGNvbnN0IE1vYmlsZU1lbnUgPSAoe1xuICBhcHBTdGF0ZSxcbiAgZWxlbWVudHMsXG4gIGFjdGlvbk1hbmFnZXIsXG4gIHNldEFwcFN0YXRlLFxuICBvbkxvY2tUb2dnbGUsXG4gIG9uSGFuZFRvb2xUb2dnbGUsXG4gIG9uUGVuTW9kZVRvZ2dsZSxcbiAgY2FudmFzLFxuICBvbkltYWdlQWN0aW9uLFxuICByZW5kZXJUb3BSaWdodFVJLFxuICByZW5kZXJDdXN0b21TdGF0cyxcbiAgcmVuZGVyU2lkZWJhcnMsXG4gIGRldmljZSxcbn06IE1vYmlsZU1lbnVQcm9wcykgPT4ge1xuICBjb25zdCByZW5kZXJUb29sYmFyID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Rml4ZWRTaWRlQ29udGFpbmVyIHNpZGU9XCJ0b3BcIiBjbGFzc05hbWU9XCJBcHAtdG9wLWJhclwiPlxuICAgICAgICA8d2VsY29tZVNjcmVlbkNlbnRlclR1bm5lbC5PdXQgLz5cbiAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cInNoYXBlc1wiPlxuICAgICAgICAgIHsoaGVhZGluZzogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0gYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxJc2xhbmQgcGFkZGluZz17MX0gY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXIgQXBwLXRvb2xiYXItLW1vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAge2hlYWRpbmd9XG4gICAgICAgICAgICAgICAgICA8U3RhY2suUm93IGdhcD17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxTaGFwZXNTd2l0Y2hlclxuICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBjYW52YXM9e2NhbnZhc31cbiAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUb29sPXthcHBTdGF0ZS5hY3RpdmVUb29sfVxuICAgICAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uPXsoeyBwb2ludGVyVHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogcG9pbnRlclR5cGUgIT09IFwibW91c2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAgICA8L0lzbGFuZD5cbiAgICAgICAgICAgICAgICB7cmVuZGVyVG9wUmlnaHRVSSAmJiByZW5kZXJUb3BSaWdodFVJKHRydWUsIGFwcFN0YXRlKX1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vYmlsZS1taXNjLXRvb2xzLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8TGlicmFyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8UGVuTW9kZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXthcHBTdGF0ZS5wZW5Nb2RlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25QZW5Nb2RlVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIucGVuTW9kZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgcGVuRGV0ZWN0ZWQ9e2FwcFN0YXRlLnBlbkRldGVjdGVkfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMb2NrQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25Mb2NrVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIubG9ja1wiKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8SGFuZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0hhbmRUb29sQWN0aXZlKGFwcFN0YXRlKX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IG9uSGFuZFRvb2xUb2dnbGUoKX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLmhhbmRcIil9XG4gICAgICAgICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgPEhpbnRWaWV3ZXJcbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgIGlzTW9iaWxlPXt0cnVlfVxuICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAvPlxuICAgICAgPC9GaXhlZFNpZGVDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJBcHBUb29sYmFyID0gKCkgPT4ge1xuICAgIGlmIChhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXItY29udGVudFwiPlxuICAgICAgICAgIDxtYWluTWVudVR1bm5lbC5PdXQgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyLWNvbnRlbnRcIj5cbiAgICAgICAgPG1haW5NZW51VHVubmVsLk91dCAvPlxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJ0b2dnbGVFZGl0TWVudVwiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidW5kb1wiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwicmVkb1wiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFxuICAgICAgICAgIGFwcFN0YXRlLm11bHRpRWxlbWVudCA/IFwiZmluYWxpemVcIiA6IFwiZHVwbGljYXRlU2VsZWN0aW9uXCIsXG4gICAgICAgICl9XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImRlbGV0ZVNlbGVjdGVkRWxlbWVudHNcIil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtyZW5kZXJTaWRlYmFycygpfVxuICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgcmVuZGVyVG9vbGJhcigpfVxuICAgICAgeyFhcHBTdGF0ZS5vcGVuTWVudSAmJiBhcHBTdGF0ZS5zaG93U3RhdHMgJiYgKFxuICAgICAgICA8U3RhdHNcbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBhY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uVG9nZ2xlU3RhdHMpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgcmVuZGVyQ3VzdG9tU3RhdHM9e3JlbmRlckN1c3RvbVN0YXRzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiQXBwLWJvdHRvbS1iYXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG1hcmdpbkJvdHRvbTogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgICAgbWFyZ2luTGVmdDogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgICAgbWFyZ2luUmlnaHQ6IFNDUk9MTEJBUl9XSURUSCArIFNDUk9MTEJBUl9NQVJHSU4gKiAyLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezB9PlxuICAgICAgICAgIHthcHBTdGF0ZS5vcGVuTWVudSA9PT0gXCJzaGFwZVwiICYmXG4gICAgICAgICAgIWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJlxuICAgICAgICAgIHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyhhcHBTdGF0ZSwgZWxlbWVudHMpID8gKFxuICAgICAgICAgICAgPFNlY3Rpb24gY2xhc3NOYW1lPVwiQXBwLW1vYmlsZS1tZW51XCIgaGVhZGluZz1cInNlbGVjdGVkU2hhcGVBY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxTZWxlY3RlZFNoYXBlQWN0aW9uc1xuICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cIkFwcC10b29sYmFyXCI+XG4gICAgICAgICAgICB7cmVuZGVyQXBwVG9vbGJhcigpfVxuICAgICAgICAgICAge2FwcFN0YXRlLnNjcm9sbGVkT3V0c2lkZSAmJlxuICAgICAgICAgICAgICAhYXBwU3RhdGUub3Blbk1lbnUgJiZcbiAgICAgICAgICAgICAgYXBwU3RhdGUub3BlblNpZGViYXIgIT09IFwibGlicmFyeVwiICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzY3JvbGwtYmFjay10by1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmNhbGN1bGF0ZVNjcm9sbENlbnRlcihlbGVtZW50cywgYXBwU3RhdGUsIGNhbnZhcyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dChcImJ1dHRvbnMuc2Nyb2xsQmFja1RvQ29udGVudFwiKX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgPC9Jc2xhbmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/MobileMenu.tsx\n");
2781
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MobileMenu\": () => (/* binding */ MobileMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../scene/scrollbars */ \"../../scene/scrollbars.ts\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Stats */ \"../../components/Stats.tsx\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../actions */ \"../../actions/index.ts\");\n/* harmony import */ var _HandButton__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./HandButton */ \"../../components/HandButton.tsx\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _context_tunnels__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./context/tunnels */ \"../../components/context/tunnels.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst MobileMenu = ({ appState, elements, actionManager, setAppState, onLockToggle, onHandToolToggle, onPenModeToggle, canvas, onImageAction, renderTopRightUI, renderCustomStats, renderSidebars, device, }) => {\n const { welcomeScreenCenterTunnel, mainMenuTunnel } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_19__.useTunnels)();\n const renderToolbar = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__.FixedSideContainer, Object.assign({ side: \"top\", className: \"App-top-bar\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(welcomeScreenCenterTunnel.Out, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4, align: \"center\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1, className: \"App-toolbar-container\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, className: \"App-toolbar App-toolbar--mobile\" }, { children: [heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\n onImageAction({\n insertOnCanvasDirectly: pointerType !== \"mouse\",\n });\n } }) }))] })), renderTopRightUI && renderTopRightUI(true, appState), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"mobile-misc-tools-container\" }, { children: [!appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_13__.LibraryButton, { appState: appState, setAppState: setAppState, isMobile: true })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_14__.PenModeButton, { checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.penMode\"), isMobile: true, penDetected: appState.penDetected }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_12__.LockButton, { checked: appState.activeTool.locked, onChange: onLockToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.lock\"), isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HandButton__WEBPACK_IMPORTED_MODULE_17__.HandButton, { checked: (0,_appState__WEBPACK_IMPORTED_MODULE_18__.isHandToolActive)(appState), onChange: () => onHandToolToggle(), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.hand\"), isMobile: true })] }))] })) }))) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_7__.HintViewer, { appState: appState, elements: elements, isMobile: true, device: device })] })));\n };\n const renderAppToolbar = () => {\n if (appState.viewModeEnabled) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(mainMenuTunnel.Out, {}) })));\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(mainMenuTunnel.Out, {}), actionManager.renderAction(\"toggleEditMenu\"), actionManager.renderAction(\"undo\"), actionManager.renderAction(\"redo\"), actionManager.renderAction(appState.multiElement ? \"finalize\" : \"duplicateSelection\"), actionManager.renderAction(\"deleteSelectedElements\")] })));\n };\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [renderSidebars(), !appState.viewModeEnabled && renderToolbar(), !appState.openMenu && appState.showStats && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stats__WEBPACK_IMPORTED_MODULE_15__.Stats, { appState: appState, setAppState: setAppState, elements: elements, onClose: () => {\n actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_16__.actionToggleStats);\n }, renderCustomStats: renderCustomStats })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-bottom-bar\", style: {\n marginBottom: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\n marginLeft: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\n marginRight: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 0 }, { children: [appState.openMenu === \"shape\" &&\n !appState.viewModeEnabled &&\n (0,_element__WEBPACK_IMPORTED_MODULE_4__.showSelectedShapeActions)(appState, elements) ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"selectedShapeActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction }) }))) : null, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ className: \"App-toolbar\" }, { children: [renderAppToolbar(), appState.scrolledOutside &&\n !appState.openMenu &&\n appState.openSidebar !== \"library\" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_8__.calculateScrollCenter)(elements, appState, canvas)));\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"buttons.scrollBackToContent\") })))] }))] })) }))] }));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL01vYmlsZU1lbnUudHN4PzA4YzQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIERldmljZSwgRXhjYWxpZHJhd1Byb3BzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL2FjdGlvbnMvbWFuYWdlclwiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyB9IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgRml4ZWRTaWRlQ29udGFpbmVyIH0gZnJvbSBcIi4vRml4ZWRTaWRlQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBJc2xhbmQgfSBmcm9tIFwiLi9Jc2xhbmRcIjtcbmltcG9ydCB7IEhpbnRWaWV3ZXIgfSBmcm9tIFwiLi9IaW50Vmlld2VyXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVTY3JvbGxDZW50ZXIgfSBmcm9tIFwiLi4vc2NlbmVcIjtcbmltcG9ydCB7IFNlbGVjdGVkU2hhcGVBY3Rpb25zLCBTaGFwZXNTd2l0Y2hlciB9IGZyb20gXCIuL0FjdGlvbnNcIjtcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tIFwiLi9TZWN0aW9uXCI7XG5pbXBvcnQgeyBTQ1JPTExCQVJfV0lEVEgsIFNDUk9MTEJBUl9NQVJHSU4gfSBmcm9tIFwiLi4vc2NlbmUvc2Nyb2xsYmFyc1wiO1xuaW1wb3J0IHsgTG9ja0J1dHRvbiB9IGZyb20gXCIuL0xvY2tCdXR0b25cIjtcbmltcG9ydCB7IExpYnJhcnlCdXR0b24gfSBmcm9tIFwiLi9MaWJyYXJ5QnV0dG9uXCI7XG5pbXBvcnQgeyBQZW5Nb2RlQnV0dG9uIH0gZnJvbSBcIi4vUGVuTW9kZUJ1dHRvblwiO1xuaW1wb3J0IHsgU3RhdHMgfSBmcm9tIFwiLi9TdGF0c1wiO1xuaW1wb3J0IHsgYWN0aW9uVG9nZ2xlU3RhdHMgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgSGFuZEJ1dHRvbiB9IGZyb20gXCIuL0hhbmRCdXR0b25cIjtcbmltcG9ydCB7IGlzSGFuZFRvb2xBY3RpdmUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IHVzZVR1bm5lbHMgfSBmcm9tIFwiLi9jb250ZXh0L3R1bm5lbHNcIjtcblxudHlwZSBNb2JpbGVNZW51UHJvcHMgPSB7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgcmVuZGVySlNPTkV4cG9ydERpYWxvZzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICByZW5kZXJJbWFnZUV4cG9ydERpYWxvZzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBzZXRBcHBTdGF0ZTogUmVhY3QuQ29tcG9uZW50PGFueSwgQXBwU3RhdGU+W1wic2V0U3RhdGVcIl07XG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXTtcbiAgb25Mb2NrVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBvbkhhbmRUb29sVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBvblBlbk1vZGVUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsO1xuXG4gIG9uSW1hZ2VBY3Rpb246IChkYXRhOiB7IGluc2VydE9uQ2FudmFzRGlyZWN0bHk6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgcmVuZGVyVG9wUmlnaHRVST86IChcbiAgICBpc01vYmlsZTogYm9vbGVhbixcbiAgICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4gICkgPT4gSlNYLkVsZW1lbnQgfCBudWxsO1xuICByZW5kZXJDdXN0b21TdGF0cz86IEV4Y2FsaWRyYXdQcm9wc1tcInJlbmRlckN1c3RvbVN0YXRzXCJdO1xuICByZW5kZXJTaWRlYmFyczogKCkgPT4gSlNYLkVsZW1lbnQgfCBudWxsO1xuICBkZXZpY2U6IERldmljZTtcbn07XG5cbmV4cG9ydCBjb25zdCBNb2JpbGVNZW51ID0gKHtcbiAgYXBwU3RhdGUsXG4gIGVsZW1lbnRzLFxuICBhY3Rpb25NYW5hZ2VyLFxuICBzZXRBcHBTdGF0ZSxcbiAgb25Mb2NrVG9nZ2xlLFxuICBvbkhhbmRUb29sVG9nZ2xlLFxuICBvblBlbk1vZGVUb2dnbGUsXG4gIGNhbnZhcyxcbiAgb25JbWFnZUFjdGlvbixcbiAgcmVuZGVyVG9wUmlnaHRVSSxcbiAgcmVuZGVyQ3VzdG9tU3RhdHMsXG4gIHJlbmRlclNpZGViYXJzLFxuICBkZXZpY2UsXG59OiBNb2JpbGVNZW51UHJvcHMpID0+IHtcbiAgY29uc3QgeyB3ZWxjb21lU2NyZWVuQ2VudGVyVHVubmVsLCBtYWluTWVudVR1bm5lbCB9ID0gdXNlVHVubmVscygpO1xuICBjb25zdCByZW5kZXJUb29sYmFyID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Rml4ZWRTaWRlQ29udGFpbmVyIHNpZGU9XCJ0b3BcIiBjbGFzc05hbWU9XCJBcHAtdG9wLWJhclwiPlxuICAgICAgICA8d2VsY29tZVNjcmVlbkNlbnRlclR1bm5lbC5PdXQgLz5cbiAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cInNoYXBlc1wiPlxuICAgICAgICAgIHsoaGVhZGluZzogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0gYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxJc2xhbmQgcGFkZGluZz17MX0gY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXIgQXBwLXRvb2xiYXItLW1vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAge2hlYWRpbmd9XG4gICAgICAgICAgICAgICAgICA8U3RhY2suUm93IGdhcD17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxTaGFwZXNTd2l0Y2hlclxuICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBjYW52YXM9e2NhbnZhc31cbiAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUb29sPXthcHBTdGF0ZS5hY3RpdmVUb29sfVxuICAgICAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uPXsoeyBwb2ludGVyVHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogcG9pbnRlclR5cGUgIT09IFwibW91c2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAgICA8L0lzbGFuZD5cbiAgICAgICAgICAgICAgICB7cmVuZGVyVG9wUmlnaHRVSSAmJiByZW5kZXJUb3BSaWdodFVJKHRydWUsIGFwcFN0YXRlKX1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vYmlsZS1taXNjLXRvb2xzLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8TGlicmFyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8UGVuTW9kZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXthcHBTdGF0ZS5wZW5Nb2RlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25QZW5Nb2RlVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIucGVuTW9kZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgcGVuRGV0ZWN0ZWQ9e2FwcFN0YXRlLnBlbkRldGVjdGVkfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMb2NrQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25Mb2NrVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIubG9ja1wiKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8SGFuZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0hhbmRUb29sQWN0aXZlKGFwcFN0YXRlKX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IG9uSGFuZFRvb2xUb2dnbGUoKX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLmhhbmRcIil9XG4gICAgICAgICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgPEhpbnRWaWV3ZXJcbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgIGlzTW9iaWxlPXt0cnVlfVxuICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAvPlxuICAgICAgPC9GaXhlZFNpZGVDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJBcHBUb29sYmFyID0gKCkgPT4ge1xuICAgIGlmIChhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXItY29udGVudFwiPlxuICAgICAgICAgIDxtYWluTWVudVR1bm5lbC5PdXQgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyLWNvbnRlbnRcIj5cbiAgICAgICAgPG1haW5NZW51VHVubmVsLk91dCAvPlxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJ0b2dnbGVFZGl0TWVudVwiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidW5kb1wiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwicmVkb1wiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFxuICAgICAgICAgIGFwcFN0YXRlLm11bHRpRWxlbWVudCA/IFwiZmluYWxpemVcIiA6IFwiZHVwbGljYXRlU2VsZWN0aW9uXCIsXG4gICAgICAgICl9XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImRlbGV0ZVNlbGVjdGVkRWxlbWVudHNcIil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtyZW5kZXJTaWRlYmFycygpfVxuICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgcmVuZGVyVG9vbGJhcigpfVxuICAgICAgeyFhcHBTdGF0ZS5vcGVuTWVudSAmJiBhcHBTdGF0ZS5zaG93U3RhdHMgJiYgKFxuICAgICAgICA8U3RhdHNcbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBhY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uVG9nZ2xlU3RhdHMpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgcmVuZGVyQ3VzdG9tU3RhdHM9e3JlbmRlckN1c3RvbVN0YXRzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiQXBwLWJvdHRvbS1iYXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG1hcmdpbkJvdHRvbTogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgICAgbWFyZ2luTGVmdDogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgICAgbWFyZ2luUmlnaHQ6IFNDUk9MTEJBUl9XSURUSCArIFNDUk9MTEJBUl9NQVJHSU4gKiAyLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezB9PlxuICAgICAgICAgIHthcHBTdGF0ZS5vcGVuTWVudSA9PT0gXCJzaGFwZVwiICYmXG4gICAgICAgICAgIWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJlxuICAgICAgICAgIHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyhhcHBTdGF0ZSwgZWxlbWVudHMpID8gKFxuICAgICAgICAgICAgPFNlY3Rpb24gY2xhc3NOYW1lPVwiQXBwLW1vYmlsZS1tZW51XCIgaGVhZGluZz1cInNlbGVjdGVkU2hhcGVBY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxTZWxlY3RlZFNoYXBlQWN0aW9uc1xuICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cIkFwcC10b29sYmFyXCI+XG4gICAgICAgICAgICB7cmVuZGVyQXBwVG9vbGJhcigpfVxuICAgICAgICAgICAge2FwcFN0YXRlLnNjcm9sbGVkT3V0c2lkZSAmJlxuICAgICAgICAgICAgICAhYXBwU3RhdGUub3Blbk1lbnUgJiZcbiAgICAgICAgICAgICAgYXBwU3RhdGUub3BlblNpZGViYXIgIT09IFwibGlicmFyeVwiICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzY3JvbGwtYmFjay10by1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmNhbGN1bGF0ZVNjcm9sbENlbnRlcihlbGVtZW50cywgYXBwU3RhdGUsIGNhbnZhcyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dChcImJ1dHRvbnMuc2Nyb2xsQmFja1RvQ29udGVudFwiKX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgPC9Jc2xhbmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/MobileMenu.tsx\n");
2782
2782
 
2783
2783
  /***/ }),
2784
2784
 
@@ -2980,6 +2980,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2980
2980
 
2981
2981
  /***/ }),
2982
2982
 
2983
+ /***/ "../../components/context/tunnels.ts":
2984
+ /*!*******************************************!*\
2985
+ !*** ../../components/context/tunnels.ts ***!
2986
+ \*******************************************/
2987
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2988
+
2989
+ "use strict";
2990
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TunnelsContext\": () => (/* binding */ TunnelsContext),\n/* harmony export */ \"useInitializeTunnels\": () => (/* binding */ useInitializeTunnels),\n/* harmony export */ \"useTunnels\": () => (/* binding */ useTunnels)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _dwelle_tunnel_rat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @dwelle/tunnel-rat */ \"../../../node_modules/@dwelle/tunnel-rat/dist/index.js\");\n\n\nconst TunnelsContext = react__WEBPACK_IMPORTED_MODULE_0___default().createContext(null);\nconst useTunnels = () => react__WEBPACK_IMPORTED_MODULE_0___default().useContext(TunnelsContext);\nconst useInitializeTunnels = () => {\n return react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return {\n mainMenuTunnel: (0,_dwelle_tunnel_rat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(),\n welcomeScreenMenuHintTunnel: (0,_dwelle_tunnel_rat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(),\n welcomeScreenToolbarHintTunnel: (0,_dwelle_tunnel_rat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(),\n welcomeScreenHelpHintTunnel: (0,_dwelle_tunnel_rat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(),\n welcomeScreenCenterTunnel: (0,_dwelle_tunnel_rat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(),\n footerCenterTunnel: (0,_dwelle_tunnel_rat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(),\n jotaiScope: Symbol(),\n };\n }, []);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9jb250ZXh0L3R1bm5lbHMudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTBCO0FBQ2M7QUFjakMsTUFBTSxjQUFjLEdBQUcsMERBQW1CLENBQXNCLElBQUssQ0FBQyxDQUFDO0FBRXZFLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLHVEQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTFELE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO0lBQ3ZDLE9BQU8sb0RBQWEsQ0FBQyxHQUF3QixFQUFFO1FBQzdDLE9BQU87WUFDTCxjQUFjLEVBQUUsOERBQU0sRUFBRTtZQUN4QiwyQkFBMkIsRUFBRSw4REFBTSxFQUFFO1lBQ3JDLDhCQUE4QixFQUFFLDhEQUFNLEVBQUU7WUFDeEMsMkJBQTJCLEVBQUUsOERBQU0sRUFBRTtZQUNyQyx5QkFBeUIsRUFBRSw4REFBTSxFQUFFO1lBQ25DLGtCQUFrQixFQUFFLDhEQUFNLEVBQUU7WUFDNUIsVUFBVSxFQUFFLE1BQU0sRUFBRTtTQUNyQixDQUFDO0lBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvY29udGV4dC90dW5uZWxzLnRzPzc1ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR1bm5lbCBmcm9tIFwiQGR3ZWxsZS90dW5uZWwtcmF0XCI7XG5cbnR5cGUgVHVubmVsID0gUmV0dXJuVHlwZTx0eXBlb2YgdHVubmVsPjtcblxudHlwZSBUdW5uZWxzQ29udGV4dFZhbHVlID0ge1xuICBtYWluTWVudVR1bm5lbDogVHVubmVsO1xuICB3ZWxjb21lU2NyZWVuTWVudUhpbnRUdW5uZWw6IFR1bm5lbDtcbiAgd2VsY29tZVNjcmVlblRvb2xiYXJIaW50VHVubmVsOiBUdW5uZWw7XG4gIHdlbGNvbWVTY3JlZW5IZWxwSGludFR1bm5lbDogVHVubmVsO1xuICB3ZWxjb21lU2NyZWVuQ2VudGVyVHVubmVsOiBUdW5uZWw7XG4gIGZvb3RlckNlbnRlclR1bm5lbDogVHVubmVsO1xuICBqb3RhaVNjb3BlOiBzeW1ib2w7XG59O1xuXG5leHBvcnQgY29uc3QgVHVubmVsc0NvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFR1bm5lbHNDb250ZXh0VmFsdWU+KG51bGwhKTtcblxuZXhwb3J0IGNvbnN0IHVzZVR1bm5lbHMgPSAoKSA9PiBSZWFjdC51c2VDb250ZXh0KFR1bm5lbHNDb250ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHVzZUluaXRpYWxpemVUdW5uZWxzID0gKCkgPT4ge1xuICByZXR1cm4gUmVhY3QudXNlTWVtbygoKTogVHVubmVsc0NvbnRleHRWYWx1ZSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW5NZW51VHVubmVsOiB0dW5uZWwoKSxcbiAgICAgIHdlbGNvbWVTY3JlZW5NZW51SGludFR1bm5lbDogdHVubmVsKCksXG4gICAgICB3ZWxjb21lU2NyZWVuVG9vbGJhckhpbnRUdW5uZWw6IHR1bm5lbCgpLFxuICAgICAgd2VsY29tZVNjcmVlbkhlbHBIaW50VHVubmVsOiB0dW5uZWwoKSxcbiAgICAgIHdlbGNvbWVTY3JlZW5DZW50ZXJUdW5uZWw6IHR1bm5lbCgpLFxuICAgICAgZm9vdGVyQ2VudGVyVHVubmVsOiB0dW5uZWwoKSxcbiAgICAgIGpvdGFpU2NvcGU6IFN5bWJvbCgpLFxuICAgIH07XG4gIH0sIFtdKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/context/tunnels.ts\n");
2991
+
2992
+ /***/ }),
2993
+
2983
2994
  /***/ "../../components/dropdownMenu/DropdownMenu.tsx":
2984
2995
  /*!******************************************************!*\
2985
2996
  !*** ../../components/dropdownMenu/DropdownMenu.tsx ***!
@@ -3108,7 +3119,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3108
3119
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3109
3120
 
3110
3121
  "use strict";
3111
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../actions */ \"../../actions/index.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../App */ \"../../components/App.tsx\");\n/* harmony import */ var _HelpButton__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../HelpButton */ \"../../components/HelpButton.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _tunnels__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../tunnels */ \"../../components/tunnels.ts\");\n\n\n\n\n\n\n\n\n\nconst Footer = ({ appState, actionManager, showExitZenModeBtn, renderWelcomeScreen, }) => {\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useDevice)();\n const showFinalize = !appState.viewModeEnabled && appState.multiElement && device.isTouchScreen;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ role: \"contentinfo\", className: \"layer-ui__wrapper__footer App-menu App-menu_bottom\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-left zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Col, Object.assign({ gap: 2 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Section__WEBPACK_IMPORTED_MODULE_6__.Section, Object.assign({ heading: \"canvasActions\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_3__.ZoomActions, { renderAction: actionManager.renderAction, zoom: appState.zoom }), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_3__.UndoRedoActions, { renderAction: actionManager.renderAction, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\n }) })), showFinalize && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_3__.FinalizeAction, { renderAction: actionManager.renderAction, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }))] })) })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_8__.footerCenterTunnel.Out, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-right zen-mode-transition\", {\n \"transition-right disable-pointerEvents\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { position: \"relative\" } }, { children: [renderWelcomeScreen && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_8__.welcomeScreenHelpHintTunnel.Out, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HelpButton__WEBPACK_IMPORTED_MODULE_5__.HelpButton, { onClick: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_2__.actionShortcuts) })] })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_3__.ExitZenModeAction, { actionManager: actionManager, showExitZenModeBtn: showExitZenModeBtn })] })));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Footer);\nFooter.displayName = \"Footer\";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9mb290ZXIvRm9vdGVyLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUF3QjtBQUN3QjtBQVE1QjtBQUNlO0FBQ1E7QUFDTjtBQUNSO0FBQ2dEO0FBRTdFLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFDZCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixtQkFBbUIsR0FNcEIsRUFBRSxFQUFFO0lBQ0gsTUFBTSxNQUFNLEdBQUcsK0NBQVMsRUFBRSxDQUFDO0lBQzNCLE1BQU0sWUFBWSxHQUNoQixDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUksUUFBUSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDO0lBRTdFLE9BQU8sQ0FDTCxrRkFDRSxJQUFJLEVBQUMsYUFBYSxFQUNsQixTQUFTLEVBQUMsb0RBQW9ELGlCQUU5RCw4RUFDRSxTQUFTLEVBQUUsZ0RBQUksQ0FBQyxvREFBb0QsRUFBRTtvQkFDcEUsaURBQWlELEVBQy9DLFFBQVEsQ0FBQyxjQUFjO2lCQUMxQixDQUFDLGdCQUVGLHVEQUFDLGtEQUFTLGtCQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUNmLHdEQUFDLDZDQUFPLGtCQUFDLE9BQU8sRUFBQyxlQUFlLGlCQUM5Qix1REFBQyxpREFBVyxJQUNWLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWSxFQUN4QyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksR0FDbkIsRUFFRCxDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUksQ0FDNUIsdURBQUMscURBQWUsSUFDZCxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFDeEMsU0FBUyxFQUFFLGdEQUFJLENBQUMscUJBQXFCLEVBQUU7b0NBQ3JDLG1EQUFtRCxFQUNqRCxRQUFRLENBQUMsY0FBYztpQ0FDMUIsQ0FBQyxHQUNGLENBQ0gsRUFDQSxZQUFZLElBQUksQ0FDZix1REFBQyxvREFBYyxJQUNiLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWSxFQUN4QyxTQUFTLEVBQUUsZ0RBQUksQ0FBQyxxQkFBcUIsRUFBRTtvQ0FDckMsaURBQWlELEVBQy9DLFFBQVEsQ0FBQyxjQUFjO2lDQUMxQixDQUFDLEdBQ0YsQ0FDSCxLQUNPLElBQ0EsSUFDUixFQUNOLHVEQUFDLDREQUFzQixLQUFHLEVBQzFCLDhFQUNFLFNBQVMsRUFBRSxnREFBSSxDQUFDLHFEQUFxRCxFQUFFO29CQUNyRSx3Q0FBd0MsRUFBRSxRQUFRLENBQUMsY0FBYztpQkFDbEUsQ0FBQyxnQkFFRiwrRUFBSyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUNqQyxtQkFBbUIsSUFBSSx1REFBQyxxRUFBK0IsS0FBRyxFQUMzRCx1REFBQyxtREFBVSxJQUNULE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHFEQUFlLENBQUMsR0FDM0QsS0FDRSxJQUNGLEVBQ04sdURBQUMsdURBQWlCLElBQ2hCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLGtCQUFrQixFQUFFLGtCQUFrQixHQUN0QyxLQUNLLENBQ1YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGlFQUFlLE1BQU0sRUFBQztBQUN0QixNQUFNLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL2Zvb3Rlci9Gb290ZXIudHN4PzVhNDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IGFjdGlvblNob3J0Y3V0cyB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5pbXBvcnQgeyBBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2FjdGlvbnMvbWFuYWdlclwiO1xuaW1wb3J0IHsgQXBwU3RhdGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIEV4aXRaZW5Nb2RlQWN0aW9uLFxuICBGaW5hbGl6ZUFjdGlvbixcbiAgVW5kb1JlZG9BY3Rpb25zLFxuICBab29tQWN0aW9ucyxcbn0gZnJvbSBcIi4uL0FjdGlvbnNcIjtcbmltcG9ydCB7IHVzZURldmljZSB9IGZyb20gXCIuLi9BcHBcIjtcbmltcG9ydCB7IEhlbHBCdXR0b24gfSBmcm9tIFwiLi4vSGVscEJ1dHRvblwiO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gXCIuLi9TZWN0aW9uXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4uL1N0YWNrXCI7XG5pbXBvcnQgeyBmb290ZXJDZW50ZXJUdW5uZWwsIHdlbGNvbWVTY3JlZW5IZWxwSGludFR1bm5lbCB9IGZyb20gXCIuLi90dW5uZWxzXCI7XG5cbmNvbnN0IEZvb3RlciA9ICh7XG4gIGFwcFN0YXRlLFxuICBhY3Rpb25NYW5hZ2VyLFxuICBzaG93RXhpdFplbk1vZGVCdG4sXG4gIHJlbmRlcldlbGNvbWVTY3JlZW4sXG59OiB7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgc2hvd0V4aXRaZW5Nb2RlQnRuOiBib29sZWFuO1xuICByZW5kZXJXZWxjb21lU2NyZWVuOiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcbiAgY29uc3Qgc2hvd0ZpbmFsaXplID1cbiAgICAhYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmIGFwcFN0YXRlLm11bHRpRWxlbWVudCAmJiBkZXZpY2UuaXNUb3VjaFNjcmVlbjtcblxuICByZXR1cm4gKFxuICAgIDxmb290ZXJcbiAgICAgIHJvbGU9XCJjb250ZW50aW5mb1wiXG4gICAgICBjbGFzc05hbWU9XCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyIEFwcC1tZW51IEFwcC1tZW51X2JvdHRvbVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQgemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQtLXRyYW5zaXRpb24tbGVmdFwiOlxuICAgICAgICAgICAgYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICA8U3RhY2suQ29sIGdhcD17Mn0+XG4gICAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cImNhbnZhc0FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxab29tQWN0aW9uc1xuICAgICAgICAgICAgICByZW5kZXJBY3Rpb249e2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9ufVxuICAgICAgICAgICAgICB6b29tPXthcHBTdGF0ZS56b29tfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8VW5kb1JlZG9BY3Rpb25zXG4gICAgICAgICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJ6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWJvdHRvbVwiOlxuICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7c2hvd0ZpbmFsaXplICYmIChcbiAgICAgICAgICAgICAgPEZpbmFsaXplQWN0aW9uXG4gICAgICAgICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJ6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWxlZnRcIjpcbiAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmb290ZXJDZW50ZXJUdW5uZWwuT3V0IC8+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItcmlnaHQgemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgXCJ0cmFuc2l0aW9uLXJpZ2h0IGRpc2FibGUtcG9pbnRlckV2ZW50c1wiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgfSl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgcG9zaXRpb246IFwicmVsYXRpdmVcIiB9fT5cbiAgICAgICAgICB7cmVuZGVyV2VsY29tZVNjcmVlbiAmJiA8d2VsY29tZVNjcmVlbkhlbHBIaW50VHVubmVsLk91dCAvPn1cbiAgICAgICAgICA8SGVscEJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvblNob3J0Y3V0cyl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxFeGl0WmVuTW9kZUFjdGlvblxuICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICBzaG93RXhpdFplbk1vZGVCdG49e3Nob3dFeGl0WmVuTW9kZUJ0bn1cbiAgICAgIC8+XG4gICAgPC9mb290ZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb290ZXI7XG5Gb290ZXIuZGlzcGxheU5hbWUgPSBcIkZvb3RlclwiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/footer/Footer.tsx\n");
3122
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../actions */ \"../../actions/index.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../App */ \"../../components/App.tsx\");\n/* harmony import */ var _context_tunnels__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context/tunnels */ \"../../components/context/tunnels.ts\");\n/* harmony import */ var _HelpButton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../HelpButton */ \"../../components/HelpButton.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Stack */ \"../../components/Stack.tsx\");\n\n\n\n\n\n\n\n\n\nconst Footer = ({ appState, actionManager, showExitZenModeBtn, renderWelcomeScreen, }) => {\n const { footerCenterTunnel, welcomeScreenHelpHintTunnel } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_5__.useTunnels)();\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useDevice)();\n const showFinalize = !appState.viewModeEnabled && appState.multiElement && device.isTouchScreen;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ role: \"contentinfo\", className: \"layer-ui__wrapper__footer App-menu App-menu_bottom\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-left zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_8__[\"default\"].Col, Object.assign({ gap: 2 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Section__WEBPACK_IMPORTED_MODULE_7__.Section, Object.assign({ heading: \"canvasActions\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_3__.ZoomActions, { renderAction: actionManager.renderAction, zoom: appState.zoom }), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_3__.UndoRedoActions, { renderAction: actionManager.renderAction, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\n }) })), showFinalize && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_3__.FinalizeAction, { renderAction: actionManager.renderAction, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }))] })) })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(footerCenterTunnel.Out, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-right zen-mode-transition\", {\n \"transition-right disable-pointerEvents\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { position: \"relative\" } }, { children: [renderWelcomeScreen && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(welcomeScreenHelpHintTunnel.Out, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HelpButton__WEBPACK_IMPORTED_MODULE_6__.HelpButton, { onClick: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_2__.actionShortcuts) })] })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_3__.ExitZenModeAction, { actionManager: actionManager, showExitZenModeBtn: showExitZenModeBtn })] })));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Footer);\nFooter.displayName = \"Footer\";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9mb290ZXIvRm9vdGVyLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUF3QjtBQUN3QjtBQVE1QjtBQUNlO0FBQ2E7QUFDTDtBQUNOO0FBQ1I7QUFFN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUNkLFFBQVEsRUFDUixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLG1CQUFtQixHQU1wQixFQUFFLEVBQUU7SUFDSCxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsR0FBRyw0REFBVSxFQUFFLENBQUM7SUFFekUsTUFBTSxNQUFNLEdBQUcsK0NBQVMsRUFBRSxDQUFDO0lBQzNCLE1BQU0sWUFBWSxHQUNoQixDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUksUUFBUSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDO0lBRTdFLE9BQU8sQ0FDTCxrRkFDRSxJQUFJLEVBQUMsYUFBYSxFQUNsQixTQUFTLEVBQUMsb0RBQW9ELGlCQUU5RCw4RUFDRSxTQUFTLEVBQUUsZ0RBQUksQ0FBQyxvREFBb0QsRUFBRTtvQkFDcEUsaURBQWlELEVBQy9DLFFBQVEsQ0FBQyxjQUFjO2lCQUMxQixDQUFDLGdCQUVGLHVEQUFDLGtEQUFTLGtCQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUNmLHdEQUFDLDZDQUFPLGtCQUFDLE9BQU8sRUFBQyxlQUFlLGlCQUM5Qix1REFBQyxpREFBVyxJQUNWLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWSxFQUN4QyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksR0FDbkIsRUFFRCxDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUksQ0FDNUIsdURBQUMscURBQWUsSUFDZCxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFDeEMsU0FBUyxFQUFFLGdEQUFJLENBQUMscUJBQXFCLEVBQUU7b0NBQ3JDLG1EQUFtRCxFQUNqRCxRQUFRLENBQUMsY0FBYztpQ0FDMUIsQ0FBQyxHQUNGLENBQ0gsRUFDQSxZQUFZLElBQUksQ0FDZix1REFBQyxvREFBYyxJQUNiLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWSxFQUN4QyxTQUFTLEVBQUUsZ0RBQUksQ0FBQyxxQkFBcUIsRUFBRTtvQ0FDckMsaURBQWlELEVBQy9DLFFBQVEsQ0FBQyxjQUFjO2lDQUMxQixDQUFDLEdBQ0YsQ0FDSCxLQUNPLElBQ0EsSUFDUixFQUNOLHVEQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBRyxFQUMxQiw4RUFDRSxTQUFTLEVBQUUsZ0RBQUksQ0FBQyxxREFBcUQsRUFBRTtvQkFDckUsd0NBQXdDLEVBQUUsUUFBUSxDQUFDLGNBQWM7aUJBQ2xFLENBQUMsZ0JBRUYsK0VBQUssS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFDakMsbUJBQW1CLElBQUksdURBQUMsMkJBQTJCLENBQUMsR0FBRyxLQUFHLEVBQzNELHVEQUFDLG1EQUFVLElBQ1QsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMscURBQWUsQ0FBQyxHQUMzRCxLQUNFLElBQ0YsRUFDTix1REFBQyx1REFBaUIsSUFDaEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsa0JBQWtCLEVBQUUsa0JBQWtCLEdBQ3RDLEtBQ0ssQ0FDVixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsaUVBQWUsTUFBTSxFQUFDO0FBQ3RCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvZm9vdGVyL0Zvb3Rlci50c3g/NWE0OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IHsgYWN0aW9uU2hvcnRjdXRzIH0gZnJvbSBcIi4uLy4uL2FjdGlvbnNcIjtcbmltcG9ydCB7IEFjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vYWN0aW9ucy9tYW5hZ2VyXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgRXhpdFplbk1vZGVBY3Rpb24sXG4gIEZpbmFsaXplQWN0aW9uLFxuICBVbmRvUmVkb0FjdGlvbnMsXG4gIFpvb21BY3Rpb25zLFxufSBmcm9tIFwiLi4vQWN0aW9uc1wiO1xuaW1wb3J0IHsgdXNlRGV2aWNlIH0gZnJvbSBcIi4uL0FwcFwiO1xuaW1wb3J0IHsgdXNlVHVubmVscyB9IGZyb20gXCIuLi9jb250ZXh0L3R1bm5lbHNcIjtcbmltcG9ydCB7IEhlbHBCdXR0b24gfSBmcm9tIFwiLi4vSGVscEJ1dHRvblwiO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gXCIuLi9TZWN0aW9uXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4uL1N0YWNrXCI7XG5cbmNvbnN0IEZvb3RlciA9ICh7XG4gIGFwcFN0YXRlLFxuICBhY3Rpb25NYW5hZ2VyLFxuICBzaG93RXhpdFplbk1vZGVCdG4sXG4gIHJlbmRlcldlbGNvbWVTY3JlZW4sXG59OiB7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgc2hvd0V4aXRaZW5Nb2RlQnRuOiBib29sZWFuO1xuICByZW5kZXJXZWxjb21lU2NyZWVuOiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCB7IGZvb3RlckNlbnRlclR1bm5lbCwgd2VsY29tZVNjcmVlbkhlbHBIaW50VHVubmVsIH0gPSB1c2VUdW5uZWxzKCk7XG5cbiAgY29uc3QgZGV2aWNlID0gdXNlRGV2aWNlKCk7XG4gIGNvbnN0IHNob3dGaW5hbGl6ZSA9XG4gICAgIWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJiBhcHBTdGF0ZS5tdWx0aUVsZW1lbnQgJiYgZGV2aWNlLmlzVG91Y2hTY3JlZW47XG5cbiAgcmV0dXJuIChcbiAgICA8Zm9vdGVyXG4gICAgICByb2xlPVwiY29udGVudGluZm9cIlxuICAgICAgY2xhc3NOYW1lPVwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3RlciBBcHAtbWVudSBBcHAtbWVudV9ib3R0b21cIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0IHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWxlZnRcIjpcbiAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICB9KX1cbiAgICAgID5cbiAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezJ9PlxuICAgICAgICAgIDxTZWN0aW9uIGhlYWRpbmc9XCJjYW52YXNBY3Rpb25zXCI+XG4gICAgICAgICAgICA8Wm9vbUFjdGlvbnNcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICAgICAgem9vbT17YXBwU3RhdGUuem9vbX1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIHshYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmIChcbiAgICAgICAgICAgICAgPFVuZG9SZWRvQWN0aW9uc1xuICAgICAgICAgICAgICAgIHJlbmRlckFjdGlvbj17YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb259XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1ib3R0b21cIjpcbiAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3Nob3dGaW5hbGl6ZSAmJiAoXG4gICAgICAgICAgICAgIDxGaW5hbGl6ZUFjdGlvblxuICAgICAgICAgICAgICAgIHJlbmRlckFjdGlvbj17YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb259XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1sZWZ0XCI6XG4gICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgPC9kaXY+XG4gICAgICA8Zm9vdGVyQ2VudGVyVHVubmVsLk91dCAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLXJpZ2h0IHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgIFwidHJhbnNpdGlvbi1yaWdodCBkaXNhYmxlLXBvaW50ZXJFdmVudHNcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIgfX0+XG4gICAgICAgICAge3JlbmRlcldlbGNvbWVTY3JlZW4gJiYgPHdlbGNvbWVTY3JlZW5IZWxwSGludFR1bm5lbC5PdXQgLz59XG4gICAgICAgICAgPEhlbHBCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGFjdGlvbk1hbmFnZXIuZXhlY3V0ZUFjdGlvbihhY3Rpb25TaG9ydGN1dHMpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8RXhpdFplbk1vZGVBY3Rpb25cbiAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgc2hvd0V4aXRaZW5Nb2RlQnRuPXtzaG93RXhpdFplbk1vZGVCdG59XG4gICAgICAvPlxuICAgIDwvZm9vdGVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9vdGVyO1xuRm9vdGVyLmRpc3BsYXlOYW1lID0gXCJGb290ZXJcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/footer/Footer.tsx\n");
3112
3123
 
3113
3124
  /***/ }),
3114
3125
 
@@ -3119,7 +3130,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3119
3130
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3120
3131
 
3121
3132
  "use strict";
3122
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../App */ \"../../components/App.tsx\");\n/* harmony import */ var _tunnels__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../tunnels */ \"../../components/tunnels.ts\");\n/* harmony import */ var _FooterCenter_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FooterCenter.scss */ \"../../components/footer/FooterCenter.scss\");\n\n\n\n\n\nconst FooterCenter = ({ children }) => {\n const appState = (0,_App__WEBPACK_IMPORTED_MODULE_2__.useExcalidrawAppState)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_3__.footerCenterTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"footer-center zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\n }) }, { children: children })) }));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FooterCenter);\nFooterCenter.displayName = \"FooterCenter\";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9mb290ZXIvRm9vdGVyQ2VudGVyLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXdCO0FBQ3VCO0FBQ0M7QUFDbkI7QUFFN0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBa0MsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLDJEQUFxQixFQUFFLENBQUM7SUFDekMsT0FBTyxDQUNMLHVEQUFDLDJEQUFxQixjQUNwQiw4RUFDRSxTQUFTLEVBQUUsZ0RBQUksQ0FBQyxtQ0FBbUMsRUFBRTtnQkFDbkQsbURBQW1ELEVBQ2pELFFBQVEsQ0FBQyxjQUFjO2FBQzFCLENBQUMsZ0JBRUQsUUFBUSxJQUNMLEdBQ2dCLENBQ3pCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixpRUFBZSxZQUFZLEVBQUM7QUFDNUIsWUFBWSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9mb290ZXIvRm9vdGVyQ2VudGVyLnRzeD9mYTIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbHN4IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgeyB1c2VFeGNhbGlkcmF3QXBwU3RhdGUgfSBmcm9tIFwiLi4vQXBwXCI7XG5pbXBvcnQgeyBmb290ZXJDZW50ZXJUdW5uZWwgfSBmcm9tIFwiLi4vdHVubmVsc1wiO1xuaW1wb3J0IFwiLi9Gb290ZXJDZW50ZXIuc2Nzc1wiO1xuXG5jb25zdCBGb290ZXJDZW50ZXIgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIH0pID0+IHtcbiAgY29uc3QgYXBwU3RhdGUgPSB1c2VFeGNhbGlkcmF3QXBwU3RhdGUoKTtcbiAgcmV0dXJuIChcbiAgICA8Zm9vdGVyQ2VudGVyVHVubmVsLkluPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJmb290ZXItY2VudGVyIHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWJvdHRvbVwiOlxuICAgICAgICAgICAgYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvb3RlckNlbnRlclR1bm5lbC5Jbj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvb3RlckNlbnRlcjtcbkZvb3RlckNlbnRlci5kaXNwbGF5TmFtZSA9IFwiRm9vdGVyQ2VudGVyXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/footer/FooterCenter.tsx\n");
3133
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../App */ \"../../components/App.tsx\");\n/* harmony import */ var _context_tunnels__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../context/tunnels */ \"../../components/context/tunnels.ts\");\n/* harmony import */ var _FooterCenter_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FooterCenter.scss */ \"../../components/footer/FooterCenter.scss\");\n\n\n\n\n\nconst FooterCenter = ({ children }) => {\n const { footerCenterTunnel } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_3__.useTunnels)();\n const appState = (0,_App__WEBPACK_IMPORTED_MODULE_2__.useExcalidrawAppState)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(footerCenterTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"footer-center zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\n }) }, { children: children })) }));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FooterCenter);\nFooterCenter.displayName = \"FooterCenter\";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9mb290ZXIvRm9vdGVyQ2VudGVyLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXdCO0FBQ3VCO0FBQ0M7QUFDbkI7QUFFN0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBa0MsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLDREQUFVLEVBQUUsQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRywyREFBcUIsRUFBRSxDQUFDO0lBQ3pDLE9BQU8sQ0FDTCx1REFBQyxrQkFBa0IsQ0FBQyxFQUFFLGNBQ3BCLDhFQUNFLFNBQVMsRUFBRSxnREFBSSxDQUFDLG1DQUFtQyxFQUFFO2dCQUNuRCxtREFBbUQsRUFDakQsUUFBUSxDQUFDLGNBQWM7YUFDMUIsQ0FBQyxnQkFFRCxRQUFRLElBQ0wsR0FDZ0IsQ0FDekIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGlFQUFlLFlBQVksRUFBQztBQUM1QixZQUFZLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL2Zvb3Rlci9Gb290ZXJDZW50ZXIudHN4P2ZhMjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSB9IGZyb20gXCIuLi9BcHBcIjtcbmltcG9ydCB7IHVzZVR1bm5lbHMgfSBmcm9tIFwiLi4vY29udGV4dC90dW5uZWxzXCI7XG5pbXBvcnQgXCIuL0Zvb3RlckNlbnRlci5zY3NzXCI7XG5cbmNvbnN0IEZvb3RlckNlbnRlciA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICBjb25zdCB7IGZvb3RlckNlbnRlclR1bm5lbCB9ID0gdXNlVHVubmVscygpO1xuICBjb25zdCBhcHBTdGF0ZSA9IHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSgpO1xuICByZXR1cm4gKFxuICAgIDxmb290ZXJDZW50ZXJUdW5uZWwuSW4+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImZvb3Rlci1jZW50ZXIgemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQtLXRyYW5zaXRpb24tYm90dG9tXCI6XG4gICAgICAgICAgICBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgfSl9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9vdGVyQ2VudGVyVHVubmVsLkluPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9vdGVyQ2VudGVyO1xuRm9vdGVyQ2VudGVyLmRpc3BsYXlOYW1lID0gXCJGb290ZXJDZW50ZXJcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/footer/FooterCenter.tsx\n");
3123
3134
 
3124
3135
  /***/ }),
3125
3136
 
@@ -3130,7 +3141,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3130
3141
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3131
3142
 
3132
3143
  "use strict";
3133
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"withInternalFallback\": () => (/* binding */ withInternalFallback)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jotai */ \"../../../node_modules/jotai/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nconst withInternalFallback = (componentName, Component) => {\n const counterAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_2__.atom)(0);\n // flag set on initial render to tell the fallback component to skip the\n // render until mount counter are initialized. This is because the counter\n // is initialized in an effect, and thus we could end rendering both\n // components at the same time until counter is initialized.\n let preferHost = false;\n const WrapperComponent = (props) => {\n const [counter, setCounter] = (0,jotai__WEBPACK_IMPORTED_MODULE_2__.useAtom)(counterAtom);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(() => {\n setCounter((counter) => counter + 1);\n return () => {\n setCounter((counter) => counter - 1);\n };\n }, [setCounter]);\n if (!props.__fallback) {\n preferHost = true;\n }\n // ensure we don't render fallback and host components at the same time\n if (\n // either before the counters are initialized\n (!counter && props.__fallback && preferHost) ||\n // or after the counters are initialized, and both are rendered\n // (this is the default when host renders as well)\n (counter > 1 && props.__fallback)) {\n return null;\n }\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Component, Object.assign({}, props));\n };\n WrapperComponent.displayName = componentName;\n return WrapperComponent;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9ob2Mvd2l0aEludGVybmFsRmFsbGJhY2sudHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFzQztBQUNTO0FBRXhDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsYUFBcUIsRUFDckIsU0FBc0IsRUFDdEIsRUFBRTtJQUNGLE1BQU0sV0FBVyxHQUFHLDJDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSxvRUFBb0U7SUFDcEUsNERBQTREO0lBQzVELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUV2QixNQUFNLGdCQUFnQixHQUlsQixDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ1osTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyw4Q0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5ELHNEQUFlLENBQUMsR0FBRyxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sR0FBRyxFQUFFO2dCQUNWLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQztRQUNKLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDckIsVUFBVSxHQUFHLElBQUksQ0FBQztTQUNuQjtRQUVELHVFQUF1RTtRQUN2RTtRQUNFLDZDQUE2QztRQUM3QyxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDO1lBQzVDLCtEQUErRDtZQUMvRCxrREFBa0Q7WUFDbEQsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFDakM7WUFDQSxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyx1REFBQyxTQUFTLG9CQUFLLEtBQUssRUFBSSxDQUFDO0lBQ2xDLENBQUMsQ0FBQztJQUVGLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFFN0MsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9ob2Mvd2l0aEludGVybmFsRmFsbGJhY2sudHN4P2M3N2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXRvbSwgdXNlQXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgY29uc3Qgd2l0aEludGVybmFsRmFsbGJhY2sgPSA8UCw+KFxuICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gIENvbXBvbmVudDogUmVhY3QuRkM8UD4sXG4pID0+IHtcbiAgY29uc3QgY291bnRlckF0b20gPSBhdG9tKDApO1xuICAvLyBmbGFnIHNldCBvbiBpbml0aWFsIHJlbmRlciB0byB0ZWxsIHRoZSBmYWxsYmFjayBjb21wb25lbnQgdG8gc2tpcCB0aGVcbiAgLy8gcmVuZGVyIHVudGlsIG1vdW50IGNvdW50ZXIgYXJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvdW50ZXJcbiAgLy8gaXMgaW5pdGlhbGl6ZWQgaW4gYW4gZWZmZWN0LCBhbmQgdGh1cyB3ZSBjb3VsZCBlbmQgcmVuZGVyaW5nIGJvdGhcbiAgLy8gY29tcG9uZW50cyBhdCB0aGUgc2FtZSB0aW1lIHVudGlsIGNvdW50ZXIgaXMgaW5pdGlhbGl6ZWQuXG4gIGxldCBwcmVmZXJIb3N0ID0gZmFsc2U7XG5cbiAgY29uc3QgV3JhcHBlckNvbXBvbmVudDogUmVhY3QuRkM8XG4gICAgUCAmIHtcbiAgICAgIF9fZmFsbGJhY2s/OiBib29sZWFuO1xuICAgIH1cbiAgPiA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IFtjb3VudGVyLCBzZXRDb3VudGVyXSA9IHVzZUF0b20oY291bnRlckF0b20pO1xuXG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgIHNldENvdW50ZXIoKGNvdW50ZXIpID0+IGNvdW50ZXIgKyAxKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHNldENvdW50ZXIoKGNvdW50ZXIpID0+IGNvdW50ZXIgLSAxKTtcbiAgICAgIH07XG4gICAgfSwgW3NldENvdW50ZXJdKTtcblxuICAgIGlmICghcHJvcHMuX19mYWxsYmFjaykge1xuICAgICAgcHJlZmVySG9zdCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHdlIGRvbid0IHJlbmRlciBmYWxsYmFjayBhbmQgaG9zdCBjb21wb25lbnRzIGF0IHRoZSBzYW1lIHRpbWVcbiAgICBpZiAoXG4gICAgICAvLyBlaXRoZXIgYmVmb3JlIHRoZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWRcbiAgICAgICghY291bnRlciAmJiBwcm9wcy5fX2ZhbGxiYWNrICYmIHByZWZlckhvc3QpIHx8XG4gICAgICAvLyBvciBhZnRlciB0aGUgY291bnRlcnMgYXJlIGluaXRpYWxpemVkLCBhbmQgYm90aCBhcmUgcmVuZGVyZWRcbiAgICAgIC8vICh0aGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gaG9zdCByZW5kZXJzIGFzIHdlbGwpXG4gICAgICAoY291bnRlciA+IDEgJiYgcHJvcHMuX19mYWxsYmFjaylcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz47XG4gIH07XG5cbiAgV3JhcHBlckNvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGNvbXBvbmVudE5hbWU7XG5cbiAgcmV0dXJuIFdyYXBwZXJDb21wb25lbnQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/hoc/withInternalFallback.tsx\n");
3144
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"withInternalFallback\": () => (/* binding */ withInternalFallback)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jotai */ \"../../../node_modules/jotai/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _context_tunnels__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../context/tunnels */ \"../../components/context/tunnels.ts\");\n\n\n\n\nconst withInternalFallback = (componentName, Component) => {\n const counterAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_3__.atom)(0);\n // flag set on initial render to tell the fallback component to skip the\n // render until mount counter are initialized. This is because the counter\n // is initialized in an effect, and thus we could end rendering both\n // components at the same time until counter is initialized.\n let preferHost = false;\n const WrapperComponent = (props) => {\n const { jotaiScope } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_2__.useTunnels)();\n const [counter, setCounter] = (0,jotai__WEBPACK_IMPORTED_MODULE_3__.useAtom)(counterAtom, jotaiScope);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(() => {\n setCounter((counter) => counter + 1);\n return () => {\n setCounter((counter) => counter - 1);\n };\n }, [setCounter]);\n if (!props.__fallback) {\n preferHost = true;\n }\n // ensure we don't render fallback and host components at the same time\n if (\n // either before the counters are initialized\n (!counter && props.__fallback && preferHost) ||\n // or after the counters are initialized, and both are rendered\n // (this is the default when host renders as well)\n (counter > 1 && props.__fallback)) {\n return null;\n }\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Component, Object.assign({}, props));\n };\n WrapperComponent.displayName = componentName;\n return WrapperComponent;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9ob2Mvd2l0aEludGVybmFsRmFsbGJhY2sudHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBc0M7QUFDUztBQUNDO0FBRXpDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsYUFBcUIsRUFDckIsU0FBc0IsRUFDdEIsRUFBRTtJQUNGLE1BQU0sV0FBVyxHQUFHLDJDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSxvRUFBb0U7SUFDcEUsNERBQTREO0lBQzVELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUV2QixNQUFNLGdCQUFnQixHQUlsQixDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ1osTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLDREQUFVLEVBQUUsQ0FBQztRQUNwQyxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLDhDQUFPLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRS9ELHNEQUFlLENBQUMsR0FBRyxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sR0FBRyxFQUFFO2dCQUNWLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQztRQUNKLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDckIsVUFBVSxHQUFHLElBQUksQ0FBQztTQUNuQjtRQUVELHVFQUF1RTtRQUN2RTtRQUNFLDZDQUE2QztRQUM3QyxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDO1lBQzVDLCtEQUErRDtZQUMvRCxrREFBa0Q7WUFDbEQsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFDakM7WUFDQSxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyx1REFBQyxTQUFTLG9CQUFLLEtBQUssRUFBSSxDQUFDO0lBQ2xDLENBQUMsQ0FBQztJQUVGLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFFN0MsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9ob2Mvd2l0aEludGVybmFsRmFsbGJhY2sudHN4P2M3N2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXRvbSwgdXNlQXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlVHVubmVscyB9IGZyb20gXCIuLi9jb250ZXh0L3R1bm5lbHNcIjtcblxuZXhwb3J0IGNvbnN0IHdpdGhJbnRlcm5hbEZhbGxiYWNrID0gPFAsPihcbiAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICBDb21wb25lbnQ6IFJlYWN0LkZDPFA+LFxuKSA9PiB7XG4gIGNvbnN0IGNvdW50ZXJBdG9tID0gYXRvbSgwKTtcbiAgLy8gZmxhZyBzZXQgb24gaW5pdGlhbCByZW5kZXIgdG8gdGVsbCB0aGUgZmFsbGJhY2sgY29tcG9uZW50IHRvIHNraXAgdGhlXG4gIC8vIHJlbmRlciB1bnRpbCBtb3VudCBjb3VudGVyIGFyZSBpbml0aWFsaXplZC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBjb3VudGVyXG4gIC8vIGlzIGluaXRpYWxpemVkIGluIGFuIGVmZmVjdCwgYW5kIHRodXMgd2UgY291bGQgZW5kIHJlbmRlcmluZyBib3RoXG4gIC8vIGNvbXBvbmVudHMgYXQgdGhlIHNhbWUgdGltZSB1bnRpbCBjb3VudGVyIGlzIGluaXRpYWxpemVkLlxuICBsZXQgcHJlZmVySG9zdCA9IGZhbHNlO1xuXG4gIGNvbnN0IFdyYXBwZXJDb21wb25lbnQ6IFJlYWN0LkZDPFxuICAgIFAgJiB7XG4gICAgICBfX2ZhbGxiYWNrPzogYm9vbGVhbjtcbiAgICB9XG4gID4gPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IGpvdGFpU2NvcGUgfSA9IHVzZVR1bm5lbHMoKTtcbiAgICBjb25zdCBbY291bnRlciwgc2V0Q291bnRlcl0gPSB1c2VBdG9tKGNvdW50ZXJBdG9tLCBqb3RhaVNjb3BlKTtcblxuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRDb3VudGVyKChjb3VudGVyKSA9PiBjb3VudGVyICsgMSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzZXRDb3VudGVyKChjb3VudGVyKSA9PiBjb3VudGVyIC0gMSk7XG4gICAgICB9O1xuICAgIH0sIFtzZXRDb3VudGVyXSk7XG5cbiAgICBpZiAoIXByb3BzLl9fZmFsbGJhY2spIHtcbiAgICAgIHByZWZlckhvc3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGVuc3VyZSB3ZSBkb24ndCByZW5kZXIgZmFsbGJhY2sgYW5kIGhvc3QgY29tcG9uZW50cyBhdCB0aGUgc2FtZSB0aW1lXG4gICAgaWYgKFxuICAgICAgLy8gZWl0aGVyIGJlZm9yZSB0aGUgY291bnRlcnMgYXJlIGluaXRpYWxpemVkXG4gICAgICAoIWNvdW50ZXIgJiYgcHJvcHMuX19mYWxsYmFjayAmJiBwcmVmZXJIb3N0KSB8fFxuICAgICAgLy8gb3IgYWZ0ZXIgdGhlIGNvdW50ZXJzIGFyZSBpbml0aWFsaXplZCwgYW5kIGJvdGggYXJlIHJlbmRlcmVkXG4gICAgICAvLyAodGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIGhvc3QgcmVuZGVycyBhcyB3ZWxsKVxuICAgICAgKGNvdW50ZXIgPiAxICYmIHByb3BzLl9fZmFsbGJhY2spXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+O1xuICB9O1xuXG4gIFdyYXBwZXJDb21wb25lbnQuZGlzcGxheU5hbWUgPSBjb21wb25lbnROYW1lO1xuXG4gIHJldHVybiBXcmFwcGVyQ29tcG9uZW50O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/hoc/withInternalFallback.tsx\n");
3134
3145
 
3135
3146
  /***/ }),
3136
3147
 
@@ -3185,18 +3196,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3185
3196
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3186
3197
 
3187
3198
  "use strict";
3188
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../App */ \"../../components/App.tsx\");\n/* harmony import */ var _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dropdownMenu/DropdownMenu */ \"../../components/dropdownMenu/DropdownMenu.tsx\");\n/* harmony import */ var _DefaultItems__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DefaultItems */ \"../../components/main-menu/DefaultItems.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _hoc_withInternalFallback__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../hoc/withInternalFallback */ \"../../components/hoc/withInternalFallback.tsx\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils */ \"../../utils.ts\");\n/* harmony import */ var _tunnels__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../tunnels */ \"../../components/tunnels.ts\");\n\n\n\n\n\n\n\n\n\n\n\nconst MainMenu = Object.assign((0,_hoc_withInternalFallback__WEBPACK_IMPORTED_MODULE_8__.withInternalFallback)(\"MainMenu\", ({ children, onSelect, }) => {\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_2__.useDevice)();\n const appState = (0,_App__WEBPACK_IMPORTED_MODULE_2__.useExcalidrawAppState)();\n const setAppState = (0,_App__WEBPACK_IMPORTED_MODULE_2__.useExcalidrawSetAppState)();\n const onClickOutside = device.isMobile\n ? undefined\n : () => setAppState({ openMenu: null });\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_10__.mainMenuTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"], Object.assign({ open: appState.openMenu === \"canvas\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Trigger, Object.assign({ onToggle: () => {\n setAppState({\n openMenu: appState.openMenu === \"canvas\" ? null : \"canvas\",\n });\n } }, { children: _icons__WEBPACK_IMPORTED_MODULE_7__.HamburgerMenuIcon })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Content, Object.assign({ onClickOutside: onClickOutside, onSelect: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.composeEventHandlers)(onSelect, () => {\n setAppState({ openMenu: null });\n }) }, { children: [children, device.isMobile && appState.collaborators.size > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", Object.assign({ className: \"UserList-Wrapper\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"labels.collaborators\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_5__.UserList, { mobile: true, collaborators: appState.collaborators })] })))] }))] })) }));\n}), {\n Trigger: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Trigger,\n Item: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Item,\n ItemLink: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ItemLink,\n ItemCustom: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ItemCustom,\n Group: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Group,\n Separator: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Separator,\n DefaultItems: _DefaultItems__WEBPACK_IMPORTED_MODULE_4__,\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MainMenu);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9tYWluLW1lbnUvTWFpbk1lbnUudHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTBCO0FBS1Y7QUFDd0M7QUFFVDtBQUVSO0FBQ1I7QUFDYztBQUNzQjtBQUNoQjtBQUNQO0FBRTVDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzVCLCtFQUFvQixDQUNsQixVQUFVLEVBQ1YsQ0FBQyxFQUNDLFFBQVEsRUFDUixRQUFRLEdBT1QsRUFBRSxFQUFFO0lBQ0gsTUFBTSxNQUFNLEdBQUcsK0NBQVMsRUFBRSxDQUFDO0lBQzNCLE1BQU0sUUFBUSxHQUFHLDJEQUFxQixFQUFFLENBQUM7SUFDekMsTUFBTSxXQUFXLEdBQUcsOERBQXdCLEVBQUUsQ0FBQztJQUMvQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUTtRQUNwQyxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxQyxPQUFPLENBQ0wsdURBQUMsd0RBQWlCLGNBQ2hCLHdEQUFDLGtFQUFZLGtCQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsaUJBQ2hELHVEQUFDLDBFQUFvQixrQkFDbkIsUUFBUSxFQUFFLEdBQUcsRUFBRTt3QkFDYixXQUFXLENBQUM7NEJBQ1YsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVE7eUJBQzNELENBQUMsQ0FBQztvQkFDTCxDQUFDLGdCQUVBLHFEQUFpQixJQUNHLEVBQ3ZCLHdEQUFDLDBFQUFvQixrQkFDbkIsY0FBYyxFQUFFLGNBQWMsRUFDOUIsUUFBUSxFQUFFLDREQUFvQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7d0JBQzVDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNsQyxDQUFDLENBQUMsaUJBRUQsUUFBUSxFQUNSLE1BQU0sQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQ3JELG9GQUFVLFNBQVMsRUFBQyxrQkFBa0IsaUJBQ3BDLDZFQUFTLHdDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBVSxFQUM1Qyx1REFBQywrQ0FBUSxJQUNQLE1BQU0sRUFBRSxJQUFJLEVBQ1osYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEdBQ3JDLEtBQ08sQ0FDWixLQUNvQixLQUNWLEdBQ0csQ0FDckIsQ0FBQztBQUNKLENBQUMsQ0FDRixFQUNEO0lBQ0UsT0FBTyxFQUFFLDBFQUFvQjtJQUM3QixJQUFJLEVBQUUsdUVBQWlCO0lBQ3ZCLFFBQVEsRUFBRSwyRUFBcUI7SUFDL0IsVUFBVSxFQUFFLDZFQUF1QjtJQUNuQyxLQUFLLEVBQUUsd0VBQWtCO0lBQ3pCLFNBQVMsRUFBRSw0RUFBc0I7SUFDakMsWUFBWTtDQUNiLENBQ0YsQ0FBQztBQUVGLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL21haW4tbWVudS9NYWluTWVudS50c3g/NDJhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICB1c2VEZXZpY2UsXG4gIHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSxcbiAgdXNlRXhjYWxpZHJhd1NldEFwcFN0YXRlLFxufSBmcm9tIFwiLi4vQXBwXCI7XG5pbXBvcnQgRHJvcGRvd25NZW51IGZyb20gXCIuLi9kcm9wZG93bk1lbnUvRHJvcGRvd25NZW51XCI7XG5cbmltcG9ydCAqIGFzIERlZmF1bHRJdGVtcyBmcm9tIFwiLi9EZWZhdWx0SXRlbXNcIjtcblxuaW1wb3J0IHsgVXNlckxpc3QgfSBmcm9tIFwiLi4vVXNlckxpc3RcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vLi4vaTE4blwiO1xuaW1wb3J0IHsgSGFtYnVyZ2VyTWVudUljb24gfSBmcm9tIFwiLi4vaWNvbnNcIjtcbmltcG9ydCB7IHdpdGhJbnRlcm5hbEZhbGxiYWNrIH0gZnJvbSBcIi4uL2hvYy93aXRoSW50ZXJuYWxGYWxsYmFja1wiO1xuaW1wb3J0IHsgY29tcG9zZUV2ZW50SGFuZGxlcnMgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCB7IG1haW5NZW51VHVubmVsIH0gZnJvbSBcIi4uL3R1bm5lbHNcIjtcblxuY29uc3QgTWFpbk1lbnUgPSBPYmplY3QuYXNzaWduKFxuICB3aXRoSW50ZXJuYWxGYWxsYmFjayhcbiAgICBcIk1haW5NZW51XCIsXG4gICAgKHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgb25TZWxlY3QsXG4gICAgfToge1xuICAgICAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgICAvKipcbiAgICAgICAqIENhbGxlZCB3aGVuIGFueSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQgKGNsaWNrZWQgb24pLlxuICAgICAgICovXG4gICAgICBvblNlbGVjdD86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgfSkgPT4ge1xuICAgICAgY29uc3QgZGV2aWNlID0gdXNlRGV2aWNlKCk7XG4gICAgICBjb25zdCBhcHBTdGF0ZSA9IHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSgpO1xuICAgICAgY29uc3Qgc2V0QXBwU3RhdGUgPSB1c2VFeGNhbGlkcmF3U2V0QXBwU3RhdGUoKTtcbiAgICAgIGNvbnN0IG9uQ2xpY2tPdXRzaWRlID0gZGV2aWNlLmlzTW9iaWxlXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogKCkgPT4gc2V0QXBwU3RhdGUoeyBvcGVuTWVudTogbnVsbCB9KTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPG1haW5NZW51VHVubmVsLkluPlxuICAgICAgICAgIDxEcm9wZG93bk1lbnUgb3Blbj17YXBwU3RhdGUub3Blbk1lbnUgPT09IFwiY2FudmFzXCJ9PlxuICAgICAgICAgICAgPERyb3Bkb3duTWVudS5UcmlnZ2VyXG4gICAgICAgICAgICAgIG9uVG9nZ2xlPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgb3Blbk1lbnU6IGFwcFN0YXRlLm9wZW5NZW51ID09PSBcImNhbnZhc1wiID8gbnVsbCA6IFwiY2FudmFzXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtIYW1idXJnZXJNZW51SWNvbn1cbiAgICAgICAgICAgIDwvRHJvcGRvd25NZW51LlRyaWdnZXI+XG4gICAgICAgICAgICA8RHJvcGRvd25NZW51LkNvbnRlbnRcbiAgICAgICAgICAgICAgb25DbGlja091dHNpZGU9e29uQ2xpY2tPdXRzaWRlfVxuICAgICAgICAgICAgICBvblNlbGVjdD17Y29tcG9zZUV2ZW50SGFuZGxlcnMob25TZWxlY3QsICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZSh7IG9wZW5NZW51OiBudWxsIH0pO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICB7ZGV2aWNlLmlzTW9iaWxlICYmIGFwcFN0YXRlLmNvbGxhYm9yYXRvcnMuc2l6ZSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzc05hbWU9XCJVc2VyTGlzdC1XcmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8bGVnZW5kPnt0KFwibGFiZWxzLmNvbGxhYm9yYXRvcnNcIil9PC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgICA8VXNlckxpc3RcbiAgICAgICAgICAgICAgICAgICAgbW9iaWxlPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBjb2xsYWJvcmF0b3JzPXthcHBTdGF0ZS5jb2xsYWJvcmF0b3JzfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnUuQ29udGVudD5cbiAgICAgICAgICA8L0Ryb3Bkb3duTWVudT5cbiAgICAgICAgPC9tYWluTWVudVR1bm5lbC5Jbj5cbiAgICAgICk7XG4gICAgfSxcbiAgKSxcbiAge1xuICAgIFRyaWdnZXI6IERyb3Bkb3duTWVudS5UcmlnZ2VyLFxuICAgIEl0ZW06IERyb3Bkb3duTWVudS5JdGVtLFxuICAgIEl0ZW1MaW5rOiBEcm9wZG93bk1lbnUuSXRlbUxpbmssXG4gICAgSXRlbUN1c3RvbTogRHJvcGRvd25NZW51Lkl0ZW1DdXN0b20sXG4gICAgR3JvdXA6IERyb3Bkb3duTWVudS5Hcm91cCxcbiAgICBTZXBhcmF0b3I6IERyb3Bkb3duTWVudS5TZXBhcmF0b3IsXG4gICAgRGVmYXVsdEl0ZW1zLFxuICB9LFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgTWFpbk1lbnU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/main-menu/MainMenu.tsx\n");
3189
-
3190
- /***/ }),
3191
-
3192
- /***/ "../../components/tunnels.ts":
3193
- /*!***********************************!*\
3194
- !*** ../../components/tunnels.ts ***!
3195
- \***********************************/
3196
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3197
-
3198
- "use strict";
3199
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"footerCenterTunnel\": () => (/* binding */ footerCenterTunnel),\n/* harmony export */ \"mainMenuTunnel\": () => (/* binding */ mainMenuTunnel),\n/* harmony export */ \"welcomeScreenCenterTunnel\": () => (/* binding */ welcomeScreenCenterTunnel),\n/* harmony export */ \"welcomeScreenHelpHintTunnel\": () => (/* binding */ welcomeScreenHelpHintTunnel),\n/* harmony export */ \"welcomeScreenMenuHintTunnel\": () => (/* binding */ welcomeScreenMenuHintTunnel),\n/* harmony export */ \"welcomeScreenToolbarHintTunnel\": () => (/* binding */ welcomeScreenToolbarHintTunnel)\n/* harmony export */ });\n/* harmony import */ var tunnel_rat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tunnel-rat */ \"../../../node_modules/tunnel-rat/dist/index.js\");\n\nconst mainMenuTunnel = (0,tunnel_rat__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\nconst welcomeScreenMenuHintTunnel = (0,tunnel_rat__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\nconst welcomeScreenToolbarHintTunnel = (0,tunnel_rat__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\nconst welcomeScreenHelpHintTunnel = (0,tunnel_rat__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\nconst welcomeScreenCenterTunnel = (0,tunnel_rat__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\nconst footerCenterTunnel = (0,tunnel_rat__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy90dW5uZWxzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBZ0M7QUFFekIsTUFBTSxjQUFjLEdBQUcsc0RBQU0sRUFBRSxDQUFDO0FBQ2hDLE1BQU0sMkJBQTJCLEdBQUcsc0RBQU0sRUFBRSxDQUFDO0FBQzdDLE1BQU0sOEJBQThCLEdBQUcsc0RBQU0sRUFBRSxDQUFDO0FBQ2hELE1BQU0sMkJBQTJCLEdBQUcsc0RBQU0sRUFBRSxDQUFDO0FBQzdDLE1BQU0seUJBQXlCLEdBQUcsc0RBQU0sRUFBRSxDQUFDO0FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsc0RBQU0sRUFBRSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvdHVubmVscy50cz8xNmU0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0dW5uZWwgZnJvbSBcInR1bm5lbC1yYXRcIjtcblxuZXhwb3J0IGNvbnN0IG1haW5NZW51VHVubmVsID0gdHVubmVsKCk7XG5leHBvcnQgY29uc3Qgd2VsY29tZVNjcmVlbk1lbnVIaW50VHVubmVsID0gdHVubmVsKCk7XG5leHBvcnQgY29uc3Qgd2VsY29tZVNjcmVlblRvb2xiYXJIaW50VHVubmVsID0gdHVubmVsKCk7XG5leHBvcnQgY29uc3Qgd2VsY29tZVNjcmVlbkhlbHBIaW50VHVubmVsID0gdHVubmVsKCk7XG5leHBvcnQgY29uc3Qgd2VsY29tZVNjcmVlbkNlbnRlclR1bm5lbCA9IHR1bm5lbCgpO1xuZXhwb3J0IGNvbnN0IGZvb3RlckNlbnRlclR1bm5lbCA9IHR1bm5lbCgpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/tunnels.ts\n");
3199
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../App */ \"../../components/App.tsx\");\n/* harmony import */ var _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dropdownMenu/DropdownMenu */ \"../../components/dropdownMenu/DropdownMenu.tsx\");\n/* harmony import */ var _DefaultItems__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DefaultItems */ \"../../components/main-menu/DefaultItems.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _hoc_withInternalFallback__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../hoc/withInternalFallback */ \"../../components/hoc/withInternalFallback.tsx\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils */ \"../../utils.ts\");\n/* harmony import */ var _context_tunnels__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../context/tunnels */ \"../../components/context/tunnels.ts\");\n\n\n\n\n\n\n\n\n\n\n\nconst MainMenu = Object.assign((0,_hoc_withInternalFallback__WEBPACK_IMPORTED_MODULE_8__.withInternalFallback)(\"MainMenu\", ({ children, onSelect, }) => {\n const { mainMenuTunnel } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_10__.useTunnels)();\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_2__.useDevice)();\n const appState = (0,_App__WEBPACK_IMPORTED_MODULE_2__.useExcalidrawAppState)();\n const setAppState = (0,_App__WEBPACK_IMPORTED_MODULE_2__.useExcalidrawSetAppState)();\n const onClickOutside = device.isMobile\n ? undefined\n : () => setAppState({ openMenu: null });\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(mainMenuTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"], Object.assign({ open: appState.openMenu === \"canvas\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Trigger, Object.assign({ onToggle: () => {\n setAppState({\n openMenu: appState.openMenu === \"canvas\" ? null : \"canvas\",\n });\n } }, { children: _icons__WEBPACK_IMPORTED_MODULE_7__.HamburgerMenuIcon })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Content, Object.assign({ onClickOutside: onClickOutside, onSelect: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.composeEventHandlers)(onSelect, () => {\n setAppState({ openMenu: null });\n }) }, { children: [children, device.isMobile && appState.collaborators.size > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", Object.assign({ className: \"UserList-Wrapper\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"labels.collaborators\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_5__.UserList, { mobile: true, collaborators: appState.collaborators })] })))] }))] })) }));\n}), {\n Trigger: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Trigger,\n Item: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Item,\n ItemLink: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ItemLink,\n ItemCustom: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ItemCustom,\n Group: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Group,\n Separator: _dropdownMenu_DropdownMenu__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Separator,\n DefaultItems: _DefaultItems__WEBPACK_IMPORTED_MODULE_4__,\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MainMenu);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9tYWluLW1lbnUvTWFpbk1lbnUudHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTBCO0FBS1Y7QUFDd0M7QUFFVDtBQUVSO0FBQ1I7QUFDYztBQUNzQjtBQUNoQjtBQUNIO0FBRWhELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzVCLCtFQUFvQixDQUNsQixVQUFVLEVBQ1YsQ0FBQyxFQUNDLFFBQVEsRUFDUixRQUFRLEdBT1QsRUFBRSxFQUFFO0lBQ0gsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLDZEQUFVLEVBQUUsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRywrQ0FBUyxFQUFFLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsMkRBQXFCLEVBQUUsQ0FBQztJQUN6QyxNQUFNLFdBQVcsR0FBRyw4REFBd0IsRUFBRSxDQUFDO0lBQy9DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxRQUFRO1FBQ3BDLENBQUMsQ0FBQyxTQUFTO1FBQ1gsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTFDLE9BQU8sQ0FDTCx1REFBQyxjQUFjLENBQUMsRUFBRSxjQUNoQix3REFBQyxrRUFBWSxrQkFBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLGlCQUNoRCx1REFBQywwRUFBb0Isa0JBQ25CLFFBQVEsRUFBRSxHQUFHLEVBQUU7d0JBQ2IsV0FBVyxDQUFDOzRCQUNWLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRO3lCQUMzRCxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxnQkFFQSxxREFBaUIsSUFDRyxFQUN2Qix3REFBQywwRUFBb0Isa0JBQ25CLGNBQWMsRUFBRSxjQUFjLEVBQzlCLFFBQVEsRUFBRSw0REFBb0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO3dCQUM1QyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDbEMsQ0FBQyxDQUFDLGlCQUVELFFBQVEsRUFDUixNQUFNLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUNyRCxvRkFBVSxTQUFTLEVBQUMsa0JBQWtCLGlCQUNwQyw2RUFBUyx3Q0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQVUsRUFDNUMsdURBQUMsK0NBQVEsSUFDUCxNQUFNLEVBQUUsSUFBSSxFQUNaLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYSxHQUNyQyxLQUNPLENBQ1osS0FDb0IsS0FDVixHQUNHLENBQ3JCLENBQUM7QUFDSixDQUFDLENBQ0YsRUFDRDtJQUNFLE9BQU8sRUFBRSwwRUFBb0I7SUFDN0IsSUFBSSxFQUFFLHVFQUFpQjtJQUN2QixRQUFRLEVBQUUsMkVBQXFCO0lBQy9CLFVBQVUsRUFBRSw2RUFBdUI7SUFDbkMsS0FBSyxFQUFFLHdFQUFrQjtJQUN6QixTQUFTLEVBQUUsNEVBQXNCO0lBQ2pDLFlBQVk7Q0FDYixDQUNGLENBQUM7QUFFRixpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9tYWluLW1lbnUvTWFpbk1lbnUudHN4PzQyYTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgdXNlRGV2aWNlLFxuICB1c2VFeGNhbGlkcmF3QXBwU3RhdGUsXG4gIHVzZUV4Y2FsaWRyYXdTZXRBcHBTdGF0ZSxcbn0gZnJvbSBcIi4uL0FwcFwiO1xuaW1wb3J0IERyb3Bkb3duTWVudSBmcm9tIFwiLi4vZHJvcGRvd25NZW51L0Ryb3Bkb3duTWVudVwiO1xuXG5pbXBvcnQgKiBhcyBEZWZhdWx0SXRlbXMgZnJvbSBcIi4vRGVmYXVsdEl0ZW1zXCI7XG5cbmltcG9ydCB7IFVzZXJMaXN0IH0gZnJvbSBcIi4uL1VzZXJMaXN0XCI7XG5pbXBvcnQgeyB0IH0gZnJvbSBcIi4uLy4uL2kxOG5cIjtcbmltcG9ydCB7IEhhbWJ1cmdlck1lbnVJY29uIH0gZnJvbSBcIi4uL2ljb25zXCI7XG5pbXBvcnQgeyB3aXRoSW50ZXJuYWxGYWxsYmFjayB9IGZyb20gXCIuLi9ob2Mvd2l0aEludGVybmFsRmFsbGJhY2tcIjtcbmltcG9ydCB7IGNvbXBvc2VFdmVudEhhbmRsZXJzIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VUdW5uZWxzIH0gZnJvbSBcIi4uL2NvbnRleHQvdHVubmVsc1wiO1xuXG5jb25zdCBNYWluTWVudSA9IE9iamVjdC5hc3NpZ24oXG4gIHdpdGhJbnRlcm5hbEZhbGxiYWNrKFxuICAgIFwiTWFpbk1lbnVcIixcbiAgICAoe1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBvblNlbGVjdCxcbiAgICB9OiB7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICAgIC8qKlxuICAgICAgICogQ2FsbGVkIHdoZW4gYW55IG1lbnUgaXRlbSBpcyBzZWxlY3RlZCAoY2xpY2tlZCBvbikuXG4gICAgICAgKi9cbiAgICAgIG9uU2VsZWN0PzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1haW5NZW51VHVubmVsIH0gPSB1c2VUdW5uZWxzKCk7XG4gICAgICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcbiAgICAgIGNvbnN0IGFwcFN0YXRlID0gdXNlRXhjYWxpZHJhd0FwcFN0YXRlKCk7XG4gICAgICBjb25zdCBzZXRBcHBTdGF0ZSA9IHVzZUV4Y2FsaWRyYXdTZXRBcHBTdGF0ZSgpO1xuICAgICAgY29uc3Qgb25DbGlja091dHNpZGUgPSBkZXZpY2UuaXNNb2JpbGVcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiAoKSA9PiBzZXRBcHBTdGF0ZSh7IG9wZW5NZW51OiBudWxsIH0pO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8bWFpbk1lbnVUdW5uZWwuSW4+XG4gICAgICAgICAgPERyb3Bkb3duTWVudSBvcGVuPXthcHBTdGF0ZS5vcGVuTWVudSA9PT0gXCJjYW52YXNcIn0+XG4gICAgICAgICAgICA8RHJvcGRvd25NZW51LlRyaWdnZXJcbiAgICAgICAgICAgICAgb25Ub2dnbGU9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICBvcGVuTWVudTogYXBwU3RhdGUub3Blbk1lbnUgPT09IFwiY2FudmFzXCIgPyBudWxsIDogXCJjYW52YXNcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge0hhbWJ1cmdlck1lbnVJY29ufVxuICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnUuVHJpZ2dlcj5cbiAgICAgICAgICAgIDxEcm9wZG93bk1lbnUuQ29udGVudFxuICAgICAgICAgICAgICBvbkNsaWNrT3V0c2lkZT17b25DbGlja091dHNpZGV9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtjb21wb3NlRXZlbnRIYW5kbGVycyhvblNlbGVjdCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlKHsgb3Blbk1lbnU6IG51bGwgfSk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIHtkZXZpY2UuaXNNb2JpbGUgJiYgYXBwU3RhdGUuY29sbGFib3JhdG9ycy5zaXplID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzTmFtZT1cIlVzZXJMaXN0LVdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxsZWdlbmQ+e3QoXCJsYWJlbHMuY29sbGFib3JhdG9yc1wiKX08L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgIDxVc2VyTGlzdFxuICAgICAgICAgICAgICAgICAgICBtb2JpbGU9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIGNvbGxhYm9yYXRvcnM9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnN9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0Ryb3Bkb3duTWVudS5Db250ZW50PlxuICAgICAgICAgIDwvRHJvcGRvd25NZW51PlxuICAgICAgICA8L21haW5NZW51VHVubmVsLkluPlxuICAgICAgKTtcbiAgICB9LFxuICApLFxuICB7XG4gICAgVHJpZ2dlcjogRHJvcGRvd25NZW51LlRyaWdnZXIsXG4gICAgSXRlbTogRHJvcGRvd25NZW51Lkl0ZW0sXG4gICAgSXRlbUxpbms6IERyb3Bkb3duTWVudS5JdGVtTGluayxcbiAgICBJdGVtQ3VzdG9tOiBEcm9wZG93bk1lbnUuSXRlbUN1c3RvbSxcbiAgICBHcm91cDogRHJvcGRvd25NZW51Lkdyb3VwLFxuICAgIFNlcGFyYXRvcjogRHJvcGRvd25NZW51LlNlcGFyYXRvcixcbiAgICBEZWZhdWx0SXRlbXMsXG4gIH0sXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBNYWluTWVudTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/main-menu/MainMenu.tsx\n");
3200
3200
 
3201
3201
  /***/ }),
3202
3202
 
@@ -3207,7 +3207,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3207
3207
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3208
3208
 
3209
3209
  "use strict";
3210
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Center\": () => (/* binding */ Center)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../actions */ \"../../actions/index.ts\");\n/* harmony import */ var _actions_shortcuts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../actions/shortcuts */ \"../../actions/shortcuts.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../App */ \"../../components/App.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _tunnels__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../tunnels */ \"../../components/tunnels.ts\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\nconst WelcomeScreenMenuItemContent = ({ icon, shortcut, children, }) => {\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useDevice)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-menu-item__icon\" }, { children: icon })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-menu-item__text\" }, { children: children })), shortcut && !device.isMobile && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-menu-item__shortcut\" }, { children: shortcut })))] }));\n};\nWelcomeScreenMenuItemContent.displayName = \"WelcomeScreenMenuItemContent\";\nconst WelcomeScreenMenuItem = (_a) => {\n var { onSelect, children, icon, shortcut, className = \"\" } = _a, props = __rest(_a, [\"onSelect\", \"children\", \"icon\", \"shortcut\", \"className\"]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({}, props, { type: \"button\", className: `welcome-screen-menu-item ${className}`, onClick: onSelect }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItemContent, Object.assign({ icon: icon, shortcut: shortcut }, { children: children })) })));\n};\nWelcomeScreenMenuItem.displayName = \"WelcomeScreenMenuItem\";\nconst WelcomeScreenMenuItemLink = (_a) => {\n var { children, href, icon, shortcut, className = \"\" } = _a, props = __rest(_a, [\"children\", \"href\", \"icon\", \"shortcut\", \"className\"]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({}, props, { className: `welcome-screen-menu-item ${className}`, href: href, target: \"_blank\", rel: \"noreferrer\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItemContent, Object.assign({ icon: icon, shortcut: shortcut }, { children: children })) })));\n};\nWelcomeScreenMenuItemLink.displayName = \"WelcomeScreenMenuItemLink\";\nconst Center = ({ children }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_6__.welcomeScreenCenterTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-center\" }, { children: children || ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Logo, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Heading, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"welcomeScreen.defaults.center_heading\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(Menu, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuItemLoadScene, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuItemHelp, {})] })] })) })) }));\n};\nCenter.displayName = \"Center\";\nconst Logo = ({ children }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-center__logo virgil welcome-screen-decor\" }, { children: children || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [_icons__WEBPACK_IMPORTED_MODULE_5__.ExcalLogo, \" Excalidraw\"] }) })));\n};\nLogo.displayName = \"Logo\";\nconst Heading = ({ children }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-center__heading welcome-screen-decor virgil\" }, { children: children })));\n};\nHeading.displayName = \"Heading\";\nconst Menu = ({ children }) => {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-menu\" }, { children: children }));\n};\nMenu.displayName = \"Menu\";\nconst MenuItemHelp = () => {\n const actionManager = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useExcalidrawActionManager)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItem, Object.assign({ onSelect: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_1__.actionShortcuts), shortcut: \"?\", icon: _icons__WEBPACK_IMPORTED_MODULE_5__.HelpIcon }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"helpDialog.title\") })));\n};\nMenuItemHelp.displayName = \"MenuItemHelp\";\nconst MenuItemLoadScene = () => {\n const appState = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useExcalidrawAppState)();\n const actionManager = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useExcalidrawActionManager)();\n if (appState.viewModeEnabled) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItem, Object.assign({ onSelect: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_1__.actionLoadScene), shortcut: (0,_actions_shortcuts__WEBPACK_IMPORTED_MODULE_2__.getShortcutFromShortcutName)(\"loadScene\"), icon: _icons__WEBPACK_IMPORTED_MODULE_5__.LoadIcon }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.load\") })));\n};\nMenuItemLoadScene.displayName = \"MenuItemLoadScene\";\nconst MenuItemLiveCollaborationTrigger = ({ onSelect, }) => {\n // FIXME when we tie t() to lang state\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const appState = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useExcalidrawAppState)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItem, Object.assign({ shortcut: null, onSelect: onSelect, icon: _icons__WEBPACK_IMPORTED_MODULE_5__.usersIcon }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"labels.liveCollaboration\") })));\n};\nMenuItemLiveCollaborationTrigger.displayName =\n \"MenuItemLiveCollaborationTrigger\";\n// -----------------------------------------------------------------------------\nCenter.Logo = Logo;\nCenter.Heading = Heading;\nCenter.Menu = Menu;\nCenter.MenuItem = WelcomeScreenMenuItem;\nCenter.MenuItemLink = WelcomeScreenMenuItemLink;\nCenter.MenuItemHelp = MenuItemHelp;\nCenter.MenuItemLoadScene = MenuItemLoadScene;\nCenter.MenuItemLiveCollaborationTrigger = MenuItemLiveCollaborationTrigger;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy93ZWxjb21lLXNjcmVlbi9XZWxjb21lU2NyZWVuLkNlbnRlci50c3guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUU7QUFDSztBQUN2QztBQUtmO0FBQ29EO0FBQ2I7QUFFdkQsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLEVBQ3BDLElBQUksRUFDSixRQUFRLEVBQ1IsUUFBUSxHQUtULEVBQUUsRUFBRTtJQUNILE1BQU0sTUFBTSxHQUFHLCtDQUFTLEVBQUUsQ0FBQztJQUMzQixPQUFPLENBQ0wsOEhBQ0UsOEVBQUssU0FBUyxFQUFDLGdDQUFnQyxnQkFBRSxJQUFJLElBQU8sRUFDNUQsOEVBQUssU0FBUyxFQUFDLGdDQUFnQyxnQkFBRSxRQUFRLElBQU8sRUFDL0QsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUMvQiw4RUFBSyxTQUFTLEVBQUMsb0NBQW9DLGdCQUFFLFFBQVEsSUFBTyxDQUNyRSxJQUNBLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGLDRCQUE0QixDQUFDLFdBQVcsR0FBRyw4QkFBOEIsQ0FBQztBQUUxRSxNQUFNLHFCQUFxQixHQUFHLENBQUMsRUFZa0IsRUFBRSxFQUFFO1FBWnRCLEVBQzdCLFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEdBQUcsRUFBRSxPQU9pQyxFQU41QyxLQUFLLGNBTnFCLHlEQU85QixDQURTO0lBT1IsT0FBTyxDQUNMLG1GQUNNLEtBQUssSUFDVCxJQUFJLEVBQUMsUUFBUSxFQUNiLFNBQVMsRUFBRSw0QkFBNEIsU0FBUyxFQUFFLEVBQ2xELE9BQU8sRUFBRSxRQUFRLGdCQUVqQix1REFBQyw0QkFBNEIsa0JBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxnQkFDekQsUUFBUSxJQUNvQixJQUN4QixDQUNWLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixxQkFBcUIsQ0FBQyxXQUFXLEdBQUcsdUJBQXVCLENBQUM7QUFFNUQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLEVBWWMsRUFBRSxFQUFFO1FBWmxCLEVBQ2pDLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEdBQUcsRUFBRSxPQU9pQyxFQU41QyxLQUFLLGNBTnlCLHFEQU9sQyxDQURTO0lBT1IsT0FBTyxDQUNMLDhFQUNNLEtBQUssSUFDVCxTQUFTLEVBQUUsNEJBQTRCLFNBQVMsRUFBRSxFQUNsRCxJQUFJLEVBQUUsSUFBSSxFQUNWLE1BQU0sRUFBQyxRQUFRLEVBQ2YsR0FBRyxFQUFDLFlBQVksZ0JBRWhCLHVEQUFDLDRCQUE0QixrQkFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLGdCQUN6RCxRQUFRLElBQ29CLElBQzdCLENBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGLHlCQUF5QixDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztBQUVwRSxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFrQyxFQUFFLEVBQUU7SUFDOUQsT0FBTyxDQUNMLHVEQUFDLGtFQUE0QixjQUMzQiw4RUFBSyxTQUFTLEVBQUMsdUJBQXVCLGdCQUNuQyxRQUFRLElBQUksQ0FDWCw4SEFDRSx1REFBQyxJQUFJLEtBQUcsRUFDUix1REFBQyxPQUFPLGNBQUUsd0NBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxHQUFXLEVBQy9ELHdEQUFDLElBQUksZUFDSCx1REFBQyxpQkFBaUIsS0FBRyxFQUNyQix1REFBQyxZQUFZLEtBQUcsSUFDWCxJQUNOLENBQ0osSUFDRyxHQUN1QixDQUNoQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7QUFFOUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBa0MsRUFBRSxFQUFFO0lBQzVELE9BQU8sQ0FDTCw4RUFBSyxTQUFTLEVBQUMseURBQXlELGdCQUNyRSxRQUFRLElBQUksOEhBQUcsNkNBQVMsbUJBQWUsSUFDcEMsQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFFMUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBaUMsRUFBRSxFQUFFO0lBQzlELE9BQU8sQ0FDTCw4RUFBSyxTQUFTLEVBQUMsNERBQTRELGdCQUN4RSxRQUFRLElBQ0wsQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFFaEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBa0MsRUFBRSxFQUFFO0lBQzVELE9BQU8sOEVBQUssU0FBUyxFQUFDLHFCQUFxQixnQkFBRSxRQUFRLElBQU8sQ0FBQztBQUMvRCxDQUFDLENBQUM7QUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUUxQixNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDeEIsTUFBTSxhQUFhLEdBQUcsZ0VBQTBCLEVBQUUsQ0FBQztJQUVuRCxPQUFPLENBQ0wsdURBQUMscUJBQXFCLGtCQUNwQixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxxREFBZSxDQUFDLEVBQzVELFFBQVEsRUFBQyxHQUFHLEVBQ1osSUFBSSxFQUFFLDRDQUFRLGdCQUViLHdDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFDQSxDQUN6QixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsWUFBWSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7QUFFMUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7SUFDN0IsTUFBTSxRQUFRLEdBQUcsMkRBQXFCLEVBQUUsQ0FBQztJQUN6QyxNQUFNLGFBQWEsR0FBRyxnRUFBMEIsRUFBRSxDQUFDO0lBRW5ELElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxDQUNMLHVEQUFDLHFCQUFxQixrQkFDcEIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMscURBQWUsQ0FBQyxFQUM1RCxRQUFRLEVBQUUsK0VBQTJCLENBQUMsV0FBVyxDQUFDLEVBQ2xELElBQUksRUFBRSw0Q0FBUSxnQkFFYix3Q0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUNJLENBQ3pCLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxnQ0FBZ0MsR0FBRyxDQUFDLEVBQ3hDLFFBQVEsR0FHVCxFQUFFLEVBQUU7SUFDSCxzQ0FBc0M7SUFDdEMsNkRBQTZEO0lBQzdELE1BQU0sUUFBUSxHQUFHLDJEQUFxQixFQUFFLENBQUM7SUFFekMsT0FBTyxDQUNMLHVEQUFDLHFCQUFxQixrQkFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLDZDQUFTLGdCQUN2RSx3Q0FBQyxDQUFDLDBCQUEwQixDQUFDLElBQ1IsQ0FDekIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGLGdDQUFnQyxDQUFDLFdBQVc7SUFDMUMsa0NBQWtDLENBQUM7QUFFckMsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLE1BQU0sQ0FBQyxRQUFRLEdBQUcscUJBQXFCLENBQUM7QUFDeEMsTUFBTSxDQUFDLFlBQVksR0FBRyx5QkFBeUIsQ0FBQztBQUNoRCxNQUFNLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNuQyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDN0MsTUFBTSxDQUFDLGdDQUFnQyxHQUFHLGdDQUFnQyxDQUFDO0FBRXpEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvd2VsY29tZS1zY3JlZW4vV2VsY29tZVNjcmVlbi5DZW50ZXIudHN4P2Q3YzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWN0aW9uTG9hZFNjZW5lLCBhY3Rpb25TaG9ydGN1dHMgfSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgZ2V0U2hvcnRjdXRGcm9tU2hvcnRjdXROYW1lIH0gZnJvbSBcIi4uLy4uL2FjdGlvbnMvc2hvcnRjdXRzXCI7XG5pbXBvcnQgeyB0IH0gZnJvbSBcIi4uLy4uL2kxOG5cIjtcbmltcG9ydCB7XG4gIHVzZURldmljZSxcbiAgdXNlRXhjYWxpZHJhd0FjdGlvbk1hbmFnZXIsXG4gIHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSxcbn0gZnJvbSBcIi4uL0FwcFwiO1xuaW1wb3J0IHsgRXhjYWxMb2dvLCBIZWxwSWNvbiwgTG9hZEljb24sIHVzZXJzSWNvbiB9IGZyb20gXCIuLi9pY29uc1wiO1xuaW1wb3J0IHsgd2VsY29tZVNjcmVlbkNlbnRlclR1bm5lbCB9IGZyb20gXCIuLi90dW5uZWxzXCI7XG5cbmNvbnN0IFdlbGNvbWVTY3JlZW5NZW51SXRlbUNvbnRlbnQgPSAoe1xuICBpY29uLFxuICBzaG9ydGN1dCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGljb24/OiBKU1guRWxlbWVudDtcbiAgc2hvcnRjdXQ/OiBzdHJpbmcgfCBudWxsO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufSkgPT4ge1xuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWxjb21lLXNjcmVlbi1tZW51LWl0ZW1fX2ljb25cIj57aWNvbn08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tbWVudS1pdGVtX190ZXh0XCI+e2NoaWxkcmVufTwvZGl2PlxuICAgICAge3Nob3J0Y3V0ICYmICFkZXZpY2UuaXNNb2JpbGUgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlbGNvbWUtc2NyZWVuLW1lbnUtaXRlbV9fc2hvcnRjdXRcIj57c2hvcnRjdXR9PC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcbldlbGNvbWVTY3JlZW5NZW51SXRlbUNvbnRlbnQuZGlzcGxheU5hbWUgPSBcIldlbGNvbWVTY3JlZW5NZW51SXRlbUNvbnRlbnRcIjtcblxuY29uc3QgV2VsY29tZVNjcmVlbk1lbnVJdGVtID0gKHtcbiAgb25TZWxlY3QsXG4gIGNoaWxkcmVuLFxuICBpY29uLFxuICBzaG9ydGN1dCxcbiAgY2xhc3NOYW1lID0gXCJcIixcbiAgLi4ucHJvcHNcbn06IHtcbiAgb25TZWxlY3Q6ICgpID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGljb24/OiBKU1guRWxlbWVudDtcbiAgc2hvcnRjdXQ/OiBzdHJpbmcgfCBudWxsO1xufSAmIFJlYWN0LkJ1dHRvbkhUTUxBdHRyaWJ1dGVzPEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtgd2VsY29tZS1zY3JlZW4tbWVudS1pdGVtICR7Y2xhc3NOYW1lfWB9XG4gICAgICBvbkNsaWNrPXtvblNlbGVjdH1cbiAgICA+XG4gICAgICA8V2VsY29tZVNjcmVlbk1lbnVJdGVtQ29udGVudCBpY29uPXtpY29ufSBzaG9ydGN1dD17c2hvcnRjdXR9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1dlbGNvbWVTY3JlZW5NZW51SXRlbUNvbnRlbnQ+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuV2VsY29tZVNjcmVlbk1lbnVJdGVtLmRpc3BsYXlOYW1lID0gXCJXZWxjb21lU2NyZWVuTWVudUl0ZW1cIjtcblxuY29uc3QgV2VsY29tZVNjcmVlbk1lbnVJdGVtTGluayA9ICh7XG4gIGNoaWxkcmVuLFxuICBocmVmLFxuICBpY29uLFxuICBzaG9ydGN1dCxcbiAgY2xhc3NOYW1lID0gXCJcIixcbiAgLi4ucHJvcHNcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaHJlZjogc3RyaW5nO1xuICBpY29uPzogSlNYLkVsZW1lbnQ7XG4gIHNob3J0Y3V0Pzogc3RyaW5nIHwgbnVsbDtcbn0gJiBSZWFjdC5BbmNob3JIVE1MQXR0cmlidXRlczxIVE1MQW5jaG9yRWxlbWVudD4pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgey4uLnByb3BzfVxuICAgICAgY2xhc3NOYW1lPXtgd2VsY29tZS1zY3JlZW4tbWVudS1pdGVtICR7Y2xhc3NOYW1lfWB9XG4gICAgICBocmVmPXtocmVmfVxuICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgIHJlbD1cIm5vcmVmZXJyZXJcIlxuICAgID5cbiAgICAgIDxXZWxjb21lU2NyZWVuTWVudUl0ZW1Db250ZW50IGljb249e2ljb259IHNob3J0Y3V0PXtzaG9ydGN1dH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvV2VsY29tZVNjcmVlbk1lbnVJdGVtQ29udGVudD5cbiAgICA8L2E+XG4gICk7XG59O1xuV2VsY29tZVNjcmVlbk1lbnVJdGVtTGluay5kaXNwbGF5TmFtZSA9IFwiV2VsY29tZVNjcmVlbk1lbnVJdGVtTGlua1wiO1xuXG5jb25zdCBDZW50ZXIgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8d2VsY29tZVNjcmVlbkNlbnRlclR1bm5lbC5Jbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tY2VudGVyXCI+XG4gICAgICAgIHtjaGlsZHJlbiB8fCAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxMb2dvIC8+XG4gICAgICAgICAgICA8SGVhZGluZz57dChcIndlbGNvbWVTY3JlZW4uZGVmYXVsdHMuY2VudGVyX2hlYWRpbmdcIil9PC9IZWFkaW5nPlxuICAgICAgICAgICAgPE1lbnU+XG4gICAgICAgICAgICAgIDxNZW51SXRlbUxvYWRTY2VuZSAvPlxuICAgICAgICAgICAgICA8TWVudUl0ZW1IZWxwIC8+XG4gICAgICAgICAgICA8L01lbnU+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L3dlbGNvbWVTY3JlZW5DZW50ZXJUdW5uZWwuSW4+XG4gICk7XG59O1xuQ2VudGVyLmRpc3BsYXlOYW1lID0gXCJDZW50ZXJcIjtcblxuY29uc3QgTG9nbyA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tY2VudGVyX19sb2dvIHZpcmdpbCB3ZWxjb21lLXNjcmVlbi1kZWNvclwiPlxuICAgICAge2NoaWxkcmVuIHx8IDw+e0V4Y2FsTG9nb30gRXhjYWxpZHJhdzwvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5Mb2dvLmRpc3BsYXlOYW1lID0gXCJMb2dvXCI7XG5cbmNvbnN0IEhlYWRpbmcgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tY2VudGVyX19oZWFkaW5nIHdlbGNvbWUtc2NyZWVuLWRlY29yIHZpcmdpbFwiPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufTtcbkhlYWRpbmcuZGlzcGxheU5hbWUgPSBcIkhlYWRpbmdcIjtcblxuY29uc3QgTWVudSA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ3ZWxjb21lLXNjcmVlbi1tZW51XCI+e2NoaWxkcmVufTwvZGl2Pjtcbn07XG5NZW51LmRpc3BsYXlOYW1lID0gXCJNZW51XCI7XG5cbmNvbnN0IE1lbnVJdGVtSGVscCA9ICgpID0+IHtcbiAgY29uc3QgYWN0aW9uTWFuYWdlciA9IHVzZUV4Y2FsaWRyYXdBY3Rpb25NYW5hZ2VyKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8V2VsY29tZVNjcmVlbk1lbnVJdGVtXG4gICAgICBvblNlbGVjdD17KCkgPT4gYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvblNob3J0Y3V0cyl9XG4gICAgICBzaG9ydGN1dD1cIj9cIlxuICAgICAgaWNvbj17SGVscEljb259XG4gICAgPlxuICAgICAge3QoXCJoZWxwRGlhbG9nLnRpdGxlXCIpfVxuICAgIDwvV2VsY29tZVNjcmVlbk1lbnVJdGVtPlxuICApO1xufTtcbk1lbnVJdGVtSGVscC5kaXNwbGF5TmFtZSA9IFwiTWVudUl0ZW1IZWxwXCI7XG5cbmNvbnN0IE1lbnVJdGVtTG9hZFNjZW5lID0gKCkgPT4ge1xuICBjb25zdCBhcHBTdGF0ZSA9IHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSgpO1xuICBjb25zdCBhY3Rpb25NYW5hZ2VyID0gdXNlRXhjYWxpZHJhd0FjdGlvbk1hbmFnZXIoKTtcblxuICBpZiAoYXBwU3RhdGUudmlld01vZGVFbmFibGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxXZWxjb21lU2NyZWVuTWVudUl0ZW1cbiAgICAgIG9uU2VsZWN0PXsoKSA9PiBhY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uTG9hZFNjZW5lKX1cbiAgICAgIHNob3J0Y3V0PXtnZXRTaG9ydGN1dEZyb21TaG9ydGN1dE5hbWUoXCJsb2FkU2NlbmVcIil9XG4gICAgICBpY29uPXtMb2FkSWNvbn1cbiAgICA+XG4gICAgICB7dChcImJ1dHRvbnMubG9hZFwiKX1cbiAgICA8L1dlbGNvbWVTY3JlZW5NZW51SXRlbT5cbiAgKTtcbn07XG5NZW51SXRlbUxvYWRTY2VuZS5kaXNwbGF5TmFtZSA9IFwiTWVudUl0ZW1Mb2FkU2NlbmVcIjtcblxuY29uc3QgTWVudUl0ZW1MaXZlQ29sbGFib3JhdGlvblRyaWdnZXIgPSAoe1xuICBvblNlbGVjdCxcbn06IHtcbiAgb25TZWxlY3Q6ICgpID0+IGFueTtcbn0pID0+IHtcbiAgLy8gRklYTUUgd2hlbiB3ZSB0aWUgdCgpIHRvIGxhbmcgc3RhdGVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdCBhcHBTdGF0ZSA9IHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSgpO1xuXG4gIHJldHVybiAoXG4gICAgPFdlbGNvbWVTY3JlZW5NZW51SXRlbSBzaG9ydGN1dD17bnVsbH0gb25TZWxlY3Q9e29uU2VsZWN0fSBpY29uPXt1c2Vyc0ljb259PlxuICAgICAge3QoXCJsYWJlbHMubGl2ZUNvbGxhYm9yYXRpb25cIil9XG4gICAgPC9XZWxjb21lU2NyZWVuTWVudUl0ZW0+XG4gICk7XG59O1xuTWVudUl0ZW1MaXZlQ29sbGFib3JhdGlvblRyaWdnZXIuZGlzcGxheU5hbWUgPVxuICBcIk1lbnVJdGVtTGl2ZUNvbGxhYm9yYXRpb25UcmlnZ2VyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkNlbnRlci5Mb2dvID0gTG9nbztcbkNlbnRlci5IZWFkaW5nID0gSGVhZGluZztcbkNlbnRlci5NZW51ID0gTWVudTtcbkNlbnRlci5NZW51SXRlbSA9IFdlbGNvbWVTY3JlZW5NZW51SXRlbTtcbkNlbnRlci5NZW51SXRlbUxpbmsgPSBXZWxjb21lU2NyZWVuTWVudUl0ZW1MaW5rO1xuQ2VudGVyLk1lbnVJdGVtSGVscCA9IE1lbnVJdGVtSGVscDtcbkNlbnRlci5NZW51SXRlbUxvYWRTY2VuZSA9IE1lbnVJdGVtTG9hZFNjZW5lO1xuQ2VudGVyLk1lbnVJdGVtTGl2ZUNvbGxhYm9yYXRpb25UcmlnZ2VyID0gTWVudUl0ZW1MaXZlQ29sbGFib3JhdGlvblRyaWdnZXI7XG5cbmV4cG9ydCB7IENlbnRlciB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/welcome-screen/WelcomeScreen.Center.tsx\n");
3210
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Center\": () => (/* binding */ Center)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../actions */ \"../../actions/index.ts\");\n/* harmony import */ var _actions_shortcuts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../actions/shortcuts */ \"../../actions/shortcuts.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../App */ \"../../components/App.tsx\");\n/* harmony import */ var _context_tunnels__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context/tunnels */ \"../../components/context/tunnels.ts\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../icons */ \"../../components/icons.tsx\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\nconst WelcomeScreenMenuItemContent = ({ icon, shortcut, children, }) => {\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useDevice)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-menu-item__icon\" }, { children: icon })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-menu-item__text\" }, { children: children })), shortcut && !device.isMobile && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-menu-item__shortcut\" }, { children: shortcut })))] }));\n};\nWelcomeScreenMenuItemContent.displayName = \"WelcomeScreenMenuItemContent\";\nconst WelcomeScreenMenuItem = (_a) => {\n var { onSelect, children, icon, shortcut, className = \"\" } = _a, props = __rest(_a, [\"onSelect\", \"children\", \"icon\", \"shortcut\", \"className\"]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({}, props, { type: \"button\", className: `welcome-screen-menu-item ${className}`, onClick: onSelect }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItemContent, Object.assign({ icon: icon, shortcut: shortcut }, { children: children })) })));\n};\nWelcomeScreenMenuItem.displayName = \"WelcomeScreenMenuItem\";\nconst WelcomeScreenMenuItemLink = (_a) => {\n var { children, href, icon, shortcut, className = \"\" } = _a, props = __rest(_a, [\"children\", \"href\", \"icon\", \"shortcut\", \"className\"]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({}, props, { className: `welcome-screen-menu-item ${className}`, href: href, target: \"_blank\", rel: \"noreferrer\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItemContent, Object.assign({ icon: icon, shortcut: shortcut }, { children: children })) })));\n};\nWelcomeScreenMenuItemLink.displayName = \"WelcomeScreenMenuItemLink\";\nconst Center = ({ children }) => {\n const { welcomeScreenCenterTunnel } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_5__.useTunnels)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(welcomeScreenCenterTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-center\" }, { children: children || ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Logo, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Heading, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"welcomeScreen.defaults.center_heading\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(Menu, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuItemLoadScene, {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuItemHelp, {})] })] })) })) }));\n};\nCenter.displayName = \"Center\";\nconst Logo = ({ children }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-center__logo virgil welcome-screen-decor\" }, { children: children || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [_icons__WEBPACK_IMPORTED_MODULE_6__.ExcalLogo, \" Excalidraw\"] }) })));\n};\nLogo.displayName = \"Logo\";\nconst Heading = ({ children }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-center__heading welcome-screen-decor virgil\" }, { children: children })));\n};\nHeading.displayName = \"Heading\";\nconst Menu = ({ children }) => {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-menu\" }, { children: children }));\n};\nMenu.displayName = \"Menu\";\nconst MenuItemHelp = () => {\n const actionManager = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useExcalidrawActionManager)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItem, Object.assign({ onSelect: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_1__.actionShortcuts), shortcut: \"?\", icon: _icons__WEBPACK_IMPORTED_MODULE_6__.HelpIcon }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"helpDialog.title\") })));\n};\nMenuItemHelp.displayName = \"MenuItemHelp\";\nconst MenuItemLoadScene = () => {\n const appState = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useExcalidrawAppState)();\n const actionManager = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useExcalidrawActionManager)();\n if (appState.viewModeEnabled) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItem, Object.assign({ onSelect: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_1__.actionLoadScene), shortcut: (0,_actions_shortcuts__WEBPACK_IMPORTED_MODULE_2__.getShortcutFromShortcutName)(\"loadScene\"), icon: _icons__WEBPACK_IMPORTED_MODULE_6__.LoadIcon }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.load\") })));\n};\nMenuItemLoadScene.displayName = \"MenuItemLoadScene\";\nconst MenuItemLiveCollaborationTrigger = ({ onSelect, }) => {\n // FIXME when we tie t() to lang state\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const appState = (0,_App__WEBPACK_IMPORTED_MODULE_4__.useExcalidrawAppState)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(WelcomeScreenMenuItem, Object.assign({ shortcut: null, onSelect: onSelect, icon: _icons__WEBPACK_IMPORTED_MODULE_6__.usersIcon }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"labels.liveCollaboration\") })));\n};\nMenuItemLiveCollaborationTrigger.displayName =\n \"MenuItemLiveCollaborationTrigger\";\n// -----------------------------------------------------------------------------\nCenter.Logo = Logo;\nCenter.Heading = Heading;\nCenter.Menu = Menu;\nCenter.MenuItem = WelcomeScreenMenuItem;\nCenter.MenuItemLink = WelcomeScreenMenuItemLink;\nCenter.MenuItemHelp = MenuItemHelp;\nCenter.MenuItemLoadScene = MenuItemLoadScene;\nCenter.MenuItemLiveCollaborationTrigger = MenuItemLiveCollaborationTrigger;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy93ZWxjb21lLXNjcmVlbi9XZWxjb21lU2NyZWVuLkNlbnRlci50c3guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUU7QUFDSztBQUN2QztBQUtmO0FBQ2dDO0FBQ29CO0FBRXBFLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxFQUNwQyxJQUFJLEVBQ0osUUFBUSxFQUNSLFFBQVEsR0FLVCxFQUFFLEVBQUU7SUFDSCxNQUFNLE1BQU0sR0FBRywrQ0FBUyxFQUFFLENBQUM7SUFDM0IsT0FBTyxDQUNMLDhIQUNFLDhFQUFLLFNBQVMsRUFBQyxnQ0FBZ0MsZ0JBQUUsSUFBSSxJQUFPLEVBQzVELDhFQUFLLFNBQVMsRUFBQyxnQ0FBZ0MsZ0JBQUUsUUFBUSxJQUFPLEVBQy9ELFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FDL0IsOEVBQUssU0FBUyxFQUFDLG9DQUFvQyxnQkFBRSxRQUFRLElBQU8sQ0FDckUsSUFDQSxDQUNKLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRiw0QkFBNEIsQ0FBQyxXQUFXLEdBQUcsOEJBQThCLENBQUM7QUFFMUUsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBWWtCLEVBQUUsRUFBRTtRQVp0QixFQUM3QixRQUFRLEVBQ1IsUUFBUSxFQUNSLElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxHQUFHLEVBQUUsT0FPaUMsRUFONUMsS0FBSyxjQU5xQix5REFPOUIsQ0FEUztJQU9SLE9BQU8sQ0FDTCxtRkFDTSxLQUFLLElBQ1QsSUFBSSxFQUFDLFFBQVEsRUFDYixTQUFTLEVBQUUsNEJBQTRCLFNBQVMsRUFBRSxFQUNsRCxPQUFPLEVBQUUsUUFBUSxnQkFFakIsdURBQUMsNEJBQTRCLGtCQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsZ0JBQ3pELFFBQVEsSUFDb0IsSUFDeEIsQ0FDVixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YscUJBQXFCLENBQUMs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RXpEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvd2VsY29tZS1zY3JlZW4vV2VsY29tZVNjcmVlbi5DZW50ZXIudHN4P2Q3YzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWN0aW9uTG9hZFNjZW5lLCBhY3Rpb25TaG9ydGN1dHMgfSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgZ2V0U2hvcnRjdXRGcm9tU2hvcnRjdXROYW1lIH0gZnJvbSBcIi4uLy4uL2FjdGlvbnMvc2hvcnRjdXRzXCI7XG5pbXBvcnQgeyB0IH0gZnJvbSBcIi4uLy4uL2kxOG5cIjtcbmltcG9ydCB7XG4gIHVzZURldmljZSxcbiAgdXNlRXhjYWxpZHJhd0FjdGlvbk1hbmFnZXIsXG4gIHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSxcbn0gZnJvbSBcIi4uL0FwcFwiO1xuaW1wb3J0IHsgdXNlVHVubmVscyB9IGZyb20gXCIuLi9jb250ZXh0L3R1bm5lbHNcIjtcbmltcG9ydCB7IEV4Y2FsTG9nbywgSGVscEljb24sIExvYWRJY29uLCB1c2Vyc0ljb24gfSBmcm9tIFwiLi4vaWNvbnNcIjtcblxuY29uc3QgV2VsY29tZVNjcmVlbk1lbnVJdGVtQ29udGVudCA9ICh7XG4gIGljb24sXG4gIHNob3J0Y3V0LFxuICBjaGlsZHJlbixcbn06IHtcbiAgaWNvbj86IEpTWC5FbGVtZW50O1xuICBzaG9ydGN1dD86IHN0cmluZyB8IG51bGw7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59KSA9PiB7XG4gIGNvbnN0IGRldmljZSA9IHVzZURldmljZSgpO1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlbGNvbWUtc2NyZWVuLW1lbnUtaXRlbV9faWNvblwiPntpY29ufTwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWxjb21lLXNjcmVlbi1tZW51LWl0ZW1fX3RleHRcIj57Y2hpbGRyZW59PC9kaXY+XG4gICAgICB7c2hvcnRjdXQgJiYgIWRldmljZS5pc01vYmlsZSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tbWVudS1pdGVtX19zaG9ydGN1dFwiPntzaG9ydGN1dH08L2Rpdj5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59O1xuV2VsY29tZVNjcmVlbk1lbnVJdGVtQ29udGVudC5kaXNwbGF5TmFtZSA9IFwiV2VsY29tZVNjcmVlbk1lbnVJdGVtQ29udGVudFwiO1xuXG5jb25zdCBXZWxjb21lU2NyZWVuTWVudUl0ZW0gPSAoe1xuICBvblNlbGVjdCxcbiAgY2hpbGRyZW4sXG4gIGljb24sXG4gIHNob3J0Y3V0LFxuICBjbGFzc05hbWUgPSBcIlwiLFxuICAuLi5wcm9wc1xufToge1xuICBvblNlbGVjdDogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaWNvbj86IEpTWC5FbGVtZW50O1xuICBzaG9ydGN1dD86IHN0cmluZyB8IG51bGw7XG59ICYgUmVhY3QuQnV0dG9uSFRNTEF0dHJpYnV0ZXM8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgey4uLnByb3BzfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2B3ZWxjb21lLXNjcmVlbi1tZW51LWl0ZW0gJHtjbGFzc05hbWV9YH1cbiAgICAgIG9uQ2xpY2s9e29uU2VsZWN0fVxuICAgID5cbiAgICAgIDxXZWxjb21lU2NyZWVuTWVudUl0ZW1Db250ZW50IGljb249e2ljb259IHNob3J0Y3V0PXtzaG9ydGN1dH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvV2VsY29tZVNjcmVlbk1lbnVJdGVtQ29udGVudD5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn07XG5XZWxjb21lU2NyZWVuTWVudUl0ZW0uZGlzcGxheU5hbWUgPSBcIldlbGNvbWVTY3JlZW5NZW51SXRlbVwiO1xuXG5jb25zdCBXZWxjb21lU2NyZWVuTWVudUl0ZW1MaW5rID0gKHtcbiAgY2hpbGRyZW4sXG4gIGhyZWYsXG4gIGljb24sXG4gIHNob3J0Y3V0LFxuICBjbGFzc05hbWUgPSBcIlwiLFxuICAuLi5wcm9wc1xufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBocmVmOiBzdHJpbmc7XG4gIGljb24/OiBKU1guRWxlbWVudDtcbiAgc2hvcnRjdXQ/OiBzdHJpbmcgfCBudWxsO1xufSAmIFJlYWN0LkFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICB7Li4ucHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2B3ZWxjb21lLXNjcmVlbi1tZW51LWl0ZW0gJHtjbGFzc05hbWV9YH1cbiAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgcmVsPVwibm9yZWZlcnJlclwiXG4gICAgPlxuICAgICAgPFdlbGNvbWVTY3JlZW5NZW51SXRlbUNvbnRlbnQgaWNvbj17aWNvbn0gc2hvcnRjdXQ9e3Nob3J0Y3V0fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9XZWxjb21lU2NyZWVuTWVudUl0ZW1Db250ZW50PlxuICAgIDwvYT5cbiAgKTtcbn07XG5XZWxjb21lU2NyZWVuTWVudUl0ZW1MaW5rLmRpc3BsYXlOYW1lID0gXCJXZWxjb21lU2NyZWVuTWVudUl0ZW1MaW5rXCI7XG5cbmNvbnN0IENlbnRlciA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICBjb25zdCB7IHdlbGNvbWVTY3JlZW5DZW50ZXJUdW5uZWwgfSA9IHVzZVR1bm5lbHMoKTtcbiAgcmV0dXJuIChcbiAgICA8d2VsY29tZVNjcmVlbkNlbnRlclR1bm5lbC5Jbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tY2VudGVyXCI+XG4gICAgICAgIHtjaGlsZHJlbiB8fCAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxMb2dvIC8+XG4gICAgICAgICAgICA8SGVhZGluZz57dChcIndlbGNvbWVTY3JlZW4uZGVmYXVsdHMuY2VudGVyX2hlYWRpbmdcIil9PC9IZWFkaW5nPlxuICAgICAgICAgICAgPE1lbnU+XG4gICAgICAgICAgICAgIDxNZW51SXRlbUxvYWRTY2VuZSAvPlxuICAgICAgICAgICAgICA8TWVudUl0ZW1IZWxwIC8+XG4gICAgICAgICAgICA8L01lbnU+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L3dlbGNvbWVTY3JlZW5DZW50ZXJUdW5uZWwuSW4+XG4gICk7XG59O1xuQ2VudGVyLmRpc3BsYXlOYW1lID0gXCJDZW50ZXJcIjtcblxuY29uc3QgTG9nbyA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tY2VudGVyX19sb2dvIHZpcmdpbCB3ZWxjb21lLXNjcmVlbi1kZWNvclwiPlxuICAgICAge2NoaWxkcmVuIHx8IDw+e0V4Y2FsTG9nb30gRXhjYWxpZHJhdzwvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5Mb2dvLmRpc3BsYXlOYW1lID0gXCJMb2dvXCI7XG5cbmNvbnN0IEhlYWRpbmcgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tY2VudGVyX19oZWFkaW5nIHdlbGNvbWUtc2NyZWVuLWRlY29yIHZpcmdpbFwiPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufTtcbkhlYWRpbmcuZGlzcGxheU5hbWUgPSBcIkhlYWRpbmdcIjtcblxuY29uc3QgTWVudSA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ3ZWxjb21lLXNjcmVlbi1tZW51XCI+e2NoaWxkcmVufTwvZGl2Pjtcbn07XG5NZW51LmRpc3BsYXlOYW1lID0gXCJNZW51XCI7XG5cbmNvbnN0IE1lbnVJdGVtSGVscCA9ICgpID0+IHtcbiAgY29uc3QgYWN0aW9uTWFuYWdlciA9IHVzZUV4Y2FsaWRyYXdBY3Rpb25NYW5hZ2VyKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8V2VsY29tZVNjcmVlbk1lbnVJdGVtXG4gICAgICBvblNlbGVjdD17KCkgPT4gYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvblNob3J0Y3V0cyl9XG4gICAgICBzaG9ydGN1dD1cIj9cIlxuICAgICAgaWNvbj17SGVscEljb259XG4gICAgPlxuICAgICAge3QoXCJoZWxwRGlhbG9nLnRpdGxlXCIpfVxuICAgIDwvV2VsY29tZVNjcmVlbk1lbnVJdGVtPlxuICApO1xufTtcbk1lbnVJdGVtSGVscC5kaXNwbGF5TmFtZSA9IFwiTWVudUl0ZW1IZWxwXCI7XG5cbmNvbnN0IE1lbnVJdGVtTG9hZFNjZW5lID0gKCkgPT4ge1xuICBjb25zdCBhcHBTdGF0ZSA9IHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSgpO1xuICBjb25zdCBhY3Rpb25NYW5hZ2VyID0gdXNlRXhjYWxpZHJhd0FjdGlvbk1hbmFnZXIoKTtcblxuICBpZiAoYXBwU3RhdGUudmlld01vZGVFbmFibGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxXZWxjb21lU2NyZWVuTWVudUl0ZW1cbiAgICAgIG9uU2VsZWN0PXsoKSA9PiBhY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uTG9hZFNjZW5lKX1cbiAgICAgIHNob3J0Y3V0PXtnZXRTaG9ydGN1dEZyb21TaG9ydGN1dE5hbWUoXCJsb2FkU2NlbmVcIil9XG4gICAgICBpY29uPXtMb2FkSWNvbn1cbiAgICA+XG4gICAgICB7dChcImJ1dHRvbnMubG9hZFwiKX1cbiAgICA8L1dlbGNvbWVTY3JlZW5NZW51SXRlbT5cbiAgKTtcbn07XG5NZW51SXRlbUxvYWRTY2VuZS5kaXNwbGF5TmFtZSA9IFwiTWVudUl0ZW1Mb2FkU2NlbmVcIjtcblxuY29uc3QgTWVudUl0ZW1MaXZlQ29sbGFib3JhdGlvblRyaWdnZXIgPSAoe1xuICBvblNlbGVjdCxcbn06IHtcbiAgb25TZWxlY3Q6ICgpID0+IGFueTtcbn0pID0+IHtcbiAgLy8gRklYTUUgd2hlbiB3ZSB0aWUgdCgpIHRvIGxhbmcgc3RhdGVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdCBhcHBTdGF0ZSA9IHVzZUV4Y2FsaWRyYXdBcHBTdGF0ZSgpO1xuXG4gIHJldHVybiAoXG4gICAgPFdlbGNvbWVTY3JlZW5NZW51SXRlbSBzaG9ydGN1dD17bnVsbH0gb25TZWxlY3Q9e29uU2VsZWN0fSBpY29uPXt1c2Vyc0ljb259PlxuICAgICAge3QoXCJsYWJlbHMubGl2ZUNvbGxhYm9yYXRpb25cIil9XG4gICAgPC9XZWxjb21lU2NyZWVuTWVudUl0ZW0+XG4gICk7XG59O1xuTWVudUl0ZW1MaXZlQ29sbGFib3JhdGlvblRyaWdnZXIuZGlzcGxheU5hbWUgPVxuICBcIk1lbnVJdGVtTGl2ZUNvbGxhYm9yYXRpb25UcmlnZ2VyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkNlbnRlci5Mb2dvID0gTG9nbztcbkNlbnRlci5IZWFkaW5nID0gSGVhZGluZztcbkNlbnRlci5NZW51ID0gTWVudTtcbkNlbnRlci5NZW51SXRlbSA9IFdlbGNvbWVTY3JlZW5NZW51SXRlbTtcbkNlbnRlci5NZW51SXRlbUxpbmsgPSBXZWxjb21lU2NyZWVuTWVudUl0ZW1MaW5rO1xuQ2VudGVyLk1lbnVJdGVtSGVscCA9IE1lbnVJdGVtSGVscDtcbkNlbnRlci5NZW51SXRlbUxvYWRTY2VuZSA9IE1lbnVJdGVtTG9hZFNjZW5lO1xuQ2VudGVyLk1lbnVJdGVtTGl2ZUNvbGxhYm9yYXRpb25UcmlnZ2VyID0gTWVudUl0ZW1MaXZlQ29sbGFib3JhdGlvblRyaWdnZXI7XG5cbmV4cG9ydCB7IENlbnRlciB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/welcome-screen/WelcomeScreen.Center.tsx\n");
3211
3211
 
3212
3212
  /***/ }),
3213
3213
 
@@ -3218,7 +3218,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3218
3218
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3219
3219
 
3220
3220
  "use strict";
3221
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HelpHint\": () => (/* binding */ HelpHint),\n/* harmony export */ \"MenuHint\": () => (/* binding */ MenuHint),\n/* harmony export */ \"ToolbarHint\": () => (/* binding */ ToolbarHint)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _tunnels__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../tunnels */ \"../../components/tunnels.ts\");\n\n\n\n\nconst MenuHint = ({ children }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_3__.welcomeScreenMenuHintTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"virgil welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--menu\" }, { children: [_icons__WEBPACK_IMPORTED_MODULE_2__.WelcomeScreenMenuArrow, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-decor-hint__label\" }, { children: children || (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.t)(\"welcomeScreen.defaults.menuHint\") }))] })) }));\n};\nMenuHint.displayName = \"MenuHint\";\nconst ToolbarHint = ({ children }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_3__.welcomeScreenToolbarHintTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"virgil welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--toolbar\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-decor-hint__label\" }, { children: children || (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.t)(\"welcomeScreen.defaults.toolbarHint\") })), _icons__WEBPACK_IMPORTED_MODULE_2__.WelcomeScreenTopToolbarArrow] })) }));\n};\nToolbarHint.displayName = \"ToolbarHint\";\nconst HelpHint = ({ children }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_tunnels__WEBPACK_IMPORTED_MODULE_3__.welcomeScreenHelpHintTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"virgil welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--help\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { children: children || (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.t)(\"welcomeScreen.defaults.helpHint\") }), _icons__WEBPACK_IMPORTED_MODULE_2__.WelcomeScreenHelpArrow] })) }));\n};\nHelpHint.displayName = \"HelpHint\";\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy93ZWxjb21lLXNjcmVlbi9XZWxjb21lU2NyZWVuLkhpbnRzLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUErQjtBQUtiO0FBS0U7QUFFcEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBa0MsRUFBRSxFQUFFO0lBQ2hFLE9BQU8sQ0FDTCx1REFBQyxvRUFBOEIsY0FDN0IsK0VBQUssU0FBUyxFQUFDLHVGQUF1RixpQkFDbkcsMERBQXNCLEVBQ3ZCLDhFQUFLLFNBQVMsRUFBQyxrQ0FBa0MsZ0JBQzlDLFFBQVEsSUFBSSx3Q0FBQyxDQUFDLGlDQUFpQyxDQUFDLElBQzdDLEtBQ0YsR0FDeUIsQ0FDbEMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGLFFBQVEsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBRWxDLE1BQU0sV0FBVyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQWtDLEVBQUUsRUFBRTtJQUNuRSxPQUFPLENBQ0wsdURBQUMsdUVBQWlDLGNBQ2hDLCtFQUFLLFNBQVMsRUFBQywwRkFBMEYsaUJBQ3ZHLDhFQUFLLFNBQVMsRUFBQyxrQ0FBa0MsZ0JBQzlDLFFBQVEsSUFBSSx3Q0FBQyxDQUFDLG9DQUFvQyxDQUFDLElBQ2hELEVBQ0wsZ0VBQTRCLEtBQ3pCLEdBQzRCLENBQ3JDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixXQUFXLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUV4QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFrQyxFQUFFLEVBQUU7SUFDaEUsT0FBTyxDQUNMLHVEQUFDLG9FQUE4QixjQUM3QiwrRUFBSyxTQUFTLEVBQUMsdUZBQXVGLGlCQUNwRywwRUFBTSxRQUFRLElBQUksd0NBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxHQUFPLEVBQzVELDBEQUFzQixLQUNuQixHQUN5QixDQUNsQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFFUyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL3dlbGNvbWUtc2NyZWVuL1dlbGNvbWVTY3JlZW4uSGludHMudHN4PzRlNjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdCB9IGZyb20gXCIuLi8uLi9pMThuXCI7XG5pbXBvcnQge1xuICBXZWxjb21lU2NyZWVuSGVscEFycm93LFxuICBXZWxjb21lU2NyZWVuTWVudUFycm93LFxuICBXZWxjb21lU2NyZWVuVG9wVG9vbGJhckFycm93LFxufSBmcm9tIFwiLi4vaWNvbnNcIjtcbmltcG9ydCB7XG4gIHdlbGNvbWVTY3JlZW5NZW51SGludFR1bm5lbCxcbiAgd2VsY29tZVNjcmVlblRvb2xiYXJIaW50VHVubmVsLFxuICB3ZWxjb21lU2NyZWVuSGVscEhpbnRUdW5uZWwsXG59IGZyb20gXCIuLi90dW5uZWxzXCI7XG5cbmNvbnN0IE1lbnVIaW50ID0gKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHdlbGNvbWVTY3JlZW5NZW51SGludFR1bm5lbC5Jbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidmlyZ2lsIHdlbGNvbWUtc2NyZWVuLWRlY29yIHdlbGNvbWUtc2NyZWVuLWRlY29yLWhpbnQgd2VsY29tZS1zY3JlZW4tZGVjb3ItaGludC0tbWVudVwiPlxuICAgICAgICB7V2VsY29tZVNjcmVlbk1lbnVBcnJvd31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWxjb21lLXNjcmVlbi1kZWNvci1oaW50X19sYWJlbFwiPlxuICAgICAgICAgIHtjaGlsZHJlbiB8fCB0KFwid2VsY29tZVNjcmVlbi5kZWZhdWx0cy5tZW51SGludFwiKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3dlbGNvbWVTY3JlZW5NZW51SGludFR1bm5lbC5Jbj5cbiAgKTtcbn07XG5NZW51SGludC5kaXNwbGF5TmFtZSA9IFwiTWVudUhpbnRcIjtcblxuY29uc3QgVG9vbGJhckhpbnQgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8d2VsY29tZVNjcmVlblRvb2xiYXJIaW50VHVubmVsLkluPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ2aXJnaWwgd2VsY29tZS1zY3JlZW4tZGVjb3Igd2VsY29tZS1zY3JlZW4tZGVjb3ItaGludCB3ZWxjb21lLXNjcmVlbi1kZWNvci1oaW50LS10b29sYmFyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2VsY29tZS1zY3JlZW4tZGVjb3ItaGludF9fbGFiZWxcIj5cbiAgICAgICAgICB7Y2hpbGRyZW4gfHwgdChcIndlbGNvbWVTY3JlZW4uZGVmYXVsdHMudG9vbGJhckhpbnRcIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7V2VsY29tZVNjcmVlblRvcFRvb2xiYXJBcnJvd31cbiAgICAgIDwvZGl2PlxuICAgIDwvd2VsY29tZVNjcmVlblRvb2xiYXJIaW50VHVubmVsLkluPlxuICApO1xufTtcblRvb2xiYXJIaW50LmRpc3BsYXlOYW1lID0gXCJUb29sYmFySGludFwiO1xuXG5jb25zdCBIZWxwSGludCA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDx3ZWxjb21lU2NyZWVuSGVscEhpbnRUdW5uZWwuSW4+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInZpcmdpbCB3ZWxjb21lLXNjcmVlbi1kZWNvciB3ZWxjb21lLXNjcmVlbi1kZWNvci1oaW50IHdlbGNvbWUtc2NyZWVuLWRlY29yLWhpbnQtLWhlbHBcIj5cbiAgICAgICAgPGRpdj57Y2hpbGRyZW4gfHwgdChcIndlbGNvbWVTY3JlZW4uZGVmYXVsdHMuaGVscEhpbnRcIil9PC9kaXY+XG4gICAgICAgIHtXZWxjb21lU2NyZWVuSGVscEFycm93fVxuICAgICAgPC9kaXY+XG4gICAgPC93ZWxjb21lU2NyZWVuSGVscEhpbnRUdW5uZWwuSW4+XG4gICk7XG59O1xuSGVscEhpbnQuZGlzcGxheU5hbWUgPSBcIkhlbHBIaW50XCI7XG5cbmV4cG9ydCB7IEhlbHBIaW50LCBNZW51SGludCwgVG9vbGJhckhpbnQgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/welcome-screen/WelcomeScreen.Hints.tsx\n");
3221
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HelpHint\": () => (/* binding */ HelpHint),\n/* harmony export */ \"MenuHint\": () => (/* binding */ MenuHint),\n/* harmony export */ \"ToolbarHint\": () => (/* binding */ ToolbarHint)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _context_tunnels__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../context/tunnels */ \"../../components/context/tunnels.ts\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons */ \"../../components/icons.tsx\");\n\n\n\n\nconst MenuHint = ({ children }) => {\n const { welcomeScreenMenuHintTunnel } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_2__.useTunnels)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(welcomeScreenMenuHintTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"virgil welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--menu\" }, { children: [_icons__WEBPACK_IMPORTED_MODULE_3__.WelcomeScreenMenuArrow, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-decor-hint__label\" }, { children: children || (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.t)(\"welcomeScreen.defaults.menuHint\") }))] })) }));\n};\nMenuHint.displayName = \"MenuHint\";\nconst ToolbarHint = ({ children }) => {\n const { welcomeScreenToolbarHintTunnel } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_2__.useTunnels)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(welcomeScreenToolbarHintTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"virgil welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--toolbar\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"welcome-screen-decor-hint__label\" }, { children: children || (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.t)(\"welcomeScreen.defaults.toolbarHint\") })), _icons__WEBPACK_IMPORTED_MODULE_3__.WelcomeScreenTopToolbarArrow] })) }));\n};\nToolbarHint.displayName = \"ToolbarHint\";\nconst HelpHint = ({ children }) => {\n const { welcomeScreenHelpHintTunnel } = (0,_context_tunnels__WEBPACK_IMPORTED_MODULE_2__.useTunnels)();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(welcomeScreenHelpHintTunnel.In, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"virgil welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--help\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { children: children || (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.t)(\"welcomeScreen.defaults.helpHint\") }), _icons__WEBPACK_IMPORTED_MODULE_3__.WelcomeScreenHelpArrow] })) }));\n};\nHelpHint.displayName = \"HelpHint\";\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy93ZWxjb21lLXNjcmVlbi9XZWxjb21lU2NyZWVuLkhpbnRzLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUErQjtBQUNpQjtBQUs5QjtBQUVsQixNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFrQyxFQUFFLEVBQUU7SUFDaEUsTUFBTSxFQUFFLDJCQUEyQixFQUFFLEdBQUcsNERBQVUsRUFBRSxDQUFDO0lBQ3JELE9BQU8sQ0FDTCx1REFBQywyQkFBMkIsQ0FBQyxFQUFFLGNBQzdCLCtFQUFLLFNBQVMsRUFBQyx1RkFBdUYsaUJBQ25HLDBEQUFzQixFQUN2Qiw4RUFBSyxTQUFTLEVBQUMsa0NBQWtDLGdCQUM5QyxRQUFRLElBQUksd0NBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUM3QyxLQUNGLEdBQ3lCLENBQ2xDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixRQUFRLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUVsQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFrQyxFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLDhCQUE4QixFQUFFLEdBQUcsNERBQVUsRUFBRSxDQUFDO0lBQ3hELE9BQU8sQ0FDTCx1REFBQyw4QkFBOEIsQ0FBQyxFQUFFLGNBQ2hDLCtFQUFLLFNBQVMsRUFBQywwRkFBMEYsaUJBQ3ZHLDhFQUFLLFNBQVMsRUFBQyxrQ0FBa0MsZ0JBQzlDLFFBQVEsSUFBSSx3Q0FBQyxDQUFDLG9DQUFvQyxDQUFDLElBQ2hELEVBQ0wsZ0VBQTRCLEtBQ3pCLEdBQzRCLENBQ3JDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixXQUFXLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUV4QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFrQyxFQUFFLEVBQUU7SUFDaEUsTUFBTSxFQUFFLDJCQUEyQixFQUFFLEdBQUcsNERBQVUsRUFBRSxDQUFDO0lBQ3JELE9BQU8sQ0FDTCx1REFBQywyQkFBMkIsQ0FBQyxFQUFFLGNBQzdCLCtFQUFLLFNBQVMsRUFBQyx1RkFBdUYsaUJBQ3BHLDBFQUFNLFFBQVEsSUFBSSx3Q0FBQyxDQUFDLGlDQUFpQyxDQUFDLEdBQU8sRUFDNUQsMERBQXNCLEtBQ25CLEdBQ3lCLENBQ2xDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixRQUFRLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUVTIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvd2VsY29tZS1zY3JlZW4vV2VsY29tZVNjcmVlbi5IaW50cy50c3g/NGU2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0IH0gZnJvbSBcIi4uLy4uL2kxOG5cIjtcbmltcG9ydCB7IHVzZVR1bm5lbHMgfSBmcm9tIFwiLi4vY29udGV4dC90dW5uZWxzXCI7XG5pbXBvcnQge1xuICBXZWxjb21lU2NyZWVuSGVscEFycm93LFxuICBXZWxjb21lU2NyZWVuTWVudUFycm93LFxuICBXZWxjb21lU2NyZWVuVG9wVG9vbGJhckFycm93LFxufSBmcm9tIFwiLi4vaWNvbnNcIjtcblxuY29uc3QgTWVudUhpbnQgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIH0pID0+IHtcbiAgY29uc3QgeyB3ZWxjb21lU2NyZWVuTWVudUhpbnRUdW5uZWwgfSA9IHVzZVR1bm5lbHMoKTtcbiAgcmV0dXJuIChcbiAgICA8d2VsY29tZVNjcmVlbk1lbnVIaW50VHVubmVsLkluPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ2aXJnaWwgd2VsY29tZS1zY3JlZW4tZGVjb3Igd2VsY29tZS1zY3JlZW4tZGVjb3ItaGludCB3ZWxjb21lLXNjcmVlbi1kZWNvci1oaW50LS1tZW51XCI+XG4gICAgICAgIHtXZWxjb21lU2NyZWVuTWVudUFycm93fVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlbGNvbWUtc2NyZWVuLWRlY29yLWhpbnRfX2xhYmVsXCI+XG4gICAgICAgICAge2NoaWxkcmVuIHx8IHQoXCJ3ZWxjb21lU2NyZWVuLmRlZmF1bHRzLm1lbnVIaW50XCIpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvd2VsY29tZVNjcmVlbk1lbnVIaW50VHVubmVsLkluPlxuICApO1xufTtcbk1lbnVIaW50LmRpc3BsYXlOYW1lID0gXCJNZW51SGludFwiO1xuXG5jb25zdCBUb29sYmFySGludCA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSkgPT4ge1xuICBjb25zdCB7IHdlbGNvbWVTY3JlZW5Ub29sYmFySGludFR1bm5lbCB9ID0gdXNlVHVubmVscygpO1xuICByZXR1cm4gKFxuICAgIDx3ZWxjb21lU2NyZWVuVG9vbGJhckhpbnRUdW5uZWwuSW4+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInZpcmdpbCB3ZWxjb21lLXNjcmVlbi1kZWNvciB3ZWxjb21lLXNjcmVlbi1kZWNvci1oaW50IHdlbGNvbWUtc2NyZWVuLWRlY29yLWhpbnQtLXRvb2xiYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWxjb21lLXNjcmVlbi1kZWNvci1oaW50X19sYWJlbFwiPlxuICAgICAgICAgIHtjaGlsZHJlbiB8fCB0KFwid2VsY29tZVNjcmVlbi5kZWZhdWx0cy50b29sYmFySGludFwiKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtXZWxjb21lU2NyZWVuVG9wVG9vbGJhckFycm93fVxuICAgICAgPC9kaXY+XG4gICAgPC93ZWxjb21lU2NyZWVuVG9vbGJhckhpbnRUdW5uZWwuSW4+XG4gICk7XG59O1xuVG9vbGJhckhpbnQuZGlzcGxheU5hbWUgPSBcIlRvb2xiYXJIaW50XCI7XG5cbmNvbnN0IEhlbHBIaW50ID0gKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZSB9KSA9PiB7XG4gIGNvbnN0IHsgd2VsY29tZVNjcmVlbkhlbHBIaW50VHVubmVsIH0gPSB1c2VUdW5uZWxzKCk7XG4gIHJldHVybiAoXG4gICAgPHdlbGNvbWVTY3JlZW5IZWxwSGludFR1bm5lbC5Jbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidmlyZ2lsIHdlbGNvbWUtc2NyZWVuLWRlY29yIHdlbGNvbWUtc2NyZWVuLWRlY29yLWhpbnQgd2VsY29tZS1zY3JlZW4tZGVjb3ItaGludC0taGVscFwiPlxuICAgICAgICA8ZGl2PntjaGlsZHJlbiB8fCB0KFwid2VsY29tZVNjcmVlbi5kZWZhdWx0cy5oZWxwSGludFwiKX08L2Rpdj5cbiAgICAgICAge1dlbGNvbWVTY3JlZW5IZWxwQXJyb3d9XG4gICAgICA8L2Rpdj5cbiAgICA8L3dlbGNvbWVTY3JlZW5IZWxwSGludFR1bm5lbC5Jbj5cbiAgKTtcbn07XG5IZWxwSGludC5kaXNwbGF5TmFtZSA9IFwiSGVscEhpbnRcIjtcblxuZXhwb3J0IHsgSGVscEhpbnQsIE1lbnVIaW50LCBUb29sYmFySGludCB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/welcome-screen/WelcomeScreen.Hints.tsx\n");
3222
3222
 
3223
3223
  /***/ }),
3224
3224
 
@@ -3526,7 +3526,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3526
3526
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3527
3527
 
3528
3528
  "use strict";
3529
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"bindTextToShapeAfterDuplication\": () => (/* binding */ bindTextToShapeAfterDuplication),\n/* harmony export */ \"charWidth\": () => (/* binding */ charWidth),\n/* harmony export */ \"getApproxCharsToFitInWidth\": () => (/* binding */ getApproxCharsToFitInWidth),\n/* harmony export */ \"getApproxLineHeight\": () => (/* binding */ getApproxLineHeight),\n/* harmony export */ \"getApproxMinLineHeight\": () => (/* binding */ getApproxMinLineHeight),\n/* harmony export */ \"getApproxMinLineWidth\": () => (/* binding */ getApproxMinLineWidth),\n/* harmony export */ \"getBoundTextElement\": () => (/* binding */ getBoundTextElement),\n/* harmony export */ \"getBoundTextElementId\": () => (/* binding */ getBoundTextElementId),\n/* harmony export */ \"getBoundTextElementOffset\": () => (/* binding */ getBoundTextElementOffset),\n/* harmony export */ \"getBoundTextElementPosition\": () => (/* binding */ getBoundTextElementPosition),\n/* harmony export */ \"getContainerCenter\": () => (/* binding */ getContainerCenter),\n/* harmony export */ \"getContainerDims\": () => (/* binding */ getContainerDims),\n/* harmony export */ \"getContainerElement\": () => (/* binding */ getContainerElement),\n/* harmony export */ \"getMaxCharWidth\": () => (/* binding */ getMaxCharWidth),\n/* harmony export */ \"getMinCharWidth\": () => (/* binding */ getMinCharWidth),\n/* harmony export */ \"getTextBindableContainerAtPosition\": () => (/* binding */ getTextBindableContainerAtPosition),\n/* harmony export */ \"getTextElementAngle\": () => (/* binding */ getTextElementAngle),\n/* harmony export */ \"getTextWidth\": () => (/* binding */ getTextWidth),\n/* harmony export */ \"handleBindTextResize\": () => (/* binding */ handleBindTextResize),\n/* harmony export */ \"isValidTextContainer\": () => (/* binding */ isValidTextContainer),\n/* harmony export */ \"measureText\": () => (/* binding */ measureText),\n/* harmony export */ \"normalizeText\": () => (/* binding */ normalizeText),\n/* harmony export */ \"redrawTextBoundingBox\": () => (/* binding */ redrawTextBoundingBox),\n/* harmony export */ \"shouldAllowVerticalAlign\": () => (/* binding */ shouldAllowVerticalAlign),\n/* harmony export */ \"wrapText\": () => (/* binding */ wrapText)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _mutateElement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _scene_Scene__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../scene/Scene */ \"../../scene/Scene.ts\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _newElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _typeChecks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./linearElementEditor */ \"../../element/linearElementEditor.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _collision__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./collision */ \"../../element/collision.ts\");\n/* harmony import */ var _textWysiwyg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./textWysiwyg */ \"../../element/textWysiwyg.tsx\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst normalizeText = (text) => {\n return (text\n // replace tabs with spaces so they render and measure correctly\n .replace(/\\t/g, \" \")\n // normalize newlines\n .replace(/\\r?\\n|\\r/g, \"\\n\"));\n};\nconst redrawTextBoundingBox = (textElement, container) => {\n let maxWidth = undefined;\n let text = textElement.text;\n if (container) {\n maxWidth = (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.getMaxContainerWidth)(container);\n text = wrapText(textElement.originalText, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), maxWidth);\n }\n const metrics = measureText(text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), maxWidth);\n let coordY = textElement.y;\n let coordX = textElement.x;\n // Resize container and vertically center align the text\n if (container) {\n if (!(0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n const containerDims = getContainerDims(container);\n let nextHeight = containerDims.height;\n const boundTextElementPadding = getBoundTextElementOffset(textElement);\n if (textElement.verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.VERTICAL_ALIGN.TOP) {\n coordY = container.y + boundTextElementPadding;\n }\n else if (textElement.verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.VERTICAL_ALIGN.BOTTOM) {\n coordY =\n container.y +\n containerDims.height -\n metrics.height -\n boundTextElementPadding;\n }\n else {\n coordY = container.y + containerDims.height / 2 - metrics.height / 2;\n if (metrics.height > (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.getMaxContainerHeight)(container)) {\n nextHeight = metrics.height + boundTextElementPadding * 2;\n coordY = container.y + nextHeight / 2 - metrics.height / 2;\n }\n }\n if (textElement.textAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.TEXT_ALIGN.LEFT) {\n coordX = container.x + boundTextElementPadding;\n }\n else if (textElement.textAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.TEXT_ALIGN.RIGHT) {\n coordX =\n container.x +\n containerDims.width -\n metrics.width -\n boundTextElementPadding;\n }\n else {\n coordX = container.x + containerDims.width / 2 - metrics.width / 2;\n }\n (0,_textWysiwyg__WEBPACK_IMPORTED_MODULE_10__.updateOriginalContainerCache)(container.id, nextHeight);\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(container, { height: nextHeight });\n }\n else {\n const centerX = textElement.x + textElement.width / 2;\n const centerY = textElement.y + textElement.height / 2;\n const diffWidth = metrics.width - textElement.width;\n const diffHeight = metrics.height - textElement.height;\n coordY = centerY - (textElement.height + diffHeight) / 2;\n coordX = centerX - (textElement.width + diffWidth) / 2;\n }\n }\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(textElement, {\n width: metrics.width,\n height: metrics.height,\n baseline: metrics.baseline,\n y: coordY,\n x: coordX,\n text,\n });\n};\nconst bindTextToShapeAfterDuplication = (sceneElements, oldElements, oldIdToDuplicatedId) => {\n const sceneElementMap = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.arrayToMap)(sceneElements);\n oldElements.forEach((element) => {\n const newElementId = oldIdToDuplicatedId.get(element.id);\n const boundTextElementId = getBoundTextElementId(element);\n if (boundTextElementId) {\n const newTextElementId = oldIdToDuplicatedId.get(boundTextElementId);\n if (newTextElementId) {\n const newContainer = sceneElementMap.get(newElementId);\n if (newContainer) {\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(newContainer, {\n boundElements: (newContainer.boundElements || []).concat({\n type: \"text\",\n id: newTextElementId,\n }),\n });\n }\n const newTextElement = sceneElementMap.get(newTextElementId);\n if (newTextElement && (0,___WEBPACK_IMPORTED_MODULE_4__.isTextElement)(newTextElement)) {\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(newTextElement, {\n containerId: newContainer ? newElementId : null,\n });\n }\n }\n }\n });\n};\nconst handleBindTextResize = (container, transformHandleType) => {\n const boundTextElementId = getBoundTextElementId(container);\n if (!boundTextElementId) {\n return;\n }\n (0,_textWysiwyg__WEBPACK_IMPORTED_MODULE_10__.resetOriginalContainerCache)(container.id);\n let textElement = _scene_Scene__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getScene(container).getElement(boundTextElementId);\n if (textElement && textElement.text) {\n if (!container) {\n return;\n }\n textElement = _scene_Scene__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getScene(container).getElement(boundTextElementId);\n let text = textElement.text;\n let nextHeight = textElement.height;\n let nextWidth = textElement.width;\n const containerDims = getContainerDims(container);\n const maxWidth = (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.getMaxContainerWidth)(container);\n const maxHeight = (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.getMaxContainerHeight)(container);\n let containerHeight = containerDims.height;\n let nextBaseLine = textElement.baseline;\n if (transformHandleType !== \"n\" && transformHandleType !== \"s\") {\n if (text) {\n text = wrapText(textElement.originalText, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), maxWidth);\n }\n const dimensions = measureText(text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), maxWidth);\n nextHeight = dimensions.height;\n nextWidth = dimensions.width;\n nextBaseLine = dimensions.baseline;\n }\n // increase height in case text element height exceeds\n if (nextHeight > maxHeight) {\n containerHeight = nextHeight + getBoundTextElementOffset(textElement) * 2;\n const diff = containerHeight - containerDims.height;\n // fix the y coord when resizing from ne/nw/n\n const updatedY = !(0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container) &&\n (transformHandleType === \"ne\" ||\n transformHandleType === \"nw\" ||\n transformHandleType === \"n\")\n ? container.y - diff\n : container.y;\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(container, {\n height: containerHeight,\n y: updatedY,\n });\n }\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(textElement, {\n text,\n width: nextWidth,\n height: nextHeight,\n baseline: nextBaseLine,\n });\n if (!(0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n updateBoundTextPosition(container, textElement);\n }\n }\n};\nconst updateBoundTextPosition = (container, boundTextElement) => {\n const containerDims = getContainerDims(container);\n const boundTextElementPadding = getBoundTextElementOffset(boundTextElement);\n let y;\n if (boundTextElement.verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.VERTICAL_ALIGN.TOP) {\n y = container.y + boundTextElementPadding;\n }\n else if (boundTextElement.verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.VERTICAL_ALIGN.BOTTOM) {\n y =\n container.y +\n containerDims.height -\n boundTextElement.height -\n boundTextElementPadding;\n }\n else {\n y = container.y + containerDims.height / 2 - boundTextElement.height / 2;\n }\n const x = boundTextElement.textAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.TEXT_ALIGN.LEFT\n ? container.x + boundTextElementPadding\n : boundTextElement.textAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.TEXT_ALIGN.RIGHT\n ? container.x +\n containerDims.width -\n boundTextElement.width -\n boundTextElementPadding\n : container.x + containerDims.width / 2 - boundTextElement.width / 2;\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(boundTextElement, { x, y });\n};\n// https://github.com/grassator/canvas-text-editor/blob/master/lib/FontMetrics.js\nconst measureText = (text, font, maxWidth) => {\n text = text\n .split(\"\\n\")\n // replace empty lines with single space because leading/trailing empty\n // lines would be stripped from computation\n .map((x) => x || \" \")\n .join(\"\\n\");\n const container = document.createElement(\"div\");\n container.style.position = \"absolute\";\n container.style.whiteSpace = \"pre\";\n container.style.font = font;\n container.style.minHeight = \"1em\";\n if (maxWidth) {\n const lineHeight = getApproxLineHeight(font);\n // since we are adding a span of width 1px later\n container.style.maxWidth = `${maxWidth + 1}px`;\n container.style.overflow = \"hidden\";\n container.style.wordBreak = \"break-word\";\n container.style.lineHeight = `${String(lineHeight)}px`;\n container.style.whiteSpace = \"pre-wrap\";\n }\n document.body.appendChild(container);\n container.innerText = text;\n const span = document.createElement(\"span\");\n span.style.display = \"inline-block\";\n span.style.overflow = \"hidden\";\n span.style.width = \"1px\";\n span.style.height = \"1px\";\n container.appendChild(span);\n // Baseline is important for positioning text on canvas\n const baseline = span.offsetTop + span.offsetHeight;\n // since we are adding a span of width 1px\n const width = container.offsetWidth + 1;\n const height = container.offsetHeight;\n document.body.removeChild(container);\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isTestEnv)()) {\n return { width, height, baseline, container };\n }\n return { width, height, baseline };\n};\nconst DUMMY_TEXT = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\".toLocaleUpperCase();\nconst cacheApproxLineHeight = {};\nconst getApproxLineHeight = (font) => {\n if (cacheApproxLineHeight[font]) {\n return cacheApproxLineHeight[font];\n }\n cacheApproxLineHeight[font] = measureText(DUMMY_TEXT, font, null).height;\n return cacheApproxLineHeight[font];\n};\nlet canvas;\nconst getLineWidth = (text, font) => {\n if (!canvas) {\n canvas = document.createElement(\"canvas\");\n }\n const canvas2dContext = canvas.getContext(\"2d\");\n canvas2dContext.font = font;\n const metrics = canvas2dContext.measureText(text);\n // since in test env the canvas measureText algo\n // doesn't measure text and instead just returns number of\n // characters hence we assume that each letteris 10px\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isTestEnv)()) {\n return metrics.width * 10;\n }\n // Since measureText behaves differently in different browsers\n // OS so considering a adjustment factor of 0.2\n const adjustmentFactor = 0.2;\n return metrics.width + adjustmentFactor;\n};\nconst getTextWidth = (text, font) => {\n const lines = text.split(\"\\n\");\n let width = 0;\n lines.forEach((line) => {\n width = Math.max(width, getLineWidth(line, font));\n });\n return width;\n};\nconst wrapText = (text, font, maxWidth) => {\n const lines = [];\n const originalLines = text.split(\"\\n\");\n const spaceWidth = getLineWidth(\" \", font);\n const push = (str) => {\n if (str.trim()) {\n lines.push(str);\n }\n };\n originalLines.forEach((originalLine) => {\n const words = originalLine.split(\" \");\n // This means its newline so push it\n if (words.length === 1 && words[0] === \"\") {\n lines.push(words[0]);\n return; // continue\n }\n let currentLine = \"\";\n let currentLineWidthTillNow = 0;\n let index = 0;\n while (index < words.length) {\n const currentWordWidth = getLineWidth(words[index], font);\n // Start breaking longer words exceeding max width\n if (currentWordWidth >= maxWidth) {\n // push current line since the current word exceeds the max width\n // so will be appended in next line\n push(currentLine);\n currentLine = \"\";\n currentLineWidthTillNow = 0;\n while (words[index].length > 0) {\n const currentChar = String.fromCodePoint(words[index].codePointAt(0));\n const width = charWidth.calculate(currentChar, font);\n currentLineWidthTillNow += width;\n words[index] = words[index].slice(currentChar.length);\n if (currentLineWidthTillNow >= maxWidth) {\n // only remove last trailing space which we have added when joining words\n if (currentLine.slice(-1) === \" \") {\n currentLine = currentLine.slice(0, -1);\n }\n push(currentLine);\n currentLine = currentChar;\n currentLineWidthTillNow = width;\n }\n else {\n currentLine += currentChar;\n }\n }\n // push current line if appending space exceeds max width\n if (currentLineWidthTillNow + spaceWidth >= maxWidth) {\n push(currentLine);\n currentLine = \"\";\n currentLineWidthTillNow = 0;\n }\n else {\n // space needs to be appended before next word\n // as currentLine contains chars which couldn't be appended\n // to previous line\n currentLine += \" \";\n currentLineWidthTillNow += spaceWidth;\n }\n index++;\n }\n else {\n // Start appending words in a line till max width reached\n while (currentLineWidthTillNow < maxWidth && index < words.length) {\n const word = words[index];\n currentLineWidthTillNow = getLineWidth(currentLine + word, font);\n if (currentLineWidthTillNow >= maxWidth) {\n push(currentLine);\n currentLineWidthTillNow = 0;\n currentLine = \"\";\n break;\n }\n index++;\n currentLine += `${word} `;\n // Push the word if appending space exceeds max width\n if (currentLineWidthTillNow + spaceWidth >= maxWidth) {\n const word = currentLine.slice(0, -1);\n push(word);\n currentLine = \"\";\n currentLineWidthTillNow = 0;\n break;\n }\n }\n if (currentLineWidthTillNow === maxWidth) {\n currentLine = \"\";\n currentLineWidthTillNow = 0;\n }\n }\n }\n if (currentLine) {\n // only remove last trailing space which we have added when joining words\n if (currentLine.slice(-1) === \" \") {\n currentLine = currentLine.slice(0, -1);\n }\n push(currentLine);\n }\n });\n return lines.join(\"\\n\");\n};\nconst charWidth = (() => {\n const cachedCharWidth = {};\n const calculate = (char, font) => {\n const ascii = char.charCodeAt(0);\n if (!cachedCharWidth[font]) {\n cachedCharWidth[font] = [];\n }\n if (!cachedCharWidth[font][ascii]) {\n const width = getLineWidth(char, font);\n cachedCharWidth[font][ascii] = width;\n }\n return cachedCharWidth[font][ascii];\n };\n const getCache = (font) => {\n return cachedCharWidth[font];\n };\n return {\n calculate,\n getCache,\n };\n})();\nconst getApproxMinLineWidth = (font) => {\n const maxCharWidth = getMaxCharWidth(font);\n if (maxCharWidth === 0) {\n return (measureText(DUMMY_TEXT.split(\"\").join(\"\\n\"), font).width +\n _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 2);\n }\n return maxCharWidth + _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 2;\n};\nconst getApproxMinLineHeight = (font) => {\n return getApproxLineHeight(font) + _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 2;\n};\nconst getMinCharWidth = (font) => {\n const cache = charWidth.getCache(font);\n if (!cache) {\n return 0;\n }\n const cacheWithOutEmpty = cache.filter((val) => val !== undefined);\n return Math.min(...cacheWithOutEmpty);\n};\nconst getMaxCharWidth = (font) => {\n const cache = charWidth.getCache(font);\n if (!cache) {\n return 0;\n }\n const cacheWithOutEmpty = cache.filter((val) => val !== undefined);\n return Math.max(...cacheWithOutEmpty);\n};\nconst getApproxCharsToFitInWidth = (font, width) => {\n // Generally lower case is used so converting to lower case\n const dummyText = DUMMY_TEXT.toLocaleLowerCase();\n const batchLength = 6;\n let index = 0;\n let widthTillNow = 0;\n let str = \"\";\n while (widthTillNow <= width) {\n const batch = dummyText.substr(index, index + batchLength);\n str += batch;\n widthTillNow += getLineWidth(str, font);\n if (index === dummyText.length - 1) {\n index = 0;\n }\n index = index + batchLength;\n }\n while (widthTillNow > width) {\n str = str.substr(0, str.length - 1);\n widthTillNow = getLineWidth(str, font);\n }\n return str.length;\n};\nconst getBoundTextElementId = (container) => {\n var _a, _b, _c;\n return ((_a = container === null || container === void 0 ? void 0 : container.boundElements) === null || _a === void 0 ? void 0 : _a.length)\n ? ((_c = (_b = container === null || container === void 0 ? void 0 : container.boundElements) === null || _b === void 0 ? void 0 : _b.filter((ele) => ele.type === \"text\")[0]) === null || _c === void 0 ? void 0 : _c.id) ||\n null\n : null;\n};\nconst getBoundTextElement = (element) => {\n var _a;\n if (!element) {\n return null;\n }\n const boundTextElementId = getBoundTextElementId(element);\n if (boundTextElementId) {\n return (((_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(boundTextElementId)) || null);\n }\n return null;\n};\nconst getContainerElement = (element) => {\n var _a;\n if (!element) {\n return null;\n }\n if (element.containerId) {\n return ((_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(element.containerId)) || null;\n }\n return null;\n};\nconst getContainerDims = (element) => {\n const MIN_WIDTH = 300;\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(element)) {\n const width = Math.max(element.width, MIN_WIDTH);\n const height = element.height;\n return { width, height };\n }\n return { width: element.width, height: element.height };\n};\nconst getContainerCenter = (container, appState) => {\n if (!(0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return {\n x: container.x + container.width / 2,\n y: container.y + container.height / 2,\n };\n }\n const points = _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getPointsGlobalCoordinates(container);\n if (points.length % 2 === 1) {\n const index = Math.floor(container.points.length / 2);\n const midPoint = _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getPointGlobalCoordinates(container, container.points[index]);\n return { x: midPoint[0], y: midPoint[1] };\n }\n const index = container.points.length / 2 - 1;\n let midSegmentMidpoint = _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getEditorMidPoints(container, appState)[index];\n if (!midSegmentMidpoint) {\n midSegmentMidpoint = _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getSegmentMidPoint(container, points[index], points[index + 1], index + 1);\n }\n return { x: midSegmentMidpoint[0], y: midSegmentMidpoint[1] };\n};\nconst getTextElementAngle = (textElement) => {\n const container = getContainerElement(textElement);\n if (!container || (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return textElement.angle;\n }\n return container.angle;\n};\nconst getBoundTextElementOffset = (boundTextElement) => {\n const container = getContainerElement(boundTextElement);\n if (!container) {\n return 0;\n }\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 8;\n }\n return _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING;\n};\nconst getBoundTextElementPosition = (container, boundTextElement) => {\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getBoundTextElementPosition(container, boundTextElement);\n }\n};\nconst shouldAllowVerticalAlign = (selectedElements) => {\n return selectedElements.some((element) => {\n const hasBoundContainer = (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isBoundToContainer)(element);\n if (hasBoundContainer) {\n const container = getContainerElement(element);\n if ((0,___WEBPACK_IMPORTED_MODULE_4__.isTextElement)(element) && (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return false;\n }\n return true;\n }\n const boundTextElement = getBoundTextElement(element);\n if (boundTextElement) {\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(element)) {\n return false;\n }\n return true;\n }\n return false;\n });\n};\nconst getTextBindableContainerAtPosition = (elements, appState, x, y) => {\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_8__.getSelectedElements)(elements, appState);\n if (selectedElements.length === 1) {\n return (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isTextBindableContainer)(selectedElements[0], false)\n ? selectedElements[0]\n : null;\n }\n let hitElement = null;\n // We need to to hit testing from front (end of the array) to back (beginning of the array)\n for (let index = elements.length - 1; index >= 0; --index) {\n if (elements[index].isDeleted) {\n continue;\n }\n const [x1, y1, x2, y2] = (0,___WEBPACK_IMPORTED_MODULE_4__.getElementAbsoluteCoords)(elements[index]);\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(elements[index]) &&\n (0,_collision__WEBPACK_IMPORTED_MODULE_9__.isHittingElementNotConsideringBoundingBox)(elements[index], appState, [\n x,\n y,\n ])) {\n hitElement = elements[index];\n break;\n }\n else if (x1 < x && x < x2 && y1 < y && y < y2) {\n hitElement = elements[index];\n break;\n }\n }\n return (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isTextBindableContainer)(hitElement, false) ? hitElement : null;\n};\nconst isValidTextContainer = (element) => {\n return (element.type === \"rectangle\" ||\n element.type === \"ellipse\" ||\n element.type === \"diamond\" ||\n (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isImageElement)(element) ||\n (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(element));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLE1BQU07U0FDUDtLQUNGO0lBRUQsT0FBTyxvRUFBdUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hFLENBQUMsQ0FBQztBQUVLLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUEwQixFQUFFLEVBQUU7SUFDakUsT0FBTyxDQUNMLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVztRQUM1QixPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFDMUIsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTO1FBQzFCLDJEQUFjLENBQUMsT0FBTyxDQUFDO1FBQ3ZCLDJEQUFjLENBQUMsT0FBTyxDQUFDLENBQ3hCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vZWxlbWVudC90ZXh0RWxlbWVudC50cz80MmQyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEZvbnRTdHJpbmcsIGFycmF5VG9NYXAsIGlzVGVzdEVudiB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgRXhjYWxpZHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdUZXh0Q29udGFpbmVyLFxuICBFeGNhbGlkcmF3VGV4dEVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdUZXh0RWxlbWVudFdpdGhDb250YWluZXIsXG4gIEZvbnRTdHJpbmcsXG4gIE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IG11dGF0ZUVsZW1lbnQgfSBmcm9tIFwiLi9tdXRhdGVFbGVtZW50XCI7XG5pbXBvcnQgeyBCT1VORF9URVhUX1BBRERJTkcsIFRFWFRfQUxJR04sIFZFUlRJQ0FMX0FMSUdOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTWF5YmVUcmFuc2Zvcm1IYW5kbGVUeXBlIH0gZnJvbSBcIi4vdHJhbnNmb3JtSGFuZGxlc1wiO1xuaW1wb3J0IFNjZW5lIGZyb20gXCIuLi9zY2VuZS9TY2VuZVwiO1xuaW1wb3J0IHsgaXNUZXh0RWxlbWVudCB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBnZXRNYXhDb250YWluZXJIZWlnaHQsIGdldE1heENvbnRhaW5lcldpZHRoIH0gZnJvbSBcIi4vbmV3RWxlbWVudFwiO1xuaW1wb3J0IHtcbiAgaXNCb3VuZFRvQ29udGFpbmVyLFxuICBpc0ltYWdlRWxlbWVudCxcbiAgaXNBcnJvd0VsZW1lbnQsXG59IGZyb20gXCIuL3R5cGVDaGVja3NcIjtcbmltcG9ydCB7IExpbmVhckVsZW1lbnRFZGl0b3IgfSBmcm9tIFwiLi9saW5lYXJFbGVtZW50RWRpdG9yXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNUZXh0QmluZGFibGVDb250YWluZXIgfSBmcm9tIFwiLi90eXBlQ2hlY2tzXCI7XG5pbXBvcnQgeyBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgaXNIaXR0aW5nRWxlbWVudE5vdENvbnNpZGVyaW5nQm91bmRpbmdCb3ggfSBmcm9tIFwiLi9jb2xsaXNpb25cIjtcbmltcG9ydCB7XG4gIHJlc2V0T3JpZ2luYWxDb250YWluZXJDYWNoZSxcbiAgdXBkYXRlT3JpZ2luYWxDb250YWluZXJDYWNoZSxcbn0gZnJvbSBcIi4vdGV4dFd5c2l3eWdcIjtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVRleHQgPSAodGV4dDogc3RyaW5nKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdGV4dFxuICAgICAgLy8gcmVwbGFjZSB0YWJzIHdpdGggc3BhY2VzIHNvIHRoZXkgcmVuZGVyIGFuZCBtZWFzdXJlIGNvcnJlY3RseVxuICAgICAgLnJlcGxhY2UoL1xcdC9nLCBcIiAgICAgICAgXCIpXG4gICAgICAvLyBub3JtYWxpemUgbmV3bGluZXNcbiAgICAgIC5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCBcIlxcblwiKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHJhd1RleHRCb3VuZGluZ0JveCA9IChcbiAgdGV4dEVsZW1lbnQ6IEV4Y2FsaWRyYXdUZXh0RWxlbWVudCxcbiAgY29udGFpbmVyOiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwsXG4pID0+IHtcbiAgbGV0IG1heFdpZHRoID0gdW5kZWZpbmVkO1xuICBsZXQgdGV4dCA9IHRleHRFbGVtZW50LnRleHQ7XG4gIGlmIChjb250YWluZXIpIHtcbiAgICBtYXhXaWR0aCA9IGdldE1heENvbnRhaW5lcldpZHRoKGNvbnRhaW5lcik7XG4gICAgdGV4dCA9IHdyYXBUZXh0KFxuICAgICAgdGV4dEVsZW1lbnQub3JpZ2luYWxUZXh0LFxuICAgICAgZ2V0Rm9udFN0cmluZyh0ZXh0RWxlbWVudCksXG4gICAgICBtYXhXaWR0aCxcbiAgICApO1xuICB9XG4gIGNvbnN0IG1ldHJpY3MgPSBtZWFzdXJlVGV4dCh0ZXh0LCBnZXRGb250U3RyaW5nKHRleHRFbGVtZW50KSwgbWF4V2lkdGgpO1xuICBsZXQgY29vcmRZID0gdGV4dEVsZW1lbnQueTtcbiAgbGV0IGNvb3JkWCA9IHRleHRFbGVtZW50Lng7XG4gIC8vIFJlc2l6ZSBjb250YWluZXIgYW5kIHZlcnRpY2FsbHkgY2VudGVyIGFsaWduIHRoZSB0ZXh0XG4gIGlmIChjb250YWluZXIpIHtcbiAgICBpZiAoIWlzQXJyb3dFbGVtZW50KGNvbnRhaW5lcikpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckRpbXMgPSBnZXRDb250YWluZXJEaW1zKGNvbnRhaW5lcik7XG4gICAgICBsZXQgbmV4dEhlaWdodCA9IGNvbnRhaW5lckRpbXMuaGVpZ2h0O1xuICAgICAgY29uc3QgYm91bmRUZXh0RWxlbWVudFBhZGRpbmcgPSBnZXRCb3VuZFRleHRFbGVtZW50T2Zmc2V0KHRleHRFbGVtZW50KTtcbiAgICAgIGlmICh0ZXh0RWxlbWVudC52ZXJ0aWNhbEFsaWduID09PSBWRVJUSUNBTF9BTElHTi5UT1ApIHtcbiAgICAgICAgY29vcmRZID0gY29udGFpbmVyLnkgKyBib3VuZFRleHRFbGVtZW50UGFkZGluZztcbiAgICAgIH0gZWxzZSBpZiAodGV4dEVsZW1lbnQudmVydGljYWxBbGlnbiA9PT0gVkVSVElDQUxfQUxJR04uQk9UVE9NKSB7XG4gICAgICAgIGNvb3JkWSA9XG4gICAgICAgICAgY29udGFpbmVyLnkgK1xuICAgICAgICAgIGNvbnRhaW5lckRpbXMuaGVpZ2h0IC1cbiAgICAgICAgICBtZXRyaWNzLmhlaWdodCAtXG4gICAgICAgICAgYm91bmRUZXh0RWxlbWVudFBhZGRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb29yZFkgPSBjb250YWluZXIueSArIGNvbnRhaW5lckRpbXMuaGVpZ2h0IC8gMiAtIG1ldHJpY3MuaGVpZ2h0IC8gMjtcbiAgICAgICAgaWYgKG1ldHJpY3MuaGVpZ2h0ID4gZ2V0TWF4Q29udGFpbmVySGVpZ2h0KGNvbnRhaW5lcikpIHtcbiAgICAgICAgICBuZXh0SGVpZ2h0ID0gbWV0cmljcy5oZWlnaHQgKyBib3VuZFRleHRFbGVtZW50UGFkZGluZyAqIDI7XG4gICAgICAgICAgY29vcmRZID0gY29udGFpbmVyLnkgKyBuZXh0SGVpZ2h0IC8gMiAtIG1ldHJpY3MuaGVpZ2h0IC8gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRleHRFbGVtZW50LnRleHRBbGlnbiA9PT0gVEVYVF9BTElHTi5MRUZUKSB7XG4gICAgICAgIGNvb3JkWCA9IGNvbnRhaW5lci54ICsgYm91bmRUZXh0RWxlbWVudFBhZGRpbmc7XG4gICAgICB9IGVsc2UgaWYgKHRleHRFbGVtZW50LnRleHRBbGlnbiA9PT0gVEVYVF9BTElHTi5SSUdIVCkge1xuICAgICAgICBjb29yZFggPVxuICAgICAgICAgIGNvbnRhaW5lci54ICtcbiAgICAgICAgICBjb250YWluZXJEaW1zLndpZHRoIC1cbiAgICAgICAgICBtZXRyaWNzLndpZHRoIC1cbiAgICAgICAgICBib3VuZFRleHRFbGVtZW50UGFkZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvb3JkWCA9IGNvbnRhaW5lci54ICsgY29udGFpbmVyRGltcy53aWR0aCAvIDIgLSBtZXRyaWNzLndpZHRoIC8gMjtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZU9yaWdpbmFsQ29udGFpbmVyQ2FjaGUoY29udGFpbmVyLmlkLCBuZXh0SGVpZ2h0KTtcbiAgICAgIG11dGF0ZUVsZW1lbnQoY29udGFpbmVyLCB7IGhlaWdodDogbmV4dEhlaWdodCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2VudGVyWCA9IHRleHRFbGVtZW50LnggKyB0ZXh0RWxlbWVudC53aWR0aCAvIDI7XG4gICAgICBjb25zdCBjZW50ZXJZID0gdGV4dEVsZW1lbnQueSArIHRleHRFbGVtZW50LmhlaWdodCAvIDI7XG4gICAgICBjb25zdCBkaWZmV2lkdGggPSBtZXRyaWNzLndpZHRoIC0gdGV4dEVsZW1lbnQud2lkdGg7XG4gICAgICBjb25zdCBkaWZmSGVpZ2h0ID0gbWV0cmljcy5oZWlnaHQgLSB0ZXh0RWxlbWVudC5oZWlnaHQ7XG4gICAgICBjb29yZFkgPSBjZW50ZXJZIC0gKHRleHRFbGVtZW50LmhlaWdodCArIGRpZmZIZWlnaHQpIC8gMjtcbiAgICAgIGNvb3JkWCA9IGNlbnRlclggLSAodGV4dEVsZW1lbnQud2lkdGggKyBkaWZmV2lkdGgpIC8gMjtcbiAgICB9XG4gIH1cbiAgbXV0YXRlRWxlbWVudCh0ZXh0RWxlbWVudCwge1xuICAgIHdpZHRoOiBtZXRyaWNzLndpZHRoLFxuICAgIGhlaWdodDogbWV0cmljcy5oZWlnaHQsXG4gICAgYmFzZWxpbmU6IG1ldHJpY3MuYmFzZWxpbmUsXG4gICAgeTogY29vcmRZLFxuICAgIHg6IGNvb3JkWCxcbiAgICB0ZXh0LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBiaW5kVGV4dFRvU2hhcGVBZnRlckR1cGxpY2F0aW9uID0gKFxuICBzY2VuZUVsZW1lbnRzOiBFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBvbGRFbGVtZW50czogRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgb2xkSWRUb0R1cGxpY2F0ZWRJZDogTWFwPEV4Y2FsaWRyYXdFbGVtZW50W1wiaWRcIl0sIEV4Y2FsaWRyYXdFbGVtZW50W1wiaWRcIl0+LFxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IHNjZW5lRWxlbWVudE1hcCA9IGFycmF5VG9NYXAoc2NlbmVFbGVtZW50cykgYXMgTWFwPFxuICAgIEV4Y2FsaWRyYXdFbGVtZW50W1wiaWRcIl0sXG4gICAgRXhjYWxpZHJhd0VsZW1lbnRcbiAgPjtcbiAgb2xkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IG5ld0VsZW1lbnRJZCA9IG9sZElkVG9EdXBsaWNhdGVkSWQuZ2V0KGVsZW1lbnQuaWQpIGFzIHN0cmluZztcbiAgICBjb25zdCBib3VuZFRleHRFbGVtZW50SWQgPSBnZXRCb3VuZFRleHRFbGVtZW50SWQoZWxlbWVudCk7XG5cbiAgICBpZiAoYm91bmRUZXh0RWxlbWVudElkKSB7XG4gICAgICBjb25zdCBuZXdUZXh0RWxlbWVudElkID0gb2xkSWRUb0R1cGxpY2F0ZWRJZC5nZXQoYm91bmRUZXh0RWxlbWVudElkKTtcbiAgICAgIGlmIChuZXdUZXh0RWxlbWVudElkKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IHNjZW5lRWxlbWVudE1hcC5nZXQobmV3RWxlbWVudElkKTtcbiAgICAgICAgaWYgKG5ld0NvbnRhaW5lcikge1xuICAgICAgICAgIG11dGF0ZUVsZW1lbnQobmV3Q29udGFpbmVyLCB7XG4gICAgICAgICAgICBib3VuZEVsZW1lbnRzOiAobmV3Q29udGFpbmVyLmJvdW5kRWxlbWVudHMgfHwgW10pLmNvbmNhdCh7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICBpZDogbmV3VGV4dEVsZW1lbnRJZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1RleHRFbGVtZW50ID0gc2NlbmVFbGVtZW50TWFwLmdldChuZXdUZXh0RWxlbWVudElkKTtcbiAgICAgICAgaWYgKG5ld1RleHRFbGVtZW50ICYmIGlzVGV4dEVsZW1lbnQobmV3VGV4dEVsZW1lbnQpKSB7XG4gICAgICAgICAgbXV0YXRlRWxlbWVudChuZXdUZXh0RWxlbWVudCwge1xuICAgICAgICAgICAgY29udGFpbmVySWQ6IG5ld0NvbnRhaW5lciA/IG5ld0VsZW1lbnRJZCA6IG51bGwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUJpbmRUZXh0UmVzaXplID0gKFxuICBjb250YWluZXI6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgdHJhbnNmb3JtSGFuZGxlVHlwZTogTWF5YmVUcmFuc2Zvcm1IYW5kbGVUeXBlLFxuKSA9PiB7XG4gIGNvbnN0IGJvdW5kVGV4dEVsZW1lbnRJZCA9IGdldEJvdW5kVGV4dEVsZW1lbnRJZChjb250YWluZXIpO1xuICBpZiAoIWJvdW5kVGV4dEVsZW1lbnRJZCkge1xuICAgIHJldHVybjtcbiAgfVxuICByZXNldE9yaWdpbmFsQ29udGFpbmVyQ2FjaGUoY29udGFpbmVyLmlkKTtcbiAgbGV0IHRleHRFbGVtZW50ID0gU2NlbmUuZ2V0U2NlbmUoY29udGFpbmVyKSEuZ2V0RWxlbWVudChcbiAgICBib3VuZFRleHRFbGVtZW50SWQsXG4gICkgYXMgRXhjYWxpZHJhd1RleHRFbGVtZW50O1xuICBpZiAodGV4dEVsZW1lbnQgJiYgdGV4dEVsZW1lbnQudGV4dCkge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGV4dEVsZW1lbnQgPSBTY2VuZS5nZXRTY2VuZShjb250YWluZXIpIS5nZXRFbGVtZW50KFxuICAgICAgYm91bmRUZXh0RWxlbWVudElkLFxuICAgICkgYXMgRXhjYWxpZHJhd1RleHRFbGVtZW50O1xuICAgIGxldCB0ZXh0ID0gdGV4dEVsZW1lbnQudGV4dDtcbiAgICBsZXQgbmV4dEhlaWdodCA9IHRleHRFbGVtZW50LmhlaWdodDtcbiAgICBsZXQgbmV4dFdpZHRoID0gdGV4dEVsZW1lbnQud2lkdGg7XG4gICAgY29uc3QgY29udGFpbmVyRGltcyA9IGdldENvbnRhaW5lckRpbXMoY29udGFpbmVyKTtcbiAgICBjb25zdCBtYXhXaWR0aCA9IGdldE1heENvbnRhaW5lcldpZHRoKGNvbnRhaW5lcik7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gZ2V0TWF4Q29udGFpbmVySGVpZ2h0KGNvbnRhaW5lcik7XG4gICAgbGV0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lckRpbXMuaGVpZ2h0O1xuICAgIGxldCBuZXh0QmFzZUxpbmUgPSB0ZXh0RWxlbWVudC5iYXNlbGluZTtcbiAgICBpZiAodHJhbnNmb3JtSGFuZGxlVHlwZSAhPT0gXCJuXCIgJiYgdHJhbnNmb3JtSGFuZGxlVHlwZSAhPT0gXCJzXCIpIHtcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIHRleHQgPSB3cmFwVGV4dChcbiAgICAgICAgICB0ZXh0RWxlbWVudC5vcmlnaW5hbFRleHQsXG4gICAgICAgICAgZ2V0Rm9udFN0cmluZyh0ZXh0RWxlbWVudCksXG4gICAgICAgICAgbWF4V2lkdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gbWVhc3VyZVRleHQoXG4gICAgICAgIHRleHQsXG4gICAgICAgIGdldEZvbnRTdHJpbmcodGV4dEVsZW1lbnQpLFxuICAgICAgICBtYXhXaWR0aCxcbiAgICAgICk7XG4gICAgICBuZXh0SGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQ7XG4gICAgICBuZXh0V2lkdGggPSBkaW1lbnNpb25zLndpZHRoO1xuICAgICAgbmV4dEJhc2VMaW5lID0gZGltZW5zaW9ucy5iYXNlbGluZTtcbiAgICB9XG4gICAgLy8gaW5jcmVhc2UgaGVpZ2h0IGluIGNhc2UgdGV4dCBlbGVtZW50IGhlaWdodCBleGNlZWRzXG4gICAgaWYgKG5leHRIZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgIGNvbnRhaW5lckhlaWdodCA9IG5leHRIZWlnaHQgKyBnZXRCb3VuZFRleHRFbGVtZW50T2Zmc2V0KHRleHRFbGVtZW50KSAqIDI7XG4gICAgICBjb25zdCBkaWZmID0gY29udGFpbmVySGVpZ2h0IC0gY29udGFpbmVyRGltcy5oZWlnaHQ7XG4gICAgICAvLyBmaXggdGhlIHkgY29vcmQgd2hlbiByZXNpemluZyBmcm9tIG5lL253L25cbiAgICAgIGNvbnN0IHVwZGF0ZWRZID1cbiAgICAgICAgIWlzQXJyb3dFbGVtZW50KGNvbnRhaW5lcikgJiZcbiAgICAgICAgKHRyYW5zZm9ybUhhbmRsZVR5cGUgPT09IFwibmVcIiB8fFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVR5cGUgPT09IFwibndcIiB8fFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVR5cGUgPT09IFwiblwiKVxuICAgICAgICAgID8gY29udGFpbmVyLnkgLSBkaWZmXG4gICAgICAgICAgOiBjb250YWluZXIueTtcbiAgICAgIG11dGF0ZUVsZW1lbnQoY29udGFpbmVyLCB7XG4gICAgICAgIGhlaWdodDogY29udGFpbmVySGVpZ2h0LFxuICAgICAgICB5OiB1cGRhdGVkWSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG11dGF0ZUVsZW1lbnQodGV4dEVsZW1lbnQsIHtcbiAgICAgIHRleHQsXG4gICAgICB3aWR0aDogbmV4dFdpZHRoLFxuICAgICAgaGVpZ2h0OiBuZXh0SGVpZ2h0LFxuXG4gICAgICBiYXNlbGluZTogbmV4dEJhc2VMaW5lLFxuICAgIH0pO1xuICAgIGlmICghaXNBcnJvd0VsZW1lbnQoY29udGFpbmVyKSkge1xuICAgICAgdXBkYXRlQm91bmRUZXh0UG9zaXRpb24oXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgdGV4dEVsZW1lbnQgYXMgRXhjYWxpZHJhd1RleHRFbGVtZW50V2l0aENvbnRhaW5lcixcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB1cGRhdGVCb3VuZFRleHRQb3NpdGlvbiA9IChcbiAgY29udGFpbmVyOiBFeGNhbGlkcmF3RWxlbWVudCxcbiAgYm91bmRUZXh0RWxlbWVudDogRXhjYWxpZHJhd1RleHRFbGVtZW50V2l0aENvbnRhaW5lcixcbikgPT4ge1xuICBjb25zdCBjb250YWluZXJEaW1zID0gZ2V0Q29udGFpbmVyRGltcyhjb250YWluZXIpO1xuICBjb25zdCBib3VuZFRleHRFbGVtZW50UGFkZGluZyA9IGdldEJvdW5kVGV4dEVsZW1lbnRPZmZzZXQoYm91bmRUZXh0RWxlbWVudCk7XG4gIGxldCB5O1xuICBpZiAoYm91bmRUZXh0RWxlbWVudC52ZXJ0aWNhbEFsaWduID09PSBWRVJUSUNBTF9BTElHTi5UT1ApIHtcbiAgICB5ID0gY29udGFpbmVyLnkgKyBib3VuZFRleHRFbGVtZW50UGFkZGluZztcbiAgfSBlbHNlIGlmIChib3VuZFRleHRFbGVtZW50LnZlcnRpY2FsQWxpZ24gPT09IFZFUlRJQ0FMX0FMSUdOLkJPVFRPTSkge1xuICAgIHkgPVxuICAgICAgY29udGFpbmVyLnkgK1xuICAgICAgY29udGFpbmVyRGltcy5oZWlnaHQgLVxuICAgICAgYm91bmRUZXh0RWxlbWVudC5oZWlnaHQgLVxuICAgICAgYm91bmRUZXh0RWxlbWVudFBhZGRpbmc7XG4gIH0gZWxzZSB7XG4gICAgeSA9IGNvbnRhaW5lci55ICsgY29udGFpbmVyRGltcy5oZWlnaHQgLyAyIC0gYm91bmRUZXh0RWxlbWVudC5oZWlnaHQgLyAyO1xuICB9XG4gIGNvbnN0IHggPVxuICAgIGJvdW5kVGV4dEVsZW1lbnQudGV4dEFsaWduID09PSBURVhUX0FMSUdOLkxFRlRcbiAgICAgID8gY29udGFpbmVyLnggKyBib3VuZFRleHRFbGVtZW50UGFkZGluZ1xuICAgICAgOiBib3VuZFRleHRFbGVtZW50LnRleHRBbGlnbiA9PT0gVEVYVF9BTElHTi5SSUdIVFxuICAgICAgPyBjb250YWluZXIueCArXG4gICAgICAgIGNvbnRhaW5lckRpbXMud2lkdGggLVxuICAgICAgICBib3VuZFRleHRFbGVtZW50LndpZHRoIC1cbiAgICAgICAgYm91bmRUZXh0RWxlbWVudFBhZGRpbmdcbiAgICAgIDogY29udGFpbmVyLnggKyBjb250YWluZXJEaW1zLndpZHRoIC8gMiAtIGJvdW5kVGV4dEVsZW1lbnQud2lkdGggLyAyO1xuXG4gIG11dGF0ZUVsZW1lbnQoYm91bmRUZXh0RWxlbWVudCwgeyB4LCB5IH0pO1xufTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncmFzc2F0b3IvY2FudmFzLXRleHQtZWRpdG9yL2Jsb2IvbWFzdGVyL2xpYi9Gb250TWV0cmljcy5qc1xuZXhwb3J0IGNvbnN0IG1lYXN1cmVUZXh0ID0gKFxuICB0ZXh0OiBzdHJpbmcsXG4gIGZvbnQ6IEZvbnRTdHJpbmcsXG4gIG1heFdpZHRoPzogbnVtYmVyIHwgbnVsbCxcbikgPT4ge1xuICB0ZXh0ID0gdGV4dFxuICAgIC5zcGxpdChcIlxcblwiKVxuICAgIC8vIHJlcGxhY2UgZW1wdHkgbGluZXMgd2l0aCBzaW5nbGUgc3BhY2UgYmVjYXVzZSBsZWFkaW5nL3RyYWlsaW5nIGVtcHR5XG4gICAgLy8gbGluZXMgd291bGQgYmUgc3RyaXBwZWQgZnJvbSBjb21wdXRhdGlvblxuICAgIC5tYXAoKHgpID0+IHggfHwgXCIgXCIpXG4gICAgLmpvaW4oXCJcXG5cIik7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgY29udGFpbmVyLnN0eWxlLndoaXRlU3BhY2UgPSBcInByZVwiO1xuICBjb250YWluZXIuc3R5bGUuZm9udCA9IGZvbnQ7XG4gIGNvbnRhaW5lci5zdHlsZS5taW5IZWlnaHQgPSBcIjFlbVwiO1xuXG4gIGlmIChtYXhXaWR0aCkge1xuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBnZXRBcHByb3hMaW5lSGVpZ2h0KGZvbnQpO1xuICAgIC8vIHNpbmNlIHdlIGFyZSBhZGRpbmcgYSBzcGFuIG9mIHdpZHRoIDFweCBsYXRlclxuICAgIGNvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCA9IGAke21heFdpZHRoICsgMX1weGA7XG4gICAgY29udGFpbmVyLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgICBjb250YWluZXIuc3R5bGUud29yZEJyZWFrID0gXCJicmVhay13b3JkXCI7XG4gICAgY29udGFpbmVyLnN0eWxlLmxpbmVIZWlnaHQgPSBgJHtTdHJpbmcobGluZUhlaWdodCl9cHhgO1xuICAgIGNvbnRhaW5lci5zdHlsZS53aGl0ZVNwYWNlID0gXCJwcmUtd3JhcFwiO1xuICB9XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgY29udGFpbmVyLmlubmVyVGV4dCA9IHRleHQ7XG5cbiAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICBzcGFuLnN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuICBzcGFuLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgc3Bhbi5zdHlsZS53aWR0aCA9IFwiMXB4XCI7XG4gIHNwYW4uc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKHNwYW4pO1xuICAvLyBCYXNlbGluZSBpcyBpbXBvcnRhbnQgZm9yIHBvc2l0aW9uaW5nIHRleHQgb24gY2FudmFzXG4gIGNvbnN0IGJhc2VsaW5lID0gc3Bhbi5vZmZzZXRUb3AgKyBzcGFuLm9mZnNldEhlaWdodDtcbiAgLy8gc2luY2Ugd2UgYXJlIGFkZGluZyBhIHNwYW4gb2Ygd2lkdGggMXB4XG4gIGNvbnN0IHdpZHRoID0gY29udGFpbmVyLm9mZnNldFdpZHRoICsgMTtcbiAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xuICBpZiAoaXNUZXN0RW52KCkpIHtcbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBiYXNlbGluZSwgY29udGFpbmVyIH07XG4gIH1cbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgYmFzZWxpbmUgfTtcbn07XG5cbmNvbnN0IERVTU1ZX1RFWFQgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OVwiLnRvTG9jYWxlVXBwZXJDYXNlKCk7XG5jb25zdCBjYWNoZUFwcHJveExpbmVIZWlnaHQ6IHsgW2tleTogRm9udFN0cmluZ106IG51bWJlciB9ID0ge307XG5cbmV4cG9ydCBjb25zdCBnZXRBcHByb3hMaW5lSGVpZ2h0ID0gKGZvbnQ6IEZvbnRTdHJpbmcpID0+IHtcbiAgaWYgKGNhY2hlQXBwcm94TGluZUhlaWdodFtmb250XSkge1xuICAgIHJldHVybiBjYWNoZUFwcHJveExpbmVIZWlnaHRbZm9udF07XG4gIH1cbiAgY2FjaGVBcHByb3hMaW5lSGVpZ2h0W2ZvbnRdID0gbWVhc3VyZVRleHQoRFVNTVlfVEVYVCwgZm9udCwgbnVsbCkuaGVpZ2h0O1xuICByZXR1cm4gY2FjaGVBcHByb3hMaW5lSGVpZ2h0W2ZvbnRdO1xufTtcblxubGV0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCB1bmRlZmluZWQ7XG5jb25zdCBnZXRMaW5lV2lkdGggPSAodGV4dDogc3RyaW5nLCBmb250OiBGb250U3RyaW5nKSA9PiB7XG4gIGlmICghY2FudmFzKSB7XG4gICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgfVxuICBjb25zdCBjYW52YXMyZENvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpITtcbiAgY2FudmFzMmRDb250ZXh0LmZvbnQgPSBmb250O1xuXG4gIGNvbnN0IG1ldHJpY3MgPSBjYW52YXMyZENvbnRleHQubWVhc3VyZVRleHQodGV4dCk7XG4gIC8vIHNpbmNlIGluIHRlc3QgZW52IHRoZSBjYW52YXMgbWVhc3VyZVRleHQgYWxnb1xuICAvLyBkb2Vzbid0IG1lYXN1cmUgdGV4dCBhbmQgaW5zdGVhZCBqdXN0IHJldHVybnMgbnVtYmVyIG9mXG4gIC8vIGNoYXJhY3RlcnMgaGVuY2Ugd2UgYXNzdW1lIHRoYXQgZWFjaCBsZXR0ZXJpcyAxMHB4XG4gIGlmIChpc1Rlc3RFbnYoKSkge1xuICAgIHJldHVybiBtZXRyaWNzLndpZHRoICogMTA7XG4gIH1cbiAgLy8gU2luY2UgbWVhc3VyZVRleHQgYmVoYXZlcyBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgYnJvd3NlcnNcbiAgLy8gT1Mgc28gY29uc2lkZXJpbmcgYSBhZGp1c3RtZW50IGZhY3RvciBvZiAwLjJcbiAgY29uc3QgYWRqdXN0bWVudEZhY3RvciA9IDAuMjtcblxuICByZXR1cm4gbWV0cmljcy53aWR0aCArIGFkanVzdG1lbnRGYWN0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dFdpZHRoID0gKHRleHQ6IHN0cmluZywgZm9udDogRm9udFN0cmluZykgPT4ge1xuICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoXCJcXG5cIik7XG4gIGxldCB3aWR0aCA9IDA7XG4gIGxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBnZXRMaW5lV2lkdGgobGluZSwgZm9udCkpO1xuICB9KTtcbiAgcmV0dXJuIHdpZHRoO1xufTtcbmV4cG9ydCBjb25zdCB3cmFwVGV4dCA9ICh0ZXh0OiBzdHJpbmcsIGZvbnQ6IEZvbnRTdHJpbmcsIG1heFdpZHRoOiBudW1iZXIpID0+IHtcbiAgY29uc3QgbGluZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgY29uc3Qgb3JpZ2luYWxMaW5lcyA9IHRleHQuc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IHNwYWNlV2lkdGggPSBnZXRMaW5lV2lkdGgoXCIgXCIsIGZvbnQpO1xuXG4gIGNvbnN0IHB1c2ggPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoc3RyLnRyaW0oKSkge1xuICAgICAgbGluZXMucHVzaChzdHIpO1xuICAgIH1cbiAgfTtcbiAgb3JpZ2luYWxMaW5lcy5mb3JFYWNoKChvcmlnaW5hbExpbmUpID0+IHtcbiAgICBjb25zdCB3b3JkcyA9IG9yaWdpbmFsTGluZS5zcGxpdChcIiBcIik7XG4gICAgLy8gVGhpcyBtZWFucyBpdHMgbmV3bGluZSBzbyBwdXNoIGl0XG4gICAgaWYgKHdvcmRzLmxlbmd0aCA9PT0gMSAmJiB3b3Jkc1swXSA9PT0gXCJcIikge1xuICAgICAgbGluZXMucHVzaCh3b3Jkc1swXSk7XG4gICAgICByZXR1cm47IC8vIGNvbnRpbnVlXG4gICAgfVxuICAgIGxldCBjdXJyZW50TGluZSA9IFwiXCI7XG4gICAgbGV0IGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ID0gMDtcblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgd29yZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjdXJyZW50V29yZFdpZHRoID0gZ2V0TGluZVdpZHRoKHdvcmRzW2luZGV4XSwgZm9udCk7XG5cbiAgICAgIC8vIFN0YXJ0IGJyZWFraW5nIGxvbmdlciB3b3JkcyBleGNlZWRpbmcgbWF4IHdpZHRoXG4gICAgICBpZiAoY3VycmVudFdvcmRXaWR0aCA+PSBtYXhXaWR0aCkge1xuICAgICAgICAvLyBwdXNoIGN1cnJlbnQgbGluZSBzaW5jZSB0aGUgY3VycmVudCB3b3JkIGV4Y2VlZHMgdGhlIG1heCB3aWR0aFxuICAgICAgICAvLyBzbyB3aWxsIGJlIGFwcGVuZGVkIGluIG5leHQgbGluZVxuICAgICAgICBwdXNoKGN1cnJlbnRMaW5lKTtcbiAgICAgICAgY3VycmVudExpbmUgPSBcIlwiO1xuICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA9IDA7XG4gICAgICAgIHdoaWxlICh3b3Jkc1tpbmRleF0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRDaGFyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoXG4gICAgICAgICAgICB3b3Jkc1tpbmRleF0uY29kZVBvaW50QXQoMCkhLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSBjaGFyV2lkdGguY2FsY3VsYXRlKGN1cnJlbnRDaGFyLCBmb250KTtcbiAgICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyArPSB3aWR0aDtcbiAgICAgICAgICB3b3Jkc1tpbmRleF0gPSB3b3Jkc1tpbmRleF0uc2xpY2UoY3VycmVudENoYXIubGVuZ3RoKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA+PSBtYXhXaWR0aCkge1xuICAgICAgICAgICAgLy8gb25seSByZW1vdmUgbGFzdCB0cmFpbGluZyBzcGFjZSB3aGljaCB3ZSBoYXZlIGFkZGVkIHdoZW4gam9pbmluZyB3b3Jkc1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lLnNsaWNlKC0xKSA9PT0gXCIgXCIpIHtcbiAgICAgICAgICAgICAgY3VycmVudExpbmUgPSBjdXJyZW50TGluZS5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwdXNoKGN1cnJlbnRMaW5lKTtcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lID0gY3VycmVudENoYXI7XG4gICAgICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA9IHdpZHRoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50TGluZSArPSBjdXJyZW50Q2hhcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHVzaCBjdXJyZW50IGxpbmUgaWYgYXBwZW5kaW5nIHNwYWNlIGV4Y2VlZHMgbWF4IHdpZHRoXG4gICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoVGlsbE5vdyArIHNwYWNlV2lkdGggPj0gbWF4V2lkdGgpIHtcbiAgICAgICAgICBwdXNoKGN1cnJlbnRMaW5lKTtcbiAgICAgICAgICBjdXJyZW50TGluZSA9IFwiXCI7XG4gICAgICAgICAgY3VycmVudExpbmVXaWR0aFRpbGxOb3cgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHNwYWNlIG5lZWRzIHRvIGJlIGFwcGVuZGVkIGJlZm9yZSBuZXh0IHdvcmRcbiAgICAgICAgICAvLyBhcyBjdXJyZW50TGluZSBjb250YWlucyBjaGFycyB3aGljaCBjb3VsZG4ndCBiZSBhcHBlbmRlZFxuICAgICAgICAgIC8vIHRvIHByZXZpb3VzIGxpbmVcbiAgICAgICAgICBjdXJyZW50TGluZSArPSBcIiBcIjtcbiAgICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyArPSBzcGFjZVdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN0YXJ0IGFwcGVuZGluZyB3b3JkcyBpbiBhIGxpbmUgdGlsbCBtYXggd2lkdGggcmVhY2hlZFxuICAgICAgICB3aGlsZSAoY3VycmVudExpbmVXaWR0aFRpbGxOb3cgPCBtYXhXaWR0aCAmJiBpbmRleCA8IHdvcmRzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHdvcmQgPSB3b3Jkc1tpbmRleF07XG4gICAgICAgICAgY3VycmVudExpbmVXaWR0aFRpbGxOb3cgPSBnZXRMaW5lV2lkdGgoY3VycmVudExpbmUgKyB3b3JkLCBmb250KTtcblxuICAgICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA+PSBtYXhXaWR0aCkge1xuICAgICAgICAgICAgcHVzaChjdXJyZW50TGluZSk7XG4gICAgICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA9IDA7XG4gICAgICAgICAgICBjdXJyZW50TGluZSA9IFwiXCI7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIGN1cnJlbnRMaW5lICs9IGAke3dvcmR9IGA7XG5cbiAgICAgICAgICAvLyBQdXNoIHRoZSB3b3JkIGlmIGFwcGVuZGluZyBzcGFjZSBleGNlZWRzIG1heCB3aWR0aFxuICAgICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoVGlsbE5vdyArIHNwYWNlV2lkdGggPj0gbWF4V2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmQgPSBjdXJyZW50TGluZS5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBwdXNoKHdvcmQpO1xuICAgICAgICAgICAgY3VycmVudExpbmUgPSBcIlwiO1xuICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aFRpbGxOb3cgPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA9PT0gbWF4V2lkdGgpIHtcbiAgICAgICAgICBjdXJyZW50TGluZSA9IFwiXCI7XG4gICAgICAgICAgY3VycmVudExpbmVXaWR0aFRpbGxOb3cgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJyZW50TGluZSkge1xuICAgICAgLy8gb25seSByZW1vdmUgbGFzdCB0cmFpbGluZyBzcGFjZSB3aGljaCB3ZSBoYXZlIGFkZGVkIHdoZW4gam9pbmluZyB3b3Jkc1xuICAgICAgaWYgKGN1cnJlbnRMaW5lLnNsaWNlKC0xKSA9PT0gXCIgXCIpIHtcbiAgICAgICAgY3VycmVudExpbmUgPSBjdXJyZW50TGluZS5zbGljZSgwLCAtMSk7XG4gICAgICB9XG4gICAgICBwdXNoKGN1cnJlbnRMaW5lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGFyV2lkdGggPSAoKCkgPT4ge1xuICBjb25zdCBjYWNoZWRDaGFyV2lkdGg6IHsgW2tleTogRm9udFN0cmluZ106IEFycmF5PG51bWJlcj4gfSA9IHt9O1xuXG4gIGNvbnN0IGNhbGN1bGF0ZSA9IChjaGFyOiBzdHJpbmcsIGZvbnQ6IEZvbnRTdHJpbmcpID0+IHtcbiAgICBjb25zdCBhc2NpaSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcbiAgICBpZiAoIWNhY2hlZENoYXJXaWR0aFtmb250XSkge1xuICAgICAgY2FjaGVkQ2hhcldpZHRoW2ZvbnRdID0gW107XG4gICAgfVxuICAgIGlmICghY2FjaGVkQ2hhcldpZHRoW2ZvbnRdW2FzY2lpXSkge1xuICAgICAgY29uc3Qgd2lkdGggPSBnZXRMaW5lV2lkdGgoY2hhciwgZm9udCk7XG4gICAgICBjYWNoZWRDaGFyV2lkdGhbZm9udF1bYXNjaWldID0gd2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlZENoYXJXaWR0aFtmb250XVthc2NpaV07XG4gIH07XG5cbiAgY29uc3QgZ2V0Q2FjaGUgPSAoZm9udDogRm9udFN0cmluZykgPT4ge1xuICAgIHJldHVybiBjYWNoZWRDaGFyV2lkdGhbZm9udF07XG4gIH07XG4gIHJldHVybiB7XG4gICAgY2FsY3VsYXRlLFxuICAgIGdldENhY2hlLFxuICB9O1xufSkoKTtcbmV4cG9ydCBjb25zdCBnZXRBcHByb3hNaW5MaW5lV2lkdGggPSAoZm9udDogRm9udFN0cmluZykgPT4ge1xuICBjb25zdCBtYXhDaGFyV2lkdGggPSBnZXRNYXhDaGFyV2lkdGgoZm9udCk7XG5cbiAgaWYgKG1heENoYXJXaWR0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICBtZWFzdXJlVGV4dChEVU1NWV9URVhULnNwbGl0KFwiXCIpLmpvaW4oXCJcXG5cIiksIGZvbnQpLndpZHRoICtcbiAgICAgIEJPVU5EX1RFWFRfUEFERElORyAqIDJcbiAgICApO1xuICB9XG4gIHJldHVybiBtYXhDaGFyV2lkdGggKyBCT1VORF9URVhUX1BBRERJTkcgKiAyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcHJveE1pbkxpbmVIZWlnaHQgPSAoZm9udDogRm9udFN0cmluZykgPT4ge1xuICByZXR1cm4gZ2V0QXBwcm94TGluZUhlaWdodChmb250KSArIEJPVU5EX1RFWFRfUEFERElORyAqIDI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWluQ2hhcldpZHRoID0gKGZvbnQ6IEZvbnRTdHJpbmcpID0+IHtcbiAgY29uc3QgY2FjaGUgPSBjaGFyV2lkdGguZ2V0Q2FjaGUoZm9udCk7XG4gIGlmICghY2FjaGUpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjYWNoZVdpdGhPdXRFbXB0eSA9IGNhY2hlLmZpbHRlcigodmFsKSA9PiB2YWwgIT09IHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIE1hdGgubWluKC4uLmNhY2hlV2l0aE91dEVtcHR5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYXhDaGFyV2lkdGggPSAoZm9udDogRm9udFN0cmluZykgPT4ge1xuICBjb25zdCBjYWNoZSA9IGNoYXJXaWR0aC5nZXRDYWNoZShmb250KTtcbiAgaWYgKCFjYWNoZSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IGNhY2hlV2l0aE91dEVtcHR5ID0gY2FjaGUuZmlsdGVyKCh2YWwpID0+IHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgcmV0dXJuIE1hdGgubWF4KC4uLmNhY2hlV2l0aE91dEVtcHR5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHByb3hDaGFyc1RvRml0SW5XaWR0aCA9IChmb250OiBGb250U3RyaW5nLCB3aWR0aDogbnVtYmVyKSA9PiB7XG4gIC8vIEdlbmVyYWxseSBsb3dlciBjYXNlIGlzIHVzZWQgc28gY29udmVydGluZyB0byBsb3dlciBjYXNlXG4gIGNvbnN0IGR1bW15VGV4dCA9IERVTU1ZX1RFWFQudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgY29uc3QgYmF0Y2hMZW5ndGggPSA2O1xuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgd2lkdGhUaWxsTm93ID0gMDtcbiAgbGV0IHN0ciA9IFwiXCI7XG4gIHdoaWxlICh3aWR0aFRpbGxOb3cgPD0gd2lkdGgpIHtcbiAgICBjb25zdCBiYXRjaCA9IGR1bW15VGV4dC5zdWJzdHIoaW5kZXgsIGluZGV4ICsgYmF0Y2hMZW5ndGgpO1xuICAgIHN0ciArPSBiYXRjaDtcbiAgICB3aWR0aFRpbGxOb3cgKz0gZ2V0TGluZVdpZHRoKHN0ciwgZm9udCk7XG4gICAgaWYgKGluZGV4ID09PSBkdW1teVRleHQubGVuZ3RoIC0gMSkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICBpbmRleCA9IGluZGV4ICsgYmF0Y2hMZW5ndGg7XG4gIH1cblxuICB3aGlsZSAod2lkdGhUaWxsTm93ID4gd2lkdGgpIHtcbiAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgICB3aWR0aFRpbGxOb3cgPSBnZXRMaW5lV2lkdGgoc3RyLCBmb250KTtcbiAgfVxuICByZXR1cm4gc3RyLmxlbmd0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCb3VuZFRleHRFbGVtZW50SWQgPSAoY29udGFpbmVyOiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwpID0+IHtcbiAgcmV0dXJuIGNvbnRhaW5lcj8uYm91bmRFbGVtZW50cz8ubGVuZ3RoXG4gICAgPyBjb250YWluZXI/LmJvdW5kRWxlbWVudHM/LmZpbHRlcigoZWxlKSA9PiBlbGUudHlwZSA9PT0gXCJ0ZXh0XCIpWzBdPy5pZCB8fFxuICAgICAgICBudWxsXG4gICAgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJvdW5kVGV4dEVsZW1lbnQgPSAoZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsKSA9PiB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGJvdW5kVGV4dEVsZW1lbnRJZCA9IGdldEJvdW5kVGV4dEVsZW1lbnRJZChlbGVtZW50KTtcbiAgaWYgKGJvdW5kVGV4dEVsZW1lbnRJZCkge1xuICAgIHJldHVybiAoXG4gICAgICAoU2NlbmUuZ2V0U2NlbmUoZWxlbWVudCk/LmdldEVsZW1lbnQoXG4gICAgICAgIGJvdW5kVGV4dEVsZW1lbnRJZCxcbiAgICAgICkgYXMgRXhjYWxpZHJhd1RleHRFbGVtZW50V2l0aENvbnRhaW5lcikgfHwgbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyRWxlbWVudCA9IChcbiAgZWxlbWVudDpcbiAgICB8IChFeGNhbGlkcmF3RWxlbWVudCAmIHtcbiAgICAgICAgY29udGFpbmVySWQ6IEV4Y2FsaWRyYXdFbGVtZW50W1wiaWRcIl0gfCBudWxsO1xuICAgICAgfSlcbiAgICB8IG51bGwsXG4pID0+IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZW1lbnQuY29udGFpbmVySWQpIHtcbiAgICByZXR1cm4gU2NlbmUuZ2V0U2NlbmUoZWxlbWVudCk/LmdldEVsZW1lbnQoZWxlbWVudC5jb250YWluZXJJZCkgfHwgbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250YWluZXJEaW1zID0gKGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50KSA9PiB7XG4gIGNvbnN0IE1JTl9XSURUSCA9IDMwMDtcbiAgaWYgKGlzQXJyb3dFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChlbGVtZW50LndpZHRoLCBNSU5fV0lEVEgpO1xuICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0O1xuICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQgfTtcbiAgfVxuICByZXR1cm4geyB3aWR0aDogZWxlbWVudC53aWR0aCwgaGVpZ2h0OiBlbGVtZW50LmhlaWdodCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRhaW5lckNlbnRlciA9IChcbiAgY29udGFpbmVyOiBFeGNhbGlkcmF3RWxlbWVudCxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuKSA9PiB7XG4gIGlmICghaXNBcnJvd0VsZW1lbnQoY29udGFpbmVyKSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBjb250YWluZXIueCArIGNvbnRhaW5lci53aWR0aCAvIDIsXG4gICAgICB5OiBjb250YWluZXIueSArIGNvbnRhaW5lci5oZWlnaHQgLyAyLFxuICAgIH07XG4gIH1cbiAgY29uc3QgcG9pbnRzID0gTGluZWFyRWxlbWVudEVkaXRvci5nZXRQb2ludHNHbG9iYWxDb29yZGluYXRlcyhjb250YWluZXIpO1xuICBpZiAocG9pbnRzLmxlbmd0aCAlIDIgPT09IDEpIHtcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoY29udGFpbmVyLnBvaW50cy5sZW5ndGggLyAyKTtcbiAgICBjb25zdCBtaWRQb2ludCA9IExpbmVhckVsZW1lbnRFZGl0b3IuZ2V0UG9pbnRHbG9iYWxDb29yZGluYXRlcyhcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbnRhaW5lci5wb2ludHNbaW5kZXhdLFxuICAgICk7XG4gICAgcmV0dXJuIHsgeDogbWlkUG9pbnRbMF0sIHk6IG1pZFBvaW50WzFdIH07XG4gIH1cbiAgY29uc3QgaW5kZXggPSBjb250YWluZXIucG9pbnRzLmxlbmd0aCAvIDIgLSAxO1xuICBsZXQgbWlkU2VnbWVudE1pZHBvaW50ID0gTGluZWFyRWxlbWVudEVkaXRvci5nZXRFZGl0b3JNaWRQb2ludHMoXG4gICAgY29udGFpbmVyLFxuICAgIGFwcFN0YXRlLFxuICApW2luZGV4XTtcbiAgaWYgKCFtaWRTZWdtZW50TWlkcG9pbnQpIHtcbiAgICBtaWRTZWdtZW50TWlkcG9pbnQgPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldFNlZ21lbnRNaWRQb2ludChcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHBvaW50c1tpbmRleF0sXG4gICAgICBwb2ludHNbaW5kZXggKyAxXSxcbiAgICAgIGluZGV4ICsgMSxcbiAgICApO1xuICB9XG4gIHJldHVybiB7IHg6IG1pZFNlZ21lbnRNaWRwb2ludFswXSwgeTogbWlkU2VnbWVudE1pZHBvaW50WzFdIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dEVsZW1lbnRBbmdsZSA9ICh0ZXh0RWxlbWVudDogRXhjYWxpZHJhd1RleHRFbGVtZW50KSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lckVsZW1lbnQodGV4dEVsZW1lbnQpO1xuICBpZiAoIWNvbnRhaW5lciB8fCBpc0Fycm93RWxlbWVudChjb250YWluZXIpKSB7XG4gICAgcmV0dXJuIHRleHRFbGVtZW50LmFuZ2xlO1xuICB9XG4gIHJldHVybiBjb250YWluZXIuYW5nbGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Qm91bmRUZXh0RWxlbWVudE9mZnNldCA9IChcbiAgYm91bmRUZXh0RWxlbWVudDogRXhjYWxpZHJhd1RleHRFbGVtZW50IHwgbnVsbCxcbikgPT4ge1xuICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXJFbGVtZW50KGJvdW5kVGV4dEVsZW1lbnQpO1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChpc0Fycm93RWxlbWVudChjb250YWluZXIpKSB7XG4gICAgcmV0dXJuIEJPVU5EX1RFWFRfUEFERElORyAqIDg7XG4gIH1cbiAgcmV0dXJuIEJPVU5EX1RFWFRfUEFERElORztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCb3VuZFRleHRFbGVtZW50UG9zaXRpb24gPSAoXG4gIGNvbnRhaW5lcjogRXhjYWxpZHJhd0VsZW1lbnQsXG4gIGJvdW5kVGV4dEVsZW1lbnQ6IEV4Y2FsaWRyYXdUZXh0RWxlbWVudFdpdGhDb250YWluZXIsXG4pID0+IHtcbiAgaWYgKGlzQXJyb3dFbGVtZW50KGNvbnRhaW5lcikpIHtcbiAgICByZXR1cm4gTGluZWFyRWxlbWVudEVkaXRvci5nZXRCb3VuZFRleHRFbGVtZW50UG9zaXRpb24oXG4gICAgICBjb250YWluZXIsXG4gICAgICBib3VuZFRleHRFbGVtZW50LFxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaG91bGRBbGxvd1ZlcnRpY2FsQWxpZ24gPSAoXG4gIHNlbGVjdGVkRWxlbWVudHM6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuKSA9PiB7XG4gIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBoYXNCb3VuZENvbnRhaW5lciA9IGlzQm91bmRUb0NvbnRhaW5lcihlbGVtZW50KTtcbiAgICBpZiAoaGFzQm91bmRDb250YWluZXIpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lckVsZW1lbnQoZWxlbWVudCk7XG4gICAgICBpZiAoaXNUZXh0RWxlbWVudChlbGVtZW50KSAmJiBpc0Fycm93RWxlbWVudChjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBib3VuZFRleHRFbGVtZW50ID0gZ2V0Qm91bmRUZXh0RWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoYm91bmRUZXh0RWxlbWVudCkge1xuICAgICAgaWYgKGlzQXJyb3dFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRCaW5kYWJsZUNvbnRhaW5lckF0UG9zaXRpb24gPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuKTogRXhjYWxpZHJhd1RleHRDb250YWluZXIgfCBudWxsID0+IHtcbiAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlKTtcbiAgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGlzVGV4dEJpbmRhYmxlQ29udGFpbmVyKHNlbGVjdGVkRWxlbWVudHNbMF0sIGZhbHNlKVxuICAgICAgPyBzZWxlY3RlZEVsZW1lbnRzWzBdXG4gICAgICA6IG51bGw7XG4gIH1cbiAgbGV0IGhpdEVsZW1lbnQgPSBudWxsO1xuICAvLyBXZSBuZWVkIHRvIHRvIGhpdCB0ZXN0aW5nIGZyb20gZnJvbnQgKGVuZCBvZiB0aGUgYXJyYXkpIHRvIGJhY2sgKGJlZ2lubmluZyBvZiB0aGUgYXJyYXkpXG4gIGZvciAobGV0IGluZGV4ID0gZWxlbWVudHMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgLS1pbmRleCkge1xuICAgIGlmIChlbGVtZW50c1tpbmRleF0uaXNEZWxldGVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhlbGVtZW50c1tpbmRleF0pO1xuICAgIGlmIChcbiAgICAgIGlzQXJyb3dFbGVtZW50KGVsZW1lbnRzW2luZGV4XSkgJiZcbiAgICAgIGlzSGl0dGluZ0VsZW1lbnROb3RDb25zaWRlcmluZ0JvdW5kaW5nQm94KGVsZW1lbnRzW2luZGV4XSwgYXBwU3RhdGUsIFtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgIF0pXG4gICAgKSB7XG4gICAgICBoaXRFbGVtZW50ID0gZWxlbWVudHNbaW5kZXhdO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmICh4MSA8IHggJiYgeCA8IHgyICYmIHkxIDwgeSAmJiB5IDwgeTIpIHtcbiAgICAgIGhpdEVsZW1lbnQgPSBlbGVtZW50c1tpbmRleF07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNUZXh0QmluZGFibGVDb250YWluZXIoaGl0RWxlbWVudCwgZmFsc2UpID8gaGl0RWxlbWVudCA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFRleHRDb250YWluZXIgPSAoZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQpID0+IHtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50LnR5cGUgPT09IFwicmVjdGFuZ2xlXCIgfHxcbiAgICBlbGVtZW50LnR5cGUgPT09IFwiZWxsaXBzZVwiIHx8XG4gICAgZWxlbWVudC50eXBlID09PSBcImRpYW1vbmRcIiB8fFxuICAgIGlzSW1hZ2VFbGVtZW50KGVsZW1lbnQpIHx8XG4gICAgaXNBcnJvd0VsZW1lbnQoZWxlbWVudClcbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../element/textElement.ts\n");
3529
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"bindTextToShapeAfterDuplication\": () => (/* binding */ bindTextToShapeAfterDuplication),\n/* harmony export */ \"charWidth\": () => (/* binding */ charWidth),\n/* harmony export */ \"getApproxCharsToFitInWidth\": () => (/* binding */ getApproxCharsToFitInWidth),\n/* harmony export */ \"getApproxLineHeight\": () => (/* binding */ getApproxLineHeight),\n/* harmony export */ \"getApproxMinLineHeight\": () => (/* binding */ getApproxMinLineHeight),\n/* harmony export */ \"getApproxMinLineWidth\": () => (/* binding */ getApproxMinLineWidth),\n/* harmony export */ \"getBoundTextElement\": () => (/* binding */ getBoundTextElement),\n/* harmony export */ \"getBoundTextElementId\": () => (/* binding */ getBoundTextElementId),\n/* harmony export */ \"getBoundTextElementOffset\": () => (/* binding */ getBoundTextElementOffset),\n/* harmony export */ \"getBoundTextElementPosition\": () => (/* binding */ getBoundTextElementPosition),\n/* harmony export */ \"getContainerCenter\": () => (/* binding */ getContainerCenter),\n/* harmony export */ \"getContainerDims\": () => (/* binding */ getContainerDims),\n/* harmony export */ \"getContainerElement\": () => (/* binding */ getContainerElement),\n/* harmony export */ \"getMaxCharWidth\": () => (/* binding */ getMaxCharWidth),\n/* harmony export */ \"getMinCharWidth\": () => (/* binding */ getMinCharWidth),\n/* harmony export */ \"getTextBindableContainerAtPosition\": () => (/* binding */ getTextBindableContainerAtPosition),\n/* harmony export */ \"getTextElementAngle\": () => (/* binding */ getTextElementAngle),\n/* harmony export */ \"getTextWidth\": () => (/* binding */ getTextWidth),\n/* harmony export */ \"handleBindTextResize\": () => (/* binding */ handleBindTextResize),\n/* harmony export */ \"isValidTextContainer\": () => (/* binding */ isValidTextContainer),\n/* harmony export */ \"measureText\": () => (/* binding */ measureText),\n/* harmony export */ \"normalizeText\": () => (/* binding */ normalizeText),\n/* harmony export */ \"redrawTextBoundingBox\": () => (/* binding */ redrawTextBoundingBox),\n/* harmony export */ \"shouldAllowVerticalAlign\": () => (/* binding */ shouldAllowVerticalAlign),\n/* harmony export */ \"wrapText\": () => (/* binding */ wrapText)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _mutateElement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _scene_Scene__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../scene/Scene */ \"../../scene/Scene.ts\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _newElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _typeChecks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./linearElementEditor */ \"../../element/linearElementEditor.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _collision__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./collision */ \"../../element/collision.ts\");\n/* harmony import */ var _textWysiwyg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./textWysiwyg */ \"../../element/textWysiwyg.tsx\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst normalizeText = (text) => {\n return (text\n // replace tabs with spaces so they render and measure correctly\n .replace(/\\t/g, \" \")\n // normalize newlines\n .replace(/\\r?\\n|\\r/g, \"\\n\"));\n};\nconst redrawTextBoundingBox = (textElement, container) => {\n let maxWidth = undefined;\n let text = textElement.text;\n if (container) {\n maxWidth = (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.getMaxContainerWidth)(container);\n text = wrapText(textElement.originalText, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), maxWidth);\n }\n const metrics = measureText(text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), maxWidth);\n let coordY = textElement.y;\n let coordX = textElement.x;\n // Resize container and vertically center align the text\n if (container) {\n if (!(0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n const containerDims = getContainerDims(container);\n let nextHeight = containerDims.height;\n if (textElement.verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.VERTICAL_ALIGN.TOP) {\n coordY = container.y;\n }\n else if (textElement.verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.VERTICAL_ALIGN.BOTTOM) {\n coordY =\n container.y +\n containerDims.height -\n metrics.height -\n _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING;\n }\n else {\n coordY = container.y + containerDims.height / 2 - metrics.height / 2;\n if (metrics.height > (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.getMaxContainerHeight)(container)) {\n nextHeight = metrics.height + _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 2;\n coordY = container.y + nextHeight / 2 - metrics.height / 2;\n }\n }\n if (textElement.textAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.TEXT_ALIGN.LEFT) {\n coordX = container.x + _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING;\n }\n else if (textElement.textAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.TEXT_ALIGN.RIGHT) {\n coordX =\n container.x +\n containerDims.width -\n metrics.width -\n _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING;\n }\n else {\n coordX = container.x + containerDims.width / 2 - metrics.width / 2;\n }\n (0,_textWysiwyg__WEBPACK_IMPORTED_MODULE_10__.updateOriginalContainerCache)(container.id, nextHeight);\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(container, { height: nextHeight });\n }\n else {\n const centerX = textElement.x + textElement.width / 2;\n const centerY = textElement.y + textElement.height / 2;\n const diffWidth = metrics.width - textElement.width;\n const diffHeight = metrics.height - textElement.height;\n coordY = centerY - (textElement.height + diffHeight) / 2;\n coordX = centerX - (textElement.width + diffWidth) / 2;\n }\n }\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(textElement, {\n width: metrics.width,\n height: metrics.height,\n baseline: metrics.baseline,\n y: coordY,\n x: coordX,\n text,\n });\n};\nconst bindTextToShapeAfterDuplication = (sceneElements, oldElements, oldIdToDuplicatedId) => {\n const sceneElementMap = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.arrayToMap)(sceneElements);\n oldElements.forEach((element) => {\n const newElementId = oldIdToDuplicatedId.get(element.id);\n const boundTextElementId = getBoundTextElementId(element);\n if (boundTextElementId) {\n const newTextElementId = oldIdToDuplicatedId.get(boundTextElementId);\n if (newTextElementId) {\n const newContainer = sceneElementMap.get(newElementId);\n if (newContainer) {\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(newContainer, {\n boundElements: (newContainer.boundElements || []).concat({\n type: \"text\",\n id: newTextElementId,\n }),\n });\n }\n const newTextElement = sceneElementMap.get(newTextElementId);\n if (newTextElement && (0,___WEBPACK_IMPORTED_MODULE_4__.isTextElement)(newTextElement)) {\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(newTextElement, {\n containerId: newContainer ? newElementId : null,\n });\n }\n }\n }\n });\n};\nconst handleBindTextResize = (container, transformHandleType) => {\n const boundTextElementId = getBoundTextElementId(container);\n if (!boundTextElementId) {\n return;\n }\n (0,_textWysiwyg__WEBPACK_IMPORTED_MODULE_10__.resetOriginalContainerCache)(container.id);\n let textElement = _scene_Scene__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getScene(container).getElement(boundTextElementId);\n if (textElement && textElement.text) {\n if (!container) {\n return;\n }\n textElement = _scene_Scene__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getScene(container).getElement(boundTextElementId);\n let text = textElement.text;\n let nextHeight = textElement.height;\n let nextWidth = textElement.width;\n const containerDims = getContainerDims(container);\n const maxWidth = (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.getMaxContainerWidth)(container);\n const maxHeight = (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.getMaxContainerHeight)(container);\n let containerHeight = containerDims.height;\n let nextBaseLine = textElement.baseline;\n if (transformHandleType !== \"n\" && transformHandleType !== \"s\") {\n if (text) {\n text = wrapText(textElement.originalText, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), maxWidth);\n }\n const dimensions = measureText(text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), maxWidth);\n nextHeight = dimensions.height;\n nextWidth = dimensions.width;\n nextBaseLine = dimensions.baseline;\n }\n // increase height in case text element height exceeds\n if (nextHeight > maxHeight) {\n containerHeight = nextHeight + getBoundTextElementOffset(textElement) * 2;\n const diff = containerHeight - containerDims.height;\n // fix the y coord when resizing from ne/nw/n\n const updatedY = !(0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container) &&\n (transformHandleType === \"ne\" ||\n transformHandleType === \"nw\" ||\n transformHandleType === \"n\")\n ? container.y - diff\n : container.y;\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(container, {\n height: containerHeight,\n y: updatedY,\n });\n }\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(textElement, {\n text,\n width: nextWidth,\n height: nextHeight,\n baseline: nextBaseLine,\n });\n if (!(0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n updateBoundTextPosition(container, textElement);\n }\n }\n};\nconst updateBoundTextPosition = (container, boundTextElement) => {\n const containerDims = getContainerDims(container);\n const boundTextElementPadding = getBoundTextElementOffset(boundTextElement);\n let y;\n if (boundTextElement.verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.VERTICAL_ALIGN.TOP) {\n y = container.y + boundTextElementPadding;\n }\n else if (boundTextElement.verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.VERTICAL_ALIGN.BOTTOM) {\n y =\n container.y +\n containerDims.height -\n boundTextElement.height -\n boundTextElementPadding;\n }\n else {\n y = container.y + containerDims.height / 2 - boundTextElement.height / 2;\n }\n const x = boundTextElement.textAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.TEXT_ALIGN.LEFT\n ? container.x + boundTextElementPadding\n : boundTextElement.textAlign === _constants__WEBPACK_IMPORTED_MODULE_2__.TEXT_ALIGN.RIGHT\n ? container.x +\n containerDims.width -\n boundTextElement.width -\n boundTextElementPadding\n : container.x + containerDims.width / 2 - boundTextElement.width / 2;\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_1__.mutateElement)(boundTextElement, { x, y });\n};\n// https://github.com/grassator/canvas-text-editor/blob/master/lib/FontMetrics.js\nconst measureText = (text, font, maxWidth) => {\n text = text\n .split(\"\\n\")\n // replace empty lines with single space because leading/trailing empty\n // lines would be stripped from computation\n .map((x) => x || \" \")\n .join(\"\\n\");\n const container = document.createElement(\"div\");\n container.style.position = \"absolute\";\n container.style.whiteSpace = \"pre\";\n container.style.font = font;\n container.style.minHeight = \"1em\";\n if (maxWidth) {\n const lineHeight = getApproxLineHeight(font);\n // since we are adding a span of width 1px later\n container.style.maxWidth = `${maxWidth + 1}px`;\n container.style.overflow = \"hidden\";\n container.style.wordBreak = \"break-word\";\n container.style.lineHeight = `${String(lineHeight)}px`;\n container.style.whiteSpace = \"pre-wrap\";\n }\n document.body.appendChild(container);\n container.innerText = text;\n const span = document.createElement(\"span\");\n span.style.display = \"inline-block\";\n span.style.overflow = \"hidden\";\n span.style.width = \"1px\";\n span.style.height = \"1px\";\n container.appendChild(span);\n // Baseline is important for positioning text on canvas\n const baseline = span.offsetTop + span.offsetHeight;\n // since we are adding a span of width 1px\n const width = container.offsetWidth + 1;\n const height = container.offsetHeight;\n document.body.removeChild(container);\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isTestEnv)()) {\n return { width, height, baseline, container };\n }\n return { width, height, baseline };\n};\nconst DUMMY_TEXT = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\".toLocaleUpperCase();\nconst cacheApproxLineHeight = {};\nconst getApproxLineHeight = (font) => {\n if (cacheApproxLineHeight[font]) {\n return cacheApproxLineHeight[font];\n }\n cacheApproxLineHeight[font] = measureText(DUMMY_TEXT, font, null).height;\n return cacheApproxLineHeight[font];\n};\nlet canvas;\nconst getLineWidth = (text, font) => {\n if (!canvas) {\n canvas = document.createElement(\"canvas\");\n }\n const canvas2dContext = canvas.getContext(\"2d\");\n canvas2dContext.font = font;\n const metrics = canvas2dContext.measureText(text);\n // since in test env the canvas measureText algo\n // doesn't measure text and instead just returns number of\n // characters hence we assume that each letteris 10px\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isTestEnv)()) {\n return metrics.width * 10;\n }\n // Since measureText behaves differently in different browsers\n // OS so considering a adjustment factor of 0.2\n const adjustmentFactor = 0.2;\n return metrics.width + adjustmentFactor;\n};\nconst getTextWidth = (text, font) => {\n const lines = text.split(\"\\n\");\n let width = 0;\n lines.forEach((line) => {\n width = Math.max(width, getLineWidth(line, font));\n });\n return width;\n};\nconst wrapText = (text, font, maxWidth) => {\n const lines = [];\n const originalLines = text.split(\"\\n\");\n const spaceWidth = getLineWidth(\" \", font);\n const push = (str) => {\n if (str.trim()) {\n lines.push(str);\n }\n };\n originalLines.forEach((originalLine) => {\n const words = originalLine.split(\" \");\n // This means its newline so push it\n if (words.length === 1 && words[0] === \"\") {\n lines.push(words[0]);\n return; // continue\n }\n let currentLine = \"\";\n let currentLineWidthTillNow = 0;\n let index = 0;\n while (index < words.length) {\n const currentWordWidth = getLineWidth(words[index], font);\n // Start breaking longer words exceeding max width\n if (currentWordWidth >= maxWidth) {\n // push current line since the current word exceeds the max width\n // so will be appended in next line\n push(currentLine);\n currentLine = \"\";\n currentLineWidthTillNow = 0;\n while (words[index].length > 0) {\n const currentChar = String.fromCodePoint(words[index].codePointAt(0));\n const width = charWidth.calculate(currentChar, font);\n currentLineWidthTillNow += width;\n words[index] = words[index].slice(currentChar.length);\n if (currentLineWidthTillNow >= maxWidth) {\n // only remove last trailing space which we have added when joining words\n if (currentLine.slice(-1) === \" \") {\n currentLine = currentLine.slice(0, -1);\n }\n push(currentLine);\n currentLine = currentChar;\n currentLineWidthTillNow = width;\n }\n else {\n currentLine += currentChar;\n }\n }\n // push current line if appending space exceeds max width\n if (currentLineWidthTillNow + spaceWidth >= maxWidth) {\n push(currentLine);\n currentLine = \"\";\n currentLineWidthTillNow = 0;\n }\n else {\n // space needs to be appended before next word\n // as currentLine contains chars which couldn't be appended\n // to previous line\n currentLine += \" \";\n currentLineWidthTillNow += spaceWidth;\n }\n index++;\n }\n else {\n // Start appending words in a line till max width reached\n while (currentLineWidthTillNow < maxWidth && index < words.length) {\n const word = words[index];\n currentLineWidthTillNow = getLineWidth(currentLine + word, font);\n if (currentLineWidthTillNow >= maxWidth) {\n push(currentLine);\n currentLineWidthTillNow = 0;\n currentLine = \"\";\n break;\n }\n index++;\n currentLine += `${word} `;\n // Push the word if appending space exceeds max width\n if (currentLineWidthTillNow + spaceWidth >= maxWidth) {\n const word = currentLine.slice(0, -1);\n push(word);\n currentLine = \"\";\n currentLineWidthTillNow = 0;\n break;\n }\n }\n if (currentLineWidthTillNow === maxWidth) {\n currentLine = \"\";\n currentLineWidthTillNow = 0;\n }\n }\n }\n if (currentLine) {\n // only remove last trailing space which we have added when joining words\n if (currentLine.slice(-1) === \" \") {\n currentLine = currentLine.slice(0, -1);\n }\n push(currentLine);\n }\n });\n return lines.join(\"\\n\");\n};\nconst charWidth = (() => {\n const cachedCharWidth = {};\n const calculate = (char, font) => {\n const ascii = char.charCodeAt(0);\n if (!cachedCharWidth[font]) {\n cachedCharWidth[font] = [];\n }\n if (!cachedCharWidth[font][ascii]) {\n const width = getLineWidth(char, font);\n cachedCharWidth[font][ascii] = width;\n }\n return cachedCharWidth[font][ascii];\n };\n const getCache = (font) => {\n return cachedCharWidth[font];\n };\n return {\n calculate,\n getCache,\n };\n})();\nconst getApproxMinLineWidth = (font) => {\n const maxCharWidth = getMaxCharWidth(font);\n if (maxCharWidth === 0) {\n return (measureText(DUMMY_TEXT.split(\"\").join(\"\\n\"), font).width +\n _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 2);\n }\n return maxCharWidth + _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 2;\n};\nconst getApproxMinLineHeight = (font) => {\n return getApproxLineHeight(font) + _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 2;\n};\nconst getMinCharWidth = (font) => {\n const cache = charWidth.getCache(font);\n if (!cache) {\n return 0;\n }\n const cacheWithOutEmpty = cache.filter((val) => val !== undefined);\n return Math.min(...cacheWithOutEmpty);\n};\nconst getMaxCharWidth = (font) => {\n const cache = charWidth.getCache(font);\n if (!cache) {\n return 0;\n }\n const cacheWithOutEmpty = cache.filter((val) => val !== undefined);\n return Math.max(...cacheWithOutEmpty);\n};\nconst getApproxCharsToFitInWidth = (font, width) => {\n // Generally lower case is used so converting to lower case\n const dummyText = DUMMY_TEXT.toLocaleLowerCase();\n const batchLength = 6;\n let index = 0;\n let widthTillNow = 0;\n let str = \"\";\n while (widthTillNow <= width) {\n const batch = dummyText.substr(index, index + batchLength);\n str += batch;\n widthTillNow += getLineWidth(str, font);\n if (index === dummyText.length - 1) {\n index = 0;\n }\n index = index + batchLength;\n }\n while (widthTillNow > width) {\n str = str.substr(0, str.length - 1);\n widthTillNow = getLineWidth(str, font);\n }\n return str.length;\n};\nconst getBoundTextElementId = (container) => {\n var _a, _b, _c;\n return ((_a = container === null || container === void 0 ? void 0 : container.boundElements) === null || _a === void 0 ? void 0 : _a.length)\n ? ((_c = (_b = container === null || container === void 0 ? void 0 : container.boundElements) === null || _b === void 0 ? void 0 : _b.filter((ele) => ele.type === \"text\")[0]) === null || _c === void 0 ? void 0 : _c.id) ||\n null\n : null;\n};\nconst getBoundTextElement = (element) => {\n var _a;\n if (!element) {\n return null;\n }\n const boundTextElementId = getBoundTextElementId(element);\n if (boundTextElementId) {\n return (((_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(boundTextElementId)) || null);\n }\n return null;\n};\nconst getContainerElement = (element) => {\n var _a;\n if (!element) {\n return null;\n }\n if (element.containerId) {\n return ((_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(element.containerId)) || null;\n }\n return null;\n};\nconst getContainerDims = (element) => {\n const MIN_WIDTH = 300;\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(element)) {\n const width = Math.max(element.width, MIN_WIDTH);\n const height = element.height;\n return { width, height };\n }\n return { width: element.width, height: element.height };\n};\nconst getContainerCenter = (container, appState) => {\n if (!(0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return {\n x: container.x + container.width / 2,\n y: container.y + container.height / 2,\n };\n }\n const points = _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getPointsGlobalCoordinates(container);\n if (points.length % 2 === 1) {\n const index = Math.floor(container.points.length / 2);\n const midPoint = _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getPointGlobalCoordinates(container, container.points[index]);\n return { x: midPoint[0], y: midPoint[1] };\n }\n const index = container.points.length / 2 - 1;\n let midSegmentMidpoint = _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getEditorMidPoints(container, appState)[index];\n if (!midSegmentMidpoint) {\n midSegmentMidpoint = _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getSegmentMidPoint(container, points[index], points[index + 1], index + 1);\n }\n return { x: midSegmentMidpoint[0], y: midSegmentMidpoint[1] };\n};\nconst getTextElementAngle = (textElement) => {\n const container = getContainerElement(textElement);\n if (!container || (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return textElement.angle;\n }\n return container.angle;\n};\nconst getBoundTextElementOffset = (boundTextElement) => {\n const container = getContainerElement(boundTextElement);\n if (!container) {\n return 0;\n }\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING * 8;\n }\n return _constants__WEBPACK_IMPORTED_MODULE_2__.BOUND_TEXT_PADDING;\n};\nconst getBoundTextElementPosition = (container, boundTextElement) => {\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return _linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getBoundTextElementPosition(container, boundTextElement);\n }\n};\nconst shouldAllowVerticalAlign = (selectedElements) => {\n return selectedElements.some((element) => {\n const hasBoundContainer = (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isBoundToContainer)(element);\n if (hasBoundContainer) {\n const container = getContainerElement(element);\n if ((0,___WEBPACK_IMPORTED_MODULE_4__.isTextElement)(element) && (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(container)) {\n return false;\n }\n return true;\n }\n const boundTextElement = getBoundTextElement(element);\n if (boundTextElement) {\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(element)) {\n return false;\n }\n return true;\n }\n return false;\n });\n};\nconst getTextBindableContainerAtPosition = (elements, appState, x, y) => {\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_8__.getSelectedElements)(elements, appState);\n if (selectedElements.length === 1) {\n return (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isTextBindableContainer)(selectedElements[0], false)\n ? selectedElements[0]\n : null;\n }\n let hitElement = null;\n // We need to to hit testing from front (end of the array) to back (beginning of the array)\n for (let index = elements.length - 1; index >= 0; --index) {\n if (elements[index].isDeleted) {\n continue;\n }\n const [x1, y1, x2, y2] = (0,___WEBPACK_IMPORTED_MODULE_4__.getElementAbsoluteCoords)(elements[index]);\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(elements[index]) &&\n (0,_collision__WEBPACK_IMPORTED_MODULE_9__.isHittingElementNotConsideringBoundingBox)(elements[index], appState, [\n x,\n y,\n ])) {\n hitElement = elements[index];\n break;\n }\n else if (x1 < x && x < x2 && y1 < y && y < y2) {\n hitElement = elements[index];\n break;\n }\n }\n return (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isTextBindableContainer)(hitElement, false) ? hitElement : null;\n};\nconst isValidTextContainer = (element) => {\n return (element.type === \"rectangle\" ||\n element.type === \"ellipse\" ||\n element.type === \"diamond\" ||\n (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isImageElement)(element) ||\n (0,_typeChecks__WEBPACK_IMPORTED_MODULE_6__.isArrowElement)(element));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsQ0FBQztZQUM3QixNQUFNO1NBQ1A7S0FDRjtJQUVELE9BQU8sb0VBQXVCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN4RSxDQUFDLENBQUM7QUFFSyxNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBMEIsRUFBRSxFQUFFO0lBQ2pFLE9BQU8sQ0FDTCxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVc7UUFDNUIsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUztRQUMxQiwyREFBYyxDQUFDLE9BQU8sQ0FBQztRQUN2QiwyREFBYyxDQUFDLE9BQU8sQ0FBQyxDQUN4QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2VsZW1lbnQvdGV4dEVsZW1lbnQudHM/NDJkMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRGb250U3RyaW5nLCBhcnJheVRvTWFwLCBpc1Rlc3RFbnYgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIEV4Y2FsaWRyYXdFbGVtZW50LFxuICBFeGNhbGlkcmF3VGV4dENvbnRhaW5lcixcbiAgRXhjYWxpZHJhd1RleHRFbGVtZW50LFxuICBFeGNhbGlkcmF3VGV4dEVsZW1lbnRXaXRoQ29udGFpbmVyLFxuICBGb250U3RyaW5nLFxuICBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBtdXRhdGVFbGVtZW50IH0gZnJvbSBcIi4vbXV0YXRlRWxlbWVudFwiO1xuaW1wb3J0IHsgQk9VTkRfVEVYVF9QQURESU5HLCBURVhUX0FMSUdOLCBWRVJUSUNBTF9BTElHTiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE1heWJlVHJhbnNmb3JtSGFuZGxlVHlwZSB9IGZyb20gXCIuL3RyYW5zZm9ybUhhbmRsZXNcIjtcbmltcG9ydCBTY2VuZSBmcm9tIFwiLi4vc2NlbmUvU2NlbmVcIjtcbmltcG9ydCB7IGlzVGV4dEVsZW1lbnQgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgZ2V0TWF4Q29udGFpbmVySGVpZ2h0LCBnZXRNYXhDb250YWluZXJXaWR0aCB9IGZyb20gXCIuL25ld0VsZW1lbnRcIjtcbmltcG9ydCB7XG4gIGlzQm91bmRUb0NvbnRhaW5lcixcbiAgaXNJbWFnZUVsZW1lbnQsXG4gIGlzQXJyb3dFbGVtZW50LFxufSBmcm9tIFwiLi90eXBlQ2hlY2tzXCI7XG5pbXBvcnQgeyBMaW5lYXJFbGVtZW50RWRpdG9yIH0gZnJvbSBcIi4vbGluZWFyRWxlbWVudEVkaXRvclwiO1xuaW1wb3J0IHsgQXBwU3RhdGUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzVGV4dEJpbmRhYmxlQ29udGFpbmVyIH0gZnJvbSBcIi4vdHlwZUNoZWNrc1wiO1xuaW1wb3J0IHsgZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzIH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tIFwiLi4vc2NlbmVcIjtcbmltcG9ydCB7IGlzSGl0dGluZ0VsZW1lbnROb3RDb25zaWRlcmluZ0JvdW5kaW5nQm94IH0gZnJvbSBcIi4vY29sbGlzaW9uXCI7XG5pbXBvcnQge1xuICByZXNldE9yaWdpbmFsQ29udGFpbmVyQ2FjaGUsXG4gIHVwZGF0ZU9yaWdpbmFsQ29udGFpbmVyQ2FjaGUsXG59IGZyb20gXCIuL3RleHRXeXNpd3lnXCI7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVUZXh0ID0gKHRleHQ6IHN0cmluZykgPT4ge1xuICByZXR1cm4gKFxuICAgIHRleHRcbiAgICAgIC8vIHJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcyBzbyB0aGV5IHJlbmRlciBhbmQgbWVhc3VyZSBjb3JyZWN0bHlcbiAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCIgICAgICAgIFwiKVxuICAgICAgLy8gbm9ybWFsaXplIG5ld2xpbmVzXG4gICAgICAucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgXCJcXG5cIilcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWRyYXdUZXh0Qm91bmRpbmdCb3ggPSAoXG4gIHRleHRFbGVtZW50OiBFeGNhbGlkcmF3VGV4dEVsZW1lbnQsXG4gIGNvbnRhaW5lcjogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsLFxuKSA9PiB7XG4gIGxldCBtYXhXaWR0aCA9IHVuZGVmaW5lZDtcbiAgbGV0IHRleHQgPSB0ZXh0RWxlbWVudC50ZXh0O1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgbWF4V2lkdGggPSBnZXRNYXhDb250YWluZXJXaWR0aChjb250YWluZXIpO1xuICAgIHRleHQgPSB3cmFwVGV4dChcbiAgICAgIHRleHRFbGVtZW50Lm9yaWdpbmFsVGV4dCxcbiAgICAgIGdldEZvbnRTdHJpbmcodGV4dEVsZW1lbnQpLFxuICAgICAgbWF4V2lkdGgsXG4gICAgKTtcbiAgfVxuICBjb25zdCBtZXRyaWNzID0gbWVhc3VyZVRleHQodGV4dCwgZ2V0Rm9udFN0cmluZyh0ZXh0RWxlbWVudCksIG1heFdpZHRoKTtcbiAgbGV0IGNvb3JkWSA9IHRleHRFbGVtZW50Lnk7XG4gIGxldCBjb29yZFggPSB0ZXh0RWxlbWVudC54O1xuICAvLyBSZXNpemUgY29udGFpbmVyIGFuZCB2ZXJ0aWNhbGx5IGNlbnRlciBhbGlnbiB0aGUgdGV4dFxuICBpZiAoY29udGFpbmVyKSB7XG4gICAgaWYgKCFpc0Fycm93RWxlbWVudChjb250YWluZXIpKSB7XG4gICAgICBjb25zdCBjb250YWluZXJEaW1zID0gZ2V0Q29udGFpbmVyRGltcyhjb250YWluZXIpO1xuICAgICAgbGV0IG5leHRIZWlnaHQgPSBjb250YWluZXJEaW1zLmhlaWdodDtcbiAgICAgIGlmICh0ZXh0RWxlbWVudC52ZXJ0aWNhbEFsaWduID09PSBWRVJUSUNBTF9BTElHTi5UT1ApIHtcbiAgICAgICAgY29vcmRZID0gY29udGFpbmVyLnk7XG4gICAgICB9IGVsc2UgaWYgKHRleHRFbGVtZW50LnZlcnRpY2FsQWxpZ24gPT09IFZFUlRJQ0FMX0FMSUdOLkJPVFRPTSkge1xuICAgICAgICBjb29yZFkgPVxuICAgICAgICAgIGNvbnRhaW5lci55ICtcbiAgICAgICAgICBjb250YWluZXJEaW1zLmhlaWdodCAtXG4gICAgICAgICAgbWV0cmljcy5oZWlnaHQgLVxuICAgICAgICAgIEJPVU5EX1RFWFRfUEFERElORztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvb3JkWSA9IGNvbnRhaW5lci55ICsgY29udGFpbmVyRGltcy5oZWlnaHQgLyAyIC0gbWV0cmljcy5oZWlnaHQgLyAyO1xuICAgICAgICBpZiAobWV0cmljcy5oZWlnaHQgPiBnZXRNYXhDb250YWluZXJIZWlnaHQoY29udGFpbmVyKSkge1xuICAgICAgICAgIG5leHRIZWlnaHQgPSBtZXRyaWNzLmhlaWdodCArIEJPVU5EX1RFWFRfUEFERElORyAqIDI7XG4gICAgICAgICAgY29vcmRZID0gY29udGFpbmVyLnkgKyBuZXh0SGVpZ2h0IC8gMiAtIG1ldHJpY3MuaGVpZ2h0IC8gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRleHRFbGVtZW50LnRleHRBbGlnbiA9PT0gVEVYVF9BTElHTi5MRUZUKSB7XG4gICAgICAgIGNvb3JkWCA9IGNvbnRhaW5lci54ICsgQk9VTkRfVEVYVF9QQURESU5HO1xuICAgICAgfSBlbHNlIGlmICh0ZXh0RWxlbWVudC50ZXh0QWxpZ24gPT09IFRFWFRfQUxJR04uUklHSFQpIHtcbiAgICAgICAgY29vcmRYID1cbiAgICAgICAgICBjb250YWluZXIueCArXG4gICAgICAgICAgY29udGFpbmVyRGltcy53aWR0aCAtXG4gICAgICAgICAgbWV0cmljcy53aWR0aCAtXG4gICAgICAgICAgQk9VTkRfVEVYVF9QQURESU5HO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29vcmRYID0gY29udGFpbmVyLnggKyBjb250YWluZXJEaW1zLndpZHRoIC8gMiAtIG1ldHJpY3Mud2lkdGggLyAyO1xuICAgICAgfVxuICAgICAgdXBkYXRlT3JpZ2luYWxDb250YWluZXJDYWNoZShjb250YWluZXIuaWQsIG5leHRIZWlnaHQpO1xuICAgICAgbXV0YXRlRWxlbWVudChjb250YWluZXIsIHsgaGVpZ2h0OiBuZXh0SGVpZ2h0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjZW50ZXJYID0gdGV4dEVsZW1lbnQueCArIHRleHRFbGVtZW50LndpZHRoIC8gMjtcbiAgICAgIGNvbnN0IGNlbnRlclkgPSB0ZXh0RWxlbWVudC55ICsgdGV4dEVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgICAgIGNvbnN0IGRpZmZXaWR0aCA9IG1ldHJpY3Mud2lkdGggLSB0ZXh0RWxlbWVudC53aWR0aDtcbiAgICAgIGNvbnN0IGRpZmZIZWlnaHQgPSBtZXRyaWNzLmhlaWdodCAtIHRleHRFbGVtZW50LmhlaWdodDtcbiAgICAgIGNvb3JkWSA9IGNlbnRlclkgLSAodGV4dEVsZW1lbnQuaGVpZ2h0ICsgZGlmZkhlaWdodCkgLyAyO1xuICAgICAgY29vcmRYID0gY2VudGVyWCAtICh0ZXh0RWxlbWVudC53aWR0aCArIGRpZmZXaWR0aCkgLyAyO1xuICAgIH1cbiAgfVxuICBtdXRhdGVFbGVtZW50KHRleHRFbGVtZW50LCB7XG4gICAgd2lkdGg6IG1ldHJpY3Mud2lkdGgsXG4gICAgaGVpZ2h0OiBtZXRyaWNzLmhlaWdodCxcbiAgICBiYXNlbGluZTogbWV0cmljcy5iYXNlbGluZSxcbiAgICB5OiBjb29yZFksXG4gICAgeDogY29vcmRYLFxuICAgIHRleHQsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJpbmRUZXh0VG9TaGFwZUFmdGVyRHVwbGljYXRpb24gPSAoXG4gIHNjZW5lRWxlbWVudHM6IEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIG9sZEVsZW1lbnRzOiBFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBvbGRJZFRvRHVwbGljYXRlZElkOiBNYXA8RXhjYWxpZHJhd0VsZW1lbnRbXCJpZFwiXSwgRXhjYWxpZHJhd0VsZW1lbnRbXCJpZFwiXT4sXG4pOiB2b2lkID0+IHtcbiAgY29uc3Qgc2NlbmVFbGVtZW50TWFwID0gYXJyYXlUb01hcChzY2VuZUVsZW1lbnRzKSBhcyBNYXA8XG4gICAgRXhjYWxpZHJhd0VsZW1lbnRbXCJpZFwiXSxcbiAgICBFeGNhbGlkcmF3RWxlbWVudFxuICA+O1xuICBvbGRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudElkID0gb2xkSWRUb0R1cGxpY2F0ZWRJZC5nZXQoZWxlbWVudC5pZCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGJvdW5kVGV4dEVsZW1lbnRJZCA9IGdldEJvdW5kVGV4dEVsZW1lbnRJZChlbGVtZW50KTtcblxuICAgIGlmIChib3VuZFRleHRFbGVtZW50SWQpIHtcbiAgICAgIGNvbnN0IG5ld1RleHRFbGVtZW50SWQgPSBvbGRJZFRvRHVwbGljYXRlZElkLmdldChib3VuZFRleHRFbGVtZW50SWQpO1xuICAgICAgaWYgKG5ld1RleHRFbGVtZW50SWQpIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyID0gc2NlbmVFbGVtZW50TWFwLmdldChuZXdFbGVtZW50SWQpO1xuICAgICAgICBpZiAobmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgbXV0YXRlRWxlbWVudChuZXdDb250YWluZXIsIHtcbiAgICAgICAgICAgIGJvdW5kRWxlbWVudHM6IChuZXdDb250YWluZXIuYm91bmRFbGVtZW50cyB8fCBbXSkuY29uY2F0KHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIGlkOiBuZXdUZXh0RWxlbWVudElkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VGV4dEVsZW1lbnQgPSBzY2VuZUVsZW1lbnRNYXAuZ2V0KG5ld1RleHRFbGVtZW50SWQpO1xuICAgICAgICBpZiAobmV3VGV4dEVsZW1lbnQgJiYgaXNUZXh0RWxlbWVudChuZXdUZXh0RWxlbWVudCkpIHtcbiAgICAgICAgICBtdXRhdGVFbGVtZW50KG5ld1RleHRFbGVtZW50LCB7XG4gICAgICAgICAgICBjb250YWluZXJJZDogbmV3Q29udGFpbmVyID8gbmV3RWxlbWVudElkIDogbnVsbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlQmluZFRleHRSZXNpemUgPSAoXG4gIGNvbnRhaW5lcjogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICB0cmFuc2Zvcm1IYW5kbGVUeXBlOiBNYXliZVRyYW5zZm9ybUhhbmRsZVR5cGUsXG4pID0+IHtcbiAgY29uc3QgYm91bmRUZXh0RWxlbWVudElkID0gZ2V0Qm91bmRUZXh0RWxlbWVudElkKGNvbnRhaW5lcik7XG4gIGlmICghYm91bmRUZXh0RWxlbWVudElkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJlc2V0T3JpZ2luYWxDb250YWluZXJDYWNoZShjb250YWluZXIuaWQpO1xuICBsZXQgdGV4dEVsZW1lbnQgPSBTY2VuZS5nZXRTY2VuZShjb250YWluZXIpIS5nZXRFbGVtZW50KFxuICAgIGJvdW5kVGV4dEVsZW1lbnRJZCxcbiAgKSBhcyBFeGNhbGlkcmF3VGV4dEVsZW1lbnQ7XG4gIGlmICh0ZXh0RWxlbWVudCAmJiB0ZXh0RWxlbWVudC50ZXh0KSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0ZXh0RWxlbWVudCA9IFNjZW5lLmdldFNjZW5lKGNvbnRhaW5lcikhLmdldEVsZW1lbnQoXG4gICAgICBib3VuZFRleHRFbGVtZW50SWQsXG4gICAgKSBhcyBFeGNhbGlkcmF3VGV4dEVsZW1lbnQ7XG4gICAgbGV0IHRleHQgPSB0ZXh0RWxlbWVudC50ZXh0O1xuICAgIGxldCBuZXh0SGVpZ2h0ID0gdGV4dEVsZW1lbnQuaGVpZ2h0O1xuICAgIGxldCBuZXh0V2lkdGggPSB0ZXh0RWxlbWVudC53aWR0aDtcbiAgICBjb25zdCBjb250YWluZXJEaW1zID0gZ2V0Q29udGFpbmVyRGltcyhjb250YWluZXIpO1xuICAgIGNvbnN0IG1heFdpZHRoID0gZ2V0TWF4Q29udGFpbmVyV2lkdGgoY29udGFpbmVyKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBnZXRNYXhDb250YWluZXJIZWlnaHQoY29udGFpbmVyKTtcbiAgICBsZXQgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyRGltcy5oZWlnaHQ7XG4gICAgbGV0IG5leHRCYXNlTGluZSA9IHRleHRFbGVtZW50LmJhc2VsaW5lO1xuICAgIGlmICh0cmFuc2Zvcm1IYW5kbGVUeXBlICE9PSBcIm5cIiAmJiB0cmFuc2Zvcm1IYW5kbGVUeXBlICE9PSBcInNcIikge1xuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgdGV4dCA9IHdyYXBUZXh0KFxuICAgICAgICAgIHRleHRFbGVtZW50Lm9yaWdpbmFsVGV4dCxcbiAgICAgICAgICBnZXRGb250U3RyaW5nKHRleHRFbGVtZW50KSxcbiAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBtZWFzdXJlVGV4dChcbiAgICAgICAgdGV4dCxcbiAgICAgICAgZ2V0Rm9udFN0cmluZyh0ZXh0RWxlbWVudCksXG4gICAgICAgIG1heFdpZHRoLFxuICAgICAgKTtcbiAgICAgIG5leHRIZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodDtcbiAgICAgIG5leHRXaWR0aCA9IGRpbWVuc2lvbnMud2lkdGg7XG4gICAgICBuZXh0QmFzZUxpbmUgPSBkaW1lbnNpb25zLmJhc2VsaW5lO1xuICAgIH1cbiAgICAvLyBpbmNyZWFzZSBoZWlnaHQgaW4gY2FzZSB0ZXh0IGVsZW1lbnQgaGVpZ2h0IGV4Y2VlZHNcbiAgICBpZiAobmV4dEhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgY29udGFpbmVySGVpZ2h0ID0gbmV4dEhlaWdodCArIGdldEJvdW5kVGV4dEVsZW1lbnRPZmZzZXQodGV4dEVsZW1lbnQpICogMjtcbiAgICAgIGNvbnN0IGRpZmYgPSBjb250YWluZXJIZWlnaHQgLSBjb250YWluZXJEaW1zLmhlaWdodDtcbiAgICAgIC8vIGZpeCB0aGUgeSBjb29yZCB3aGVuIHJlc2l6aW5nIGZyb20gbmUvbncvblxuICAgICAgY29uc3QgdXBkYXRlZFkgPVxuICAgICAgICAhaXNBcnJvd0VsZW1lbnQoY29udGFpbmVyKSAmJlxuICAgICAgICAodHJhbnNmb3JtSGFuZGxlVHlwZSA9PT0gXCJuZVwiIHx8XG4gICAgICAgICAgdHJhbnNmb3JtSGFuZGxlVHlwZSA9PT0gXCJud1wiIHx8XG4gICAgICAgICAgdHJhbnNmb3JtSGFuZGxlVHlwZSA9PT0gXCJuXCIpXG4gICAgICAgICAgPyBjb250YWluZXIueSAtIGRpZmZcbiAgICAgICAgICA6IGNvbnRhaW5lci55O1xuICAgICAgbXV0YXRlRWxlbWVudChjb250YWluZXIsIHtcbiAgICAgICAgaGVpZ2h0OiBjb250YWluZXJIZWlnaHQsXG4gICAgICAgIHk6IHVwZGF0ZWRZLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbXV0YXRlRWxlbWVudCh0ZXh0RWxlbWVudCwge1xuICAgICAgdGV4dCxcbiAgICAgIHdpZHRoOiBuZXh0V2lkdGgsXG4gICAgICBoZWlnaHQ6IG5leHRIZWlnaHQsXG5cbiAgICAgIGJhc2VsaW5lOiBuZXh0QmFzZUxpbmUsXG4gICAgfSk7XG4gICAgaWYgKCFpc0Fycm93RWxlbWVudChjb250YWluZXIpKSB7XG4gICAgICB1cGRhdGVCb3VuZFRleHRQb3NpdGlvbihcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICB0ZXh0RWxlbWVudCBhcyBFeGNhbGlkcmF3VGV4dEVsZW1lbnRXaXRoQ29udGFpbmVyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHVwZGF0ZUJvdW5kVGV4dFBvc2l0aW9uID0gKFxuICBjb250YWluZXI6IEV4Y2FsaWRyYXdFbGVtZW50LFxuICBib3VuZFRleHRFbGVtZW50OiBFeGNhbGlkcmF3VGV4dEVsZW1lbnRXaXRoQ29udGFpbmVyLFxuKSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lckRpbXMgPSBnZXRDb250YWluZXJEaW1zKGNvbnRhaW5lcik7XG4gIGNvbnN0IGJvdW5kVGV4dEVsZW1lbnRQYWRkaW5nID0gZ2V0Qm91bmRUZXh0RWxlbWVudE9mZnNldChib3VuZFRleHRFbGVtZW50KTtcbiAgbGV0IHk7XG4gIGlmIChib3VuZFRleHRFbGVtZW50LnZlcnRpY2FsQWxpZ24gPT09IFZFUlRJQ0FMX0FMSUdOLlRPUCkge1xuICAgIHkgPSBjb250YWluZXIueSArIGJvdW5kVGV4dEVsZW1lbnRQYWRkaW5nO1xuICB9IGVsc2UgaWYgKGJvdW5kVGV4dEVsZW1lbnQudmVydGljYWxBbGlnbiA9PT0gVkVSVElDQUxfQUxJR04uQk9UVE9NKSB7XG4gICAgeSA9XG4gICAgICBjb250YWluZXIueSArXG4gICAgICBjb250YWluZXJEaW1zLmhlaWdodCAtXG4gICAgICBib3VuZFRleHRFbGVtZW50LmhlaWdodCAtXG4gICAgICBib3VuZFRleHRFbGVtZW50UGFkZGluZztcbiAgfSBlbHNlIHtcbiAgICB5ID0gY29udGFpbmVyLnkgKyBjb250YWluZXJEaW1zLmhlaWdodCAvIDIgLSBib3VuZFRleHRFbGVtZW50LmhlaWdodCAvIDI7XG4gIH1cbiAgY29uc3QgeCA9XG4gICAgYm91bmRUZXh0RWxlbWVudC50ZXh0QWxpZ24gPT09IFRFWFRfQUxJR04uTEVGVFxuICAgICAgPyBjb250YWluZXIueCArIGJvdW5kVGV4dEVsZW1lbnRQYWRkaW5nXG4gICAgICA6IGJvdW5kVGV4dEVsZW1lbnQudGV4dEFsaWduID09PSBURVhUX0FMSUdOLlJJR0hUXG4gICAgICA/IGNvbnRhaW5lci54ICtcbiAgICAgICAgY29udGFpbmVyRGltcy53aWR0aCAtXG4gICAgICAgIGJvdW5kVGV4dEVsZW1lbnQud2lkdGggLVxuICAgICAgICBib3VuZFRleHRFbGVtZW50UGFkZGluZ1xuICAgICAgOiBjb250YWluZXIueCArIGNvbnRhaW5lckRpbXMud2lkdGggLyAyIC0gYm91bmRUZXh0RWxlbWVudC53aWR0aCAvIDI7XG5cbiAgbXV0YXRlRWxlbWVudChib3VuZFRleHRFbGVtZW50LCB7IHgsIHkgfSk7XG59O1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dyYXNzYXRvci9jYW52YXMtdGV4dC1lZGl0b3IvYmxvYi9tYXN0ZXIvbGliL0ZvbnRNZXRyaWNzLmpzXG5leHBvcnQgY29uc3QgbWVhc3VyZVRleHQgPSAoXG4gIHRleHQ6IHN0cmluZyxcbiAgZm9udDogRm9udFN0cmluZyxcbiAgbWF4V2lkdGg/OiBudW1iZXIgfCBudWxsLFxuKSA9PiB7XG4gIHRleHQgPSB0ZXh0XG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLy8gcmVwbGFjZSBlbXB0eSBsaW5lcyB3aXRoIHNpbmdsZSBzcGFjZSBiZWNhdXNlIGxlYWRpbmcvdHJhaWxpbmcgZW1wdHlcbiAgICAvLyBsaW5lcyB3b3VsZCBiZSBzdHJpcHBlZCBmcm9tIGNvbXB1dGF0aW9uXG4gICAgLm1hcCgoeCkgPT4geCB8fCBcIiBcIilcbiAgICAuam9pbihcIlxcblwiKTtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICBjb250YWluZXIuc3R5bGUud2hpdGVTcGFjZSA9IFwicHJlXCI7XG4gIGNvbnRhaW5lci5zdHlsZS5mb250ID0gZm9udDtcbiAgY29udGFpbmVyLnN0eWxlLm1pbkhlaWdodCA9IFwiMWVtXCI7XG5cbiAgaWYgKG1heFdpZHRoKSB7XG4gICAgY29uc3QgbGluZUhlaWdodCA9IGdldEFwcHJveExpbmVIZWlnaHQoZm9udCk7XG4gICAgLy8gc2luY2Ugd2UgYXJlIGFkZGluZyBhIHNwYW4gb2Ygd2lkdGggMXB4IGxhdGVyXG4gICAgY29udGFpbmVyLnN0eWxlLm1heFdpZHRoID0gYCR7bWF4V2lkdGggKyAxfXB4YDtcbiAgICBjb250YWluZXIuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIGNvbnRhaW5lci5zdHlsZS53b3JkQnJlYWsgPSBcImJyZWFrLXdvcmRcIjtcbiAgICBjb250YWluZXIuc3R5bGUubGluZUhlaWdodCA9IGAke1N0cmluZyhsaW5lSGVpZ2h0KX1weGA7XG4gICAgY29udGFpbmVyLnN0eWxlLndoaXRlU3BhY2UgPSBcInByZS13cmFwXCI7XG4gIH1cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICBjb250YWluZXIuaW5uZXJUZXh0ID0gdGV4dDtcblxuICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gIHNwYW4uc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG4gIHNwYW4uc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICBzcGFuLnN0eWxlLndpZHRoID0gXCIxcHhcIjtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBcIjFweFwiO1xuICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gIC8vIEJhc2VsaW5lIGlzIGltcG9ydGFudCBmb3IgcG9zaXRpb25pbmcgdGV4dCBvbiBjYW52YXNcbiAgY29uc3QgYmFzZWxpbmUgPSBzcGFuLm9mZnNldFRvcCArIHNwYW4ub2Zmc2V0SGVpZ2h0O1xuICAvLyBzaW5jZSB3ZSBhcmUgYWRkaW5nIGEgc3BhbiBvZiB3aWR0aCAxcHhcbiAgY29uc3Qgd2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGggKyAxO1xuICBjb25zdCBoZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGNvbnRhaW5lcik7XG4gIGlmIChpc1Rlc3RFbnYoKSkge1xuICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGJhc2VsaW5lLCBjb250YWluZXIgfTtcbiAgfVxuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBiYXNlbGluZSB9O1xufTtcblxuY29uc3QgRFVNTVlfVEVYVCA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5XCIudG9Mb2NhbGVVcHBlckNhc2UoKTtcbmNvbnN0IGNhY2hlQXBwcm94TGluZUhlaWdodDogeyBba2V5OiBGb250U3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcHJveExpbmVIZWlnaHQgPSAoZm9udDogRm9udFN0cmluZykgPT4ge1xuICBpZiAoY2FjaGVBcHByb3hMaW5lSGVpZ2h0W2ZvbnRdKSB7XG4gICAgcmV0dXJuIGNhY2hlQXBwcm94TGluZUhlaWdodFtmb250XTtcbiAgfVxuICBjYWNoZUFwcHJveExpbmVIZWlnaHRbZm9udF0gPSBtZWFzdXJlVGV4dChEVU1NWV9URVhULCBmb250LCBudWxsKS5oZWlnaHQ7XG4gIHJldHVybiBjYWNoZUFwcHJveExpbmVIZWlnaHRbZm9udF07XG59O1xuXG5sZXQgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IHVuZGVmaW5lZDtcbmNvbnN0IGdldExpbmVXaWR0aCA9ICh0ZXh0OiBzdHJpbmcsIGZvbnQ6IEZvbnRTdHJpbmcpID0+IHtcbiAgaWYgKCFjYW52YXMpIHtcbiAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICB9XG4gIGNvbnN0IGNhbnZhczJkQ29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikhO1xuICBjYW52YXMyZENvbnRleHQuZm9udCA9IGZvbnQ7XG5cbiAgY29uc3QgbWV0cmljcyA9IGNhbnZhczJkQ29udGV4dC5tZWFzdXJlVGV4dCh0ZXh0KTtcbiAgLy8gc2luY2UgaW4gdGVzdCBlbnYgdGhlIGNhbnZhcyBtZWFzdXJlVGV4dCBhbGdvXG4gIC8vIGRvZXNuJ3QgbWVhc3VyZSB0ZXh0IGFuZCBpbnN0ZWFkIGp1c3QgcmV0dXJucyBudW1iZXIgb2ZcbiAgLy8gY2hhcmFjdGVycyBoZW5jZSB3ZSBhc3N1bWUgdGhhdCBlYWNoIGxldHRlcmlzIDEwcHhcbiAgaWYgKGlzVGVzdEVudigpKSB7XG4gICAgcmV0dXJuIG1ldHJpY3Mud2lkdGggKiAxMDtcbiAgfVxuICAvLyBTaW5jZSBtZWFzdXJlVGV4dCBiZWhhdmVzIGRpZmZlcmVudGx5IGluIGRpZmZlcmVudCBicm93c2Vyc1xuICAvLyBPUyBzbyBjb25zaWRlcmluZyBhIGFkanVzdG1lbnQgZmFjdG9yIG9mIDAuMlxuICBjb25zdCBhZGp1c3RtZW50RmFjdG9yID0gMC4yO1xuXG4gIHJldHVybiBtZXRyaWNzLndpZHRoICsgYWRqdXN0bWVudEZhY3Rvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0V2lkdGggPSAodGV4dDogc3RyaW5nLCBmb250OiBGb250U3RyaW5nKSA9PiB7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKTtcbiAgbGV0IHdpZHRoID0gMDtcbiAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGdldExpbmVXaWR0aChsaW5lLCBmb250KSk7XG4gIH0pO1xuICByZXR1cm4gd2lkdGg7XG59O1xuZXhwb3J0IGNvbnN0IHdyYXBUZXh0ID0gKHRleHQ6IHN0cmluZywgZm9udDogRm9udFN0cmluZywgbWF4V2lkdGg6IG51bWJlcikgPT4ge1xuICBjb25zdCBsaW5lczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBjb25zdCBvcmlnaW5hbExpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKTtcbiAgY29uc3Qgc3BhY2VXaWR0aCA9IGdldExpbmVXaWR0aChcIiBcIiwgZm9udCk7XG5cbiAgY29uc3QgcHVzaCA9IChzdHI6IHN0cmluZykgPT4ge1xuICAgIGlmIChzdHIudHJpbSgpKSB7XG4gICAgICBsaW5lcy5wdXNoKHN0cik7XG4gICAgfVxuICB9O1xuICBvcmlnaW5hbExpbmVzLmZvckVhY2goKG9yaWdpbmFsTGluZSkgPT4ge1xuICAgIGNvbnN0IHdvcmRzID0gb3JpZ2luYWxMaW5lLnNwbGl0KFwiIFwiKTtcbiAgICAvLyBUaGlzIG1lYW5zIGl0cyBuZXdsaW5lIHNvIHB1c2ggaXRcbiAgICBpZiAod29yZHMubGVuZ3RoID09PSAxICYmIHdvcmRzWzBdID09PSBcIlwiKSB7XG4gICAgICBsaW5lcy5wdXNoKHdvcmRzWzBdKTtcbiAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICB9XG4gICAgbGV0IGN1cnJlbnRMaW5lID0gXCJcIjtcbiAgICBsZXQgY3VycmVudExpbmVXaWR0aFRpbGxOb3cgPSAwO1xuXG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCB3b3Jkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRXb3JkV2lkdGggPSBnZXRMaW5lV2lkdGgod29yZHNbaW5kZXhdLCBmb250KTtcblxuICAgICAgLy8gU3RhcnQgYnJlYWtpbmcgbG9uZ2VyIHdvcmRzIGV4Y2VlZGluZyBtYXggd2lkdGhcbiAgICAgIGlmIChjdXJyZW50V29yZFdpZHRoID49IG1heFdpZHRoKSB7XG4gICAgICAgIC8vIHB1c2ggY3VycmVudCBsaW5lIHNpbmNlIHRoZSBjdXJyZW50IHdvcmQgZXhjZWVkcyB0aGUgbWF4IHdpZHRoXG4gICAgICAgIC8vIHNvIHdpbGwgYmUgYXBwZW5kZWQgaW4gbmV4dCBsaW5lXG4gICAgICAgIHB1c2goY3VycmVudExpbmUpO1xuICAgICAgICBjdXJyZW50TGluZSA9IFwiXCI7XG4gICAgICAgIGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ID0gMDtcbiAgICAgICAgd2hpbGUgKHdvcmRzW2luZGV4XS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudENoYXIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChcbiAgICAgICAgICAgIHdvcmRzW2luZGV4XS5jb2RlUG9pbnRBdCgwKSEsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGNoYXJXaWR0aC5jYWxjdWxhdGUoY3VycmVudENoYXIsIGZvbnQpO1xuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ICs9IHdpZHRoO1xuICAgICAgICAgIHdvcmRzW2luZGV4XSA9IHdvcmRzW2luZGV4XS5zbGljZShjdXJyZW50Q2hhci5sZW5ndGgpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ID49IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAvLyBvbmx5IHJlbW92ZSBsYXN0IHRyYWlsaW5nIHNwYWNlIHdoaWNoIHdlIGhhdmUgYWRkZWQgd2hlbiBqb2luaW5nIHdvcmRzXG4gICAgICAgICAgICBpZiAoY3VycmVudExpbmUuc2xpY2UoLTEpID09PSBcIiBcIikge1xuICAgICAgICAgICAgICBjdXJyZW50TGluZSA9IGN1cnJlbnRMaW5lLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHB1c2goY3VycmVudExpbmUpO1xuICAgICAgICAgICAgY3VycmVudExpbmUgPSBjdXJyZW50Q2hhcjtcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ID0gd2lkdGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lICs9IGN1cnJlbnRDaGFyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBwdXNoIGN1cnJlbnQgbGluZSBpZiBhcHBlbmRpbmcgc3BhY2UgZXhjZWVkcyBtYXggd2lkdGhcbiAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ICsgc3BhY2VXaWR0aCA+PSBtYXhXaWR0aCkge1xuICAgICAgICAgIHB1c2goY3VycmVudExpbmUpO1xuICAgICAgICAgIGN1cnJlbnRMaW5lID0gXCJcIjtcbiAgICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc3BhY2UgbmVlZHMgdG8gYmUgYXBwZW5kZWQgYmVmb3JlIG5leHQgd29yZFxuICAgICAgICAgIC8vIGFzIGN1cnJlbnRMaW5lIGNvbnRhaW5zIGNoYXJzIHdoaWNoIGNvdWxkbid0IGJlIGFwcGVuZGVkXG4gICAgICAgICAgLy8gdG8gcHJldmlvdXMgbGluZVxuICAgICAgICAgIGN1cnJlbnRMaW5lICs9IFwiIFwiO1xuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ICs9IHNwYWNlV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3RhcnQgYXBwZW5kaW5nIHdvcmRzIGluIGEgbGluZSB0aWxsIG1heCB3aWR0aCByZWFjaGVkXG4gICAgICAgIHdoaWxlIChjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA8IG1heFdpZHRoICYmIGluZGV4IDwgd29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3Qgd29yZCA9IHdvcmRzW2luZGV4XTtcbiAgICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA9IGdldExpbmVXaWR0aChjdXJyZW50TGluZSArIHdvcmQsIGZvbnQpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ID49IG1heFdpZHRoKSB7XG4gICAgICAgICAgICBwdXNoKGN1cnJlbnRMaW5lKTtcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ID0gMDtcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lID0gXCJcIjtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgY3VycmVudExpbmUgKz0gYCR7d29yZH0gYDtcblxuICAgICAgICAgIC8vIFB1c2ggdGhlIHdvcmQgaWYgYXBwZW5kaW5nIHNwYWNlIGV4Y2VlZHMgbWF4IHdpZHRoXG4gICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ICsgc3BhY2VXaWR0aCA+PSBtYXhXaWR0aCkge1xuICAgICAgICAgICAgY29uc3Qgd29yZCA9IGN1cnJlbnRMaW5lLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHB1c2god29yZCk7XG4gICAgICAgICAgICBjdXJyZW50TGluZSA9IFwiXCI7XG4gICAgICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGhUaWxsTm93ID09PSBtYXhXaWR0aCkge1xuICAgICAgICAgIGN1cnJlbnRMaW5lID0gXCJcIjtcbiAgICAgICAgICBjdXJyZW50TGluZVdpZHRoVGlsbE5vdyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1cnJlbnRMaW5lKSB7XG4gICAgICAvLyBvbmx5IHJlbW92ZSBsYXN0IHRyYWlsaW5nIHNwYWNlIHdoaWNoIHdlIGhhdmUgYWRkZWQgd2hlbiBqb2luaW5nIHdvcmRzXG4gICAgICBpZiAoY3VycmVudExpbmUuc2xpY2UoLTEpID09PSBcIiBcIikge1xuICAgICAgICBjdXJyZW50TGluZSA9IGN1cnJlbnRMaW5lLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICAgIHB1c2goY3VycmVudExpbmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoYXJXaWR0aCA9ICgoKSA9PiB7XG4gIGNvbnN0IGNhY2hlZENoYXJXaWR0aDogeyBba2V5OiBGb250U3RyaW5nXTogQXJyYXk8bnVtYmVyPiB9ID0ge307XG5cbiAgY29uc3QgY2FsY3VsYXRlID0gKGNoYXI6IHN0cmluZywgZm9udDogRm9udFN0cmluZykgPT4ge1xuICAgIGNvbnN0IGFzY2lpID0gY2hhci5jaGFyQ29kZUF0KDApO1xuICAgIGlmICghY2FjaGVkQ2hhcldpZHRoW2ZvbnRdKSB7XG4gICAgICBjYWNoZWRDaGFyV2lkdGhbZm9udF0gPSBbXTtcbiAgICB9XG4gICAgaWYgKCFjYWNoZWRDaGFyV2lkdGhbZm9udF1bYXNjaWldKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGdldExpbmVXaWR0aChjaGFyLCBmb250KTtcbiAgICAgIGNhY2hlZENoYXJXaWR0aFtmb250XVthc2NpaV0gPSB3aWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGVkQ2hhcldpZHRoW2ZvbnRdW2FzY2lpXTtcbiAgfTtcblxuICBjb25zdCBnZXRDYWNoZSA9IChmb250OiBGb250U3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGNhY2hlZENoYXJXaWR0aFtmb250XTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBjYWxjdWxhdGUsXG4gICAgZ2V0Q2FjaGUsXG4gIH07XG59KSgpO1xuZXhwb3J0IGNvbnN0IGdldEFwcHJveE1pbkxpbmVXaWR0aCA9IChmb250OiBGb250U3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1heENoYXJXaWR0aCA9IGdldE1heENoYXJXaWR0aChmb250KTtcblxuICBpZiAobWF4Q2hhcldpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIG1lYXN1cmVUZXh0KERVTU1ZX1RFWFQuc3BsaXQoXCJcIikuam9pbihcIlxcblwiKSwgZm9udCkud2lkdGggK1xuICAgICAgQk9VTkRfVEVYVF9QQURESU5HICogMlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1heENoYXJXaWR0aCArIEJPVU5EX1RFWFRfUEFERElORyAqIDI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwcm94TWluTGluZUhlaWdodCA9IChmb250OiBGb250U3RyaW5nKSA9PiB7XG4gIHJldHVybiBnZXRBcHByb3hMaW5lSGVpZ2h0KGZvbnQpICsgQk9VTkRfVEVYVF9QQURESU5HICogMjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNaW5DaGFyV2lkdGggPSAoZm9udDogRm9udFN0cmluZykgPT4ge1xuICBjb25zdCBjYWNoZSA9IGNoYXJXaWR0aC5nZXRDYWNoZShmb250KTtcbiAgaWYgKCFjYWNoZSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IGNhY2hlV2l0aE91dEVtcHR5ID0gY2FjaGUuZmlsdGVyKCh2YWwpID0+IHZhbCAhPT0gdW5kZWZpbmVkKTtcblxuICByZXR1cm4gTWF0aC5taW4oLi4uY2FjaGVXaXRoT3V0RW1wdHkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1heENoYXJXaWR0aCA9IChmb250OiBGb250U3RyaW5nKSA9PiB7XG4gIGNvbnN0IGNhY2hlID0gY2hhcldpZHRoLmdldENhY2hlKGZvbnQpO1xuICBpZiAoIWNhY2hlKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgY2FjaGVXaXRoT3V0RW1wdHkgPSBjYWNoZS5maWx0ZXIoKHZhbCkgPT4gdmFsICE9PSB1bmRlZmluZWQpO1xuICByZXR1cm4gTWF0aC5tYXgoLi4uY2FjaGVXaXRoT3V0RW1wdHkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcHJveENoYXJzVG9GaXRJbldpZHRoID0gKGZvbnQ6IEZvbnRTdHJpbmcsIHdpZHRoOiBudW1iZXIpID0+IHtcbiAgLy8gR2VuZXJhbGx5IGxvd2VyIGNhc2UgaXMgdXNlZCBzbyBjb252ZXJ0aW5nIHRvIGxvd2VyIGNhc2VcbiAgY29uc3QgZHVtbXlUZXh0ID0gRFVNTVlfVEVYVC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICBjb25zdCBiYXRjaExlbmd0aCA9IDY7XG4gIGxldCBpbmRleCA9IDA7XG4gIGxldCB3aWR0aFRpbGxOb3cgPSAwO1xuICBsZXQgc3RyID0gXCJcIjtcbiAgd2hpbGUgKHdpZHRoVGlsbE5vdyA8PSB3aWR0aCkge1xuICAgIGNvbnN0IGJhdGNoID0gZHVtbXlUZXh0LnN1YnN0cihpbmRleCwgaW5kZXggKyBiYXRjaExlbmd0aCk7XG4gICAgc3RyICs9IGJhdGNoO1xuICAgIHdpZHRoVGlsbE5vdyArPSBnZXRMaW5lV2lkdGgoc3RyLCBmb250KTtcbiAgICBpZiAoaW5kZXggPT09IGR1bW15VGV4dC5sZW5ndGggLSAxKSB7XG4gICAgICBpbmRleCA9IDA7XG4gICAgfVxuICAgIGluZGV4ID0gaW5kZXggKyBiYXRjaExlbmd0aDtcbiAgfVxuXG4gIHdoaWxlICh3aWR0aFRpbGxOb3cgPiB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgc3RyLmxlbmd0aCAtIDEpO1xuICAgIHdpZHRoVGlsbE5vdyA9IGdldExpbmVXaWR0aChzdHIsIGZvbnQpO1xuICB9XG4gIHJldHVybiBzdHIubGVuZ3RoO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJvdW5kVGV4dEVsZW1lbnRJZCA9IChjb250YWluZXI6IEV4Y2FsaWRyYXdFbGVtZW50IHwgbnVsbCkgPT4ge1xuICByZXR1cm4gY29udGFpbmVyPy5ib3VuZEVsZW1lbnRzPy5sZW5ndGhcbiAgICA/IGNvbnRhaW5lcj8uYm91bmRFbGVtZW50cz8uZmlsdGVyKChlbGUpID0+IGVsZS50eXBlID09PSBcInRleHRcIilbMF0/LmlkIHx8XG4gICAgICAgIG51bGxcbiAgICA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Qm91bmRUZXh0RWxlbWVudCA9IChlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwpID0+IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgYm91bmRUZXh0RWxlbWVudElkID0gZ2V0Qm91bmRUZXh0RWxlbWVudElkKGVsZW1lbnQpO1xuICBpZiAoYm91bmRUZXh0RWxlbWVudElkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChTY2VuZS5nZXRTY2VuZShlbGVtZW50KT8uZ2V0RWxlbWVudChcbiAgICAgICAgYm91bmRUZXh0RWxlbWVudElkLFxuICAgICAgKSBhcyBFeGNhbGlkcmF3VGV4dEVsZW1lbnRXaXRoQ29udGFpbmVyKSB8fCBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250YWluZXJFbGVtZW50ID0gKFxuICBlbGVtZW50OlxuICAgIHwgKEV4Y2FsaWRyYXdFbGVtZW50ICYge1xuICAgICAgICBjb250YWluZXJJZDogRXhjYWxpZHJhd0VsZW1lbnRbXCJpZFwiXSB8IG51bGw7XG4gICAgICB9KVxuICAgIHwgbnVsbCxcbikgPT4ge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoZWxlbWVudC5jb250YWluZXJJZCkge1xuICAgIHJldHVybiBTY2VuZS5nZXRTY2VuZShlbGVtZW50KT8uZ2V0RWxlbWVudChlbGVtZW50LmNvbnRhaW5lcklkKSB8fCBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRhaW5lckRpbXMgPSAoZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQpID0+IHtcbiAgY29uc3QgTUlOX1dJRFRIID0gMzAwO1xuICBpZiAoaXNBcnJvd0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KGVsZW1lbnQud2lkdGgsIE1JTl9XSURUSCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQ7XG4gICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCB9O1xuICB9XG4gIHJldHVybiB7IHdpZHRoOiBlbGVtZW50LndpZHRoLCBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0IH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyQ2VudGVyID0gKFxuICBjb250YWluZXI6IEV4Y2FsaWRyYXdFbGVtZW50LFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pID0+IHtcbiAgaWYgKCFpc0Fycm93RWxlbWVudChjb250YWluZXIpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGNvbnRhaW5lci54ICsgY29udGFpbmVyLndpZHRoIC8gMixcbiAgICAgIHk6IGNvbnRhaW5lci55ICsgY29udGFpbmVyLmhlaWdodCAvIDIsXG4gICAgfTtcbiAgfVxuICBjb25zdCBwb2ludHMgPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldFBvaW50c0dsb2JhbENvb3JkaW5hdGVzKGNvbnRhaW5lcik7XG4gIGlmIChwb2ludHMubGVuZ3RoICUgMiA9PT0gMSkge1xuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihjb250YWluZXIucG9pbnRzLmxlbmd0aCAvIDIpO1xuICAgIGNvbnN0IG1pZFBvaW50ID0gTGluZWFyRWxlbWVudEVkaXRvci5nZXRQb2ludEdsb2JhbENvb3JkaW5hdGVzKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY29udGFpbmVyLnBvaW50c1tpbmRleF0sXG4gICAgKTtcbiAgICByZXR1cm4geyB4OiBtaWRQb2ludFswXSwgeTogbWlkUG9pbnRbMV0gfTtcbiAgfVxuICBjb25zdCBpbmRleCA9IGNvbnRhaW5lci5wb2ludHMubGVuZ3RoIC8gMiAtIDE7XG4gIGxldCBtaWRTZWdtZW50TWlkcG9pbnQgPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldEVkaXRvck1pZFBvaW50cyhcbiAgICBjb250YWluZXIsXG4gICAgYXBwU3RhdGUsXG4gIClbaW5kZXhdO1xuICBpZiAoIW1pZFNlZ21lbnRNaWRwb2ludCkge1xuICAgIG1pZFNlZ21lbnRNaWRwb2ludCA9IExpbmVhckVsZW1lbnRFZGl0b3IuZ2V0U2VnbWVudE1pZFBvaW50KFxuICAgICAgY29udGFpbmVyLFxuICAgICAgcG9pbnRzW2luZGV4XSxcbiAgICAgIHBvaW50c1tpbmRleCArIDFdLFxuICAgICAgaW5kZXggKyAxLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHsgeDogbWlkU2VnbWVudE1pZHBvaW50WzBdLCB5OiBtaWRTZWdtZW50TWlkcG9pbnRbMV0gfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0RWxlbWVudEFuZ2xlID0gKHRleHRFbGVtZW50OiBFeGNhbGlkcmF3VGV4dEVsZW1lbnQpID0+IHtcbiAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyRWxlbWVudCh0ZXh0RWxlbWVudCk7XG4gIGlmICghY29udGFpbmVyIHx8IGlzQXJyb3dFbGVtZW50KGNvbnRhaW5lcikpIHtcbiAgICByZXR1cm4gdGV4dEVsZW1lbnQuYW5nbGU7XG4gIH1cbiAgcmV0dXJuIGNvbnRhaW5lci5hbmdsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCb3VuZFRleHRFbGVtZW50T2Zmc2V0ID0gKFxuICBib3VuZFRleHRFbGVtZW50OiBFeGNhbGlkcmF3VGV4dEVsZW1lbnQgfCBudWxsLFxuKSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lckVsZW1lbnQoYm91bmRUZXh0RWxlbWVudCk7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKGlzQXJyb3dFbGVtZW50KGNvbnRhaW5lcikpIHtcbiAgICByZXR1cm4gQk9VTkRfVEVYVF9QQURESU5HICogODtcbiAgfVxuICByZXR1cm4gQk9VTkRfVEVYVF9QQURESU5HO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJvdW5kVGV4dEVsZW1lbnRQb3NpdGlvbiA9IChcbiAgY29udGFpbmVyOiBFeGNhbGlkcmF3RWxlbWVudCxcbiAgYm91bmRUZXh0RWxlbWVudDogRXhjYWxpZHJhd1RleHRFbGVtZW50V2l0aENvbnRhaW5lcixcbikgPT4ge1xuICBpZiAoaXNBcnJvd0VsZW1lbnQoY29udGFpbmVyKSkge1xuICAgIHJldHVybiBMaW5lYXJFbGVtZW50RWRpdG9yLmdldEJvdW5kVGV4dEVsZW1lbnRQb3NpdGlvbihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGJvdW5kVGV4dEVsZW1lbnQsXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNob3VsZEFsbG93VmVydGljYWxBbGlnbiA9IChcbiAgc2VsZWN0ZWRFbGVtZW50czogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4pID0+IHtcbiAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGhhc0JvdW5kQ29udGFpbmVyID0gaXNCb3VuZFRvQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgIGlmIChoYXNCb3VuZENvbnRhaW5lcikge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyRWxlbWVudChlbGVtZW50KTtcbiAgICAgIGlmIChpc1RleHRFbGVtZW50KGVsZW1lbnQpICYmIGlzQXJyb3dFbGVtZW50KGNvbnRhaW5lcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kVGV4dEVsZW1lbnQgPSBnZXRCb3VuZFRleHRFbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmIChib3VuZFRleHRFbGVtZW50KSB7XG4gICAgICBpZiAoaXNBcnJvd0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dEJpbmRhYmxlQ29udGFpbmVyQXRQb3NpdGlvbiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4pOiBFeGNhbGlkcmF3VGV4dENvbnRhaW5lciB8IG51bGwgPT4ge1xuICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUpO1xuICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gaXNUZXh0QmluZGFibGVDb250YWluZXIoc2VsZWN0ZWRFbGVtZW50c1swXSwgZmFsc2UpXG4gICAgICA/IHNlbGVjdGVkRWxlbWVudHNbMF1cbiAgICAgIDogbnVsbDtcbiAgfVxuICBsZXQgaGl0RWxlbWVudCA9IG51bGw7XG4gIC8vIFdlIG5lZWQgdG8gdG8gaGl0IHRlc3RpbmcgZnJvbSBmcm9udCAoZW5kIG9mIHRoZSBhcnJheSkgdG8gYmFjayAoYmVnaW5uaW5nIG9mIHRoZSBhcnJheSlcbiAgZm9yIChsZXQgaW5kZXggPSBlbGVtZW50cy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7XG4gICAgaWYgKGVsZW1lbnRzW2luZGV4XS5pc0RlbGV0ZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnRzW2luZGV4XSk7XG4gICAgaWYgKFxuICAgICAgaXNBcnJvd0VsZW1lbnQoZWxlbWVudHNbaW5kZXhdKSAmJlxuICAgICAgaXNIaXR0aW5nRWxlbWVudE5vdENvbnNpZGVyaW5nQm91bmRpbmdCb3goZWxlbWVudHNbaW5kZXhdLCBhcHBTdGF0ZSwgW1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgXSlcbiAgICApIHtcbiAgICAgIGhpdEVsZW1lbnQgPSBlbGVtZW50c1tpbmRleF07XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKHgxIDwgeCAmJiB4IDwgeDIgJiYgeTEgPCB5ICYmIHkgPCB5Mikge1xuICAgICAgaGl0RWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc1RleHRCaW5kYWJsZUNvbnRhaW5lcihoaXRFbGVtZW50LCBmYWxzZSkgPyBoaXRFbGVtZW50IDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkVGV4dENvbnRhaW5lciA9IChlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnQudHlwZSA9PT0gXCJyZWN0YW5nbGVcIiB8fFxuICAgIGVsZW1lbnQudHlwZSA9PT0gXCJlbGxpcHNlXCIgfHxcbiAgICBlbGVtZW50LnR5cGUgPT09IFwiZGlhbW9uZFwiIHx8XG4gICAgaXNJbWFnZUVsZW1lbnQoZWxlbWVudCkgfHxcbiAgICBpc0Fycm93RWxlbWVudChlbGVtZW50KVxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../element/textElement.ts\n");
3530
3530
 
3531
3531
  /***/ }),
3532
3532
 
@@ -3757,7 +3757,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3757
3757
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3758
3758
 
3759
3759
  "use strict";
3760
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n /* global __webpack_public_path__:writable */\n __webpack_require__.p =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.14.1-e6de1fe\"}/dist/`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLHdCQUFvQixJQUFJLGdCQUF1QixRQUFRLENBQUM7Q0FDaEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9wdWJsaWNQYXRoLmpzP2E4N2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5WIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvKiBnbG9iYWwgX193ZWJwYWNrX3B1YmxpY19wYXRoX186d3JpdGFibGUgKi9cbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPVxuICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn0vZGlzdC9gO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./publicPath.js\n");
3760
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n /* global __webpack_public_path__:writable */\n __webpack_require__.p =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.14.2\"}/dist/`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLHdCQUFvQixJQUFJLFFBQXVCLFFBQVEsQ0FBQztDQUNoRiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3B1YmxpY1BhdGguanM/YTg3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlYgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IEVOVi5URVNUKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9XG4gICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfS9kaXN0L2A7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./publicPath.js\n");
3761
3761
 
3762
3762
  /***/ }),
3763
3763
 
@@ -3878,7 +3878,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3878
3878
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3879
3879
 
3880
3880
  "use strict";
3881
- 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 roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../renderer/renderScene */ \"../../renderer/renderScene.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/image */ \"../../element/image.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * appState.exportScale;\n canvas.height = height * appState.exportScale;\n return { canvas, scale: appState.exportScale };\n}) => __awaiter(void 0, void 0, void 0, function* () {\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n const { canvas, scale = 1 } = createCanvas(width, height);\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\n files,\n });\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)({\n elements,\n appState,\n scale,\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n canvas,\n renderConfig: {\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + exportPadding,\n scrollY: -minY + exportPadding,\n zoom: defaultAppState.zoom,\n remotePointerViewportCoords: {},\n remoteSelectedElementIds: {},\n shouldCacheIgnoreZoom: false,\n remotePointerUsernames: {},\n remotePointerUserStates: {},\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\n imageCache,\n renderScrollbars: false,\n renderSelection: false,\n renderGrid: false,\n isExporting: true,\n },\n });\n return canvas;\n});\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\n let metadata = \"\";\n if (exportEmbedScene) {\n try {\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\n });\n }\n catch (error) {\n console.error(error);\n }\n }\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n // initialize SVG root\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\n svgRoot.setAttribute(\"version\", \"1.1\");\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\n if (appState.exportWithDarkMode) {\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\n }\n let assetPath = \"https://excalidraw.com/\";\n // Asset path needs to be determined only when using package\n if (true) {\n assetPath =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.14.1-e6de1fe\"}`;\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\n }\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\n }\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style class=\"style-fonts\">\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 `;\n // render background rect\n if (appState.exportBackground && viewBackgroundColor) {\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n rect.setAttribute(\"width\", `${width}`);\n rect.setAttribute(\"height\", `${height}`);\n rect.setAttribute(\"fill\", viewBackgroundColor);\n svgRoot.appendChild(rect);\n }\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\n offsetX: -minX + exportPadding,\n offsetY: -minY + exportPadding,\n exportWithDarkMode: appState.exportWithDarkMode,\n });\n return svgRoot;\n});\n// calculate smallest area to fit the contents in\nconst getCanvasSize = (elements, exportPadding) => {\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + exportPadding * 2;\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\n return [minX, minY, width, height];\n};\nconst getExportSize = (elements, exportPadding, scale) => {\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\n return [width, height];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Iiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuXG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICB9OiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgfSxcbiAgY3JlYXRlQ2FudmFzOiAoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7IHNjYWxlOiBudW1iZXIgfSA9ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICByZXR1cm4geyBjYW52YXMsIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZSB9O1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIGNvbnN0IHsgY2FudmFzLCBzY2FsZSA9IDEgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblxuICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuICBjb25zdCB7IGltYWdlQ2FjaGUgfSA9IGF3YWl0IHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgIGltYWdlQ2FjaGU6IG5ldyBNYXAoKSxcbiAgICBmaWxlSWRzOiBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMoZWxlbWVudHMpLm1hcChcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LmZpbGVJZCxcbiAgICApLFxuICAgIGZpbGVzLFxuICB9KTtcblxuICByZW5kZXJTY2VuZSh7XG4gICAgZWxlbWVudHMsXG4gICAgYXBwU3RhdGUsXG4gICAgc2NhbGUsXG4gICAgcmM6IHJvdWdoLmNhbnZhcyhjYW52YXMpLFxuICAgIGNhbnZhcyxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHNjcm9sbFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICAgIHJlbW90ZVNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgICByZW1vdGVQb2ludGVyVXNlclN0YXRlczoge30sXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgICBpbWFnZUNhY2hlLFxuICAgICAgcmVuZGVyU2Nyb2xsYmFyczogZmFsc2UsXG4gICAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgICBpc0V4cG9ydGluZzogdHJ1ZSxcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gY2FudmFzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIGV4cG9ydFNjYWxlPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuO1xuICAgIGV4cG9ydEVtYmVkU2NlbmU/OiBib29sZWFuO1xuICB9LFxuICBmaWxlczogQmluYXJ5RmlsZXMgfCBudWxsLFxuKTogUHJvbWlzZTxTVkdTVkdFbGVtZW50PiA9PiB7XG4gIGNvbnN0IHtcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICAgIGV4cG9ydFNjYWxlID0gMSxcbiAgICBleHBvcnRFbWJlZFNjZW5lLFxuICB9ID0gYXBwU3RhdGU7XG4gIGxldCBtZXRhZGF0YSA9IFwiXCI7XG4gIGlmIChleHBvcnRFbWJlZFNjZW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIG1ldGFkYXRhID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCBpbXBvcnQoLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovIFwiLi4vLi4vc3JjL2RhdGEvaW1hZ2VcIilcbiAgICAgICkuZW5jb2RlU3ZnTWV0YWRhdGEoe1xuICAgICAgICB0ZXh0OiBzZXJpYWxpemVBc0pTT04oZWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcyB8fCB7fSwgXCJsb2NhbFwiKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuICBjb25zdCBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKTtcblxuICAvLyBpbml0aWFsaXplIFNWRyByb290XG4gIGNvbnN0IHN2Z1Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInN2Z1wiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIsIFwiMS4xXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInhtbG5zXCIsIFNWR19OUyk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRoICogZXhwb3J0U2NhbGV9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodCAqIGV4cG9ydFNjYWxlfWApO1xuICBpZiAoYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7XG5cbiAgLy8gQXNzZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIG9ubHkgd2hlbiB1c2luZyBwYWNrYWdlXG4gIGlmIChwcm9jZXNzLmVudi5JU19FWENBTElEUkFXX05QTV9QQUNLQUdFKSB7XG4gICAgYXNzZXRQYXRoID1cbiAgICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfWA7XG5cbiAgICBpZiAoYXNzZXRQYXRoPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgYXNzZXRQYXRoID0gYXNzZXRQYXRoLnJlcGxhY2UoXCIvXCIsIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2ApO1xuICAgIH1cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfVxuICBzdmdSb290LmlubmVySFRNTCA9IGBcbiAgJHtTVkdfRVhQT1JUX1RBR31cbiAgJHttZXRhZGF0YX1cbiAgPGRlZnM+XG4gICAgPHN0eWxlIGNsYXNzPVwic3R5bGUtZm9udHNcIj5cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJWaXJnaWxcIjtcbiAgICAgICAgc3JjOiB1cmwoXCIke2Fzc2V0UGF0aH1WaXJnaWwud29mZjJcIik7XG4gICAgICB9XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiQ2FzY2FkaWFcIjtcbiAgICAgICAgc3JjOiB1cmwoXCIke2Fzc2V0UGF0aH1DYXNjYWRpYS53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICA8L2RlZnM+XG4gIGA7XG4gIC8vIHJlbmRlciBiYWNrZ3JvdW5kIHJlY3RcbiAgaWYgKGFwcFN0YXRlLmV4cG9ydEJhY2tncm91bmQgJiYgdmlld0JhY2tncm91bmRDb2xvcikge1xuICAgIGNvbnN0IHJlY3QgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwicmVjdFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcInhcIiwgXCIwXCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieVwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHR9YCk7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHZpZXdCYWNrZ3JvdW5kQ29sb3IpO1xuICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQocmVjdCk7XG4gIH1cblxuICBjb25zdCByc3ZnID0gcm91Z2guc3ZnKHN2Z1Jvb3QpO1xuICByZW5kZXJTY2VuZVRvU3ZnKGVsZW1lbnRzLCByc3ZnLCBzdmdSb290LCBmaWxlcyB8fCB7fSwge1xuICAgIG9mZnNldFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICBvZmZzZXRZOiAtbWluWSArIGV4cG9ydFBhZGRpbmcsXG4gICAgZXhwb3J0V2l0aERhcmtNb2RlOiBhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUsXG4gIH0pO1xuXG4gIHJldHVybiBzdmdSb290O1xufTtcblxuLy8gY2FsY3VsYXRlIHNtYWxsZXN0IGFyZWEgdG8gZml0IHRoZSBjb250ZW50cyBpblxuY29uc3QgZ2V0Q2FudmFzU2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IGdldENvbW1vbkJvdW5kcyhlbGVtZW50cyk7XG4gIGNvbnN0IHdpZHRoID0gZGlzdGFuY2UobWluWCwgbWF4WCkgKyBleHBvcnRQYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gZGlzdGFuY2UobWluWSwgbWF4WSkgKyBleHBvcnRQYWRkaW5nICsgZXhwb3J0UGFkZGluZztcblxuICByZXR1cm4gW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4cG9ydFNpemUgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgZXhwb3J0UGFkZGluZzogbnVtYmVyLFxuICBzY2FsZTogbnVtYmVyLFxuKTogW251bWJlciwgbnVtYmVyXSA9PiB7XG4gIGNvbnN0IFssICwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKS5tYXAoXG4gICAgKGRpbWVuc2lvbikgPT4gTWF0aC50cnVuYyhkaW1lbnNpb24gKiBzY2FsZSksXG4gICk7XG5cbiAgcmV0dXJuIFt3aWR0aCwgaGVpZ2h0XTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
3881
+ 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 roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../renderer/renderScene */ \"../../renderer/renderScene.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/image */ \"../../element/image.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * appState.exportScale;\n canvas.height = height * appState.exportScale;\n return { canvas, scale: appState.exportScale };\n}) => __awaiter(void 0, void 0, void 0, function* () {\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n const { canvas, scale = 1 } = createCanvas(width, height);\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\n files,\n });\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)({\n elements,\n appState,\n scale,\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n canvas,\n renderConfig: {\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + exportPadding,\n scrollY: -minY + exportPadding,\n zoom: defaultAppState.zoom,\n remotePointerViewportCoords: {},\n remoteSelectedElementIds: {},\n shouldCacheIgnoreZoom: false,\n remotePointerUsernames: {},\n remotePointerUserStates: {},\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\n imageCache,\n renderScrollbars: false,\n renderSelection: false,\n renderGrid: false,\n isExporting: true,\n },\n });\n return canvas;\n});\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\n let metadata = \"\";\n if (exportEmbedScene) {\n try {\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\n });\n }\n catch (error) {\n console.error(error);\n }\n }\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n // initialize SVG root\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\n svgRoot.setAttribute(\"version\", \"1.1\");\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\n if (appState.exportWithDarkMode) {\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\n }\n let assetPath = \"https://excalidraw.com/\";\n // Asset path needs to be determined only when using package\n if (true) {\n assetPath =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.14.2\"}`;\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\n }\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\n }\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style class=\"style-fonts\">\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 `;\n // render background rect\n if (appState.exportBackground && viewBackgroundColor) {\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n rect.setAttribute(\"width\", `${width}`);\n rect.setAttribute(\"height\", `${height}`);\n rect.setAttribute(\"fill\", viewBackgroundColor);\n svgRoot.appendChild(rect);\n }\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\n offsetX: -minX + exportPadding,\n offsetY: -minY + exportPadding,\n exportWithDarkMode: appState.exportWithDarkMode,\n });\n return svgRoot;\n});\n// calculate smallest area to fit the contents in\nconst getCanvasSize = (elements, exportPadding) => {\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + exportPadding * 2;\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\n return [minX, minY, width, height];\n};\nconst getExportSize = (elements, exportPadding, scale) => {\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\n return [width, height];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc2NlbmUvZXhwb3J0LnRzPzliZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJvdWdoIGZyb20gXCJyb3VnaGpzL2Jpbi9yb3VnaFwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IGdldENvbW1vbkJvdW5kcyB9IGZyb20gXCIuLi9lbGVtZW50L2JvdW5kc1wiO1xuaW1wb3J0IHsgcmVuZGVyU2NlbmUsIHJlbmRlclNjZW5lVG9TdmcgfSBmcm9tIFwiLi4vcmVuZGVyZXIvcmVuZGVyU2NlbmVcIjtcbmltcG9ydCB7IGRpc3RhbmNlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSwgQmluYXJ5RmlsZXMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsIFNWR19OUywgVEhFTUVfRklMVEVSIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEFwcFN0YXRlIH0gZnJvbSBcIi4uL2FwcFN0YXRlXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVBc0pTT04gfSBmcm9tIFwiLi4vZGF0YS9qc29uXCI7XG5pbXBvcnQge1xuICBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMsXG4gIHVwZGF0ZUltYWdlQ2FjaGUsXG59IGZyb20gXCIuLi9lbGVtZW50L2ltYWdlXCI7XG5cbmV4cG9ydCBjb25zdCBTVkdfRVhQT1JUX1RBRyA9IGA8IS0tIHN2Zy1zb3VyY2U6ZXhjYWxpZHJhdyAtLT5gO1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9DYW52YXMgPSBhc3luYyAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuICBmaWxlczogQmluYXJ5RmlsZXMsXG4gIHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gIH06IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kOiBib29sZWFuO1xuICAgIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICB9LFxuICBjcmVhdGVDYW52YXM6IChcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApID0+IHsgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDsgc2NhbGU6IG51bWJlciB9ID0gKHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogYXBwU3RhdGUuZXhwb3J0U2NhbGU7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIHJldHVybiB7IGNhbnZhcywgc2NhbGU6IGFwcFN0YXRlLmV4cG9ydFNjYWxlIH07XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7XG5cbiAgY29uc3QgeyBjYW52YXMsIHNjYWxlID0gMSB9ID0gY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuXG4gIGNvbnN0IGRlZmF1bHRBcHBTdGF0ZSA9IGdldERlZmF1bHRBcHBTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgaW1hZ2VDYWNoZSB9ID0gYXdhaXQgdXBkYXRlSW1hZ2VDYWNoZSh7XG4gICAgaW1hZ2VDYWNoZTogbmV3IE1hcCgpLFxuICAgIGZpbGVJZHM6IGdldEluaXRpYWxpemVkSW1hZ2VFbGVtZW50cyhlbGVtZW50cykubWFwKFxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQuZmlsZUlkLFxuICAgICksXG4gICAgZmlsZXMsXG4gIH0pO1xuXG4gIHJlbmRlclNjZW5lKHtcbiAgICBlbGVtZW50cyxcbiAgICBhcHBTdGF0ZSxcbiAgICBzY2FsZSxcbiAgICByYzogcm91Z2guY2FudmFzKGNhbnZhcyksXG4gICAgY2FudmFzLFxuICAgIHJlbmRlckNvbmZpZzoge1xuICAgICAgdmlld0JhY2tncm91bmRDb2xvcjogZXhwb3J0QmFja2dyb3VuZCA/IHZpZXdCYWNrZ3JvdW5kQ29sb3IgOiBudWxsLFxuICAgICAgc2Nyb2xsWDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgICAgc2Nyb2xsWTogLW1pblkgKyBleHBvcnRQYWRkaW5nLFxuICAgICAgem9vbTogZGVmYXVsdEFwcFN0YXRlLnpvb20sXG4gICAgICByZW1vdGVQb2ludGVyVmlld3BvcnRDb29yZHM6IHt9LFxuICAgICAgcmVtb3RlU2VsZWN0ZWRFbGVtZW50SWRzOiB7fSxcbiAgICAgIHNob3VsZENhY2hlSWdub3JlWm9vbTogZmFsc2UsXG4gICAgICByZW1vdGVQb2ludGVyVXNlcm5hbWVzOiB7fSxcbiAgICAgIHJlbW90ZVBvaW50ZXJVc2VyU3RhdGVzOiB7fSxcbiAgICAgIHRoZW1lOiBhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUgPyBcImRhcmtcIiA6IFwibGlnaHRcIixcbiAgICAgIGltYWdlQ2FjaGUsXG4gICAgICByZW5kZXJTY3JvbGxiYXJzOiBmYWxzZSxcbiAgICAgIHJlbmRlclNlbGVjdGlvbjogZmFsc2UsXG4gICAgICByZW5kZXJHcmlkOiBmYWxzZSxcbiAgICAgIGlzRXhwb3J0aW5nOiB0cnVlLFxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiBjYW52YXM7XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9TdmcgPSBhc3luYyAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kOiBib29sZWFuO1xuICAgIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gICAgZXhwb3J0U2NhbGU/OiBudW1iZXI7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGV4cG9ydFdpdGhEYXJrTW9kZT86IGJvb2xlYW47XG4gICAgZXhwb3J0RW1iZWRTY2VuZT86IGJvb2xlYW47XG4gIH0sXG4gIGZpbGVzOiBCaW5hcnlGaWxlcyB8IG51bGwsXG4pOiBQcm9taXNlPFNWR1NWR0VsZW1lbnQ+ID0+IHtcbiAgY29uc3Qge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmUsXG4gIH0gPSBhcHBTdGF0ZTtcbiAgbGV0IG1ldGFkYXRhID0gXCJcIjtcbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydCgvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi8gXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKVxuICAgICAgKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IHNlcmlhbGl6ZUFzSlNPTihlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzIHx8IHt9LCBcImxvY2FsXCIpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcbiAgY29uc3Qgc3ZnUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwic3ZnXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgU1ZHX05TKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGggKiBleHBvcnRTY2FsZX1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgYCR7aGVpZ2h0ICogZXhwb3J0U2NhbGV9YCk7XG4gIGlmIChhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUpIHtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcImZpbHRlclwiLCBUSEVNRV9GSUxURVIpO1xuICB9XG5cbiAgbGV0IGFzc2V0UGF0aCA9IFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9cIjtcblxuICAvLyBBc3NldCBwYXRoIG5lZWRzIHRvIGJlIGRldGVybWluZWQgb25seSB3aGVuIHVzaW5nIHBhY2thZ2VcbiAgaWYgKHByb2Nlc3MuZW52LklTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPVxuICAgICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgICAgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICBhc3NldFBhdGggPSBhc3NldFBhdGgucmVwbGFjZShcIi9cIiwgYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYCk7XG4gICAgfVxuICAgIGFzc2V0UGF0aCA9IGAke2Fzc2V0UGF0aH0vZGlzdC9leGNhbGlkcmF3LWFzc2V0cy9gO1xuICB9XG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGUgY2xhc3M9XCJzdHlsZS1mb250c1wiPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofVZpcmdpbC53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJDYXNjYWRpYVwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofUNhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
3882
3882
 
3883
3883
  /***/ }),
3884
3884
 
@@ -3966,7 +3966,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3966
3966
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3967
3967
 
3968
3968
  "use strict";
3969
- 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 */ \"composeEventHandlers\": () => (/* binding */ composeEventHandlers),\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 */ \"isShallowEqual\": () => (/* binding */ isShallowEqual),\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 */ \"queryFocusableElements\": () => (/* binding */ queryFocusableElements),\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 */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\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 open_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.ts\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./appState */ \"../../appState.ts\");\n\n\n\n\n\nlet mockDateTime = null;\nconst setDateTimeForTests = (dateTime) => {\n mockDateTime = dateTime;\n};\nconst getDateTime = () => {\n if (mockDateTime) {\n return mockDateTime;\n }\n const date = new Date();\n const year = date.getFullYear();\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\n const day = `${date.getDate()}`.padStart(2, \"0\");\n const hr = `${date.getHours()}`.padStart(2, \"0\");\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\n return `${year}-${month}-${day}-${hr}${min}`;\n};\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement;\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLTextAreaElement ||\n (target instanceof HTMLInputElement &&\n (target.type === \"text\" || target.type === \"number\"));\nconst getFontFamilyString = ({ fontFamily, }) => {\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\n if (id === fontFamily) {\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\n }\n }\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\n};\n/** returns fontSize+fontFamily string for assignment to DOM elements */\nconst getFontString = ({ fontSize, fontFamily, }) => {\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\n};\nconst debounce = (fn, timeout) => {\n let handle = 0;\n let lastArgs = null;\n const ret = (...args) => {\n lastArgs = args;\n clearTimeout(handle);\n handle = window.setTimeout(() => {\n lastArgs = null;\n fn(...args);\n }, timeout);\n };\n ret.flush = () => {\n clearTimeout(handle);\n if (lastArgs) {\n const _lastArgs = lastArgs;\n lastArgs = null;\n fn(..._lastArgs);\n }\n };\n ret.cancel = () => {\n lastArgs = null;\n clearTimeout(handle);\n };\n return ret;\n};\n// throttle callback to execute once per animation frame\nconst throttleRAF = (fn, opts) => {\n let timerId = null;\n let lastArgs = null;\n let lastArgsTrailing = null;\n const scheduleFunc = (args) => {\n timerId = window.requestAnimationFrame(() => {\n timerId = null;\n fn(...args);\n lastArgs = null;\n if (lastArgsTrailing) {\n lastArgs = lastArgsTrailing;\n lastArgsTrailing = null;\n scheduleFunc(lastArgs);\n }\n });\n };\n const ret = (...args) => {\n if (false) {}\n lastArgs = args;\n if (timerId === null) {\n scheduleFunc(lastArgs);\n }\n else if (opts === null || opts === void 0 ? void 0 : opts.trailing) {\n lastArgsTrailing = args;\n }\n };\n ret.flush = () => {\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n if (lastArgs) {\n fn(...(lastArgsTrailing || lastArgs));\n lastArgs = lastArgsTrailing = null;\n }\n };\n ret.cancel = () => {\n lastArgs = lastArgsTrailing = null;\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n };\n return ret;\n};\n// https://github.com/lodash/lodash/blob/es/chunk.js\nconst chunk = (array, size) => {\n if (!array.length || size < 1) {\n return [];\n }\n let index = 0;\n let resIndex = 0;\n const result = Array(Math.ceil(array.length / size));\n while (index < array.length) {\n result[resIndex++] = array.slice(index, (index += size));\n }\n return result;\n};\nconst selectNode = (node) => {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n};\nconst removeSelection = () => {\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n }\n};\nconst distance = (x, y) => Math.abs(x - y);\nconst updateActiveTool = (appState, data) => {\n if (data.type === \"custom\") {\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\n }\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveTool: data.lastActiveToolBeforeEraser === undefined\n ? appState.activeTool.lastActiveTool\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\n};\nconst resetCursor = (canvas) => {\n if (canvas) {\n canvas.style.cursor = \"\";\n }\n};\nconst setCursor = (canvas, cursor) => {\n if (canvas) {\n canvas.style.cursor = cursor;\n }\n};\nlet eraserCanvasCache;\nlet previewDataURL;\nconst setEraserCursor = (canvas, theme) => {\n const cursorImageSizePx = 20;\n const drawCanvas = () => {\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\n eraserCanvasCache = document.createElement(\"canvas\");\n eraserCanvasCache.theme = theme;\n eraserCanvasCache.height = cursorImageSizePx;\n eraserCanvasCache.width = cursorImageSizePx;\n const context = eraserCanvasCache.getContext(\"2d\");\n context.lineWidth = 1;\n context.beginPath();\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\n context.fill();\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\n context.stroke();\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\n };\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\n drawCanvas();\n }\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\n};\nconst setCursorForShape = (canvas, appState) => {\n if (!canvas) {\n return;\n }\n if (appState.activeTool.type === \"selection\") {\n resetCursor(canvas);\n }\n else if ((0,_appState__WEBPACK_IMPORTED_MODULE_4__.isHandToolActive)(appState)) {\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.GRAB;\n }\n else if ((0,_appState__WEBPACK_IMPORTED_MODULE_4__.isEraserActive)(appState)) {\n setEraserCursor(canvas, appState.theme);\n // do nothing if image tool is selected which suggests there's\n // a image-preview set as the cursor\n // Ignore custom type as well and let host decide\n }\n else if (![\"image\", \"custom\"].includes(appState.activeTool.type)) {\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\n }\n};\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\nconst exitFullScreen = () => document.exitFullscreen();\nconst getShortcutKey = (shortcut) => {\n shortcut = shortcut\n .replace(/\\bAlt\\b/i, \"Alt\")\n .replace(/\\bShift\\b/i, \"Shift\")\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\");\n if (_constants__WEBPACK_IMPORTED_MODULE_2__.isDarwin) {\n return shortcut\n .replace(/\\bCtrlOrCmd\\b/gi, \"Cmd\")\n .replace(/\\bAlt\\b/i, \"Option\");\n }\n return shortcut.replace(/\\bCtrlOrCmd\\b/gi, \"Ctrl\");\n};\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const x = (clientX - offsetLeft) / zoom.value - scrollX;\n const y = (clientY - offsetTop) / zoom.value - scrollY;\n return { x, y };\n};\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\n return { x, y };\n};\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\n/**\n * Checks whether first directional character is RTL. Meaning whether it starts\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\n * RTL.\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\n */\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\nconst tupleToCoors = (xyTuple) => {\n const [x, y] = xyTuple;\n return { x, y };\n};\n/** use as a rejectionHandler to mute filesystem Abort errors */\nconst muteFSAbortError = (error) => {\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\n console.warn(error);\n return;\n }\n throw error;\n};\nconst findIndex = (array, cb, fromIndex = 0) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\n let index = fromIndex - 1;\n while (++index < array.length) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\n let index = fromIndex + 1;\n while (--index > -1) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst isTransparent = (color) => {\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\n return (isRGBTransparent ||\n isRRGGBBTransparent ||\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\n};\nconst resolvablePromise = () => {\n let resolve;\n let reject;\n const promise = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n promise.resolve = resolve;\n promise.reject = reject;\n return promise;\n};\n/**\n * @param func handler taking at most single parameter (event).\n */\nconst withBatchedUpdates = (func) => ((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n});\n/**\n * barches React state updates and throttles the calls to a single call per\n * animation frame\n */\nconst withBatchedUpdatesThrottled = (func) => {\n // @ts-ignore\n return throttleRAF(((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n }));\n};\n//https://stackoverflow.com/a/9462382/8418\nconst nFormatter = (num, digits) => {\n const si = [\n { value: 1, symbol: \"b\" },\n { value: 1e3, symbol: \"k\" },\n { value: 1e6, symbol: \"M\" },\n { value: 1e9, symbol: \"G\" },\n ];\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n let index;\n for (index = si.length - 1; index > 0; index--) {\n if (num >= si[index].value) {\n break;\n }\n }\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\n};\nconst getVersion = () => {\n var _a;\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\n};\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\nconst supportsEmoji = () => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return false;\n }\n const offset = 12;\n ctx.fillStyle = \"#f00\";\n ctx.textBaseline = \"top\";\n ctx.font = \"32px Arial\";\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\n // Luckily 😀 isn't supported.\n ctx.fillText(\"😀\", 0, 0);\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\n};\nconst getNearestScrollableContainer = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent === document.body) {\n return document;\n }\n const { overflowY } = window.getComputedStyle(parent);\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\n if (hasScrollableContent &&\n (overflowY === \"auto\" ||\n overflowY === \"scroll\" ||\n overflowY === \"overlay\")) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document;\n};\nconst focusNearestParent = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent.tabIndex > -1) {\n parent.focus();\n return;\n }\n parent = parent.parentElement;\n }\n};\nconst preventUnload = (event) => {\n event.preventDefault();\n // NOTE: modern browsers no longer allow showing a custom message here\n event.returnValue = \"\";\n};\nconst bytesToHexString = (bytes) => {\n return Array.from(bytes)\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\n .join(\"\");\n};\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\n/**\n * Transforms array of objects containing `id` attribute,\n * or array of ids (strings), into a Map, keyd by `id`.\n */\nconst arrayToMap = (items) => {\n return items.reduce((acc, element) => {\n acc.set(typeof element === \"string\" ? element : element.id, element);\n return acc;\n }, new Map());\n};\nconst isTestEnv = () => { var _a; 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\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"FAST_REFRESH\":\"false\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.14.1-e6de1fe\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\nconst isProdEnv = () => { var _a; 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\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"FAST_REFRESH\":\"false\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.14.1-e6de1fe\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\nconst wrapEvent = (name, nativeEvent) => {\n return new CustomEvent(name, {\n detail: {\n nativeEvent,\n },\n cancelable: true,\n });\n};\nconst updateObject = (obj, updates) => {\n let didChange = false;\n for (const key in updates) {\n const value = updates[key];\n if (typeof value !== \"undefined\") {\n if (obj[key] === value &&\n // if object, always update because its attrs could have changed\n (typeof value !== \"object\" || value === null)) {\n continue;\n }\n didChange = true;\n }\n }\n if (!didChange) {\n return obj;\n }\n return Object.assign(Object.assign({}, obj), updates);\n};\nconst isPrimitive = (val) => {\n const type = typeof val;\n return val == null || (type !== \"object\" && type !== \"function\");\n};\nconst getFrame = () => {\n try {\n return window.self === window.top ? \"top\" : \"iframe\";\n }\n catch (error) {\n return \"iframe\";\n }\n};\nconst isPromiseLike = (value) => {\n return (!!value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n \"catch\" in value &&\n \"finally\" in value);\n};\nconst queryFocusableElements = (container) => {\n const focusableElements = container === null || container === void 0 ? void 0 : container.querySelectorAll(\"button, a, input, select, textarea, div[tabindex], label[tabindex]\");\n return focusableElements\n ? Array.from(focusableElements).filter((element) => element.tabIndex > -1 && !element.disabled)\n : [];\n};\nconst isShallowEqual = (objA, objB) => {\n const aKeys = Object.keys(objA);\n const bKeys = Object.keys(objA);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every((key) => objA[key] === objB[key]);\n};\n// taken from Radix UI\n// https://github.com/radix-ui/primitives/blob/main/packages/core/primitive/src/primitive.tsx\nconst composeEventHandlers = (originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) => {\n return function handleEvent(event) {\n originalEventHandler === null || originalEventHandler === void 0 ? void 0 : originalEventHandler(event);\n if (!checkForDefaultPrevented ||\n !event.defaultPrevented) {\n return ourEventHandler === null || ourEventHandler === void 0 ? void 0 : ourEventHandler(event);\n }\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2pDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUM7QUFFRixzQkFBc0I7QUFDdEIsNkZBQTZGO0FBQ3RGLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsb0JBQXlDLEVBQ3pDLGVBQW9DLEVBQ3BDLEVBQUUsd0JBQXdCLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUN4QyxFQUFFO0lBQ0YsT0FBTyxTQUFTLFdBQVcsQ0FBQyxLQUFRO1FBQ2xDLG9CQUFvQixhQUFwQixvQkFBb0IsdUJBQXBCLG9CQUFvQixDQUFHLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQ0UsQ0FBQyx3QkFBd0I7WUFDekIsQ0FBRSxLQUEwQixDQUFDLGdCQUFnQixFQUM3QztZQUNBLE9BQU8sZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFHLEtBQUssQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzPzc2M2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQge1xuICBDVVJTT1JfVFlQRSxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBFVkVOVCxcbiAgRk9OVF9GQU1JTFksXG4gIGlzRGFyd2luLFxuICBNSU1FX1RZUEVTLFxuICBUSEVNRSxcbiAgV0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05ULFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEZvbnRGYW1pbHlWYWx1ZXMsIEZvbnRTdHJpbmcgfSBmcm9tIFwiLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSwgRGF0YVVSTCwgTGFzdEFjdGl2ZVRvb2wsIFpvb20gfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBTSEFQRVMgfSBmcm9tIFwiLi9zaGFwZXNcIjtcbmltcG9ydCB7IGlzRXJhc2VyQWN0aXZlLCBpc0hhbmRUb29sQWN0aXZlIH0gZnJvbSBcIi4vYXBwU3RhdGVcIjtcblxubGV0IG1vY2tEYXRlVGltZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCBzZXREYXRlVGltZUZvclRlc3RzID0gKGRhdGVUaW1lOiBzdHJpbmcpID0+IHtcbiAgbW9ja0RhdGVUaW1lID0gZGF0ZVRpbWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0ZVRpbWUgPSAoKSA9PiB7XG4gIGlmIChtb2NrRGF0ZVRpbWUpIHtcbiAgICByZXR1cm4gbW9ja0RhdGVUaW1lO1xuICB9XG5cbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gYCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgZGF5ID0gYCR7ZGF0ZS5nZXREYXRlKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGhyID0gYCR7ZGF0ZS5nZXRIb3VycygpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBtaW4gPSBgJHtkYXRlLmdldE1pbnV0ZXMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcblxuICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9LSR7aHJ9JHttaW59YDtcbn07XG5cbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PlxuICBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG5cbmV4cG9ydCBjb25zdCBpc1Rvb2xJY29uID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXMgSFRNTEVsZW1lbnQgPT5cbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRvb2xJY29uXCIpO1xuXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTFNlbGVjdEVsZW1lbnRcbiAgfCBIVE1MQlJFbGVtZW50XG4gIHwgSFRNTERpdkVsZW1lbnQgPT5cbiAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiKSB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBpc1dyaXRhYmxlRWxlbWVudCA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzXG4gIHwgSFRNTElucHV0RWxlbWVudFxuICB8IEhUTUxUZXh0QXJlYUVsZW1lbnRcbiAgfCBIVE1MQlJFbGVtZW50XG4gIHwgSFRNTERpdkVsZW1lbnQgPT5cbiAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiKSB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmXG4gICAgKHRhcmdldC50eXBlID09PSBcInRleHRcIiB8fCB0YXJnZXQudHlwZSA9PT0gXCJudW1iZXJcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9udEZhbWlseVN0cmluZyA9ICh7XG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIGZvciAoY29uc3QgW2ZvbnRGYW1pbHlTdHJpbmcsIGlkXSBvZiBPYmplY3QuZW50cmllcyhGT05UX0ZBTUlMWSkpIHtcbiAgICBpZiAoaWQgPT09IGZvbnRGYW1pbHkpIHtcbiAgICAgIHJldHVybiBgJHtmb250RmFtaWx5U3RyaW5nfSwgJHtXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlR9YDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVDtcbn07XG5cbi8qKiByZXR1cm5zIGZvbnRTaXplK2ZvbnRGYW1pbHkgc3RyaW5nIGZvciBhc3NpZ25tZW50IHRvIERPTSBlbGVtZW50cyAqL1xuZXhwb3J0IGNvbnN0IGdldEZvbnRTdHJpbmcgPSAoe1xuICBmb250U2l6ZSxcbiAgZm9udEZhbWlseSxcbn06IHtcbiAgZm9udFNpemU6IG51bWJlcjtcbiAgZm9udEZhbWlseTogRm9udEZhbWlseVZhbHVlcztcbn0pID0+IHtcbiAgcmV0dXJuIGAke2ZvbnRTaXplfXB4ICR7Z2V0Rm9udEZhbWlseVN0cmluZyh7IGZvbnRGYW1pbHkgfSl9YCBhcyBGb250U3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlYm91bmNlID0gPFQgZXh0ZW5kcyBhbnlbXT4oXG4gIGZuOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcbiAgdGltZW91dDogbnVtYmVyLFxuKSA9PiB7XG4gIGxldCBoYW5kbGUgPSAwO1xuICBsZXQgbGFzdEFyZ3M6IFQgfCBudWxsID0gbnVsbDtcbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uYXJncyk7XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG4gIHJldC5mbHVzaCA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGNvbnN0IF9sYXN0QXJncyA9IGxhc3RBcmdzO1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uX2xhc3RBcmdzKTtcbiAgICB9XG4gIH07XG4gIHJldC5jYW5jZWwgPSAoKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gdGhyb3R0bGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHBlciBhbmltYXRpb24gZnJhbWVcbmV4cG9ydCBjb25zdCB0aHJvdHRsZVJBRiA9IDxUIGV4dGVuZHMgYW55W10+KFxuICBmbjogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIG9wdHM/OiB7IHRyYWlsaW5nPzogYm9vbGVhbiB9LFxuKSA9PiB7XG4gIGxldCB0aW1lcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGxldCBsYXN0QXJnc1RyYWlsaW5nOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc2NoZWR1bGVGdW5jID0gKGFyZ3M6IFQpID0+IHtcbiAgICB0aW1lcklkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aW1lcklkID0gbnVsbDtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgaWYgKGxhc3RBcmdzVHJhaWxpbmcpIHtcbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0QXJnc1RyYWlsaW5nO1xuICAgICAgICBsYXN0QXJnc1RyYWlsaW5nID0gbnVsbDtcbiAgICAgICAgc2NoZWR1bGVGdW5jKGxhc3RBcmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCByZXQgPSAoLi4uYXJnczogVCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgaWYgKHRpbWVySWQgPT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlRnVuYyhsYXN0QXJncyk7XG4gICAgfSBlbHNlIGlmIChvcHRzPy50cmFpbGluZykge1xuICAgICAgbGFzdEFyZ3NUcmFpbGluZyA9IGFyZ3M7XG4gICAgfVxuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgaWYgKHRpbWVySWQgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpO1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChsYXN0QXJncykge1xuICAgICAgZm4oLi4uKGxhc3RBcmdzVHJhaWxpbmcgfHwgbGFzdEFyZ3MpKTtcbiAgICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgaWYgKHRpbWVySWQgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpO1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9lcy9jaHVuay5qc1xuZXhwb3J0IGNvbnN0IGNodW5rID0gPFQgZXh0ZW5kcyBhbnk+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBzaXplOiBudW1iZXIsXG4pOiBUW11bXSA9PiB7XG4gIGlmICghYXJyYXkubGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGxldCBpbmRleCA9IDA7XG4gIGxldCByZXNJbmRleCA9IDA7XG4gIGNvbnN0IHJlc3VsdCA9IEFycmF5KE1hdGguY2VpbChhcnJheS5sZW5ndGggLyBzaXplKSk7XG4gIHdoaWxlIChpbmRleCA8IGFycmF5Lmxlbmd0aCkge1xuICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGFycmF5LnNsaWNlKGluZGV4LCAoaW5kZXggKz0gc2l6ZSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0Tm9kZSA9IChub2RlOiBFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbikge1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRpc3RhbmNlID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiBNYXRoLmFicyh4IC0geSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY3RpdmVUb29sID0gKFxuICBhcHBTdGF0ZTogUGljazxBcHBTdGF0ZSwgXCJhY3RpdmVUb29sXCI+LFxuICBkYXRhOiAoXG4gICAgfCB7IHR5cGU6IHR5cGVvZiBTSEFQRVNbbnVtYmVyXVtcInZhbHVlXCJdIHwgXCJlcmFzZXJcIiB8IFwiaGFuZFwiIH1cbiAgICB8IHsgdHlwZTogXCJjdXN0b21cIjsgY3VzdG9tVHlwZTogc3RyaW5nIH1cbiAgKSAmIHsgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI/OiBMYXN0QWN0aXZlVG9vbCB9LFxuKTogQXBwU3RhdGVbXCJhY3RpdmVUb29sXCJdID0+IHtcbiAgaWYgKGRhdGEudHlwZSA9PT0gXCJjdXN0b21cIikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5hcHBTdGF0ZS5hY3RpdmVUb29sLFxuICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgIGN1c3RvbVR5cGU6IGRhdGEuY3VzdG9tVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5hcHBTdGF0ZS5hY3RpdmVUb29sLFxuICAgIGxhc3RBY3RpdmVUb29sOlxuICAgICAgZGF0YS5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gYXBwU3RhdGUuYWN0aXZlVG9vbC5sYXN0QWN0aXZlVG9vbFxuICAgICAgICA6IGRhdGEubGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXIsXG4gICAgdHlwZTogZGF0YS50eXBlLFxuICAgIGN1c3RvbVR5cGU6IG51bGwsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRDdXJzb3IgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwpID0+IHtcbiAgaWYgKGNhbnZhcykge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBcIlwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yID0gKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLCBjdXJzb3I6IHN0cmluZykgPT4ge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcbiAgfVxufTtcblxubGV0IGVyYXNlckNhbnZhc0NhY2hlOiBhbnk7XG5sZXQgcHJldmlld0RhdGFVUkw6IHN0cmluZztcbmV4cG9ydCBjb25zdCBzZXRFcmFzZXJDdXJzb3IgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICB0aGVtZTogQXBwU3RhdGVbXCJ0aGVtZVwiXSxcbikgPT4ge1xuICBjb25zdCBjdXJzb3JJbWFnZVNpemVQeCA9IDIwO1xuXG4gIGNvbnN0IGRyYXdDYW52YXMgPSAoKSA9PiB7XG4gICAgY29uc3QgaXNEYXJrVGhlbWUgPSB0aGVtZSA9PT0gVEhFTUUuREFSSztcbiAgICBlcmFzZXJDYW52YXNDYWNoZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUudGhlbWUgPSB0aGVtZTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgPSBjdXJzb3JJbWFnZVNpemVQeDtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGNvbnN0IGNvbnRleHQgPSBlcmFzZXJDYW52YXNDYWNoZS5nZXRDb250ZXh0KFwiMmRcIikhO1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gMTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGNvbnRleHQuYXJjKFxuICAgICAgZXJhc2VyQ2FudmFzQ2FjaGUud2lkdGggLyAyLFxuICAgICAgZXJhc2VyQ2FudmFzQ2FjaGUuaGVpZ2h0IC8gMixcbiAgICAgIDUsXG4gICAgICAwLFxuICAgICAgMiAqIE1hdGguUEksXG4gICAgKTtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGlzRGFya1RoZW1lID8gb2MuYmxhY2sgOiBvYy53aGl0ZTtcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gaXNEYXJrVGhlbWUgPyBvYy53aGl0ZSA6IG9jLmJsYWNrO1xuICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgcHJldmlld0RhdGFVUkwgPSBlcmFzZXJDYW52YXNDYWNoZS50b0RhdGFVUkwoTUlNRV9UWVBFUy5zdmcpIGFzIERhdGFVUkw7XG4gIH07XG4gIGlmICghZXJhc2VyQ2FudmFzQ2FjaGUgfHwgZXJhc2VyQ2FudmFzQ2FjaGUudGhlbWUgIT09IHRoZW1lKSB7XG4gICAgZHJhd0NhbnZhcygpO1xuICB9XG5cbiAgc2V0Q3Vyc29yKFxuICAgIGNhbnZhcyxcbiAgICBgdXJsKCR7cHJldmlld0RhdGFVUkx9KSAke2N1cnNvckltYWdlU2l6ZVB4IC8gMn0gJHtcbiAgICAgIGN1cnNvckltYWdlU2l6ZVB4IC8gMlxuICAgIH0sIGF1dG9gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEN1cnNvckZvclNoYXBlID0gKFxuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuKSA9PiB7XG4gIGlmICghY2FudmFzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgPT09IFwic2VsZWN0aW9uXCIpIHtcbiAgICByZXNldEN1cnNvcihjYW52YXMpO1xuICB9IGVsc2UgaWYgKGlzSGFuZFRvb2xBY3RpdmUoYXBwU3RhdGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkdSQUI7XG4gIH0gZWxzZSBpZiAoaXNFcmFzZXJBY3RpdmUoYXBwU3RhdGUpKSB7XG4gICAgc2V0RXJhc2VyQ3Vyc29yKGNhbnZhcywgYXBwU3RhdGUudGhlbWUpO1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgaW1hZ2UgdG9vbCBpcyBzZWxlY3RlZCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzXG4gICAgLy8gYSBpbWFnZS1wcmV2aWV3IHNldCBhcyB0aGUgY3Vyc29yXG4gICAgLy8gSWdub3JlIGN1c3RvbSB0eXBlIGFzIHdlbGwgYW5kIGxldCBob3N0IGRlY2lkZVxuICB9IGVsc2UgaWYgKCFbXCJpbWFnZVwiLCBcImN1c3RvbVwiXS5pbmNsdWRlcyhhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkNST1NTSEFJUjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVsbFNjcmVlbiA9ICgpID0+XG4gIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50Py5ub2RlTmFtZSA9PT0gXCJIVE1MXCI7XG5cbmV4cG9ydCBjb25zdCBhbGxvd0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gKCkgPT4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNob3J0Y3V0S2V5ID0gKHNob3J0Y3V0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBzaG9ydGN1dCA9IHNob3J0Y3V0XG4gICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIkFsdFwiKVxuICAgIC5yZXBsYWNlKC9cXGJTaGlmdFxcYi9pLCBcIlNoaWZ0XCIpXG4gICAgLnJlcGxhY2UoL1xcYihFbnRlcnxSZXR1cm4pXFxiL2ksIFwiRW50ZXJcIik7XG4gIGlmIChpc0Rhcndpbikge1xuICAgIHJldHVybiBzaG9ydGN1dFxuICAgICAgLnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9naSwgXCJDbWRcIilcbiAgICAgIC5yZXBsYWNlKC9cXGJBbHRcXGIvaSwgXCJPcHRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHNob3J0Y3V0LnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9naSwgXCJDdHJsXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IHZpZXdwb3J0Q29vcmRzVG9TY2VuZUNvb3JkcyA9IChcbiAgeyBjbGllbnRYLCBjbGllbnRZIH06IHsgY2xpZW50WDogbnVtYmVyOyBjbGllbnRZOiBudW1iZXIgfSxcbiAge1xuICAgIHpvb20sXG4gICAgb2Zmc2V0TGVmdCxcbiAgICBvZmZzZXRUb3AsXG4gICAgc2Nyb2xsWCxcbiAgICBzY3JvbGxZLFxuICB9OiB7XG4gICAgem9vbTogWm9vbTtcbiAgICBvZmZzZXRMZWZ0OiBudW1iZXI7XG4gICAgb2Zmc2V0VG9wOiBudW1iZXI7XG4gICAgc2Nyb2xsWDogbnVtYmVyO1xuICAgIHNjcm9sbFk6IG51bWJlcjtcbiAgfSxcbikgPT4ge1xuICBjb25zdCB4ID0gKGNsaWVudFggLSBvZmZzZXRMZWZ0KSAvIHpvb20udmFsdWUgLSBzY3JvbGxYO1xuICBjb25zdCB5ID0gKGNsaWVudFkgLSBvZmZzZXRUb3ApIC8gem9vbS52YWx1ZSAtIHNjcm9sbFk7XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyA9IChcbiAgeyBzY2VuZVgsIHNjZW5lWSB9OiB7IHNjZW5lWDogbnVtYmVyOyBzY2VuZVk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHggPSAoc2NlbmVYICsgc2Nyb2xsWCkgKiB6b29tLnZhbHVlICsgb2Zmc2V0TGVmdDtcbiAgY29uc3QgeSA9IChzY2VuZVkgKyBzY3JvbGxZKSAqIHpvb20udmFsdWUgKyBvZmZzZXRUb3A7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcpID0+XG4gIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7bmFtZX1gKTtcblxuY29uc3QgUlNfTFRSX0NIQVJTID1cbiAgXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArXG4gIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5leHBvcnQgY29uc3QgaXNSVEwgPSAodGV4dDogc3RyaW5nKSA9PiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHR1cGxlVG9Db29ycyA9IChcbiAgeHlUdXBsZTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IFt4LCB5XSA9IHh5VHVwbGU7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbi8qKiB1c2UgYXMgYSByZWplY3Rpb25IYW5kbGVyIHRvIG11dGUgZmlsZXN5c3RlbSBBYm9ydCBlcnJvcnMgKi9cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IDAsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdEluZGV4ID0gPFQ+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBjYjogKGVsZW1lbnQ6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiByZWFkb25seSBUW10pID0+IGJvb2xlYW4sXG4gIGZyb21JbmRleDogbnVtYmVyID0gYXJyYXkubGVuZ3RoIC0gMSxcbikgPT4ge1xuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKC0taW5kZXggPiAtMSkge1xuICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVHJhbnNwYXJlbnQgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc1JHQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA1ICYmIGNvbG9yLnN1YnN0cig0LCAxKSA9PT0gXCIwXCI7XG4gIGNvbnN0IGlzUlJHR0JCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDkgJiYgY29sb3Iuc3Vic3RyKDcsIDIpID09PSBcIjAwXCI7XG4gIHJldHVybiAoXG4gICAgaXNSR0JUcmFuc3BhcmVudCB8fFxuICAgIGlzUlJHR0JCVHJhbnNwYXJlbnQgfHxcbiAgICBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZhYmxlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gJiB7XG4gIHJlc29sdmU6IFtUXSBleHRlbmRzIFt1bmRlZmluZWRdID8gKHZhbHVlPzogVCkgPT4gdm9pZCA6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IDxUPigpID0+IHtcbiAgbGV0IHJlc29sdmUhOiBhbnk7XG4gIGxldCByZWplY3QhOiBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIChwcm9taXNlIGFzIGFueSkucmVzb2x2ZSA9IHJlc29sdmU7XG4gIChwcm9taXNlIGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZSBhcyBSZXNvbHZhYmxlUHJvbWlzZTxUPjtcbn07XG5cbi8qKlxuICogQHBhcmFtIGZ1bmMgaGFuZGxlciB0YWtpbmcgYXQgbW9zdCBzaW5nbGUgcGFyYW1ldGVyIChldmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PlxuICAoKGV2ZW50KSA9PiB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYyBhcyBURnVuY3Rpb24sIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uO1xuXG4vKipcbiAqIGJhcmNoZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBhbmQgdGhyb3R0bGVzIHRoZSBjYWxscyB0byBhIHNpbmdsZSBjYWxsIHBlclxuICogYW5pbWF0aW9uIGZyYW1lXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXNUaHJvdHRsZWQgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHRocm90dGxlUkFGPFBhcmFtZXRlcnM8VEZ1bmN0aW9uPj4oKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMsIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uKTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuZXhwb3J0IGNvbnN0IG5Gb3JtYXR0ZXIgPSAobnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2kgPSBbXG4gICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcImJcIiB9LFxuICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcImtcIiB9LFxuICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIk1cIiB9LFxuICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIkdcIiB9LFxuICBdO1xuICBjb25zdCByeCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gIGxldCBpbmRleDtcbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICAobnVtIC8gc2lbaW5kZXhdLnZhbHVlKS50b0ZpeGVkKGRpZ2l0cykucmVwbGFjZShyeCwgXCIkMVwiKSArIHNpW2luZGV4XS5zeW1ib2xcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTE1ldGFFbGVtZW50PignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8XG4gICAgREVGQVVMVF9WRVJTSU9OXG4gICk7XG59O1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2Vtb2ppLmpzXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNFbW9qaSA9ICgpID0+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gIGN0eC5maWxsU3R5bGUgPSBcIiNmMDBcIjtcbiAgY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG4gIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gIC8vIE1vZGVybml6ciB1c2VkIPCfkKgsIGJ1dCBpdCBpcyBzb3J0IG9mIHN1cHBvcnRlZCBvbiBXaW5kb3dzIDcuXG4gIC8vIEx1Y2tpbHkg8J+YgCBpc24ndCBzdXBwb3J0ZWQuXG4gIGN0eC5maWxsVGV4dChcIvCfmIBcIiwgMCwgMCk7XG4gIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKG9mZnNldCwgb2Zmc2V0LCAxLCAxKS5kYXRhWzBdICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RTY3JvbGxhYmxlQ29udGFpbmVyID0gKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIH1cbiAgICBjb25zdCB7IG92ZXJmbG93WSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBjb25zdCBoYXNTY3JvbGxhYmxlQ29udGVudCA9IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChcbiAgICAgIGhhc1Njcm9sbGFibGVDb250ZW50ICYmXG4gICAgICAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fFxuICAgICAgICBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c05lYXJlc3RQYXJlbnQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC50YWJJbmRleCA+IC0xKSB7XG4gICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2ZW50VW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG4gIGV2ZW50LnJldHVyblZhbHVlID0gXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gKGJ5dGVzOiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgIC5tYXAoKGJ5dGUpID0+IGAwJHtieXRlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcbiAgICAuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gKCkgPT4gKGlzVGVzdEVudigpID8gMSA6IERhdGUubm93KCkpO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5leHBvcnQgY29uc3QgYXJyYXlUb01hcCA9IDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmc+KFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuKSA9PiB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYzogTWFwPHN0cmluZywgVD4sIGVsZW1lbnQpID0+IHtcbiAgICBhY2Muc2V0KHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiID8gZWxlbWVudCA6IGVsZW1lbnQuaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIG5ldyBNYXAoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gKCkgPT5cbiAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcblxuZXhwb3J0IGNvbnN0IGlzUHJvZEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCB3cmFwRXZlbnQgPSA8VCBleHRlbmRzIEV2ZW50PihuYW1lOiBFVkVOVCwgbmF0aXZlRXZlbnQ6IFQpID0+IHtcbiAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICBuYXRpdmVFdmVudCxcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iajogVCxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbik6IFQgPT4ge1xuICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh1cGRhdGVzIGFzIGFueSlba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID09PSB2YWx1ZSAmJlxuICAgICAgICAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIC4uLnVwZGF0ZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsOiBhbnkpID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYW1lID0gKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCA/IFwidG9wXCIgOiBcImlmcmFtZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcImlmcmFtZVwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IChcbiAgdmFsdWU6IGFueSxcbik6IHZhbHVlIGlzIFByb21pc2U8UmVzb2x1dGlvblR5cGU8dHlwZW9mIHZhbHVlPj4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInRoZW5cIiBpbiB2YWx1ZSAmJlxuICAgIFwiY2F0Y2hcIiBpbiB2YWx1ZSAmJlxuICAgIFwiZmluYWxseVwiIGluIHZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlGb2N1c2FibGVFbGVtZW50cyA9IChjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBkaXZbdGFiaW5kZXhdLCBsYWJlbFt0YWJpbmRleF1cIixcbiAgKTtcblxuICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudHNcbiAgICA/IEFycmF5LmZyb20oZm9jdXNhYmxlRWxlbWVudHMpLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+XG4gICAgICAgICAgZWxlbWVudC50YWJJbmRleCA+IC0xICYmICEoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCxcbiAgICAgIClcbiAgICA6IFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2hhbGxvd0VxdWFsID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgb2JqQTogVCxcbiAgb2JqQjogVCxcbikgPT4ge1xuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG9iakEpO1xuICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKG9iakEpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+IG9iakFba2V5XSA9PT0gb2JqQltrZXldKTtcbn07XG5cbi8vIHRha2VuIGZyb20gUmFkaXggVUlcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYWRpeC11aS9wcmltaXRpdmVzL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZS9zcmMvcHJpbWl0aXZlLnRzeFxuZXhwb3J0IGNvbnN0IGNvbXBvc2VFdmVudEhhbmRsZXJzID0gPEU+KFxuICBvcmlnaW5hbEV2ZW50SGFuZGxlcj86IChldmVudDogRSkgPT4gdm9pZCxcbiAgb3VyRXZlbnRIYW5kbGVyPzogKGV2ZW50OiBFKSA9PiB2b2lkLFxuICB7IGNoZWNrRm9yRGVmYXVsdFByZXZlbnRlZCA9IHRydWUgfSA9IHt9LFxuKSA9PiB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudDogRSkge1xuICAgIG9yaWdpbmFsRXZlbnRIYW5kbGVyPy4oZXZlbnQpO1xuXG4gICAgaWYgKFxuICAgICAgIWNoZWNrRm9yRGVmYXVsdFByZXZlbnRlZCB8fFxuICAgICAgIShldmVudCBhcyB1bmtub3duIGFzIEV2ZW50KS5kZWZhdWx0UHJldmVudGVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gb3VyRXZlbnRIYW5kbGVyPy4oZXZlbnQpO1xuICAgIH1cbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../utils.ts\n");
3969
+ 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 */ \"composeEventHandlers\": () => (/* binding */ composeEventHandlers),\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 */ \"isShallowEqual\": () => (/* binding */ isShallowEqual),\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 */ \"queryFocusableElements\": () => (/* binding */ queryFocusableElements),\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 */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\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 open_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.ts\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./appState */ \"../../appState.ts\");\n\n\n\n\n\nlet mockDateTime = null;\nconst setDateTimeForTests = (dateTime) => {\n mockDateTime = dateTime;\n};\nconst getDateTime = () => {\n if (mockDateTime) {\n return mockDateTime;\n }\n const date = new Date();\n const year = date.getFullYear();\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\n const day = `${date.getDate()}`.padStart(2, \"0\");\n const hr = `${date.getHours()}`.padStart(2, \"0\");\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\n return `${year}-${month}-${day}-${hr}${min}`;\n};\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement;\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLTextAreaElement ||\n (target instanceof HTMLInputElement &&\n (target.type === \"text\" || target.type === \"number\"));\nconst getFontFamilyString = ({ fontFamily, }) => {\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\n if (id === fontFamily) {\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\n }\n }\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\n};\n/** returns fontSize+fontFamily string for assignment to DOM elements */\nconst getFontString = ({ fontSize, fontFamily, }) => {\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\n};\nconst debounce = (fn, timeout) => {\n let handle = 0;\n let lastArgs = null;\n const ret = (...args) => {\n lastArgs = args;\n clearTimeout(handle);\n handle = window.setTimeout(() => {\n lastArgs = null;\n fn(...args);\n }, timeout);\n };\n ret.flush = () => {\n clearTimeout(handle);\n if (lastArgs) {\n const _lastArgs = lastArgs;\n lastArgs = null;\n fn(..._lastArgs);\n }\n };\n ret.cancel = () => {\n lastArgs = null;\n clearTimeout(handle);\n };\n return ret;\n};\n// throttle callback to execute once per animation frame\nconst throttleRAF = (fn, opts) => {\n let timerId = null;\n let lastArgs = null;\n let lastArgsTrailing = null;\n const scheduleFunc = (args) => {\n timerId = window.requestAnimationFrame(() => {\n timerId = null;\n fn(...args);\n lastArgs = null;\n if (lastArgsTrailing) {\n lastArgs = lastArgsTrailing;\n lastArgsTrailing = null;\n scheduleFunc(lastArgs);\n }\n });\n };\n const ret = (...args) => {\n if (false) {}\n lastArgs = args;\n if (timerId === null) {\n scheduleFunc(lastArgs);\n }\n else if (opts === null || opts === void 0 ? void 0 : opts.trailing) {\n lastArgsTrailing = args;\n }\n };\n ret.flush = () => {\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n if (lastArgs) {\n fn(...(lastArgsTrailing || lastArgs));\n lastArgs = lastArgsTrailing = null;\n }\n };\n ret.cancel = () => {\n lastArgs = lastArgsTrailing = null;\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n };\n return ret;\n};\n// https://github.com/lodash/lodash/blob/es/chunk.js\nconst chunk = (array, size) => {\n if (!array.length || size < 1) {\n return [];\n }\n let index = 0;\n let resIndex = 0;\n const result = Array(Math.ceil(array.length / size));\n while (index < array.length) {\n result[resIndex++] = array.slice(index, (index += size));\n }\n return result;\n};\nconst selectNode = (node) => {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n};\nconst removeSelection = () => {\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n }\n};\nconst distance = (x, y) => Math.abs(x - y);\nconst updateActiveTool = (appState, data) => {\n if (data.type === \"custom\") {\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\n }\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveTool: data.lastActiveToolBeforeEraser === undefined\n ? appState.activeTool.lastActiveTool\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\n};\nconst resetCursor = (canvas) => {\n if (canvas) {\n canvas.style.cursor = \"\";\n }\n};\nconst setCursor = (canvas, cursor) => {\n if (canvas) {\n canvas.style.cursor = cursor;\n }\n};\nlet eraserCanvasCache;\nlet previewDataURL;\nconst setEraserCursor = (canvas, theme) => {\n const cursorImageSizePx = 20;\n const drawCanvas = () => {\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\n eraserCanvasCache = document.createElement(\"canvas\");\n eraserCanvasCache.theme = theme;\n eraserCanvasCache.height = cursorImageSizePx;\n eraserCanvasCache.width = cursorImageSizePx;\n const context = eraserCanvasCache.getContext(\"2d\");\n context.lineWidth = 1;\n context.beginPath();\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\n context.fill();\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\n context.stroke();\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\n };\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\n drawCanvas();\n }\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\n};\nconst setCursorForShape = (canvas, appState) => {\n if (!canvas) {\n return;\n }\n if (appState.activeTool.type === \"selection\") {\n resetCursor(canvas);\n }\n else if ((0,_appState__WEBPACK_IMPORTED_MODULE_4__.isHandToolActive)(appState)) {\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.GRAB;\n }\n else if ((0,_appState__WEBPACK_IMPORTED_MODULE_4__.isEraserActive)(appState)) {\n setEraserCursor(canvas, appState.theme);\n // do nothing if image tool is selected which suggests there's\n // a image-preview set as the cursor\n // Ignore custom type as well and let host decide\n }\n else if (![\"image\", \"custom\"].includes(appState.activeTool.type)) {\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\n }\n};\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\nconst exitFullScreen = () => document.exitFullscreen();\nconst getShortcutKey = (shortcut) => {\n shortcut = shortcut\n .replace(/\\bAlt\\b/i, \"Alt\")\n .replace(/\\bShift\\b/i, \"Shift\")\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\");\n if (_constants__WEBPACK_IMPORTED_MODULE_2__.isDarwin) {\n return shortcut\n .replace(/\\bCtrlOrCmd\\b/gi, \"Cmd\")\n .replace(/\\bAlt\\b/i, \"Option\");\n }\n return shortcut.replace(/\\bCtrlOrCmd\\b/gi, \"Ctrl\");\n};\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const x = (clientX - offsetLeft) / zoom.value - scrollX;\n const y = (clientY - offsetTop) / zoom.value - scrollY;\n return { x, y };\n};\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\n return { x, y };\n};\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\n/**\n * Checks whether first directional character is RTL. Meaning whether it starts\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\n * RTL.\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\n */\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\nconst tupleToCoors = (xyTuple) => {\n const [x, y] = xyTuple;\n return { x, y };\n};\n/** use as a rejectionHandler to mute filesystem Abort errors */\nconst muteFSAbortError = (error) => {\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\n console.warn(error);\n return;\n }\n throw error;\n};\nconst findIndex = (array, cb, fromIndex = 0) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\n let index = fromIndex - 1;\n while (++index < array.length) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\n let index = fromIndex + 1;\n while (--index > -1) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst isTransparent = (color) => {\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\n return (isRGBTransparent ||\n isRRGGBBTransparent ||\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\n};\nconst resolvablePromise = () => {\n let resolve;\n let reject;\n const promise = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n promise.resolve = resolve;\n promise.reject = reject;\n return promise;\n};\n/**\n * @param func handler taking at most single parameter (event).\n */\nconst withBatchedUpdates = (func) => ((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n});\n/**\n * barches React state updates and throttles the calls to a single call per\n * animation frame\n */\nconst withBatchedUpdatesThrottled = (func) => {\n // @ts-ignore\n return throttleRAF(((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n }));\n};\n//https://stackoverflow.com/a/9462382/8418\nconst nFormatter = (num, digits) => {\n const si = [\n { value: 1, symbol: \"b\" },\n { value: 1e3, symbol: \"k\" },\n { value: 1e6, symbol: \"M\" },\n { value: 1e9, symbol: \"G\" },\n ];\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n let index;\n for (index = si.length - 1; index > 0; index--) {\n if (num >= si[index].value) {\n break;\n }\n }\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\n};\nconst getVersion = () => {\n var _a;\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\n};\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\nconst supportsEmoji = () => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return false;\n }\n const offset = 12;\n ctx.fillStyle = \"#f00\";\n ctx.textBaseline = \"top\";\n ctx.font = \"32px Arial\";\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\n // Luckily 😀 isn't supported.\n ctx.fillText(\"😀\", 0, 0);\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\n};\nconst getNearestScrollableContainer = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent === document.body) {\n return document;\n }\n const { overflowY } = window.getComputedStyle(parent);\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\n if (hasScrollableContent &&\n (overflowY === \"auto\" ||\n overflowY === \"scroll\" ||\n overflowY === \"overlay\")) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document;\n};\nconst focusNearestParent = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent.tabIndex > -1) {\n parent.focus();\n return;\n }\n parent = parent.parentElement;\n }\n};\nconst preventUnload = (event) => {\n event.preventDefault();\n // NOTE: modern browsers no longer allow showing a custom message here\n event.returnValue = \"\";\n};\nconst bytesToHexString = (bytes) => {\n return Array.from(bytes)\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\n .join(\"\");\n};\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\n/**\n * Transforms array of objects containing `id` attribute,\n * or array of ids (strings), into a Map, keyd by `id`.\n */\nconst arrayToMap = (items) => {\n return items.reduce((acc, element) => {\n acc.set(typeof element === \"string\" ? element : element.id, element);\n return acc;\n }, new Map());\n};\nconst isTestEnv = () => { var _a; 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\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"FAST_REFRESH\":\"false\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.14.2\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\nconst isProdEnv = () => { var _a; 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\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"FAST_REFRESH\":\"false\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.14.2\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\nconst wrapEvent = (name, nativeEvent) => {\n return new CustomEvent(name, {\n detail: {\n nativeEvent,\n },\n cancelable: true,\n });\n};\nconst updateObject = (obj, updates) => {\n let didChange = false;\n for (const key in updates) {\n const value = updates[key];\n if (typeof value !== \"undefined\") {\n if (obj[key] === value &&\n // if object, always update because its attrs could have changed\n (typeof value !== \"object\" || value === null)) {\n continue;\n }\n didChange = true;\n }\n }\n if (!didChange) {\n return obj;\n }\n return Object.assign(Object.assign({}, obj), updates);\n};\nconst isPrimitive = (val) => {\n const type = typeof val;\n return val == null || (type !== \"object\" && type !== \"function\");\n};\nconst getFrame = () => {\n try {\n return window.self === window.top ? \"top\" : \"iframe\";\n }\n catch (error) {\n return \"iframe\";\n }\n};\nconst isPromiseLike = (value) => {\n return (!!value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n \"catch\" in value &&\n \"finally\" in value);\n};\nconst queryFocusableElements = (container) => {\n const focusableElements = container === null || container === void 0 ? void 0 : container.querySelectorAll(\"button, a, input, select, textarea, div[tabindex], label[tabindex]\");\n return focusableElements\n ? Array.from(focusableElements).filter((element) => element.tabIndex > -1 && !element.disabled)\n : [];\n};\nconst isShallowEqual = (objA, objB) => {\n const aKeys = Object.keys(objA);\n const bKeys = Object.keys(objA);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every((key) => objA[key] === objB[key]);\n};\n// taken from Radix UI\n// https://github.com/radix-ui/primitives/blob/main/packages/core/primitive/src/primitive.tsx\nconst composeEventHandlers = (originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) => {\n return function handleEvent(event) {\n originalEventHandler === null || originalEventHandler === void 0 ? void 0 : originalEventHandler(event);\n if (!checkForDefaultPrevented ||\n !event.defaultPrevented) {\n return ourEventHandler === null || ourEventHandler === void 0 ? void 0 : ourEventHandler(event);\n }\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2pDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUM7QUFFRixzQkFBc0I7QUFDdEIsNkZBQTZGO0FBQ3RGLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsb0JBQXlDLEVBQ3pDLGVBQW9DLEVBQ3BDLEVBQUUsd0JBQXdCLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUN4QyxFQUFFO0lBQ0YsT0FBTyxTQUFTLFdBQVcsQ0FBQyxLQUFRO1FBQ2xDLG9CQUFvQixhQUFwQixvQkFBb0IsdUJBQXBCLG9CQUFvQixDQUFHLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQ0UsQ0FBQyx3QkFBd0I7WUFDekIsQ0FBRSxLQUEwQixDQUFDLGdCQUFnQixFQUM3QztZQUNBLE9BQU8sZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFHLEtBQUssQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzPzc2M2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQge1xuICBDVVJTT1JfVFlQRSxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBFVkVOVCxcbiAgRk9OVF9GQU1JTFksXG4gIGlzRGFyd2luLFxuICBNSU1FX1RZUEVTLFxuICBUSEVNRSxcbiAgV0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05ULFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEZvbnRGYW1pbHlWYWx1ZXMsIEZvbnRTdHJpbmcgfSBmcm9tIFwiLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSwgRGF0YVVSTCwgTGFzdEFjdGl2ZVRvb2wsIFpvb20gfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBTSEFQRVMgfSBmcm9tIFwiLi9zaGFwZXNcIjtcbmltcG9ydCB7IGlzRXJhc2VyQWN0aXZlLCBpc0hhbmRUb29sQWN0aXZlIH0gZnJvbSBcIi4vYXBwU3RhdGVcIjtcblxubGV0IG1vY2tEYXRlVGltZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCBzZXREYXRlVGltZUZvclRlc3RzID0gKGRhdGVUaW1lOiBzdHJpbmcpID0+IHtcbiAgbW9ja0RhdGVUaW1lID0gZGF0ZVRpbWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0ZVRpbWUgPSAoKSA9PiB7XG4gIGlmIChtb2NrRGF0ZVRpbWUpIHtcbiAgICByZXR1cm4gbW9ja0RhdGVUaW1lO1xuICB9XG5cbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gYCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgZGF5ID0gYCR7ZGF0ZS5nZXREYXRlKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGhyID0gYCR7ZGF0ZS5nZXRIb3VycygpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBtaW4gPSBgJHtkYXRlLmdldE1pbnV0ZXMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcblxuICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9LSR7aHJ9JHttaW59YDtcbn07XG5cbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PlxuICBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG5cbmV4cG9ydCBjb25zdCBpc1Rvb2xJY29uID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXMgSFRNTEVsZW1lbnQgPT5cbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRvb2xJY29uXCIpO1xuXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTFNlbGVjdEVsZW1lbnRcbiAgfCBIVE1MQlJFbGVtZW50XG4gIHwgSFRNTERpdkVsZW1lbnQgPT5cbiAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiKSB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBpc1dyaXRhYmxlRWxlbWVudCA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzXG4gIHwgSFRNTElucHV0RWxlbWVudFxuICB8IEhUTUxUZXh0QXJlYUVsZW1lbnRcbiAgfCBIVE1MQlJFbGVtZW50XG4gIHwgSFRNTERpdkVsZW1lbnQgPT5cbiAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiKSB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmXG4gICAgKHRhcmdldC50eXBlID09PSBcInRleHRcIiB8fCB0YXJnZXQudHlwZSA9PT0gXCJudW1iZXJcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9udEZhbWlseVN0cmluZyA9ICh7XG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIGZvciAoY29uc3QgW2ZvbnRGYW1pbHlTdHJpbmcsIGlkXSBvZiBPYmplY3QuZW50cmllcyhGT05UX0ZBTUlMWSkpIHtcbiAgICBpZiAoaWQgPT09IGZvbnRGYW1pbHkpIHtcbiAgICAgIHJldHVybiBgJHtmb250RmFtaWx5U3RyaW5nfSwgJHtXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlR9YDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVDtcbn07XG5cbi8qKiByZXR1cm5zIGZvbnRTaXplK2ZvbnRGYW1pbHkgc3RyaW5nIGZvciBhc3NpZ25tZW50IHRvIERPTSBlbGVtZW50cyAqL1xuZXhwb3J0IGNvbnN0IGdldEZvbnRTdHJpbmcgPSAoe1xuICBmb250U2l6ZSxcbiAgZm9udEZhbWlseSxcbn06IHtcbiAgZm9udFNpemU6IG51bWJlcjtcbiAgZm9udEZhbWlseTogRm9udEZhbWlseVZhbHVlcztcbn0pID0+IHtcbiAgcmV0dXJuIGAke2ZvbnRTaXplfXB4ICR7Z2V0Rm9udEZhbWlseVN0cmluZyh7IGZvbnRGYW1pbHkgfSl9YCBhcyBGb250U3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlYm91bmNlID0gPFQgZXh0ZW5kcyBhbnlbXT4oXG4gIGZuOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcbiAgdGltZW91dDogbnVtYmVyLFxuKSA9PiB7XG4gIGxldCBoYW5kbGUgPSAwO1xuICBsZXQgbGFzdEFyZ3M6IFQgfCBudWxsID0gbnVsbDtcbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uYXJncyk7XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG4gIHJldC5mbHVzaCA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGNvbnN0IF9sYXN0QXJncyA9IGxhc3RBcmdzO1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uX2xhc3RBcmdzKTtcbiAgICB9XG4gIH07XG4gIHJldC5jYW5jZWwgPSAoKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gdGhyb3R0bGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHBlciBhbmltYXRpb24gZnJhbWVcbmV4cG9ydCBjb25zdCB0aHJvdHRsZVJBRiA9IDxUIGV4dGVuZHMgYW55W10+KFxuICBmbjogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIG9wdHM/OiB7IHRyYWlsaW5nPzogYm9vbGVhbiB9LFxuKSA9PiB7XG4gIGxldCB0aW1lcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGxldCBsYXN0QXJnc1RyYWlsaW5nOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc2NoZWR1bGVGdW5jID0gKGFyZ3M6IFQpID0+IHtcbiAgICB0aW1lcklkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aW1lcklkID0gbnVsbDtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgaWYgKGxhc3RBcmdzVHJhaWxpbmcpIHtcbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0QXJnc1RyYWlsaW5nO1xuICAgICAgICBsYXN0QXJnc1RyYWlsaW5nID0gbnVsbDtcbiAgICAgICAgc2NoZWR1bGVGdW5jKGxhc3RBcmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCByZXQgPSAoLi4uYXJnczogVCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgaWYgKHRpbWVySWQgPT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlRnVuYyhsYXN0QXJncyk7XG4gICAgfSBlbHNlIGlmIChvcHRzPy50cmFpbGluZykge1xuICAgICAgbGFzdEFyZ3NUcmFpbGluZyA9IGFyZ3M7XG4gICAgfVxuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgaWYgKHRpbWVySWQgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpO1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChsYXN0QXJncykge1xuICAgICAgZm4oLi4uKGxhc3RBcmdzVHJhaWxpbmcgfHwgbGFzdEFyZ3MpKTtcbiAgICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgaWYgKHRpbWVySWQgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpO1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9lcy9jaHVuay5qc1xuZXhwb3J0IGNvbnN0IGNodW5rID0gPFQgZXh0ZW5kcyBhbnk+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBzaXplOiBudW1iZXIsXG4pOiBUW11bXSA9PiB7XG4gIGlmICghYXJyYXkubGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGxldCBpbmRleCA9IDA7XG4gIGxldCByZXNJbmRleCA9IDA7XG4gIGNvbnN0IHJlc3VsdCA9IEFycmF5KE1hdGguY2VpbChhcnJheS5sZW5ndGggLyBzaXplKSk7XG4gIHdoaWxlIChpbmRleCA8IGFycmF5Lmxlbmd0aCkge1xuICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGFycmF5LnNsaWNlKGluZGV4LCAoaW5kZXggKz0gc2l6ZSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0Tm9kZSA9IChub2RlOiBFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbikge1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRpc3RhbmNlID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiBNYXRoLmFicyh4IC0geSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY3RpdmVUb29sID0gKFxuICBhcHBTdGF0ZTogUGljazxBcHBTdGF0ZSwgXCJhY3RpdmVUb29sXCI+LFxuICBkYXRhOiAoXG4gICAgfCB7IHR5cGU6IHR5cGVvZiBTSEFQRVNbbnVtYmVyXVtcInZhbHVlXCJdIHwgXCJlcmFzZXJcIiB8IFwiaGFuZFwiIH1cbiAgICB8IHsgdHlwZTogXCJjdXN0b21cIjsgY3VzdG9tVHlwZTogc3RyaW5nIH1cbiAgKSAmIHsgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI/OiBMYXN0QWN0aXZlVG9vbCB9LFxuKTogQXBwU3RhdGVbXCJhY3RpdmVUb29sXCJdID0+IHtcbiAgaWYgKGRhdGEudHlwZSA9PT0gXCJjdXN0b21cIikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5hcHBTdGF0ZS5hY3RpdmVUb29sLFxuICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgIGN1c3RvbVR5cGU6IGRhdGEuY3VzdG9tVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5hcHBTdGF0ZS5hY3RpdmVUb29sLFxuICAgIGxhc3RBY3RpdmVUb29sOlxuICAgICAgZGF0YS5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gYXBwU3RhdGUuYWN0aXZlVG9vbC5sYXN0QWN0aXZlVG9vbFxuICAgICAgICA6IGRhdGEubGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXIsXG4gICAgdHlwZTogZGF0YS50eXBlLFxuICAgIGN1c3RvbVR5cGU6IG51bGwsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRDdXJzb3IgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwpID0+IHtcbiAgaWYgKGNhbnZhcykge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBcIlwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yID0gKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLCBjdXJzb3I6IHN0cmluZykgPT4ge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcbiAgfVxufTtcblxubGV0IGVyYXNlckNhbnZhc0NhY2hlOiBhbnk7XG5sZXQgcHJldmlld0RhdGFVUkw6IHN0cmluZztcbmV4cG9ydCBjb25zdCBzZXRFcmFzZXJDdXJzb3IgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICB0aGVtZTogQXBwU3RhdGVbXCJ0aGVtZVwiXSxcbikgPT4ge1xuICBjb25zdCBjdXJzb3JJbWFnZVNpemVQeCA9IDIwO1xuXG4gIGNvbnN0IGRyYXdDYW52YXMgPSAoKSA9PiB7XG4gICAgY29uc3QgaXNEYXJrVGhlbWUgPSB0aGVtZSA9PT0gVEhFTUUuREFSSztcbiAgICBlcmFzZXJDYW52YXNDYWNoZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUudGhlbWUgPSB0aGVtZTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgPSBjdXJzb3JJbWFnZVNpemVQeDtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGNvbnN0IGNvbnRleHQgPSBlcmFzZXJDYW52YXNDYWNoZS5nZXRDb250ZXh0KFwiMmRcIikhO1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gMTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGNvbnRleHQuYXJjKFxuICAgICAgZXJhc2VyQ2FudmFzQ2FjaGUud2lkdGggLyAyLFxuICAgICAgZXJhc2VyQ2FudmFzQ2FjaGUuaGVpZ2h0IC8gMixcbiAgICAgIDUsXG4gICAgICAwLFxuICAgICAgMiAqIE1hdGguUEksXG4gICAgKTtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGlzRGFya1RoZW1lID8gb2MuYmxhY2sgOiBvYy53aGl0ZTtcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gaXNEYXJrVGhlbWUgPyBvYy53aGl0ZSA6IG9jLmJsYWNrO1xuICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgcHJldmlld0RhdGFVUkwgPSBlcmFzZXJDYW52YXNDYWNoZS50b0RhdGFVUkwoTUlNRV9UWVBFUy5zdmcpIGFzIERhdGFVUkw7XG4gIH07XG4gIGlmICghZXJhc2VyQ2FudmFzQ2FjaGUgfHwgZXJhc2VyQ2FudmFzQ2FjaGUudGhlbWUgIT09IHRoZW1lKSB7XG4gICAgZHJhd0NhbnZhcygpO1xuICB9XG5cbiAgc2V0Q3Vyc29yKFxuICAgIGNhbnZhcyxcbiAgICBgdXJsKCR7cHJldmlld0RhdGFVUkx9KSAke2N1cnNvckltYWdlU2l6ZVB4IC8gMn0gJHtcbiAgICAgIGN1cnNvckltYWdlU2l6ZVB4IC8gMlxuICAgIH0sIGF1dG9gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEN1cnNvckZvclNoYXBlID0gKFxuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuKSA9PiB7XG4gIGlmICghY2FudmFzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgPT09IFwic2VsZWN0aW9uXCIpIHtcbiAgICByZXNldEN1cnNvcihjYW52YXMpO1xuICB9IGVsc2UgaWYgKGlzSGFuZFRvb2xBY3RpdmUoYXBwU3RhdGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkdSQUI7XG4gIH0gZWxzZSBpZiAoaXNFcmFzZXJBY3RpdmUoYXBwU3RhdGUpKSB7XG4gICAgc2V0RXJhc2VyQ3Vyc29yKGNhbnZhcywgYXBwU3RhdGUudGhlbWUpO1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgaW1hZ2UgdG9vbCBpcyBzZWxlY3RlZCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzXG4gICAgLy8gYSBpbWFnZS1wcmV2aWV3IHNldCBhcyB0aGUgY3Vyc29yXG4gICAgLy8gSWdub3JlIGN1c3RvbSB0eXBlIGFzIHdlbGwgYW5kIGxldCBob3N0IGRlY2lkZVxuICB9IGVsc2UgaWYgKCFbXCJpbWFnZVwiLCBcImN1c3RvbVwiXS5pbmNsdWRlcyhhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkNST1NTSEFJUjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVsbFNjcmVlbiA9ICgpID0+XG4gIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50Py5ub2RlTmFtZSA9PT0gXCJIVE1MXCI7XG5cbmV4cG9ydCBjb25zdCBhbGxvd0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gKCkgPT4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNob3J0Y3V0S2V5ID0gKHNob3J0Y3V0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBzaG9ydGN1dCA9IHNob3J0Y3V0XG4gICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIkFsdFwiKVxuICAgIC5yZXBsYWNlKC9cXGJTaGlmdFxcYi9pLCBcIlNoaWZ0XCIpXG4gICAgLnJlcGxhY2UoL1xcYihFbnRlcnxSZXR1cm4pXFxiL2ksIFwiRW50ZXJcIik7XG4gIGlmIChpc0Rhcndpbikge1xuICAgIHJldHVybiBzaG9ydGN1dFxuICAgICAgLnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9naSwgXCJDbWRcIilcbiAgICAgIC5yZXBsYWNlKC9cXGJBbHRcXGIvaSwgXCJPcHRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHNob3J0Y3V0LnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9naSwgXCJDdHJsXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IHZpZXdwb3J0Q29vcmRzVG9TY2VuZUNvb3JkcyA9IChcbiAgeyBjbGllbnRYLCBjbGllbnRZIH06IHsgY2xpZW50WDogbnVtYmVyOyBjbGllbnRZOiBudW1iZXIgfSxcbiAge1xuICAgIHpvb20sXG4gICAgb2Zmc2V0TGVmdCxcbiAgICBvZmZzZXRUb3AsXG4gICAgc2Nyb2xsWCxcbiAgICBzY3JvbGxZLFxuICB9OiB7XG4gICAgem9vbTogWm9vbTtcbiAgICBvZmZzZXRMZWZ0OiBudW1iZXI7XG4gICAgb2Zmc2V0VG9wOiBudW1iZXI7XG4gICAgc2Nyb2xsWDogbnVtYmVyO1xuICAgIHNjcm9sbFk6IG51bWJlcjtcbiAgfSxcbikgPT4ge1xuICBjb25zdCB4ID0gKGNsaWVudFggLSBvZmZzZXRMZWZ0KSAvIHpvb20udmFsdWUgLSBzY3JvbGxYO1xuICBjb25zdCB5ID0gKGNsaWVudFkgLSBvZmZzZXRUb3ApIC8gem9vbS52YWx1ZSAtIHNjcm9sbFk7XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyA9IChcbiAgeyBzY2VuZVgsIHNjZW5lWSB9OiB7IHNjZW5lWDogbnVtYmVyOyBzY2VuZVk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHggPSAoc2NlbmVYICsgc2Nyb2xsWCkgKiB6b29tLnZhbHVlICsgb2Zmc2V0TGVmdDtcbiAgY29uc3QgeSA9IChzY2VuZVkgKyBzY3JvbGxZKSAqIHpvb20udmFsdWUgKyBvZmZzZXRUb3A7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcpID0+XG4gIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7bmFtZX1gKTtcblxuY29uc3QgUlNfTFRSX0NIQVJTID1cbiAgXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArXG4gIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5leHBvcnQgY29uc3QgaXNSVEwgPSAodGV4dDogc3RyaW5nKSA9PiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHR1cGxlVG9Db29ycyA9IChcbiAgeHlUdXBsZTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IFt4LCB5XSA9IHh5VHVwbGU7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbi8qKiB1c2UgYXMgYSByZWplY3Rpb25IYW5kbGVyIHRvIG11dGUgZmlsZXN5c3RlbSBBYm9ydCBlcnJvcnMgKi9cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IDAsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdEluZGV4ID0gPFQ+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBjYjogKGVsZW1lbnQ6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiByZWFkb25seSBUW10pID0+IGJvb2xlYW4sXG4gIGZyb21JbmRleDogbnVtYmVyID0gYXJyYXkubGVuZ3RoIC0gMSxcbikgPT4ge1xuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKC0taW5kZXggPiAtMSkge1xuICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVHJhbnNwYXJlbnQgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc1JHQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA1ICYmIGNvbG9yLnN1YnN0cig0LCAxKSA9PT0gXCIwXCI7XG4gIGNvbnN0IGlzUlJHR0JCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDkgJiYgY29sb3Iuc3Vic3RyKDcsIDIpID09PSBcIjAwXCI7XG4gIHJldHVybiAoXG4gICAgaXNSR0JUcmFuc3BhcmVudCB8fFxuICAgIGlzUlJHR0JCVHJhbnNwYXJlbnQgfHxcbiAgICBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZhYmxlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gJiB7XG4gIHJlc29sdmU6IFtUXSBleHRlbmRzIFt1bmRlZmluZWRdID8gKHZhbHVlPzogVCkgPT4gdm9pZCA6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IDxUPigpID0+IHtcbiAgbGV0IHJlc29sdmUhOiBhbnk7XG4gIGxldCByZWplY3QhOiBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIChwcm9taXNlIGFzIGFueSkucmVzb2x2ZSA9IHJlc29sdmU7XG4gIChwcm9taXNlIGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZSBhcyBSZXNvbHZhYmxlUHJvbWlzZTxUPjtcbn07XG5cbi8qKlxuICogQHBhcmFtIGZ1bmMgaGFuZGxlciB0YWtpbmcgYXQgbW9zdCBzaW5nbGUgcGFyYW1ldGVyIChldmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PlxuICAoKGV2ZW50KSA9PiB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYyBhcyBURnVuY3Rpb24sIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uO1xuXG4vKipcbiAqIGJhcmNoZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBhbmQgdGhyb3R0bGVzIHRoZSBjYWxscyB0byBhIHNpbmdsZSBjYWxsIHBlclxuICogYW5pbWF0aW9uIGZyYW1lXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXNUaHJvdHRsZWQgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHRocm90dGxlUkFGPFBhcmFtZXRlcnM8VEZ1bmN0aW9uPj4oKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMsIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uKTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuZXhwb3J0IGNvbnN0IG5Gb3JtYXR0ZXIgPSAobnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2kgPSBbXG4gICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcImJcIiB9LFxuICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcImtcIiB9LFxuICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIk1cIiB9LFxuICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIkdcIiB9LFxuICBdO1xuICBjb25zdCByeCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gIGxldCBpbmRleDtcbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICAobnVtIC8gc2lbaW5kZXhdLnZhbHVlKS50b0ZpeGVkKGRpZ2l0cykucmVwbGFjZShyeCwgXCIkMVwiKSArIHNpW2luZGV4XS5zeW1ib2xcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTE1ldGFFbGVtZW50PignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8XG4gICAgREVGQVVMVF9WRVJTSU9OXG4gICk7XG59O1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2Vtb2ppLmpzXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNFbW9qaSA9ICgpID0+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gIGN0eC5maWxsU3R5bGUgPSBcIiNmMDBcIjtcbiAgY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG4gIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gIC8vIE1vZGVybml6ciB1c2VkIPCfkKgsIGJ1dCBpdCBpcyBzb3J0IG9mIHN1cHBvcnRlZCBvbiBXaW5kb3dzIDcuXG4gIC8vIEx1Y2tpbHkg8J+YgCBpc24ndCBzdXBwb3J0ZWQuXG4gIGN0eC5maWxsVGV4dChcIvCfmIBcIiwgMCwgMCk7XG4gIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKG9mZnNldCwgb2Zmc2V0LCAxLCAxKS5kYXRhWzBdICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RTY3JvbGxhYmxlQ29udGFpbmVyID0gKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIH1cbiAgICBjb25zdCB7IG92ZXJmbG93WSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBjb25zdCBoYXNTY3JvbGxhYmxlQ29udGVudCA9IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChcbiAgICAgIGhhc1Njcm9sbGFibGVDb250ZW50ICYmXG4gICAgICAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fFxuICAgICAgICBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c05lYXJlc3RQYXJlbnQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC50YWJJbmRleCA+IC0xKSB7XG4gICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2ZW50VW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG4gIGV2ZW50LnJldHVyblZhbHVlID0gXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gKGJ5dGVzOiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgIC5tYXAoKGJ5dGUpID0+IGAwJHtieXRlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcbiAgICAuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gKCkgPT4gKGlzVGVzdEVudigpID8gMSA6IERhdGUubm93KCkpO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5leHBvcnQgY29uc3QgYXJyYXlUb01hcCA9IDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmc+KFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuKSA9PiB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYzogTWFwPHN0cmluZywgVD4sIGVsZW1lbnQpID0+IHtcbiAgICBhY2Muc2V0KHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiID8gZWxlbWVudCA6IGVsZW1lbnQuaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIG5ldyBNYXAoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gKCkgPT5cbiAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcblxuZXhwb3J0IGNvbnN0IGlzUHJvZEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCB3cmFwRXZlbnQgPSA8VCBleHRlbmRzIEV2ZW50PihuYW1lOiBFVkVOVCwgbmF0aXZlRXZlbnQ6IFQpID0+IHtcbiAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICBuYXRpdmVFdmVudCxcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iajogVCxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbik6IFQgPT4ge1xuICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh1cGRhdGVzIGFzIGFueSlba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID09PSB2YWx1ZSAmJlxuICAgICAgICAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIC4uLnVwZGF0ZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsOiBhbnkpID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYW1lID0gKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCA/IFwidG9wXCIgOiBcImlmcmFtZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcImlmcmFtZVwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IChcbiAgdmFsdWU6IGFueSxcbik6IHZhbHVlIGlzIFByb21pc2U8UmVzb2x1dGlvblR5cGU8dHlwZW9mIHZhbHVlPj4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInRoZW5cIiBpbiB2YWx1ZSAmJlxuICAgIFwiY2F0Y2hcIiBpbiB2YWx1ZSAmJlxuICAgIFwiZmluYWxseVwiIGluIHZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlGb2N1c2FibGVFbGVtZW50cyA9IChjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBkaXZbdGFiaW5kZXhdLCBsYWJlbFt0YWJpbmRleF1cIixcbiAgKTtcblxuICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudHNcbiAgICA/IEFycmF5LmZyb20oZm9jdXNhYmxlRWxlbWVudHMpLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+XG4gICAgICAgICAgZWxlbWVudC50YWJJbmRleCA+IC0xICYmICEoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCxcbiAgICAgIClcbiAgICA6IFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2hhbGxvd0VxdWFsID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgb2JqQTogVCxcbiAgb2JqQjogVCxcbikgPT4ge1xuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG9iakEpO1xuICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKG9iakEpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+IG9iakFba2V5XSA9PT0gb2JqQltrZXldKTtcbn07XG5cbi8vIHRha2VuIGZyb20gUmFkaXggVUlcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYWRpeC11aS9wcmltaXRpdmVzL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZS9zcmMvcHJpbWl0aXZlLnRzeFxuZXhwb3J0IGNvbnN0IGNvbXBvc2VFdmVudEhhbmRsZXJzID0gPEU+KFxuICBvcmlnaW5hbEV2ZW50SGFuZGxlcj86IChldmVudDogRSkgPT4gdm9pZCxcbiAgb3VyRXZlbnRIYW5kbGVyPzogKGV2ZW50OiBFKSA9PiB2b2lkLFxuICB7IGNoZWNrRm9yRGVmYXVsdFByZXZlbnRlZCA9IHRydWUgfSA9IHt9LFxuKSA9PiB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudDogRSkge1xuICAgIG9yaWdpbmFsRXZlbnRIYW5kbGVyPy4oZXZlbnQpO1xuXG4gICAgaWYgKFxuICAgICAgIWNoZWNrRm9yRGVmYXVsdFByZXZlbnRlZCB8fFxuICAgICAgIShldmVudCBhcyB1bmtub3duIGFzIEV2ZW50KS5kZWZhdWx0UHJldmVudGVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gb3VyRXZlbnRIYW5kbGVyPy4oZXZlbnQpO1xuICAgIH1cbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../utils.ts\n");
3970
3970
 
3971
3971
  /***/ }),
3972
3972
 
@@ -4109,7 +4109,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_react_dom__;
4109
4109
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
4110
4110
 
4111
4111
  "use strict";
4112
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"customAlphabet\": () => (/* binding */ customAlphabet),\n/* harmony export */ \"customRandom\": () => (/* binding */ customRandom),\n/* harmony export */ \"nanoid\": () => (/* binding */ nanoid),\n/* harmony export */ \"random\": () => (/* binding */ random),\n/* harmony export */ \"urlAlphabet\": () => (/* reexport safe */ _url_alphabet_index_js__WEBPACK_IMPORTED_MODULE_0__.urlAlphabet)\n/* harmony export */ });\n/* harmony import */ var _url_alphabet_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./url-alphabet/index.js */ \"../../../node_modules/nanoid/url-alphabet/index.js\");\n\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25hbm9pZC9pbmRleC5icm93c2VyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDaUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25hbm9pZC9pbmRleC5icm93c2VyLmpzPzgzNTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXJsQWxwaGFiZXQgfSBmcm9tICcuL3VybC1hbHBoYWJldC9pbmRleC5qcydcbmxldCByYW5kb20gPSBieXRlcyA9PiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KGJ5dGVzKSlcbmxldCBjdXN0b21SYW5kb20gPSAoYWxwaGFiZXQsIGRlZmF1bHRTaXplLCBnZXRSYW5kb20pID0+IHtcbiAgbGV0IG1hc2sgPSAoMiA8PCAoTWF0aC5sb2coYWxwaGFiZXQubGVuZ3RoIC0gMSkgLyBNYXRoLkxOMikpIC0gMVxuICBsZXQgc3RlcCA9IC1+KCgxLjYgKiBtYXNrICogZGVmYXVsdFNpemUpIC8gYWxwaGFiZXQubGVuZ3RoKVxuICByZXR1cm4gKHNpemUgPSBkZWZhdWx0U2l6ZSkgPT4ge1xuICAgIGxldCBpZCA9ICcnXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBieXRlcyA9IGdldFJhbmRvbShzdGVwKVxuICAgICAgbGV0IGogPSBzdGVwXG4gICAgICB3aGlsZSAoai0tKSB7XG4gICAgICAgIGlkICs9IGFscGhhYmV0W2J5dGVzW2pdICYgbWFza10gfHwgJydcbiAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gc2l6ZSkgcmV0dXJuIGlkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5sZXQgY3VzdG9tQWxwaGFiZXQgPSAoYWxwaGFiZXQsIHNpemUgPSAyMSkgPT5cbiAgY3VzdG9tUmFuZG9tKGFscGhhYmV0LCBzaXplLCByYW5kb20pXG5sZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT5cbiAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShzaXplKSkucmVkdWNlKChpZCwgYnl0ZSkgPT4ge1xuICAgIGJ5dGUgJj0gNjNcbiAgICBpZiAoYnl0ZSA8IDM2KSB7XG4gICAgICBpZCArPSBieXRlLnRvU3RyaW5nKDM2KVxuICAgIH0gZWxzZSBpZiAoYnl0ZSA8IDYyKSB7XG4gICAgICBpZCArPSAoYnl0ZSAtIDI2KS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKVxuICAgIH0gZWxzZSBpZiAoYnl0ZSA+IDYyKSB7XG4gICAgICBpZCArPSAnLSdcbiAgICB9IGVsc2Uge1xuICAgICAgaWQgKz0gJ18nXG4gICAgfVxuICAgIHJldHVybiBpZFxuICB9LCAnJylcbmV4cG9ydCB7IG5hbm9pZCwgY3VzdG9tQWxwaGFiZXQsIGN1c3RvbVJhbmRvbSwgdXJsQWxwaGFiZXQsIHJhbmRvbSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/nanoid/index.browser.js\n");
4112
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"customAlphabet\": () => (/* binding */ customAlphabet),\n/* harmony export */ \"customRandom\": () => (/* binding */ customRandom),\n/* harmony export */ \"nanoid\": () => (/* binding */ nanoid),\n/* harmony export */ \"random\": () => (/* binding */ random),\n/* harmony export */ \"urlAlphabet\": () => (/* reexport safe */ _url_alphabet_index_js__WEBPACK_IMPORTED_MODULE_0__.urlAlphabet)\n/* harmony export */ });\n/* harmony import */ var _url_alphabet_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./url-alphabet/index.js */ \"../../../node_modules/nanoid/url-alphabet/index.js\");\n\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25hbm9pZC9pbmRleC5icm93c2VyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDaUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25hbm9pZC9pbmRleC5icm93c2VyLmpzPzE1YzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXJsQWxwaGFiZXQgfSBmcm9tICcuL3VybC1hbHBoYWJldC9pbmRleC5qcydcbmxldCByYW5kb20gPSBieXRlcyA9PiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KGJ5dGVzKSlcbmxldCBjdXN0b21SYW5kb20gPSAoYWxwaGFiZXQsIGRlZmF1bHRTaXplLCBnZXRSYW5kb20pID0+IHtcbiAgbGV0IG1hc2sgPSAoMiA8PCAoTWF0aC5sb2coYWxwaGFiZXQubGVuZ3RoIC0gMSkgLyBNYXRoLkxOMikpIC0gMVxuICBsZXQgc3RlcCA9IC1+KCgxLjYgKiBtYXNrICogZGVmYXVsdFNpemUpIC8gYWxwaGFiZXQubGVuZ3RoKVxuICByZXR1cm4gKHNpemUgPSBkZWZhdWx0U2l6ZSkgPT4ge1xuICAgIGxldCBpZCA9ICcnXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBieXRlcyA9IGdldFJhbmRvbShzdGVwKVxuICAgICAgbGV0IGogPSBzdGVwXG4gICAgICB3aGlsZSAoai0tKSB7XG4gICAgICAgIGlkICs9IGFscGhhYmV0W2J5dGVzW2pdICYgbWFza10gfHwgJydcbiAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gc2l6ZSkgcmV0dXJuIGlkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5sZXQgY3VzdG9tQWxwaGFiZXQgPSAoYWxwaGFiZXQsIHNpemUgPSAyMSkgPT5cbiAgY3VzdG9tUmFuZG9tKGFscGhhYmV0LCBzaXplLCByYW5kb20pXG5sZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT5cbiAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShzaXplKSkucmVkdWNlKChpZCwgYnl0ZSkgPT4ge1xuICAgIGJ5dGUgJj0gNjNcbiAgICBpZiAoYnl0ZSA8IDM2KSB7XG4gICAgICBpZCArPSBieXRlLnRvU3RyaW5nKDM2KVxuICAgIH0gZWxzZSBpZiAoYnl0ZSA8IDYyKSB7XG4gICAgICBpZCArPSAoYnl0ZSAtIDI2KS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKVxuICAgIH0gZWxzZSBpZiAoYnl0ZSA+IDYyKSB7XG4gICAgICBpZCArPSAnLSdcbiAgICB9IGVsc2Uge1xuICAgICAgaWQgKz0gJ18nXG4gICAgfVxuICAgIHJldHVybiBpZFxuICB9LCAnJylcbmV4cG9ydCB7IG5hbm9pZCwgY3VzdG9tQWxwaGFiZXQsIGN1c3RvbVJhbmRvbSwgdXJsQWxwaGFiZXQsIHJhbmRvbSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/nanoid/index.browser.js\n");
4113
4113
 
4114
4114
  /***/ }),
4115
4115
 
@@ -4120,7 +4120,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
4120
4120
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
4121
4121
 
4122
4122
  "use strict";
4123
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"urlAlphabet\": () => (/* binding */ urlAlphabet)\n/* harmony export */ });\nlet urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25hbm9pZC91cmwtYWxwaGFiZXQvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25hbm9pZC91cmwtYWxwaGFiZXQvaW5kZXguanM/NGExZSJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgdXJsQWxwaGFiZXQgPVxuICAndXNlYW5kb20tMjZUMTk4MzQwUFg3NXB4SkFDS1ZFUllNSU5EQlVTSFdPTEZfR1FaYmZnaGprbHF2d3l6cmljdCdcbmV4cG9ydCB7IHVybEFscGhhYmV0IH1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/nanoid/url-alphabet/index.js\n");
4123
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"urlAlphabet\": () => (/* binding */ urlAlphabet)\n/* harmony export */ });\nlet urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25hbm9pZC91cmwtYWxwaGFiZXQvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25hbm9pZC91cmwtYWxwaGFiZXQvaW5kZXguanM/NWRjZCJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgdXJsQWxwaGFiZXQgPVxuICAndXNlYW5kb20tMjZUMTk4MzQwUFg3NXB4SkFDS1ZFUllNSU5EQlVTSFdPTEZfR1FaYmZnaGprbHF2d3l6cmljdCdcbmV4cG9ydCB7IHVybEFscGhhYmV0IH1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/nanoid/url-alphabet/index.js\n");
4124
4124
 
4125
4125
  /***/ }),
4126
4126
 
@@ -4131,7 +4131,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
4131
4131
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
4132
4132
 
4133
4133
  "use strict";
4134
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"create\": () => (/* binding */ create),\n/* harmony export */ \"createStore\": () => (/* reexport safe */ zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore),\n/* harmony export */ \"default\": () => (/* binding */ react),\n/* harmony export */ \"useStore\": () => (/* binding */ useStore)\n/* harmony export */ });\n/* harmony import */ var zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand/vanilla */ \"../../../node_modules/zustand/esm/vanilla.mjs\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var use_sync_external_store_shim_with_selector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! use-sync-external-store/shim/with-selector.js */ \"../../../node_modules/use-sync-external-store/shim/with-selector.js\");\n\n\n\n\n\nconst { useSyncExternalStoreWithSelector } = use_sync_external_store_shim_with_selector_js__WEBPACK_IMPORTED_MODULE_2__;\nfunction useStore(api, selector = api.getState, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getState,\n selector,\n equalityFn\n );\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useDebugValue)(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n if ( true && typeof createState !== \"function\") {\n console.warn(\n '[DEPRECATED] Passing a vanilla store will be unsupported in the future version. Please use `import { useStore } from \"zustand\"` to use the vanilla store in React.'\n );\n }\n const api = typeof createState === \"function\" ? (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore)(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar react = (createState) => {\n if (true) {\n console.warn(\n \"[DEPRECATED] default export is deprecated, instead import { create } from'zustand'\"\n );\n }\n return create(createState);\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQThDO0FBQ2Q7QUFDTTtBQUNrRDs7QUFFeEYsUUFBUSxtQ0FBbUMsRUFBRSwwRUFBMkI7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsb0RBQWE7QUFDZjtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQTBEO0FBQ2hFO0FBQ0EsNEdBQTRHLFdBQVc7QUFDdkg7QUFDQTtBQUNBLGtEQUFrRCw0REFBVztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQTBEO0FBQ2hFO0FBQ0EsbUVBQW1FLFNBQVM7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7O0FBRThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy96dXN0YW5kL2VzbS9pbmRleC5tanM/NjMxMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gJ3p1c3RhbmQvdmFuaWxsYSc7XG5leHBvcnQgKiBmcm9tICd6dXN0YW5kL3ZhbmlsbGEnO1xuaW1wb3J0IHsgdXNlRGVidWdWYWx1ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VTeW5jRXh0ZXJuYWxTdG9yZUV4cG9ydHMgZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS93aXRoLXNlbGVjdG9yLmpzJztcblxuY29uc3QgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9ID0gdXNlU3luY0V4dGVybmFsU3RvcmVFeHBvcnRzO1xuZnVuY3Rpb24gdXNlU3RvcmUoYXBpLCBzZWxlY3RvciA9IGFwaS5nZXRTdGF0ZSwgZXF1YWxpdHlGbikge1xuICBjb25zdCBzbGljZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yKFxuICAgIGFwaS5zdWJzY3JpYmUsXG4gICAgYXBpLmdldFN0YXRlLFxuICAgIGFwaS5nZXRTZXJ2ZXJTdGF0ZSB8fCBhcGkuZ2V0U3RhdGUsXG4gICAgc2VsZWN0b3IsXG4gICAgZXF1YWxpdHlGblxuICApO1xuICB1c2VEZWJ1Z1ZhbHVlKHNsaWNlKTtcbiAgcmV0dXJuIHNsaWNlO1xufVxuY29uc3QgY3JlYXRlSW1wbCA9IChjcmVhdGVTdGF0ZSkgPT4ge1xuICBpZiAoKGltcG9ydC5tZXRhLmVudiAmJiBpbXBvcnQubWV0YS5lbnYuTU9ERSkgIT09IFwicHJvZHVjdGlvblwiICYmIHR5cGVvZiBjcmVhdGVTdGF0ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1tERVBSRUNBVEVEXSBQYXNzaW5nIGEgdmFuaWxsYSBzdG9yZSB3aWxsIGJlIHVuc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUgdmVyc2lvbi4gUGxlYXNlIHVzZSBgaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tIFwienVzdGFuZFwiYCB0byB1c2UgdGhlIHZhbmlsbGEgc3RvcmUgaW4gUmVhY3QuJ1xuICAgICk7XG4gIH1cbiAgY29uc3QgYXBpID0gdHlwZW9mIGNyZWF0ZVN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyBjcmVhdGVTdG9yZShjcmVhdGVTdGF0ZSkgOiBjcmVhdGVTdGF0ZTtcbiAgY29uc3QgdXNlQm91bmRTdG9yZSA9IChzZWxlY3RvciwgZXF1YWxpdHlGbikgPT4gdXNlU3RvcmUoYXBpLCBzZWxlY3RvciwgZXF1YWxpdHlGbik7XG4gIE9iamVjdC5hc3NpZ24odXNlQm91bmRTdG9yZSwgYXBpKTtcbiAgcmV0dXJuIHVzZUJvdW5kU3RvcmU7XG59O1xuY29uc3QgY3JlYXRlID0gKGNyZWF0ZVN0YXRlKSA9PiBjcmVhdGVTdGF0ZSA/IGNyZWF0ZUltcGwoY3JlYXRlU3RhdGUpIDogY3JlYXRlSW1wbDtcbnZhciByZWFjdCA9IChjcmVhdGVTdGF0ZSkgPT4ge1xuICBpZiAoKGltcG9ydC5tZXRhLmVudiAmJiBpbXBvcnQubWV0YS5lbnYuTU9ERSkgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbREVQUkVDQVRFRF0gZGVmYXVsdCBleHBvcnQgaXMgZGVwcmVjYXRlZCwgaW5zdGVhZCBpbXBvcnQgeyBjcmVhdGUgfSBmcm9tJ3p1c3RhbmQnXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGUoY3JlYXRlU3RhdGUpO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlLCByZWFjdCBhcyBkZWZhdWx0LCB1c2VTdG9yZSB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/zustand/esm/index.mjs\n");
4134
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"create\": () => (/* binding */ create),\n/* harmony export */ \"createStore\": () => (/* reexport safe */ zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore),\n/* harmony export */ \"default\": () => (/* binding */ react),\n/* harmony export */ \"useStore\": () => (/* binding */ useStore)\n/* harmony export */ });\n/* harmony import */ var zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand/vanilla */ \"../../../node_modules/zustand/esm/vanilla.mjs\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var use_sync_external_store_shim_with_selector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! use-sync-external-store/shim/with-selector.js */ \"../../../node_modules/use-sync-external-store/shim/with-selector.js\");\n\n\n\n\n\nconst { useSyncExternalStoreWithSelector } = use_sync_external_store_shim_with_selector_js__WEBPACK_IMPORTED_MODULE_2__;\nfunction useStore(api, selector = api.getState, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getState,\n selector,\n equalityFn\n );\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useDebugValue)(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n if ( true && typeof createState !== \"function\") {\n console.warn(\n '[DEPRECATED] Passing a vanilla store will be unsupported in the future version. Please use `import { useStore } from \"zustand\"` to use the vanilla store in React.'\n );\n }\n const api = typeof createState === \"function\" ? (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore)(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar react = (createState) => {\n if (true) {\n console.warn(\n \"[DEPRECATED] default export is deprecated, instead import { create } from'zustand'\"\n );\n }\n return create(createState);\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQThDO0FBQ2Q7QUFDTTtBQUNrRDs7QUFFeEYsUUFBUSxtQ0FBbUMsRUFBRSwwRUFBMkI7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsb0RBQWE7QUFDZjtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQTBEO0FBQ2hFO0FBQ0EsNEdBQTRHLFdBQVc7QUFDdkg7QUFDQTtBQUNBLGtEQUFrRCw0REFBVztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQTBEO0FBQ2hFO0FBQ0EsbUVBQW1FLFNBQVM7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7O0FBRThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy96dXN0YW5kL2VzbS9pbmRleC5tanM/ZGU0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gJ3p1c3RhbmQvdmFuaWxsYSc7XG5leHBvcnQgKiBmcm9tICd6dXN0YW5kL3ZhbmlsbGEnO1xuaW1wb3J0IHsgdXNlRGVidWdWYWx1ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VTeW5jRXh0ZXJuYWxTdG9yZUV4cG9ydHMgZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS93aXRoLXNlbGVjdG9yLmpzJztcblxuY29uc3QgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9ID0gdXNlU3luY0V4dGVybmFsU3RvcmVFeHBvcnRzO1xuZnVuY3Rpb24gdXNlU3RvcmUoYXBpLCBzZWxlY3RvciA9IGFwaS5nZXRTdGF0ZSwgZXF1YWxpdHlGbikge1xuICBjb25zdCBzbGljZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yKFxuICAgIGFwaS5zdWJzY3JpYmUsXG4gICAgYXBpLmdldFN0YXRlLFxuICAgIGFwaS5nZXRTZXJ2ZXJTdGF0ZSB8fCBhcGkuZ2V0U3RhdGUsXG4gICAgc2VsZWN0b3IsXG4gICAgZXF1YWxpdHlGblxuICApO1xuICB1c2VEZWJ1Z1ZhbHVlKHNsaWNlKTtcbiAgcmV0dXJuIHNsaWNlO1xufVxuY29uc3QgY3JlYXRlSW1wbCA9IChjcmVhdGVTdGF0ZSkgPT4ge1xuICBpZiAoKGltcG9ydC5tZXRhLmVudiAmJiBpbXBvcnQubWV0YS5lbnYuTU9ERSkgIT09IFwicHJvZHVjdGlvblwiICYmIHR5cGVvZiBjcmVhdGVTdGF0ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1tERVBSRUNBVEVEXSBQYXNzaW5nIGEgdmFuaWxsYSBzdG9yZSB3aWxsIGJlIHVuc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUgdmVyc2lvbi4gUGxlYXNlIHVzZSBgaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tIFwienVzdGFuZFwiYCB0byB1c2UgdGhlIHZhbmlsbGEgc3RvcmUgaW4gUmVhY3QuJ1xuICAgICk7XG4gIH1cbiAgY29uc3QgYXBpID0gdHlwZW9mIGNyZWF0ZVN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyBjcmVhdGVTdG9yZShjcmVhdGVTdGF0ZSkgOiBjcmVhdGVTdGF0ZTtcbiAgY29uc3QgdXNlQm91bmRTdG9yZSA9IChzZWxlY3RvciwgZXF1YWxpdHlGbikgPT4gdXNlU3RvcmUoYXBpLCBzZWxlY3RvciwgZXF1YWxpdHlGbik7XG4gIE9iamVjdC5hc3NpZ24odXNlQm91bmRTdG9yZSwgYXBpKTtcbiAgcmV0dXJuIHVzZUJvdW5kU3RvcmU7XG59O1xuY29uc3QgY3JlYXRlID0gKGNyZWF0ZVN0YXRlKSA9PiBjcmVhdGVTdGF0ZSA/IGNyZWF0ZUltcGwoY3JlYXRlU3RhdGUpIDogY3JlYXRlSW1wbDtcbnZhciByZWFjdCA9IChjcmVhdGVTdGF0ZSkgPT4ge1xuICBpZiAoKGltcG9ydC5tZXRhLmVudiAmJiBpbXBvcnQubWV0YS5lbnYuTU9ERSkgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbREVQUkVDQVRFRF0gZGVmYXVsdCBleHBvcnQgaXMgZGVwcmVjYXRlZCwgaW5zdGVhZCBpbXBvcnQgeyBjcmVhdGUgfSBmcm9tJ3p1c3RhbmQnXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGUoY3JlYXRlU3RhdGUpO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlLCByZWFjdCBhcyBkZWZhdWx0LCB1c2VTdG9yZSB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/zustand/esm/index.mjs\n");
4135
4135
 
4136
4136
  /***/ }),
4137
4137
 
@@ -4142,7 +4142,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
4142
4142
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
4143
4143
 
4144
4144
  "use strict";
4145
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createStore\": () => (/* binding */ createStore),\n/* harmony export */ \"default\": () => (/* binding */ vanilla)\n/* harmony export */ });\nconst createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\") ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if (true) {\n console.warn(\n \"[DEPRECATED] The destroy method will be unsupported in the future version. You should use unsubscribe function returned by subscribe. Everything will be garbage collected if store is garbage collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if (true) {\n console.warn(\n \"[DEPRECATED] default export is deprecated, instead import { createStore } ...\"\n );\n }\n return createStore(createState);\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL3ZhbmlsbGEubWpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3R0FBd0c7QUFDeEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUEwRDtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBMEQ7QUFDaEU7QUFDQSxtRUFBbUUsY0FBYztBQUNqRjtBQUNBO0FBQ0E7QUFDQTs7QUFFMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL3ZhbmlsbGEubWpzPzZlZjQiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY3JlYXRlU3RvcmVJbXBsID0gKGNyZWF0ZVN0YXRlKSA9PiB7XG4gIGxldCBzdGF0ZTtcbiAgY29uc3QgbGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgY29uc3Qgc2V0U3RhdGUgPSAocGFydGlhbCwgcmVwbGFjZSkgPT4ge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHR5cGVvZiBwYXJ0aWFsID09PSBcImZ1bmN0aW9uXCIgPyBwYXJ0aWFsKHN0YXRlKSA6IHBhcnRpYWw7XG4gICAgaWYgKCFPYmplY3QuaXMobmV4dFN0YXRlLCBzdGF0ZSkpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBzdGF0ZTtcbiAgICAgIHN0YXRlID0gKHJlcGxhY2UgIT0gbnVsbCA/IHJlcGxhY2UgOiB0eXBlb2YgbmV4dFN0YXRlICE9PSBcIm9iamVjdFwiKSA/IG5leHRTdGF0ZSA6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBuZXh0U3RhdGUpO1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihzdGF0ZSwgcHJldmlvdXNTdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZ2V0U3RhdGUgPSAoKSA9PiBzdGF0ZTtcbiAgY29uc3Qgc3Vic2NyaWJlID0gKGxpc3RlbmVyKSA9PiB7XG4gICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgcmV0dXJuICgpID0+IGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9O1xuICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgIGlmICgoaW1wb3J0Lm1ldGEuZW52ICYmIGltcG9ydC5tZXRhLmVudi5NT0RFKSAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbREVQUkVDQVRFRF0gVGhlIGRlc3Ryb3kgbWV0aG9kIHdpbGwgYmUgdW5zdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHVzZSB1bnN1YnNjcmliZSBmdW5jdGlvbiByZXR1cm5lZCBieSBzdWJzY3JpYmUuIEV2ZXJ5dGhpbmcgd2lsbCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiBzdG9yZSBpcyBnYXJiYWdlIGNvbGxlY3RlZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgbGlzdGVuZXJzLmNsZWFyKCk7XG4gIH07XG4gIGNvbnN0IGFwaSA9IHsgc2V0U3RhdGUsIGdldFN0YXRlLCBzdWJzY3JpYmUsIGRlc3Ryb3kgfTtcbiAgc3RhdGUgPSBjcmVhdGVTdGF0ZShzZXRTdGF0ZSwgZ2V0U3RhdGUsIGFwaSk7XG4gIHJldHVybiBhcGk7XG59O1xuY29uc3QgY3JlYXRlU3RvcmUgPSAoY3JlYXRlU3RhdGUpID0+IGNyZWF0ZVN0YXRlID8gY3JlYXRlU3RvcmVJbXBsKGNyZWF0ZVN0YXRlKSA6IGNyZWF0ZVN0b3JlSW1wbDtcbnZhciB2YW5pbGxhID0gKGNyZWF0ZVN0YXRlKSA9PiB7XG4gIGlmICgoaW1wb3J0Lm1ldGEuZW52ICYmIGltcG9ydC5tZXRhLmVudi5NT0RFKSAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIltERVBSRUNBVEVEXSBkZWZhdWx0IGV4cG9ydCBpcyBkZXByZWNhdGVkLCBpbnN0ZWFkIGltcG9ydCB7IGNyZWF0ZVN0b3JlIH0gLi4uXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVTdG9yZShjcmVhdGVTdGF0ZSk7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVTdG9yZSwgdmFuaWxsYSBhcyBkZWZhdWx0IH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/zustand/esm/vanilla.mjs\n");
4145
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createStore\": () => (/* binding */ createStore),\n/* harmony export */ \"default\": () => (/* binding */ vanilla)\n/* harmony export */ });\nconst createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\") ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if (true) {\n console.warn(\n \"[DEPRECATED] The destroy method will be unsupported in the future version. You should use unsubscribe function returned by subscribe. Everything will be garbage collected if store is garbage collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if (true) {\n console.warn(\n \"[DEPRECATED] default export is deprecated, instead import { createStore } ...\"\n );\n }\n return createStore(createState);\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL3ZhbmlsbGEubWpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3R0FBd0c7QUFDeEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUEwRDtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBMEQ7QUFDaEU7QUFDQSxtRUFBbUUsY0FBYztBQUNqRjtBQUNBO0FBQ0E7QUFDQTs7QUFFMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL3ZhbmlsbGEubWpzPzA0MmQiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY3JlYXRlU3RvcmVJbXBsID0gKGNyZWF0ZVN0YXRlKSA9PiB7XG4gIGxldCBzdGF0ZTtcbiAgY29uc3QgbGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgY29uc3Qgc2V0U3RhdGUgPSAocGFydGlhbCwgcmVwbGFjZSkgPT4ge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHR5cGVvZiBwYXJ0aWFsID09PSBcImZ1bmN0aW9uXCIgPyBwYXJ0aWFsKHN0YXRlKSA6IHBhcnRpYWw7XG4gICAgaWYgKCFPYmplY3QuaXMobmV4dFN0YXRlLCBzdGF0ZSkpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBzdGF0ZTtcbiAgICAgIHN0YXRlID0gKHJlcGxhY2UgIT0gbnVsbCA/IHJlcGxhY2UgOiB0eXBlb2YgbmV4dFN0YXRlICE9PSBcIm9iamVjdFwiKSA/IG5leHRTdGF0ZSA6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBuZXh0U3RhdGUpO1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihzdGF0ZSwgcHJldmlvdXNTdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZ2V0U3RhdGUgPSAoKSA9PiBzdGF0ZTtcbiAgY29uc3Qgc3Vic2NyaWJlID0gKGxpc3RlbmVyKSA9PiB7XG4gICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgcmV0dXJuICgpID0+IGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9O1xuICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgIGlmICgoaW1wb3J0Lm1ldGEuZW52ICYmIGltcG9ydC5tZXRhLmVudi5NT0RFKSAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbREVQUkVDQVRFRF0gVGhlIGRlc3Ryb3kgbWV0aG9kIHdpbGwgYmUgdW5zdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHVzZSB1bnN1YnNjcmliZSBmdW5jdGlvbiByZXR1cm5lZCBieSBzdWJzY3JpYmUuIEV2ZXJ5dGhpbmcgd2lsbCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiBzdG9yZSBpcyBnYXJiYWdlIGNvbGxlY3RlZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgbGlzdGVuZXJzLmNsZWFyKCk7XG4gIH07XG4gIGNvbnN0IGFwaSA9IHsgc2V0U3RhdGUsIGdldFN0YXRlLCBzdWJzY3JpYmUsIGRlc3Ryb3kgfTtcbiAgc3RhdGUgPSBjcmVhdGVTdGF0ZShzZXRTdGF0ZSwgZ2V0U3RhdGUsIGFwaSk7XG4gIHJldHVybiBhcGk7XG59O1xuY29uc3QgY3JlYXRlU3RvcmUgPSAoY3JlYXRlU3RhdGUpID0+IGNyZWF0ZVN0YXRlID8gY3JlYXRlU3RvcmVJbXBsKGNyZWF0ZVN0YXRlKSA6IGNyZWF0ZVN0b3JlSW1wbDtcbnZhciB2YW5pbGxhID0gKGNyZWF0ZVN0YXRlKSA9PiB7XG4gIGlmICgoaW1wb3J0Lm1ldGEuZW52ICYmIGltcG9ydC5tZXRhLmVudi5NT0RFKSAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIltERVBSRUNBVEVEXSBkZWZhdWx0IGV4cG9ydCBpcyBkZXByZWNhdGVkLCBpbnN0ZWFkIGltcG9ydCB7IGNyZWF0ZVN0b3JlIH0gLi4uXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVTdG9yZShjcmVhdGVTdGF0ZSk7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVTdG9yZSwgdmFuaWxsYSBhcyBkZWZhdWx0IH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/zustand/esm/vanilla.mjs\n");
4146
4146
 
4147
4147
  /***/ }),
4148
4148