@epic-web/workshop-app 6.64.1 → 6.65.0

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.
@@ -1 +1 @@
1
- window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-Bc9ceZPe.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-hU3hrO-C.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-CRhJChs6.js","/assets/client-only-Dwnpimkx.js","/assets/error-boundary-B_ltT-yo.js","/assets/dialog-C_JrUgnb.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/index-DzdDahau.js","/assets/tooltip-f3C9W-4C.js","/assets/schemas-Uj5SZtvt.js","/assets/index-DVd41HZN.js","/assets/presence-CEaLlpZz.js","/assets/seo-t5J-DRxw.js","/assets/pe-UQCAhDPv.js","/assets/index-C4pHU_n3.js","/assets/root-loader-BObzljW3.js","/assets/online-D6QnZT5V.js","/assets/coerce-CkHW0SMv.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_--opxgdQ5.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-B_ltT-yo.js","/assets/misc-CRhJChs6.js","/assets/index-CqIc3cxq.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-C6NSVF79.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/index-CqIc3cxq.js","/assets/pe-UQCAhDPv.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/product-CNG57fZy.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/dialog-C_JrUgnb.js","/assets/tooltip-f3C9W-4C.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/online-D6QnZT5V.js","/assets/presence-CEaLlpZz.js","/assets/root-loader-BObzljW3.js","/assets/progress-Hpjbz7E6.js","/assets/index-DVd41HZN.js","/assets/schemas-Uj5SZtvt.js","/assets/index-C4pHU_n3.js","/assets/index-vDCSPjrM.js","/assets/coerce-CkHW0SMv.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/account-87tfAIZW.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CVorsvM4.js","/assets/misc-CRhJChs6.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/tooltip-f3C9W-4C.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/index-CqIc3cxq.js","/assets/root-loader-BObzljW3.js","/assets/index-vDCSPjrM.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/api.$":{"id":"routes/_app+/app.$appName+/api.$","parentId":"routes/_app+/_layout","path":"app/:appName/api/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/api._-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/epic_ws[.js]":{"id":"routes/_app+/app.$appName+/epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/epic_ws.js","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.$testName":{"id":"routes/_app+/app.$appName+/test.$testName","parentId":"routes/_app+/_layout","path":"app/:appName/test/:testName","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test._testName-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.epic_ws[.js]":{"id":"routes/_app+/app.$appName+/test.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/test/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.epic_ws[.js]":{"id":"routes/_app+/app.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/discord":{"id":"routes/_app+/discord","parentId":"routes/_app+/_layout","path":"discord","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/discord-BRmbT9rX.js","imports":["/assets/discord-C9e3SYlE.js","/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/index-CqIc3cxq.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/user-CFfhNfdz.js","/assets/root-loader-BObzljW3.js","/assets/workshop-config-BP-vDuRo.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-CFKs8QZJ.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-D3f2-zl6.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/epic-video-BX2A437e.js","/assets/error-boundary-B_ltT-yo.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-Hpjbz7E6.js","/assets/mdx-BlaeOyqK.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-DdQE-4kH.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-DVd41HZN.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/coerce-CkHW0SMv.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber/:type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_layout-oPmquiOE.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/index-CqIc3cxq.js","/assets/error-boundary-B_ltT-yo.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-Hpjbz7E6.js","/assets/set-playground-DaRl3X5k.js","/assets/misc-CRhJChs6.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/error-boundary-DdQE-4kH.js","/assets/epic-video-BX2A437e.js","/assets/tooltip-f3C9W-4C.js","/assets/mdx-BlaeOyqK.js","/assets/index-C4pHU_n3.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/preload-helper-BXl3LOEh.js","/assets/schemas-Uj5SZtvt.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/pe-UQCAhDPv.js","/assets/index-D9Wd20Hl.js","/assets/index-vDCSPjrM.js","/assets/button-CVorsvM4.js","/assets/dialog-C_JrUgnb.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/coerce-CkHW0SMv.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-DVd41HZN.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"app","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app-BcJkSksP.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/preview-D11Pscbe.js","/assets/misc-CRhJChs6.js","/assets/button-CVorsvM4.js","/assets/loading-BiVU3Oa8.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/progress-bar-Cxy0ZpqZ.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-InnNe6aG.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/playground-DIm_r4fy.js","/assets/diff-Ba99U4EI.js","/assets/error-boundary-B_ltT-yo.js","/assets/workshop-config-BP-vDuRo.js","/assets/misc-CRhJChs6.js","/assets/preview-D11Pscbe.js","/assets/tests-CITG_DX3.js","/assets/index-CqIc3cxq.js","/assets/loading-BiVU3Oa8.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/discord-C9e3SYlE.js","/assets/user-CFfhNfdz.js","/assets/online-D6QnZT5V.js","/assets/index-D9Wd20Hl.js","/assets/index-C4pHU_n3.js","/assets/index-DzdDahau.js","/assets/set-playground-DaRl3X5k.js","/assets/button-CVorsvM4.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/dialog-C_JrUgnb.js","/assets/playground-window-BnU6LeUy.js","/assets/accordion-DGNDc7Bw.js","/assets/mdx-BlaeOyqK.js","/assets/epic-video-BX2A437e.js","/assets/use-event-source-BuD4_2SF.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-D_PbWy0b.js","/assets/revalidation-ws-Dcs0B3Rw.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"test","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-CpoHBC_8.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-CITG_DX3.js","/assets/index-CqIc3cxq.js","/assets/accordion-DGNDc7Bw.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/misc-CRhJChs6.js","/assets/index-D9Wd20Hl.js","/assets/index-C4pHU_n3.js","/assets/epic-video-BX2A437e.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-DVd41HZN.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/playground-window-BnU6LeUy.js","/assets/set-playground-DaRl3X5k.js","/assets/button-CVorsvM4.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/dialog-C_JrUgnb.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber.index-swnTvl8f.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-B_ltT-yo.js","/assets/error-boundary-DdQE-4kH.js","/assets/index-CqIc3cxq.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-CRhJChs6.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/schemas-Uj5SZtvt.js","/assets/coerce-CkHW0SMv.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-DBaOwcf2.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/index-CqIc3cxq.js","/assets/epic-video-BX2A437e.js","/assets/misc-CRhJChs6.js","/assets/loading-BiVU3Oa8.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-Hpjbz7E6.js","/assets/index-DVd41HZN.js","/assets/mdx-BlaeOyqK.js","/assets/online-D6QnZT5V.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/schemas-Uj5SZtvt.js","/assets/tooltip-f3C9W-4C.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/pe-UQCAhDPv.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/_layout":{"id":"routes/_app+/extra+/_layout","parentId":"routes/_app+/_layout","path":"extra","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-X8qM3FXy.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/extra+/$extra":{"id":"routes/_app+/extra+/$extra","parentId":"routes/_app+/extra+/_layout","path":":extra","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_extra-B4vZXPjV.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/playground-DIm_r4fy.js","/assets/index-CqIc3cxq.js","/assets/diff-Ba99U4EI.js","/assets/epic-video-BX2A437e.js","/assets/error-boundary-B_ltT-yo.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/workshop-config-BP-vDuRo.js","/assets/preview-D11Pscbe.js","/assets/launch-editor-D_PbWy0b.js","/assets/set-playground-DaRl3X5k.js","/assets/mdx-BlaeOyqK.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/misc-CRhJChs6.js","/assets/loading-BiVU3Oa8.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/discord-C9e3SYlE.js","/assets/user-CFfhNfdz.js","/assets/online-D6QnZT5V.js","/assets/index-D9Wd20Hl.js","/assets/index-C4pHU_n3.js","/assets/index-DzdDahau.js","/assets/playground-window-BnU6LeUy.js","/assets/accordion-DGNDc7Bw.js","/assets/use-event-source-BuD4_2SF.js","/assets/preload-helper-BXl3LOEh.js","/assets/button-CVorsvM4.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/dialog-C_JrUgnb.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/index":{"id":"routes/_app+/extra+/index","parentId":"routes/_app+/extra+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-T3LlCTSm.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/epic-video-BX2A437e.js","/assets/error-boundary-B_ltT-yo.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/launch-editor-D_PbWy0b.js","/assets/mdx-BlaeOyqK.js","/assets/misc-CRhJChs6.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-Cxy0ZpqZ.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finished-BLRyuOTb.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/index-CqIc3cxq.js","/assets/epic-video-BX2A437e.js","/assets/misc-CRhJChs6.js","/assets/loading-BiVU3Oa8.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/mdx-BlaeOyqK.js","/assets/online-D6QnZT5V.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-Hpjbz7E6.js","/assets/index-DVd41HZN.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/schemas-Uj5SZtvt.js","/assets/tooltip-f3C9W-4C.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/pe-UQCAhDPv.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/guide":{"id":"routes/_app+/guide","parentId":"routes/_app+/_layout","path":"guide","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/guide-B0V9gK-M.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-Dt_ngnka.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/epic-video-BX2A437e.js","/assets/error-boundary-B_ltT-yo.js","/assets/launch-editor-D_PbWy0b.js","/assets/mdx-BlaeOyqK.js","/assets/misc-CRhJChs6.js","/assets/progress-Hpjbz7E6.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-Cxy0ZpqZ.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/l":{"id":"routes/_app+/l","parentId":"routes/_app+/_layout","path":"l","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/l-BnufyNX8.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-Ej63Q5LC.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/button-CVorsvM4.js","/assets/loading-BiVU3Oa8.js","/assets/product-CNG57fZy.js","/assets/workshop-config-BP-vDuRo.js","/assets/schemas-Uj5SZtvt.js","/assets/misc-CRhJChs6.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js"],"css":[]},"routes/_app+/preferences":{"id":"routes/_app+/preferences","parentId":"routes/_app+/_layout","path":"preferences","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/preferences-CgqvqSwL.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CVorsvM4.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/root-loader-BObzljW3.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/support--bbGxhiZ.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/workspace-structure":{"id":"routes/_app+/workspace-structure","parentId":"routes/_app+/_layout","path":"workspace-structure","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/workspace-structure-0lIVnQRW.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CVorsvM4.js","/assets/index-CqIc3cxq.js","/assets/misc-CRhJChs6.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DO9ALrzd.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-BObzljW3.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache-DHTBTFeR.js","imports":["/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/client-only-Dwnpimkx.js","/assets/button-CVorsvM4.js","/assets/misc-CRhJChs6.js","/assets/launch-editor-D_PbWy0b.js","/assets/pe-UQCAhDPv.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/root-loader-BObzljW3.js"],"css":[]},"routes/admin+/cache.$":{"id":"routes/admin+/cache.$","parentId":"routes/admin+/cache","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache._-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/db":{"id":"routes/admin+/db","parentId":"routes/admin+/_layout","path":"db","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/db-CsJwieeN.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/launch-editor-D_PbWy0b.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/pe-UQCAhDPv.js","/assets/root-loader-BObzljW3.js"],"css":[]},"routes/admin+/index":{"id":"routes/admin+/index","parentId":"routes/admin+/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-C4dXZZAD.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/progress-Hpjbz7E6.js","/assets/root-loader-BObzljW3.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/pe-UQCAhDPv.js"],"css":[]},"routes/admin+/notifications":{"id":"routes/admin+/notifications","parentId":"routes/admin+/_layout","path":"notifications","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/notifications-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/offline-videos":{"id":"routes/admin+/offline-videos","parentId":"routes/admin+/_layout","path":"offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-BYFoMLsP.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/admin+/version":{"id":"routes/admin+/version","parentId":"routes/admin+/_layout","path":"version","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version-Tq4ozvBN.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-BP-vDuRo.js","/assets/index-CqIc3cxq.js","/assets/root-loader-BObzljW3.js"],"css":[]},"routes/admin+/version[.json]":{"id":"routes/admin+/version[.json]","parentId":"routes/admin+/_layout","path":"version.json","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version_.json_-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff-DmmI9IU6.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/diff-Ba99U4EI.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/index-CqIc3cxq.js","/assets/accordion-DGNDc7Bw.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/index-D9Wd20Hl.js","/assets/index-C4pHU_n3.js","/assets/mdx-BlaeOyqK.js","/assets/index-DzdDahau.js","/assets/epic-video-BX2A437e.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DVd41HZN.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/revalidation-ws-Dcs0B3Rw.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/diff.$shortcut":{"id":"routes/diff.$shortcut","parentId":"routes/diff","path":":shortcut","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff._shortcut-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/mark-onboarding-complete":{"id":"routes/mark-onboarding-complete","parentId":"root","path":"mark-onboarding-complete","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/mark-onboarding-complete-l0sNRNKZ.js","imports":[],"css":[]},"routes/mcp-ui+/epic-video":{"id":"routes/mcp-ui+/epic-video","parentId":"root","path":"mcp-ui/epic-video","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic-video-5HutgMR0.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/epic-video-BX2A437e.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-DVd41HZN.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/persist-playground":{"id":"routes/persist-playground","parentId":"root","path":"persist-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/persist-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/healthcheck":{"id":"routes/resources+/healthcheck","parentId":"root","path":"resources/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/healthcheck-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/lookout":{"id":"routes/resources+/lookout","parentId":"root","path":"resources/lookout","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/lookout-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-video-progress.$playbackId":{"id":"routes/resources+/offline-video-progress.$playbackId","parentId":"root","path":"resources/offline-video-progress/:playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-video-progress._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos":{"id":"routes/resources+/offline-videos","parentId":"root","path":"resources/offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos.$playbackId":{"id":"routes/resources+/offline-videos.$playbackId","parentId":"routes/resources+/offline-videos","path":":playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/saved-playgrounds":{"id":"routes/saved-playgrounds","parentId":"root","path":"saved-playgrounds","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/saved-playgrounds-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.js","imports":[],"css":[]},"routes/video-player/index":{"id":"routes/video-player/index","parentId":"root","path":"video-player","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-9482f5db.js","version":"9482f5db"};
1
+ window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-Bc9ceZPe.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-4ETVlwNv.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-CRhJChs6.js","/assets/client-only-Dwnpimkx.js","/assets/error-boundary-B_ltT-yo.js","/assets/dialog-C_JrUgnb.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/index-DzdDahau.js","/assets/tooltip-f3C9W-4C.js","/assets/schemas-Uj5SZtvt.js","/assets/index-DVd41HZN.js","/assets/presence-CEaLlpZz.js","/assets/seo-t5J-DRxw.js","/assets/pe-UQCAhDPv.js","/assets/index-C4pHU_n3.js","/assets/root-loader-BObzljW3.js","/assets/online-D6QnZT5V.js","/assets/coerce-CkHW0SMv.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_--opxgdQ5.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-B_ltT-yo.js","/assets/misc-CRhJChs6.js","/assets/index-CqIc3cxq.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-C6NSVF79.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/index-CqIc3cxq.js","/assets/pe-UQCAhDPv.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/product-CNG57fZy.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/dialog-C_JrUgnb.js","/assets/tooltip-f3C9W-4C.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/online-D6QnZT5V.js","/assets/presence-CEaLlpZz.js","/assets/root-loader-BObzljW3.js","/assets/progress-Hpjbz7E6.js","/assets/index-DVd41HZN.js","/assets/schemas-Uj5SZtvt.js","/assets/index-C4pHU_n3.js","/assets/index-vDCSPjrM.js","/assets/coerce-CkHW0SMv.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/account-87tfAIZW.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CVorsvM4.js","/assets/misc-CRhJChs6.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/tooltip-f3C9W-4C.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/index-CqIc3cxq.js","/assets/root-loader-BObzljW3.js","/assets/index-vDCSPjrM.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/api.$":{"id":"routes/_app+/app.$appName+/api.$","parentId":"routes/_app+/_layout","path":"app/:appName/api/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/api._-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/epic_ws[.js]":{"id":"routes/_app+/app.$appName+/epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/epic_ws.js","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.$testName":{"id":"routes/_app+/app.$appName+/test.$testName","parentId":"routes/_app+/_layout","path":"app/:appName/test/:testName","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test._testName-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.epic_ws[.js]":{"id":"routes/_app+/app.$appName+/test.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/test/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.epic_ws[.js]":{"id":"routes/_app+/app.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/discord":{"id":"routes/_app+/discord","parentId":"routes/_app+/_layout","path":"discord","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/discord-BRmbT9rX.js","imports":["/assets/discord-C9e3SYlE.js","/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/index-CqIc3cxq.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/user-CFfhNfdz.js","/assets/root-loader-BObzljW3.js","/assets/workshop-config-BP-vDuRo.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-CFKs8QZJ.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-D3f2-zl6.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/epic-video-BX2A437e.js","/assets/error-boundary-B_ltT-yo.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-Hpjbz7E6.js","/assets/mdx-BlaeOyqK.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-DdQE-4kH.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-DVd41HZN.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/coerce-CkHW0SMv.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber/:type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_layout-oPmquiOE.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/index-CqIc3cxq.js","/assets/error-boundary-B_ltT-yo.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-Hpjbz7E6.js","/assets/set-playground-DaRl3X5k.js","/assets/misc-CRhJChs6.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/error-boundary-DdQE-4kH.js","/assets/epic-video-BX2A437e.js","/assets/tooltip-f3C9W-4C.js","/assets/mdx-BlaeOyqK.js","/assets/index-C4pHU_n3.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/preload-helper-BXl3LOEh.js","/assets/schemas-Uj5SZtvt.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/pe-UQCAhDPv.js","/assets/index-D9Wd20Hl.js","/assets/index-vDCSPjrM.js","/assets/button-CVorsvM4.js","/assets/dialog-C_JrUgnb.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/coerce-CkHW0SMv.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-DVd41HZN.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"app","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app-BcJkSksP.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/preview-D11Pscbe.js","/assets/misc-CRhJChs6.js","/assets/button-CVorsvM4.js","/assets/loading-BiVU3Oa8.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/progress-bar-Cxy0ZpqZ.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-InnNe6aG.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/playground-DIm_r4fy.js","/assets/diff-Ba99U4EI.js","/assets/error-boundary-B_ltT-yo.js","/assets/workshop-config-BP-vDuRo.js","/assets/misc-CRhJChs6.js","/assets/preview-D11Pscbe.js","/assets/tests-CITG_DX3.js","/assets/index-CqIc3cxq.js","/assets/loading-BiVU3Oa8.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/discord-C9e3SYlE.js","/assets/user-CFfhNfdz.js","/assets/online-D6QnZT5V.js","/assets/index-D9Wd20Hl.js","/assets/index-C4pHU_n3.js","/assets/index-DzdDahau.js","/assets/set-playground-DaRl3X5k.js","/assets/button-CVorsvM4.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/dialog-C_JrUgnb.js","/assets/playground-window-BnU6LeUy.js","/assets/accordion-DGNDc7Bw.js","/assets/mdx-BlaeOyqK.js","/assets/epic-video-BX2A437e.js","/assets/use-event-source-BuD4_2SF.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-D_PbWy0b.js","/assets/revalidation-ws-Dcs0B3Rw.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"test","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-CpoHBC_8.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-CITG_DX3.js","/assets/index-CqIc3cxq.js","/assets/accordion-DGNDc7Bw.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/misc-CRhJChs6.js","/assets/index-D9Wd20Hl.js","/assets/index-C4pHU_n3.js","/assets/epic-video-BX2A437e.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-DVd41HZN.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/playground-window-BnU6LeUy.js","/assets/set-playground-DaRl3X5k.js","/assets/button-CVorsvM4.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/dialog-C_JrUgnb.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber.index-swnTvl8f.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-B_ltT-yo.js","/assets/error-boundary-DdQE-4kH.js","/assets/index-CqIc3cxq.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-CRhJChs6.js","/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/schemas-Uj5SZtvt.js","/assets/coerce-CkHW0SMv.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-DBaOwcf2.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/index-CqIc3cxq.js","/assets/epic-video-BX2A437e.js","/assets/misc-CRhJChs6.js","/assets/loading-BiVU3Oa8.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-Hpjbz7E6.js","/assets/index-DVd41HZN.js","/assets/mdx-BlaeOyqK.js","/assets/online-D6QnZT5V.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/schemas-Uj5SZtvt.js","/assets/tooltip-f3C9W-4C.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/pe-UQCAhDPv.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/_layout":{"id":"routes/_app+/extra+/_layout","parentId":"routes/_app+/_layout","path":"extra","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-X8qM3FXy.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/extra+/$extra":{"id":"routes/_app+/extra+/$extra","parentId":"routes/_app+/extra+/_layout","path":":extra","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_extra-B4vZXPjV.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/playground-DIm_r4fy.js","/assets/index-CqIc3cxq.js","/assets/diff-Ba99U4EI.js","/assets/epic-video-BX2A437e.js","/assets/error-boundary-B_ltT-yo.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/workshop-config-BP-vDuRo.js","/assets/preview-D11Pscbe.js","/assets/launch-editor-D_PbWy0b.js","/assets/set-playground-DaRl3X5k.js","/assets/mdx-BlaeOyqK.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/misc-CRhJChs6.js","/assets/loading-BiVU3Oa8.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/discord-C9e3SYlE.js","/assets/user-CFfhNfdz.js","/assets/online-D6QnZT5V.js","/assets/index-D9Wd20Hl.js","/assets/index-C4pHU_n3.js","/assets/index-DzdDahau.js","/assets/playground-window-BnU6LeUy.js","/assets/accordion-DGNDc7Bw.js","/assets/use-event-source-BuD4_2SF.js","/assets/preload-helper-BXl3LOEh.js","/assets/button-CVorsvM4.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/onboarding-indicator-Bd1aYrgA.js","/assets/dialog-C_JrUgnb.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/index":{"id":"routes/_app+/extra+/index","parentId":"routes/_app+/extra+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-T3LlCTSm.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/epic-video-BX2A437e.js","/assets/error-boundary-B_ltT-yo.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/launch-editor-D_PbWy0b.js","/assets/mdx-BlaeOyqK.js","/assets/misc-CRhJChs6.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-Cxy0ZpqZ.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finished-BLRyuOTb.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/index-CqIc3cxq.js","/assets/epic-video-BX2A437e.js","/assets/misc-CRhJChs6.js","/assets/loading-BiVU3Oa8.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/revalidation-ws-Dcs0B3Rw.js","/assets/mdx-BlaeOyqK.js","/assets/online-D6QnZT5V.js","/assets/root-loader-BObzljW3.js","/assets/seo-t5J-DRxw.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-Hpjbz7E6.js","/assets/index-DVd41HZN.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/schemas-Uj5SZtvt.js","/assets/tooltip-f3C9W-4C.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/pe-UQCAhDPv.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/guide":{"id":"routes/_app+/guide","parentId":"routes/_app+/_layout","path":"guide","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/guide-B0V9gK-M.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-Dt_ngnka.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BrUCi_AK.js","/assets/epic-video-BX2A437e.js","/assets/error-boundary-B_ltT-yo.js","/assets/launch-editor-D_PbWy0b.js","/assets/mdx-BlaeOyqK.js","/assets/misc-CRhJChs6.js","/assets/progress-Hpjbz7E6.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-Cxy0ZpqZ.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/l":{"id":"routes/_app+/l","parentId":"routes/_app+/_layout","path":"l","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/l-BnufyNX8.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-Ej63Q5LC.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/button-CVorsvM4.js","/assets/loading-BiVU3Oa8.js","/assets/product-CNG57fZy.js","/assets/workshop-config-BP-vDuRo.js","/assets/schemas-Uj5SZtvt.js","/assets/misc-CRhJChs6.js","/assets/index-DVd41HZN.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js"],"css":[]},"routes/_app+/preferences":{"id":"routes/_app+/preferences","parentId":"routes/_app+/_layout","path":"preferences","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/preferences-CgqvqSwL.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CVorsvM4.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/root-loader-BObzljW3.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/support--bbGxhiZ.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/workspace-structure":{"id":"routes/_app+/workspace-structure","parentId":"routes/_app+/_layout","path":"workspace-structure","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/workspace-structure-0lIVnQRW.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CVorsvM4.js","/assets/index-CqIc3cxq.js","/assets/misc-CRhJChs6.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DO9ALrzd.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-BObzljW3.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache-DHTBTFeR.js","imports":["/assets/chunk-FNSCYPCZ-CXmv6S8d.js","/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/client-only-Dwnpimkx.js","/assets/button-CVorsvM4.js","/assets/misc-CRhJChs6.js","/assets/launch-editor-D_PbWy0b.js","/assets/pe-UQCAhDPv.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/root-loader-BObzljW3.js"],"css":[]},"routes/admin+/cache.$":{"id":"routes/admin+/cache.$","parentId":"routes/admin+/cache","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache._-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/db":{"id":"routes/admin+/db","parentId":"routes/admin+/_layout","path":"db","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/db-CsJwieeN.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/launch-editor-D_PbWy0b.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/pe-UQCAhDPv.js","/assets/root-loader-BObzljW3.js"],"css":[]},"routes/admin+/index":{"id":"routes/admin+/index","parentId":"routes/admin+/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-C4dXZZAD.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/progress-Hpjbz7E6.js","/assets/root-loader-BObzljW3.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/pe-UQCAhDPv.js"],"css":[]},"routes/admin+/notifications":{"id":"routes/admin+/notifications","parentId":"routes/admin+/_layout","path":"notifications","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/notifications-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/offline-videos":{"id":"routes/admin+/offline-videos","parentId":"routes/admin+/_layout","path":"offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-BYFoMLsP.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/admin+/version":{"id":"routes/admin+/version","parentId":"routes/admin+/_layout","path":"version","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version-Tq4ozvBN.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-BP-vDuRo.js","/assets/index-CqIc3cxq.js","/assets/root-loader-BObzljW3.js"],"css":[]},"routes/admin+/version[.json]":{"id":"routes/admin+/version[.json]","parentId":"routes/admin+/_layout","path":"version.json","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version_.json_-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff-DmmI9IU6.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-CRhJChs6.js","/assets/diff-Ba99U4EI.js","/assets/nav-chevrons-VqiZYYFr.js","/assets/index-CqIc3cxq.js","/assets/accordion-DGNDc7Bw.js","/assets/tooltip-f3C9W-4C.js","/assets/index-vDCSPjrM.js","/assets/index-D9Wd20Hl.js","/assets/index-C4pHU_n3.js","/assets/mdx-BlaeOyqK.js","/assets/index-DzdDahau.js","/assets/epic-video-BX2A437e.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DVd41HZN.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-D_PbWy0b.js","/assets/progress-bar-Cxy0ZpqZ.js","/assets/revalidation-ws-Dcs0B3Rw.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/diff.$shortcut":{"id":"routes/diff.$shortcut","parentId":"routes/diff","path":":shortcut","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff._shortcut-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/mark-onboarding-complete":{"id":"routes/mark-onboarding-complete","parentId":"root","path":"mark-onboarding-complete","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/mark-onboarding-complete-l0sNRNKZ.js","imports":[],"css":[]},"routes/mcp-ui+/epic-video":{"id":"routes/mcp-ui+/epic-video","parentId":"root","path":"mcp-ui/epic-video","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic-video-5HutgMR0.js","imports":["/assets/chunk-EPOLDU6W-C4NOdiis.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/epic-video-BX2A437e.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-DVd41HZN.js","/assets/misc-CRhJChs6.js","/assets/tooltip-f3C9W-4C.js","/assets/root-loader-BObzljW3.js","/assets/pe-UQCAhDPv.js","/assets/schemas-Uj5SZtvt.js","/assets/online-D6QnZT5V.js","/assets/loading-BiVU3Oa8.js","/assets/user-CFfhNfdz.js","/assets/workshop-config-BP-vDuRo.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/persist-playground":{"id":"routes/persist-playground","parentId":"root","path":"persist-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/persist-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/healthcheck":{"id":"routes/resources+/healthcheck","parentId":"root","path":"resources/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/healthcheck-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/lookout":{"id":"routes/resources+/lookout","parentId":"root","path":"resources/lookout","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/lookout-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-video-progress.$playbackId":{"id":"routes/resources+/offline-video-progress.$playbackId","parentId":"root","path":"resources/offline-video-progress/:playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-video-progress._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos":{"id":"routes/resources+/offline-videos","parentId":"root","path":"resources/offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos.$playbackId":{"id":"routes/resources+/offline-videos.$playbackId","parentId":"routes/resources+/offline-videos","path":":playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/saved-playgrounds":{"id":"routes/saved-playgrounds","parentId":"root","path":"saved-playgrounds","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/saved-playgrounds-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.js","imports":[],"css":[]},"routes/video-player/index":{"id":"routes/video-player/index","parentId":"root","path":"video-player","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-0c2a1e68.js","version":"0c2a1e68"};
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index.client-B5fbXzJV.js","assets/index-CqIc3cxq.js"])))=>i.map(i=>d[i]);
2
+ import{_ as Y}from"./preload-helper-BXl3LOEh.js";import{L as Q,f as A,w as $,a as H,b as U,k as K,O as z,M as X,J,S as Z,K as ee}from"./chunk-EPOLDU6W-C4NOdiis.js";import{j as a}from"./jsx-runtime-C5WNSv3b.js";import{g as te,R as O,r as f}from"./index-CqIc3cxq.js";import{I as B,d as ne,u as re,c as ie}from"./misc-CRhJChs6.js";import{C as se}from"./client-only-Dwnpimkx.js";import{G as oe}from"./error-boundary-B_ltT-yo.js";import{D as ae,a as ce,b as ue,c as le,d as fe}from"./dialog-C_JrUgnb.js";import{E as he}from"./progress-bar-Cxy0ZpqZ.js";import{T as de,t as p}from"./index-DzdDahau.js";import{k as pe}from"./tooltip-f3C9W-4C.js";import{o as me,s as ve,j as xe}from"./schemas-Uj5SZtvt.js";import{u as ge,C as ye}from"./index-DVd41HZN.js";import{P as we}from"./presence-CEaLlpZz.js";import{g as ke}from"./seo-t5J-DRxw.js";import"./pe-UQCAhDPv.js";import"./index-C4pHU_n3.js";import"./index-vDCSPjrM.js";import"./root-loader-BObzljW3.js";import"./online-D6QnZT5V.js";import"./coerce-CkHW0SMv.js";var S,G;function je(){if(G)return S;G=1;var s={linear:function(e,n,t,i){var r=t-n;return r*e/i+n},easeInQuad:function(e,n,t,i){var r=t-n;return r*(e/=i)*e+n},easeOutQuad:function(e,n,t,i){var r=t-n;return-r*(e/=i)*(e-2)+n},easeInOutQuad:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e+n:-r/2*(--e*(e-2)-1)+n},easeInCubic:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e+n},easeOutCubic:function(e,n,t,i){var r=t-n;return r*((e=e/i-1)*e*e+1)+n},easeInOutCubic:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e+n:r/2*((e-=2)*e*e+2)+n},easeInQuart:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e*e+n},easeOutQuart:function(e,n,t,i){var r=t-n;return-r*((e=e/i-1)*e*e*e-1)+n},easeInOutQuart:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e*e+n:-r/2*((e-=2)*e*e*e-2)+n},easeInQuint:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e*e*e+n},easeOutQuint:function(e,n,t,i){var r=t-n;return r*((e=e/i-1)*e*e*e*e+1)+n},easeInOutQuint:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e*e*e+n:r/2*((e-=2)*e*e*e*e+2)+n},easeInSine:function(e,n,t,i){var r=t-n;return-r*Math.cos(e/i*(Math.PI/2))+r+n},easeOutSine:function(e,n,t,i){var r=t-n;return r*Math.sin(e/i*(Math.PI/2))+n},easeInOutSine:function(e,n,t,i){var r=t-n;return-r/2*(Math.cos(Math.PI*e/i)-1)+n},easeInExpo:function(e,n,t,i){var r=t-n;return e==0?n:r*Math.pow(2,10*(e/i-1))+n},easeOutExpo:function(e,n,t,i){var r=t-n;return e==i?n+r:r*(-Math.pow(2,-10*e/i)+1)+n},easeInOutExpo:function(e,n,t,i){var r=t-n;return e===0?n:e===i?n+r:(e/=i/2)<1?r/2*Math.pow(2,10*(e-1))+n:r/2*(-Math.pow(2,-10*--e)+2)+n},easeInCirc:function(e,n,t,i){var r=t-n;return-r*(Math.sqrt(1-(e/=i)*e)-1)+n},easeOutCirc:function(e,n,t,i){var r=t-n;return r*Math.sqrt(1-(e=e/i-1)*e)+n},easeInOutCirc:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?-r/2*(Math.sqrt(1-e*e)-1)+n:r/2*(Math.sqrt(1-(e-=2)*e)+1)+n},easeInElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i)===1?n+r:(c||(c=i*.3),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),-(o*Math.pow(2,10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c))+n)},easeOutElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i)===1?n+r:(c||(c=i*.3),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),o*Math.pow(2,-10*e)*Math.sin((e*i-u)*(2*Math.PI)/c)+r+n)},easeInOutElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i/2)===2?n+r:(c||(c=i*(.3*1.5)),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),e<1?-.5*(o*Math.pow(2,10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c))+n:o*Math.pow(2,-10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c)*.5+r+n)},easeInBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),o*(e/=i)*e*((r+1)*e-r)+n},easeOutBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),o*((e=e/i-1)*e*((r+1)*e+r)+1)+n},easeInOutBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),(e/=i/2)<1?o/2*(e*e*(((r*=1.525)+1)*e-r))+n:o/2*((e-=2)*e*(((r*=1.525)+1)*e+r)+2)+n},easeInBounce:function(e,n,t,i){var r=t-n,o;return o=s.easeOutBounce(i-e,0,r,i),r-o+n},easeOutBounce:function(e,n,t,i){var r=t-n;return(e/=i)<1/2.75?r*(7.5625*e*e)+n:e<2/2.75?r*(7.5625*(e-=1.5/2.75)*e+.75)+n:e<2.5/2.75?r*(7.5625*(e-=2.25/2.75)*e+.9375)+n:r*(7.5625*(e-=2.625/2.75)*e+.984375)+n},easeInOutBounce:function(e,n,t,i){var r=t-n,o;return e<i/2?(o=s.easeInBounce(e*2,0,r,i),o*.5+n):(o=s.easeOutBounce(e*2-i,0,r,i),o*.5+r*.5+n)}};return S=s,S}var Pe=je();const Oe=te(Pe);function Ie(s,e){for(var n=0;n<e.length;n++){var t=e[n];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(s,t.key,t)}}function be(s,e,n){return e&&Ie(s.prototype,e),s}function I(){return I=Object.assign||function(s){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(s[t]=n[t])}return s},I.apply(this,arguments)}function Se(s,e){s.prototype=Object.create(e.prototype),s.prototype.constructor=s,N(s,e)}function N(s,e){return N=Object.setPrototypeOf||function(t,i){return t.__proto__=i,t},N(s,e)}function Ce(s){return s*Math.PI/180}function h(s,e){return s+Math.random()*(e-s)}function Ne(s,e){return Math.floor(s+Math.random()*(e-s+1))}var P;(function(s){s[s.Circle=0]="Circle",s[s.Square=1]="Square",s[s.Strip=2]="Strip"})(P||(P={}));var v;(function(s){s[s.Positive=1]="Positive",s[s.Negative=-1]="Negative"})(v||(v={}));var Ee=(function(){function s(n,t,i,r){this.getOptions=t;var o=this.getOptions(),c=o.colors,u=o.initialVelocityX,l=o.initialVelocityY;this.context=n,this.x=i,this.y=r,this.w=h(5,20),this.h=h(5,20),this.radius=h(5,10),this.vx=h(-u,u),this.vy=h(-l,0),this.shape=Ne(0,2),this.angle=Ce(h(0,360)),this.angularSpin=h(-.2,.2),this.color=c[Math.floor(Math.random()*c.length)],this.rotateY=h(0,1),this.rotationDirection=h(0,1)?v.Positive:v.Negative}var e=s.prototype;return e.update=function(){var t=this.getOptions(),i=t.gravity,r=t.wind,o=t.friction,c=t.opacity,u=t.drawShape;this.x+=this.vx,this.y+=this.vy,this.vy+=i,this.vx+=r,this.vx*=o,this.vy*=o,this.rotateY>=1&&this.rotationDirection===v.Positive?this.rotationDirection=v.Negative:this.rotateY<=-1&&this.rotationDirection===v.Negative&&(this.rotationDirection=v.Positive);var l=.1*this.rotationDirection;if(this.rotateY+=l,this.angle+=this.angularSpin,this.context.save(),this.context.translate(this.x,this.y),this.context.rotate(this.angle),this.context.scale(1,this.rotateY),this.context.rotate(this.angle),this.context.beginPath(),this.context.fillStyle=this.color,this.context.strokeStyle=this.color,this.context.globalAlpha=c,this.context.lineCap="round",this.context.lineWidth=2,u&&typeof u=="function")u.call(this,this.context);else switch(this.shape){case P.Circle:{this.context.beginPath(),this.context.arc(0,0,this.radius,0,2*Math.PI),this.context.fill();break}case P.Square:{this.context.fillRect(-this.w/2,-this.h/2,this.w,this.h);break}case P.Strip:{this.context.fillRect(-this.w/6,-this.h/2,this.w/3,this.h);break}default:throw new Error("Unknown type in Particle.ts")}this.context.closePath(),this.context.restore()},s})(),Me=function(e,n){var t=this;this.x=0,this.y=0,this.w=0,this.h=0,this.lastNumberOfPieces=0,this.tweenInitTime=Date.now(),this.particles=[],this.particlesGenerated=0,this.removeParticleAt=function(r){t.particles.splice(r,1)},this.getParticle=function(){var r=h(t.x,t.w+t.x),o=h(t.y,t.h+t.y);return new Ee(t.context,t.getOptions,r,o)},this.animate=function(){var r=t.canvas,o=t.context,c=t.particlesGenerated,u=t.lastNumberOfPieces,l=t.getOptions(),m=l.run,w=l.recycle,d=l.numberOfPieces,b=l.debug,_=l.tweenFunction,g=l.tweenDuration;if(!m)return!1;var k=t.particles.length,x=w?k:c,y=Date.now();if(x<d){u!==d&&(t.tweenInitTime=y,t.lastNumberOfPieces=d);for(var D=t.tweenInitTime,W=y-D>g?g:Math.max(0,y-D),V=_(W,x,d,g),R=Math.round(V-x),T=0;T<R;T+=1)t.particles.push(t.getParticle());t.particlesGenerated+=R}return b&&(o.font="12px sans-serif",o.fillStyle="#333",o.textAlign="right",o.fillText("Particles: "+k,r.width-10,r.height-20)),t.particles.forEach(function(j,F){j.update(),(j.y>r.height||j.y<-100||j.x>r.width+100||j.x<-100)&&(w&&x<=d?t.particles[F]=t.getParticle():t.removeParticleAt(F))}),k>0||x<d},this.canvas=e;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.getOptions=n},E={width:typeof window<"u"?window.innerWidth:300,height:typeof window<"u"?window.innerHeight:200,numberOfPieces:200,friction:.99,wind:0,gravity:.1,initialVelocityX:4,initialVelocityY:10,colors:["#f44336","#e91e63","#9c27b0","#673ab7","#3f51b5","#2196f3","#03a9f4","#00bcd4","#009688","#4CAF50","#8BC34A","#CDDC39","#FFEB3B","#FFC107","#FF9800","#FF5722","#795548"],opacity:1,debug:!1,tweenFunction:Oe.easeInOutQuad,tweenDuration:5e3,recycle:!0,run:!0},_e=(function(){function s(e,n){var t=this;this.setOptionsWithDefaults=function(r){var o={confettiSource:{x:0,y:0,w:t.canvas.width,h:0}};t._options=I({},o,E,r),Object.assign(t,r.confettiSource)},this.update=function(){var r=t.options,o=r.run,c=r.onConfettiComplete,u=t.canvas,l=t.context;o&&(l.fillStyle="white",l.clearRect(0,0,u.width,u.height)),t.generator.animate()?t.rafId=requestAnimationFrame(t.update):(c&&typeof c=="function"&&t.generator.particlesGenerated>0&&c.call(t,t),t._options.run=!1)},this.reset=function(){t.generator&&t.generator.particlesGenerated>0&&(t.generator.particlesGenerated=0,t.generator.particles=[],t.generator.lastNumberOfPieces=0)},this.stop=function(){t.options={run:!1},t.rafId&&(cancelAnimationFrame(t.rafId),t.rafId=void 0)},this.canvas=e;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.generator=new Me(this.canvas,function(){return t.options}),this.options=n,this.update()}return be(s,[{key:"options",get:function(){return this._options},set:function(n){var t=this._options&&this._options.run,i=this._options&&this._options.recycle;this.setOptionsWithDefaults(n),this.generator&&(Object.assign(this.generator,this.options.confettiSource),typeof n.recycle=="boolean"&&n.recycle&&i===!1&&(this.generator.lastNumberOfPieces=this.generator.particles.length)),typeof n.run=="boolean"&&n.run&&t===!1&&this.update()}}]),s})(),L=O.createRef();function C(s){var e={},n={},t={},i=[].concat(Object.keys(E),["confettiSource","drawShape","onConfettiComplete"]),r=["canvasRef"];return Object.keys(s).forEach(function(o){var c=s[o];i.includes(o)?e[o]=c:r.includes(o)?r[o]=c:t[o]=c}),[e,t,n]}var M=(function(s){Se(e,s);function e(t){var i;return i=s.call(this,t)||this,i.canvas=O.createRef(),i.canvas=t.canvasRef||L,i}var n=e.prototype;return n.componentDidMount=function(){if(this.canvas.current){var i=C(this.props)[0];this.confetti=new _e(this.canvas.current,i)}},n.componentDidUpdate=function(){var i=C(this.props)[0];this.confetti&&(this.confetti.options=i)},n.componentWillUnmount=function(){this.confetti&&this.confetti.stop(),this.confetti=void 0},n.render=function(){var i=C(this.props),r=i[0],o=i[1],c=I({zIndex:2,position:"absolute",pointerEvents:"none",top:0,left:0,bottom:0,right:0},o.style);return O.createElement("canvas",Object.assign({width:r.width,height:r.height,ref:this.canvas},o,{style:c}))},e})(f.Component);M.defaultProps=I({},E);M.displayName="ConfettiReact";var De=O.forwardRef(function(s,e){return O.createElement(M,Object.assign({canvasRef:L},s))});function Re({id:s}){return s?a.jsx(se,{children:()=>a.jsx(De,{run:!!s,recycle:!1,numberOfPieces:800,width:window.innerWidth,height:window.innerHeight},s)}):null}function Te(){return a.jsx("div",{className:"border-destructive bg-destructive fixed top-0 right-0 left-0 z-50 border-b",children:a.jsxs("div",{className:"relative w-full p-4",children:[a.jsx(Q,{to:"/workspace-structure",className:"absolute inset-0 z-10 block h-full w-full","aria-label":"Learn more about workspace structure"}),a.jsxs("div",{className:"relative z-0 container flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(B,{name:"Error",className:"text-destructive-foreground h-5 w-5"}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-destructive-foreground text-sm font-semibold",children:"Warning: Changes detected in exercises directory"}),a.jsx("p",{className:"text-destructive-foreground/80 text-xs",children:"You should typically work in the playground directory, not the exercises directory."})]})]}),a.jsxs("div",{className:"text-destructive-foreground flex items-center gap-2 text-xs",children:[a.jsx("span",{children:"Learn more"}),a.jsx(B,{name:"ArrowRight",className:"h-3 w-3"})]})]})]})})}const Fe=[{title:"Navigation",shortcuts:[{keys:["g","h"],description:"Go to home"},{keys:["g","1-9"],description:"Go to exercise (e.g., g+1 → /exercise/01)"},{keys:["g","1-9",".","1-9"],description:"Go to exercise step (e.g., g+1+.+2 → /exercise/01/02/problem)"},{keys:["g","1-9",".","f"],description:"Go to exercise finished page (e.g., g+1+.+f → /exercise/01/finished)"},{keys:["g","p"],description:"Go to previous step/page"},{keys:["g","n"],description:"Go to next step/page"},{keys:["g","a"],description:"Go to account page"},{keys:["g","d"],description:"Go to admin page"},{keys:["g","l"],description:"Go to last exercise solution"},{keys:["Escape"],description:"Close sidebar navigation (when open)"}]},{title:"Playback Controls",shortcuts:[{keys:["Space","k"],description:"Play/pause video"},{keys:["j"],description:"Seek backward 10 seconds"},{keys:["l"],description:"Seek forward 10 seconds"},{keys:["←"],description:"Seek backward 10 seconds"},{keys:["→"],description:"Seek forward 10 seconds"}]},{title:"Frame-by-Frame Navigation",shortcuts:[{keys:[","],description:"Go to previous frame (when paused)"},{keys:["."],description:"Go to next frame (when paused)"}]},{title:"Volume Control",shortcuts:[{keys:["↑"],description:"Increase volume by 10%"},{keys:["↓"],description:"Decrease volume by 10%"}]},{title:"Playback Speed",shortcuts:[{keys:["Shift",">"],description:"Increase playback speed"},{keys:["Shift","<"],description:"Decrease playback speed"}]},{title:"Fullscreen and Picture-in-Picture",shortcuts:[{keys:["f"],description:"Toggle fullscreen mode"},{keys:["i"],description:"Toggle picture-in-picture mode"}]},{title:"Captions",shortcuts:[{keys:["c"],description:"Toggle captions/subtitles"}]},{title:"Quick Seek",shortcuts:[{keys:["0-9"],description:"Seek to percentage of video (0 = 0%, 1 = 10%, ..., 9 = 90%)"}]}];function Be({open:s,onOpenChange:e}){return a.jsx(ae,{open:s,onOpenChange:e,children:a.jsxs(ce,{className:"max-h-[80vh] max-w-2xl overflow-y-auto",children:[a.jsxs(ue,{children:[a.jsx(le,{children:"Keyboard Shortcuts"}),a.jsxs(fe,{children:["Use these keyboard shortcuts to navigate and control the video player. Press"," ",a.jsx("kbd",{className:"border-border bg-muted rounded border px-1.5 py-0.5 font-mono text-xs",children:"?"})," ","or select the question mark icon in the navigation to open this list."]})]}),a.jsx("div",{className:"space-y-6",children:Fe.map(n=>a.jsxs("div",{children:[a.jsx("h3",{className:"text-foreground mb-3 text-sm font-semibold",children:n.title}),a.jsx("div",{className:"space-y-2",children:n.shortcuts.map((t,i)=>a.jsxs("div",{className:"flex items-center justify-between gap-4",children:[a.jsx("span",{className:"text-muted-foreground flex-1 text-sm",children:t.description}),a.jsx("div",{className:"flex shrink-0 items-center gap-1",children:t.keys.map((r,o)=>a.jsxs(f.Fragment,{children:[a.jsx("kbd",{className:"border-border bg-muted rounded border px-2 py-1 font-mono text-xs",children:r}),o<t.keys.length-1&&a.jsx("span",{className:"text-muted-foreground",children:"+"})]},o))})]},i))})]},n.title))}),a.jsx("div",{className:"border-border mt-4 border-t pt-4",children:a.jsxs("p",{className:"text-muted-foreground text-xs",children:[a.jsx("strong",{children:"Note:"})," Shortcuts are ignored when focus is on interactive elements (inputs, buttons, etc.). Press"," ",a.jsx("kbd",{className:"border-border bg-muted rounded border px-1.5 py-0.5 font-mono text-xs",children:"?"})," ","to toggle this dialog."]})})]})})}function Ge({toast:s}){return a.jsxs(a.Fragment,{children:[a.jsx(de,{closeButton:!0,position:"top-center"}),s?a.jsx(Ae,{toast:s}):null]})}function Ae({toast:s}){const{id:e,type:n,title:t,description:i}=s;return f.useEffect(()=>{setTimeout(()=>{p[n](t,{id:e,description:i})},0)},[i,e,t,n]),null}function Ue({repoUpdates:s}){const{updatesAvailable:e}=s,n="diffLink"in s?s.diffLink:null,t="remoteCommit"in s?s.remoteCommit:void 0,i=A(),r=f.useRef(i);f.useEffect(()=>{r.current=i},[i]);const o=f.useRef(null),c=f.useRef(null),u=f.useRef(!1);return f.useEffect(()=>{if(e&&t){const l=p.info("New workshop updates available",{duration:1/0,description:a.jsxs("div",{children:["Get the latest updates by clicking the update button. ",n?a.jsx("a",{href:n,target:"_blank",rel:"noreferrer",className:"text-xs underline",children:"View changes"}):null]}),onDismiss:()=>{},action:{label:"Update",onClick:async()=>{if(c.current&&(p.dismiss(c.current),c.current=null),o.current||(o.current=p.loading("Update in progress...")),!u.current){u.current=!0;try{const{EPICSHOP_PARENT_PORT:m,EPICSHOP_PARENT_TOKEN:w}=window.ENV||{};if(!m||!w)throw new Error("Update API not available");const d=await fetch(`http://localhost:${m}/__epicshop-restart`,{method:"POST",headers:{"x-epicshop-token":w}});if(!d.ok)throw new Error(`Request to update workshop failed: ${d.statusText}`);const b=await d.json().catch(()=>({})),g=me({status:xe(["ok","error"]),message:ve().optional()}).safeParse(b);if(!g.success)throw console.error("Invalid response from update API",b),new Error("Invalid response from update API");const{status:k,message:x}=g.data;if(k==="ok"){let y=!1;p.success("Workshop updated",{description:"Reloading in 2 seconds... You can reload now if you prefer.",duration:2e3,action:{label:"Reload now",onClick:()=>{y=!0,window.location.reload()}},onAutoClose:()=>{y||window.location.reload()}})}else p.error("Failed to update workshop",{description:x||"Unknown error"})}catch(m){p.error("Failed to update workshop",{description:m instanceof Error?m.message:String(m)})}finally{u.current=!1,o.current&&(p.dismiss(o.current),o.current=null)}}}},cancel:{label:"Dismiss",onClick:()=>{c.current&&(p.dismiss(c.current),c.current=null),r.current.submit({intent:"mute",id:`update-repo-${t}`},{method:"post",action:"/admin/notifications"})}}});c.current=l}},[e,n,t]),null}function Le({unmutedNotifications:s}){const e=A(),n=f.useRef(e),t=f.useRef(new Set);return f.useEffect(()=>{for(const i of s)t.current.has(i.id)||(t.current.add(i.id),p.info(i.title,{id:i.id,description:a.jsxs("div",{children:[a.jsx("p",{children:i.message}),i.link&&a.jsx("a",{href:i.link,target:"_blank",className:"text-xs underline",children:"Learn more"})]}),duration:1/0,action:{label:"Dismiss",onClick:()=>{n.current.submit({intent:"mute",id:i.id},{method:"post",action:"/admin/notifications"})}}}))},[s]),null}const qe="/assets/app-BUxWY8xC.css",We="/assets/tailwind-D_K12wB7.css",Ve="unknown@example.com";function Ye({user:s,userId:e}){const n=s?.id??e?.id??void 0,t=s?.email&&s.email!==Ve?s.email:void 0;if(!n&&!t)return null;const i={};return n&&(i.id=n),t&&(i.email=t),i}const pt=()=>[{rel:"stylesheet",href:"/neogrotesk-font.css"},{rel:"stylesheet",href:"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap"},{rel:"stylesheet",href:We},{rel:"stylesheet",href:qe},{rel:"icon",href:"/favicon.ico",sizes:"48x48"},{rel:"icon",type:"image/svg+xml",href:"/favicon.svg"}],mt=({loaderData:s})=>s?ke({instructor:s.instructor,title:s.workshopTitle,description:s.workshopSubtitle,requestInfo:s.requestInfo}):[];function q({children:s,env:e={},className:n,style:t}){return a.jsxs("html",{lang:"en",className:n,style:t,children:[a.jsxs("head",{children:[a.jsx(ye,{}),a.jsx(X,{}),a.jsx("meta",{charSet:"utf-8"}),a.jsx("meta",{name:"viewport",content:"width=device-width,initial-scale=1"}),a.jsx(J,{}),a.jsx("script",{dangerouslySetInnerHTML:{__html:`window.ENV = ${JSON.stringify(e)}`}})]}),a.jsxs("body",{className:"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe",children:[s,a.jsx(Z,{}),a.jsx(ee,{})]})]})}function Qe(){const s=U(),e=K(),n=ne.useSpinDelay(e.state!=="idle",{delay:400,minDuration:200}),t=re(),[i,r]=f.useState(!1);f.useEffect(()=>{const c=()=>{r(u=>!u)};return window.addEventListener("toggle-keyboard-shortcuts",c),()=>{window.removeEventListener("toggle-keyboard-shortcuts",c)}},[]),f.useEffect(()=>{if(!ENV.EPICSHOP_IS_PUBLISHED)return;const c=Ye({user:s.user,userId:s.userId});Y(()=>import("./index.client-B5fbXzJV.js"),__vite__mapDeps([0,1])).then(u=>{c?u.setUser(c):u.setUser(null)}).catch(()=>{})},[s.user,s.userId]);const o=ge();return a.jsxs(q,{style:s.preferences?.fontSize?{fontSize:`${s.preferences?.fontSize}px`}:{},className:ie("h-screen-safe antialiased",o,{"cursor-progress":n},t?"alt-down":null),env:s.ENV,children:[s.exerciseChanges&&!s.preferences?.exerciseWarning?.dismissed&&a.jsx(Te,{}),a.jsx(z,{}),a.jsx(Re,{id:s.confettiId}),a.jsx(Ge,{toast:s.toast}),a.jsx(Ue,{repoUpdates:s.repoUpdates}),a.jsx(he,{}),a.jsx(Le,{unmutedNotifications:s.unmutedNotifications}),a.jsx(Be,{open:i,onOpenChange:r})]})}const vt=$(function(){const{user:e}=U();return a.jsx(we,{user:e,children:a.jsx(pe,{children:a.jsx(Qe,{})})})}),xt=H(function(){return a.jsx(q,{className:"h-screen-safe",children:a.jsx(oe,{})})});export{xt as ErrorBoundary,vt as default,pt as links,mt as meta};
3
+ //# sourceMappingURL=root-4ETVlwNv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":";khCAGA,IAAIA,EAAiB,CACnB,OAAQ,SAASC,EAAGC,EAAGC,EAAIC,EAAG,CAC5B,IAAIC,EAAIF,EAAKD,EACb,OAAOG,EAAIJ,EAAIG,EAAIF,CACvB,EACE,WAAY,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CAChC,IAAIC,EAAIF,EAAKD,EACb,OAAOG,GAAKJ,GAAKG,GAAKH,EAAIC,CAC9B,EACE,YAAa,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACjC,IAAIC,EAAIF,EAAKD,EACb,MAAO,CAACG,GAAKJ,GAAKG,IAAMH,EAAI,GAAKC,CACrC,EACE,cAAe,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACnC,IAAIC,EAAIF,EAAKD,EACb,OAAKD,GAAKG,EAAI,GAAK,EACVC,EAAI,EAAIJ,EAAIA,EAAIC,EAEhB,CAACG,EAAI,GAAM,EAAEJ,GAAMA,EAAI,GAAK,GAAKC,CAE9C,EACE,YAAa,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACjC,IAAIC,EAAIF,EAAKD,EACb,OAAOG,GAAKJ,GAAKG,GAAKH,EAAIA,EAAIC,CAClC,EACE,aAAc,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CAClC,IAAIC,EAAIF,EAAKD,EACb,OAAOG,IAAMJ,EAAIA,EAAIG,EAAI,GAAKH,EAAIA,EAAI,GAAKC,CAC/C,EACE,eAAgB,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACpC,IAAIC,EAAIF,EAAKD,EACb,OAAKD,GAAKG,EAAI,GAAK,EACVC,EAAI,EAAIJ,EAAIA,EAAIA,EAAIC,EAEpBG,EAAI,IAAMJ,GAAK,GAAKA,EAAIA,EAAI,GAAKC,CAE9C,EACE,YAAa,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACjC,IAAIC,EAAIF,EAAKD,EACb,OAAOG,GAAKJ,GAAKG,GAAKH,EAAIA,EAAIA,EAAIC,CACtC,EACE,aAAc,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CAClC,IAAIC,EAAIF,EAAKD,EACb,MAAO,CAACG,IAAMJ,EAAIA,EAAIG,EAAI,GAAKH,EAAIA,EAAIA,EAAI,GAAKC,CACpD,EACE,eAAgB,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACpC,IAAIC,EAAIF,EAAKD,EACb,OAAKD,GAAKG,EAAI,GAAK,EACVC,EAAI,EAAIJ,EAAIA,EAAIA,EAAIA,EAAIC,EAExB,CAACG,EAAI,IAAMJ,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAAKC,CAEnD,EACE,YAAa,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACjC,IAAIC,EAAIF,EAAKD,EACb,OAAOG,GAAKJ,GAAKG,GAAKH,EAAIA,EAAIA,EAAIA,EAAIC,CAC1C,EACE,aAAc,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CAClC,IAAIC,EAAIF,EAAKD,EACb,OAAOG,IAAMJ,EAAIA,EAAIG,EAAI,GAAKH,EAAIA,EAAIA,EAAIA,EAAI,GAAKC,CACvD,EACE,eAAgB,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACpC,IAAIC,EAAIF,EAAKD,EACb,OAAKD,GAAKG,EAAI,GAAK,EACVC,EAAI,EAAIJ,EAAIA,EAAIA,EAAIA,EAAIA,EAAIC,EAE5BG,EAAI,IAAMJ,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GAAKC,CAEtD,EACE,WAAY,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CAChC,IAAIC,EAAIF,EAAKD,EACb,MAAO,CAACG,EAAI,KAAK,IAAIJ,EAAIG,GAAK,KAAK,GAAK,EAAE,EAAIC,EAAIH,CACtD,EACE,YAAa,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACjC,IAAIC,EAAIF,EAAKD,EACb,OAAOG,EAAI,KAAK,IAAIJ,EAAIG,GAAK,KAAK,GAAK,EAAE,EAAIF,CACjD,EACE,cAAe,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACnC,IAAIC,EAAIF,EAAKD,EACb,MAAO,CAACG,EAAI,GAAK,KAAK,IAAI,KAAK,GAAKJ,EAAIG,CAAC,EAAI,GAAKF,CACtD,EACE,WAAY,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CAChC,IAAIC,EAAIF,EAAKD,EACb,OAAQD,GAAG,EAAKC,EAAIG,EAAI,KAAK,IAAI,EAAG,IAAMJ,EAAEG,EAAI,EAAE,EAAIF,CAC1D,EACE,YAAa,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACjC,IAAIC,EAAIF,EAAKD,EACb,OAAQD,GAAGG,EAAKF,EAAEG,EAAIA,GAAK,CAAC,KAAK,IAAI,EAAG,IAAMJ,EAAEG,CAAC,EAAI,GAAKF,CAC9D,EACE,cAAe,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACnC,IAAIC,EAAIF,EAAKD,EACb,OAAID,IAAM,EACDC,EAELD,IAAMG,EACDF,EAAIG,GAERJ,GAAKG,EAAI,GAAK,EACVC,EAAI,EAAI,KAAK,IAAI,EAAG,IAAMJ,EAAI,EAAE,EAAIC,EAEpCG,EAAI,GAAK,CAAC,KAAK,IAAI,EAAG,IAAM,EAAEJ,CAAC,EAAI,GAAKC,CAErD,EACE,WAAY,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CAChC,IAAIC,EAAIF,EAAKD,EACb,MAAO,CAACG,GAAK,KAAK,KAAK,GAAKJ,GAAKG,GAAKH,CAAC,EAAI,GAAKC,CACpD,EACE,YAAa,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACjC,IAAIC,EAAIF,EAAKD,EACb,OAAOG,EAAI,KAAK,KAAK,GAAKJ,EAAIA,EAAIG,EAAI,GAAKH,CAAC,EAAIC,CACpD,EACE,cAAe,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACnC,IAAIC,EAAIF,EAAKD,EACb,OAAKD,GAAKG,EAAI,GAAK,EACV,CAACC,EAAI,GAAK,KAAK,KAAK,EAAIJ,EAAIA,CAAC,EAAI,GAAKC,EAEtCG,EAAI,GAAK,KAAK,KAAK,GAAKJ,GAAK,GAAKA,CAAC,EAAI,GAAKC,CAEzD,EACE,cAAe,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACnC,IAAIC,EAAIF,EAAKD,EACTI,EAAGC,EAAGC,EAIV,OAHAA,EAAI,QACJD,EAAI,EACJD,EAAID,EACAJ,IAAM,EACDC,GACGD,GAAKG,KAAO,EACfF,EAAIG,GAERE,IACHA,EAAIH,EAAI,IAENE,EAAI,KAAK,IAAID,CAAC,GAChBC,EAAID,EACJG,EAAID,EAAI,GAERC,EAAID,GAAK,EAAI,KAAK,IAAM,KAAK,KAAKF,EAAIC,CAAC,EAElC,EAAEA,EAAI,KAAK,IAAI,EAAG,IAAML,GAAK,EAAE,EAAI,KAAK,KAAKA,EAAIG,EAAII,IAAM,EAAI,KAAK,IAAMD,CAAC,GAAKL,EAC3F,EACE,eAAgB,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACpC,IAAIC,EAAIF,EAAKD,EACTI,EAAGC,EAAGC,EAIV,OAHAA,EAAI,QACJD,EAAI,EACJD,EAAID,EACAJ,IAAM,EACDC,GACGD,GAAKG,KAAO,EACfF,EAAIG,GAERE,IACHA,EAAIH,EAAI,IAENE,EAAI,KAAK,IAAID,CAAC,GAChBC,EAAID,EACJG,EAAID,EAAI,GAERC,EAAID,GAAK,EAAI,KAAK,IAAM,KAAK,KAAKF,EAAIC,CAAC,EAElCA,EAAI,KAAK,IAAI,EAAG,IAAML,CAAC,EAAI,KAAK,KAAKA,EAAIG,EAAII,IAAM,EAAI,KAAK,IAAMD,CAAC,EAAIF,EAAIH,EACtF,EACE,iBAAkB,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACtC,IAAIC,EAAIF,EAAKD,EACTI,EAAGC,EAAGC,EAIV,OAHAA,EAAI,QACJD,EAAI,EACJD,EAAID,EACAJ,IAAM,EACDC,GACGD,GAAKG,EAAI,KAAO,EACnBF,EAAIG,GAERE,IACHA,EAAIH,GAAK,GAAM,MAEbE,EAAI,KAAK,IAAID,CAAC,GAChBC,EAAID,EACJG,EAAID,EAAI,GAERC,EAAID,GAAK,EAAI,KAAK,IAAM,KAAK,KAAKF,EAAIC,CAAC,EAErCL,EAAI,EACC,KAAQK,EAAI,KAAK,IAAI,EAAG,IAAML,GAAK,EAAE,EAAI,KAAK,KAAKA,EAAIG,EAAII,IAAM,EAAI,KAAK,IAAMD,CAAC,GAAKL,EAEtFI,EAAI,KAAK,IAAI,EAAG,KAAOL,GAAK,EAAE,EAAI,KAAK,KAAKA,EAAIG,EAAII,IAAM,EAAI,KAAK,IAAMD,CAAC,EAAI,GAAMF,EAAIH,EAErG,EACE,WAAY,SAASD,EAAGC,EAAGC,EAAIC,EAAGI,EAAG,CACnC,IAAIH,EAAIF,EAAKD,EACb,OAAIM,IAAM,SACRA,EAAI,SAECH,GAAKJ,GAAKG,GAAKH,IAAMO,EAAI,GAAKP,EAAIO,GAAKN,CAClD,EACE,YAAa,SAASD,EAAGC,EAAGC,EAAIC,EAAGI,EAAG,CACpC,IAAIH,EAAIF,EAAKD,EACb,OAAIM,IAAM,SACRA,EAAI,SAECH,IAAMJ,EAAIA,EAAIG,EAAI,GAAKH,IAAMO,EAAI,GAAKP,EAAIO,GAAK,GAAKN,CAC/D,EACE,cAAe,SAASD,EAAGC,EAAGC,EAAIC,EAAGI,EAAG,CACtC,IAAIH,EAAIF,EAAKD,EAIb,OAHIM,IAAM,SACRA,EAAI,UAEDP,GAAKG,EAAI,GAAK,EACVC,EAAI,GAAKJ,EAAIA,KAAOO,GAAK,OAAS,GAAKP,EAAIO,IAAMN,EAEjDG,EAAI,IAAMJ,GAAK,GAAKA,KAAOO,GAAK,OAAS,GAAKP,EAAIO,GAAK,GAAKN,CAEzE,EACE,aAAc,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CAClC,IAAIC,EAAIF,EAAKD,EACTO,EACJ,OAAAA,EAAIT,EAAe,cAAcI,EAAIH,EAAG,EAAGI,EAAGD,CAAC,EACxCC,EAAII,EAAIP,CACnB,EACE,cAAe,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACnC,IAAIC,EAAIF,EAAKD,EACb,OAAKD,GAAKG,GAAK,EAAI,KACVC,GAAK,OAASJ,EAAIA,GAAKC,EACrBD,EAAI,EAAI,KACVI,GAAK,QAAUJ,GAAK,IAAM,MAAQA,EAAI,KAAQC,EAC5CD,EAAI,IAAM,KACZI,GAAK,QAAUJ,GAAK,KAAO,MAAQA,EAAI,OAAUC,EAEjDG,GAAK,QAAUJ,GAAK,MAAQ,MAAQA,EAAI,SAAYC,CAEjE,EACE,gBAAiB,SAASD,EAAGC,EAAGC,EAAIC,EAAG,CACrC,IAAIC,EAAIF,EAAKD,EACTO,EACJ,OAAIR,EAAIG,EAAI,GACVK,EAAIT,EAAe,aAAaC,EAAI,EAAG,EAAGI,EAAGD,CAAC,EACvCK,EAAI,GAAMP,IAEjBO,EAAIT,EAAe,cAAcC,EAAI,EAAIG,EAAG,EAAGC,EAAGD,CAAC,EAC5CK,EAAI,GAAMJ,EAAI,GAAMH,EAEjC,GAGA,OAAAQ,EAAiBV,gCCrPjB,SAASW,GAAkBC,EAAQC,EAAO,CACxC,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CACrC,IAAIC,EAAaF,EAAMC,CAAC,EACxBC,EAAW,WAAaA,EAAW,YAAc,GACjDA,EAAW,aAAe,GACtB,UAAWA,IAAYA,EAAW,SAAW,IACjD,OAAO,eAAeH,EAAQG,EAAW,IAAKA,CAAU,CAC1D,CACF,CAEA,SAASC,GAAaC,EAAaC,EAAYC,EAAa,CAC1D,OAAID,GAAYP,GAAkBM,EAAY,UAAWC,CAAU,EAE5DD,CACT,CAEA,SAASG,GAAW,CAClB,OAAAA,EAAW,OAAO,QAAU,SAAUR,EAAQ,CAC5C,QAASE,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIO,EAAS,UAAUP,CAAC,EAExB,QAASQ,KAAOD,EACV,OAAO,UAAU,eAAe,KAAKA,EAAQC,CAAG,IAClDV,EAAOU,CAAG,EAAID,EAAOC,CAAG,EAG9B,CAEA,OAAOV,CACT,EAEOQ,EAAS,MAAM,KAAM,SAAS,CACvC,CAEA,SAASG,GAAeC,EAAUC,EAAY,CAC5CD,EAAS,UAAY,OAAO,OAAOC,EAAW,SAAS,EACvDD,EAAS,UAAU,YAAcA,EAEjCE,EAAgBF,EAAUC,CAAU,CACtC,CAEA,SAASC,EAAgBC,EAAGpB,EAAG,CAC7B,OAAAmB,EAAkB,OAAO,gBAAkB,SAAyBC,EAAGpB,EAAG,CACxE,OAAAoB,EAAE,UAAYpB,EACPoB,CACT,EAEOD,EAAgBC,EAAGpB,CAAC,CAC7B,CAEA,SAASqB,GAAcC,EAAS,CAC9B,OAAOA,EAAU,KAAK,GAAK,GAC7B,CACA,SAASC,EAAYC,EAAKC,EAAK,CAC7B,OAAOD,EAAM,KAAK,OAAM,GAAMC,EAAMD,EACtC,CACA,SAASE,GAAUF,EAAKC,EAAK,CAC3B,OAAO,KAAK,MAAMD,EAAM,KAAK,OAAM,GAAMC,EAAMD,EAAM,EAAE,CACzD,CAEA,IAAIG,GAEH,SAAUA,EAAe,CACxBA,EAAcA,EAAc,OAAY,CAAC,EAAI,SAC7CA,EAAcA,EAAc,OAAY,CAAC,EAAI,SAC7CA,EAAcA,EAAc,MAAW,CAAC,EAAI,OAC9C,GAAGA,IAAkBA,EAAgB,GAAG,EAExC,IAAIC,GAEH,SAAUA,EAAmB,CAC5BA,EAAkBA,EAAkB,SAAc,CAAC,EAAI,WACvDA,EAAkBA,EAAkB,SAAc,EAAE,EAAI,UAC1D,GAAGA,IAAsBA,EAAoB,GAAG,EAEhD,IAAIC,IAAwB,UAAY,CACtC,SAASA,EAASC,EAASC,EAAYC,EAAGC,EAAG,CAC3C,KAAK,WAAaF,EAElB,IAAIG,EAAmB,KAAK,WAAU,EAClCC,EAASD,EAAiB,OAC1BE,EAAmBF,EAAiB,iBACpCG,EAAmBH,EAAiB,iBAExC,KAAK,QAAUJ,EACf,KAAK,EAAIE,EACT,KAAK,EAAIC,EACT,KAAK,EAAIV,EAAY,EAAG,EAAE,EAC1B,KAAK,EAAIA,EAAY,EAAG,EAAE,EAC1B,KAAK,OAASA,EAAY,EAAG,EAAE,EAC/B,KAAK,GAAKA,EAAY,CAACa,EAAkBA,CAAgB,EACzD,KAAK,GAAKb,EAAY,CAACc,EAAkB,CAAC,EAC1C,KAAK,MAAQX,GAAU,EAAG,CAAC,EAC3B,KAAK,MAAQL,GAAcE,EAAY,EAAG,GAAG,CAAC,EAC9C,KAAK,YAAcA,EAAY,IAAM,EAAG,EACxC,KAAK,MAAQY,EAAO,KAAK,MAAM,KAAK,OAAM,EAAKA,EAAO,MAAM,CAAC,EAC7D,KAAK,QAAUZ,EAAY,EAAG,CAAC,EAC/B,KAAK,kBAAoBA,EAAY,EAAG,CAAC,EAAIK,EAAkB,SAAWA,EAAkB,QAC9F,CAEA,IAAIU,EAAST,EAAS,UAEtB,OAAAS,EAAO,OAAS,UAAkB,CAChC,IAAIC,EAAoB,KAAK,WAAU,EACnCC,EAAUD,EAAkB,QAC5BE,EAAOF,EAAkB,KACzBG,EAAWH,EAAkB,SAC7BI,EAAUJ,EAAkB,QAC5BK,EAAYL,EAAkB,UAElC,KAAK,GAAK,KAAK,GACf,KAAK,GAAK,KAAK,GACf,KAAK,IAAMC,EACX,KAAK,IAAMC,EACX,KAAK,IAAMC,EACX,KAAK,IAAMA,EAEP,KAAK,SAAW,GAAK,KAAK,oBAAsBd,EAAkB,SACpE,KAAK,kBAAoBA,EAAkB,SAClC,KAAK,SAAW,IAAM,KAAK,oBAAsBA,EAAkB,WAC5E,KAAK,kBAAoBA,EAAkB,UAG7C,IAAIiB,EAAc,GAAM,KAAK,kBAe7B,GAdA,KAAK,SAAWA,EAChB,KAAK,OAAS,KAAK,YACnB,KAAK,QAAQ,KAAI,EACjB,KAAK,QAAQ,UAAU,KAAK,EAAG,KAAK,CAAC,EACrC,KAAK,QAAQ,OAAO,KAAK,KAAK,EAC9B,KAAK,QAAQ,MAAM,EAAG,KAAK,OAAO,EAClC,KAAK,QAAQ,OAAO,KAAK,KAAK,EAC9B,KAAK,QAAQ,UAAS,EACtB,KAAK,QAAQ,UAAY,KAAK,MAC9B,KAAK,QAAQ,YAAc,KAAK,MAChC,KAAK,QAAQ,YAAcF,EAC3B,KAAK,QAAQ,QAAU,QACvB,KAAK,QAAQ,UAAY,EAErBC,GAAa,OAAOA,GAAc,WACpCA,EAAU,KAAK,KAAM,KAAK,OAAO,MAEjC,QAAQ,KAAK,MAAK,CAChB,KAAKjB,EAAc,OACjB,CACE,KAAK,QAAQ,UAAS,EACtB,KAAK,QAAQ,IAAI,EAAG,EAAG,KAAK,OAAQ,EAAG,EAAI,KAAK,EAAE,EAClD,KAAK,QAAQ,KAAI,EACjB,KACF,CAEF,KAAKA,EAAc,OACjB,CACE,KAAK,QAAQ,SAAS,CAAC,KAAK,EAAI,EAAG,CAAC,KAAK,EAAI,EAAG,KAAK,EAAG,KAAK,CAAC,EAC9D,KACF,CAEF,KAAKA,EAAc,MACjB,CACE,KAAK,QAAQ,SAAS,CAAC,KAAK,EAAI,EAAG,CAAC,KAAK,EAAI,EAAG,KAAK,EAAI,EAAG,KAAK,CAAC,EAClE,KACF,CAEF,QAEI,MAAM,IAAI,MAAM,6BAA6B,CAEzD,CAGI,KAAK,QAAQ,UAAS,EACtB,KAAK,QAAQ,QAAO,CACtB,EAEOE,CACT,GAAC,EAEGiB,GAAyB,SAAgCC,EAAQhB,EAAY,CAC/E,IAAIiB,EAAQ,KAEZ,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,mBAAqB,EAC1B,KAAK,cAAgB,KAAK,IAAG,EAC7B,KAAK,UAAY,GACjB,KAAK,mBAAqB,EAE1B,KAAK,iBAAmB,SAAUzC,EAAG,CACnCyC,EAAM,UAAU,OAAOzC,EAAG,CAAC,CAC7B,EAEA,KAAK,YAAc,UAAY,CAC7B,IAAI0C,EAAe1B,EAAYyB,EAAM,EAAGA,EAAM,EAAIA,EAAM,CAAC,EACrDE,EAAe3B,EAAYyB,EAAM,EAAGA,EAAM,EAAIA,EAAM,CAAC,EACzD,OAAO,IAAInB,GAASmB,EAAM,QAASA,EAAM,WAAYC,EAAcC,CAAY,CACjF,EAEA,KAAK,QAAU,UAAY,CACzB,IAAIH,EAASC,EAAM,OACflB,EAAUkB,EAAM,QAChBG,EAAqBH,EAAM,mBAC3BI,EAAqBJ,EAAM,mBAE3Bd,EAAmBc,EAAM,WAAU,EACnCK,EAAMnB,EAAiB,IACvBoB,EAAUpB,EAAiB,QAC3BqB,EAAiBrB,EAAiB,eAClCsB,EAAQtB,EAAiB,MACzBuB,EAAgBvB,EAAiB,cACjCwB,EAAgBxB,EAAiB,cAErC,GAAI,CAACmB,EACH,MAAO,GAGT,IAAIM,EAAKX,EAAM,UAAU,OACrBY,EAAcN,EAAUK,EAAKR,EAC7BU,EAAM,KAAK,MAEf,GAAID,EAAcL,EAAgB,CAE5BH,IAAuBG,IACzBP,EAAM,cAAgBa,EACtBb,EAAM,mBAAqBO,GAU7B,QAPIO,EAAgBd,EAAM,cAGtBe,EAAeF,EAAMC,EAAgBJ,EAAgBA,EAAgB,KAAK,IAAI,EAAGG,EAAMC,CAAa,EACpGE,EAAaP,EAAcM,EAAcH,EAAaL,EAAgBG,CAAa,EACnFO,EAAW,KAAK,MAAMD,EAAaJ,CAAW,EAEzCrD,EAAI,EAAGA,EAAI0D,EAAU1D,GAAK,EACjCyC,EAAM,UAAU,KAAKA,EAAM,YAAW,CAAE,EAG1CA,EAAM,oBAAsBiB,CAC9B,CAEA,OAAIT,IAEF1B,EAAQ,KAAO,kBACfA,EAAQ,UAAY,OACpBA,EAAQ,UAAY,QACpBA,EAAQ,SAAS,cAAgB6B,EAAIZ,EAAO,MAAQ,GAAIA,EAAO,OAAS,EAAE,GAI5EC,EAAM,UAAU,QAAQ,SAAUhD,EAAGO,EAAG,CAEtCP,EAAE,OAAM,GAEJA,EAAE,EAAI+C,EAAO,QAAU/C,EAAE,EAAI,MAAQA,EAAE,EAAI+C,EAAO,MAAQ,KAAO/C,EAAE,EAAI,QACrEsD,GAAWM,GAAeL,EAE5BP,EAAM,UAAUzC,CAAC,EAAIyC,EAAM,YAAW,EAEtCA,EAAM,iBAAiBzC,CAAC,EAG9B,CAAC,EAEMoD,EAAK,GAAKC,EAAcL,CACjC,EAEA,KAAK,OAASR,EACd,IAAImB,EAAM,KAAK,OAAO,WAAW,IAAI,EAErC,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,8BAA8B,EAGhD,KAAK,QAAUA,EACf,KAAK,WAAanC,CACpB,EAEIoC,EAAmB,CACrB,MAAO,OAAO,OAAW,IAAc,OAAO,WAAa,IAC3D,OAAQ,OAAO,OAAW,IAAc,OAAO,YAAc,IAC7D,eAAgB,IAChB,SAAU,IACV,KAAM,EACN,QAAS,GACT,iBAAkB,EAClB,iBAAkB,GAClB,OAAQ,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAClM,QAAS,EACT,MAAO,GACP,cAAeC,GAAO,cACtB,cAAe,IACf,QAAS,GACT,IAAK,EACP,EACIC,IAAwB,UAAY,CACtC,SAASA,EAAStB,EAAQuB,EAAM,CAC9B,IAAItB,EAAQ,KAEZ,KAAK,uBAAyB,SAAUsB,EAAM,CAC5C,IAAIC,EAA2B,CAC7B,eAAgB,CACd,EAAG,EACH,EAAG,EACH,EAAGvB,EAAM,OAAO,MAChB,EAAG,CACb,CACA,EACMA,EAAM,SAAWnC,EAAS,GAAI0D,EAA0BJ,EAAkBG,CAAI,EAC9E,OAAO,OAAOtB,EAAOsB,EAAK,cAAc,CAC1C,EAEA,KAAK,OAAS,UAAY,CACxB,IAAIE,EAAgBxB,EAAM,QACtBK,EAAMmB,EAAc,IACpBC,EAAqBD,EAAc,mBACnCzB,EAASC,EAAM,OACflB,EAAUkB,EAAM,QAEhBK,IACFvB,EAAQ,UAAY,QACpBA,EAAQ,UAAU,EAAG,EAAGiB,EAAO,MAAOA,EAAO,MAAM,GAGjDC,EAAM,UAAU,UAClBA,EAAM,MAAQ,sBAAsBA,EAAM,MAAM,GAE5CyB,GAAsB,OAAOA,GAAuB,YAAczB,EAAM,UAAU,mBAAqB,GACzGyB,EAAmB,KAAKzB,EAAOA,CAAK,EAGtCA,EAAM,SAAS,IAAM,GAEzB,EAEA,KAAK,MAAQ,UAAY,CACnBA,EAAM,WAAaA,EAAM,UAAU,mBAAqB,IAC1DA,EAAM,UAAU,mBAAqB,EACrCA,EAAM,UAAU,UAAY,GAC5BA,EAAM,UAAU,mBAAqB,EAEzC,EAEA,KAAK,KAAO,UAAY,CACtBA,EAAM,QAAU,CACd,IAAK,EACb,EAEUA,EAAM,QACR,qBAAqBA,EAAM,KAAK,EAChCA,EAAM,MAAQ,OAElB,EAEA,KAAK,OAASD,EACd,IAAImB,EAAM,KAAK,OAAO,WAAW,IAAI,EAErC,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,8BAA8B,EAGhD,KAAK,QAAUA,EACf,KAAK,UAAY,IAAIpB,GAAuB,KAAK,OAAQ,UAAY,CACnE,OAAOE,EAAM,OACf,CAAC,EACD,KAAK,QAAUsB,EACf,KAAK,OAAM,CACb,CAEA,OAAA7D,GAAa4D,EAAU,CAAC,CACtB,IAAK,UACL,IAAK,UAAe,CAClB,OAAO,KAAK,QACd,EACA,IAAK,SAAaC,EAAM,CACtB,IAAII,EAAe,KAAK,UAAY,KAAK,SAAS,IAC9CC,EAAmB,KAAK,UAAY,KAAK,SAAS,QACtD,KAAK,uBAAuBL,CAAI,EAE5B,KAAK,YACP,OAAO,OAAO,KAAK,UAAW,KAAK,QAAQ,cAAc,EAErD,OAAOA,EAAK,SAAY,WAAaA,EAAK,SAAWK,IAAqB,KAC5E,KAAK,UAAU,mBAAqB,KAAK,UAAU,UAAU,SAI7D,OAAOL,EAAK,KAAQ,WAAaA,EAAK,KAAOI,IAAiB,IAChE,KAAK,OAAM,CAEf,CACJ,CAAG,CAAC,EAEKL,CACT,GAAC,EAEGO,EAAmBC,EAAM,UAAS,EAEtC,SAASC,EAAmBxE,EAAO,CACjC,IAAIyE,EAAkB,GAClBC,EAAO,GACPC,EAAO,GACPC,EAAqB,GAAG,OAAO,OAAO,KAAKf,CAAgB,EAAG,CAAC,iBAAkB,YAAa,oBAAoB,CAAC,EACnHgB,EAAW,CAAC,WAAW,EAC3B,cAAO,KAAK7E,CAAK,EAAE,QAAQ,SAAU8E,EAAM,CACzC,IAAIC,EAAM/E,EAAM8E,CAAI,EAEhBF,EAAmB,SAASE,CAAI,EAClCL,EAAgBK,CAAI,EAAIC,EACfF,EAAS,SAASC,CAAI,EAC/BD,EAASC,CAAI,EAAIC,EAEjBJ,EAAKG,CAAI,EAAIC,CAEjB,CAAC,EACM,CAACN,EAAiBE,EAAMD,CAAI,CACrC,CAEA,IAAIM,GAAqC,SAAUC,EAAY,CAC7DvE,GAAesE,EAAuBC,CAAU,EAEhD,SAASD,EAAsBhF,EAAO,CACpC,IAAI0C,EAEJ,OAAAA,EAAQuC,EAAW,KAAK,KAAMjF,CAAK,GAAK,KACxC0C,EAAM,OAAS6B,EAAM,UAAS,EAC9B7B,EAAM,OAAS1C,EAAM,WAAasE,EAC3B5B,CACT,CAEA,IAAIV,EAASgD,EAAsB,UAEnC,OAAAhD,EAAO,kBAAoB,UAA6B,CACtD,GAAI,KAAK,OAAO,QAAS,CACvB,IAAIgC,EAAOQ,EAAmB,KAAK,KAAK,EAAE,CAAC,EAC3C,KAAK,SAAW,IAAIT,GAAS,KAAK,OAAO,QAASC,CAAI,CACxD,CACF,EAEAhC,EAAO,mBAAqB,UAA8B,CACxD,IAAIyC,EAAkBD,EAAmB,KAAK,KAAK,EAAE,CAAC,EAElD,KAAK,WACP,KAAK,SAAS,QAAUC,EAE5B,EAEAzC,EAAO,qBAAuB,UAAgC,CACxD,KAAK,UACP,KAAK,SAAS,KAAI,EAGpB,KAAK,SAAW,MAClB,EAEAA,EAAO,OAAS,UAAkB,CAChC,IAAIkD,EAAsBV,EAAmB,KAAK,KAAK,EACnDC,EAAkBS,EAAoB,CAAC,EACvCC,EAAcD,EAAoB,CAAC,EAEnCE,EAAe7E,EAAS,CAC1B,OAAQ,EACR,SAAU,WACV,cAAe,OACf,IAAK,EACL,KAAM,EACN,OAAQ,EACR,MAAO,CACb,EAAO4E,EAAY,KAAK,EAEpB,OAAOZ,EAAM,cAAc,SAAU,OAAO,OAAO,CACjD,MAAOE,EAAgB,MACvB,OAAQA,EAAgB,OACxB,IAAK,KAAK,MAChB,EAAOU,EAAa,CACd,MAAOC,CACb,CAAK,CAAC,CACJ,EAEOJ,CACT,GAAEK,WAAS,EAEXL,EAAsB,aAA4BzE,EAAS,GAAIsD,CAAgB,EAC/EmB,EAAsB,YAAc,gBAEpC,IAAIM,GAAqBf,EAAM,WAAW,SAAUvE,EAAOuF,EAAM,CAC/D,OAAOhB,EAAM,cAAcS,EAAuB,OAAO,OAAO,CAC9D,UAAWV,CACf,EAAKtE,CAAK,CAAC,CACX,CAAC,ECzeM,SAAS+D,GAAS,CAAE,GAAAyB,GAA8B,CACxD,OAAKA,EAGJC,MAACC,IACC,aACAD,MAACE,GAAA,CAEA,IAAK,EAAQH,EACb,QAAS,GACT,eAAgB,IAChB,MAAO,OAAO,WACd,OAAQ,OAAO,aALVA,CAAA,EAQR,EAde,IAgBjB,CCjBO,SAASI,IAAwB,CACvC,aACE,OAAI,UAAU,6EACd,SAAAC,OAAC,OAAI,UAAU,sBAEd,UAAAJ,MAACK,EAAA,CACA,GAAG,uBACH,UAAU,4CACV,aAAW,yCAEZD,OAAC,OAAI,UAAU,2DACd,UAAAA,OAAC,OAAI,UAAU,0BACd,UAAAJ,MAACM,EAAA,CACA,KAAK,QACL,UAAU,+CAEV,OACA,UAAAN,MAAC,MAAG,UAAU,oDAAoD,4DAElE,EACAA,MAAC,KAAE,UAAU,yCAAyC,+FAGtD,GACD,GACD,EACAI,OAAC,OAAI,UAAU,8DACd,UAAAJ,MAAC,QAAK,sBAAU,EAChBA,MAACM,EAAA,CAAK,KAAK,aAAa,UAAU,UAAU,GAC7C,GACD,GACD,EACD,CAEF,CClBA,MAAMC,GAAyC,CAC9C,CACC,MAAO,aACP,UAAW,CACV,CAAE,KAAM,CAAC,IAAK,GAAG,EAAG,YAAa,cACjC,CACC,KAAM,CAAC,IAAK,KAAK,EACjB,YAAa,6CAEd,CACC,KAAM,CAAC,IAAK,MAAO,IAAK,KAAK,EAC7B,YACC,iEAEF,CACC,KAAM,CAAC,IAAK,MAAO,IAAK,GAAG,EAC3B,YACC,wEAEF,CAAE,KAAM,CAAC,IAAK,GAAG,EAAG,YAAa,4BACjC,CAAE,KAAM,CAAC,IAAK,GAAG,EAAG,YAAa,wBACjC,CAAE,KAAM,CAAC,IAAK,GAAG,EAAG,YAAa,sBACjC,CAAE,KAAM,CAAC,IAAK,GAAG,EAAG,YAAa,oBACjC,CAAE,KAAM,CAAC,IAAK,GAAG,EAAG,YAAa,gCACjC,CAAE,KAAM,CAAC,QAAQ,EAAG,YAAa,uCAAuC,CACzE,EAED,CACC,MAAO,oBACP,UAAW,CACV,CAAE,KAAM,CAAC,QAAS,GAAG,EAAG,YAAa,oBACrC,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,4BAC5B,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,2BAC5B,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,4BAC5B,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,0BAA0B,CACvD,EAED,CACC,MAAO,4BACP,UAAW,CACV,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,sCAC5B,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,iCAAiC,CAC9D,EAED,CACC,MAAO,iBACP,UAAW,CACV,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,0BAC5B,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,yBAAyB,CACtD,EAED,CACC,MAAO,iBACP,UAAW,CACV,CAAE,KAAM,CAAC,QAAS,GAAG,EAAG,YAAa,2BACrC,CAAE,KAAM,CAAC,QAAS,GAAG,EAAG,YAAa,0BAA0B,CAChE,EAED,CACC,MAAO,oCACP,UAAW,CACV,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,0BAC5B,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,iCAAiC,CAC9D,EAED,CACC,MAAO,WACP,UAAW,CAAC,CAAE,KAAM,CAAC,GAAG,EAAG,YAAa,4BAA6B,GAEtE,CACC,MAAO,aACP,UAAW,CACV,CACC,KAAM,CAAC,KAAK,EACZ,YACC,8DACF,CACD,CAEF,EAEA,SAASC,GAAwB,CAChC,KAAAC,EACA,aAAAC,CACD,EAGG,CACF,aACEC,GAAA,CAAO,KAAAF,EAAY,aAAAC,EACnB,SAAAN,OAACQ,GAAA,CAAc,UAAU,yCACxB,UAAAR,OAACS,GAAA,CACA,UAAAb,MAACc,IAAY,8BAAkB,SAC9BC,GAAA,CAAkB,yFAEJ,IACdf,MAAC,OAAI,UAAU,wEAAwE,aAEvF,EAAO,IAAI,yEAGZ,GACD,EACAA,MAAC,OAAI,UAAU,YACb,YAAmB,IAAKgB,GACxBZ,OAAC,OACA,UAAAJ,MAAC,MAAG,UAAU,6CACZ,SAAAgB,EAAS,MACX,EACAhB,MAAC,OAAI,UAAU,YACb,WAAS,UAAU,IAAI,CAACiB,EAAUC,IAClCd,OAAC,OAEA,UAAU,0CAEV,UAAAJ,MAAC,QAAK,UAAU,uCACd,SAAAiB,EAAS,YACX,EACAjB,MAAC,OAAI,UAAU,mCACb,SAAAiB,EAAS,KAAK,IAAI,CAACjG,EAAKmG,IACxBf,OAACgB,WAAA,CACA,UAAApB,MAAC,OAAI,UAAU,oEACb,SAAAhF,EACF,EACCmG,EAAWF,EAAS,KAAK,OAAS,GAClCjB,MAAC,QAAK,UAAU,wBAAwB,aAAC,IALtBmB,CAOrB,CACA,EACF,IAjBKD,CAAA,CAmBN,EACF,IA3BSF,EAAS,KA4BnB,CACA,EACF,QACC,OAAI,UAAU,mCACd,SAAAZ,OAAC,KAAE,UAAU,gCACZ,UAAAJ,MAAC,UAAO,iBAAK,EAAS,8FAC8B,IACpDA,MAAC,OAAI,UAAU,wEAAwE,aAEvF,EAAO,IAAI,0BAEZ,EACD,GACD,EACD,CAEF,CCpKO,SAASqB,GAAY,CAAE,MAAAC,GAAmC,CAChE,OACClB,OAAAmB,WAAA,CACC,UAAAvB,MAACwB,GAAA,CAAQ,YAAW,GAAC,SAAS,aAAa,EAC1CF,EAAQtB,MAACyB,GAAA,CAAU,MAAAH,CAAA,CAAc,EAAK,MACxC,CAEF,CAEA,SAASG,GAAU,OAAEH,GAA2B,CAC/C,KAAM,CAAE,GAAAvB,EAAI,KAAA2B,EAAM,MAAAC,EAAO,YAAAC,GAAgBN,EACzCO,mBAAU,IAAM,CACf,WAAW,IAAM,CAChBC,EAAUJ,CAAI,EAAEC,EAAO,CAAE,GAAA5B,EAAI,YAAA6B,EAAa,CAC3C,EAAG,CAAC,CACL,EAAG,CAACA,EAAa7B,EAAI4B,EAAOD,CAAI,CAAC,EAC1B,IACR,CCfO,SAASK,GAAY,CAC3B,YAAAC,CACD,EAEG,CACF,KAAM,CAAE,iBAAAC,GAAqBD,EACvBE,EAAW,aAAcF,EAAcA,EAAY,SAAW,KAC9DG,EACL,iBAAkBH,EAAcA,EAAY,aAAe,OACtDI,EAAUC,EAAA,EACVC,EAAaC,SAAOH,CAAO,EACjCP,YAAU,IAAM,CACfS,EAAW,QAAUF,CACtB,EAAG,CAACA,CAAO,CAAC,EAGZ,MAAMI,EAAoBD,SACzB,MAEKE,EAAuBF,SAC5B,MAEKG,EAAmBH,SAAO,EAAK,EAErCV,mBAAU,IAAM,CACf,GAAII,GAAoBE,EAAc,CACrC,MAAMpC,EAAKuB,EAAM,KAAK,iCAAkC,CACvD,SAAU,IACV,mBACE,OACC,mEACAY,EACAlC,MAAC,KACA,KAAMkC,EACN,OAAO,SACP,IAAI,aACJ,UAAU,oBACV,0BAGE,MACL,EAED,UAAW,IAAM,CAEjB,EACA,OAAQ,CACP,MAAO,SACP,QAAS,SAAY,CAUpB,GARIO,EAAqB,UACxBnB,EAAM,QAAQmB,EAAqB,OAAO,EAC1CA,EAAqB,QAAU,MAG3BD,EAAkB,UACtBA,EAAkB,QAAUlB,EAAM,QAAQ,uBAAuB,GAE9D,CAAAoB,EAAiB,QACrB,CAAAA,EAAiB,QAAU,GAC3B,GAAI,CACH,KAAM,CAAE,qBAAAC,EAAsB,sBAAAC,CAAA,EAC7B,OAAO,KAAO,GACf,GAAI,CAACD,GAAwB,CAACC,EAC7B,MAAM,IAAI,MAAM,0BAA0B,EAE3C,MAAMC,EAAM,MAAM,MACjB,oBAAoBF,CAAoB,sBACxC,CACC,OAAQ,OACR,QAAS,CACR,mBAAoBC,CAAA,CACrB,CACD,EAED,GAAI,CAACC,EAAI,GACR,MAAM,IAAI,MACT,sCAAsCA,EAAI,UAAU,IAGtD,MAAMC,EAAO,MAAMD,EAAI,OAAO,MAAM,KAAO,GAAG,EAKxCE,EAJSC,GAAS,CACvB,OAAQC,GAAO,CAAC,KAAM,OAAO,CAAC,EAC9B,QAASC,GAAE,EAAS,UAAS,CAC7B,EACqB,UAAUJ,CAAI,EACpC,GAAI,CAACC,EAAO,QACX,cAAQ,MAAM,mCAAoCD,CAAI,EAChD,IAAI,MAAM,kCAAkC,EAEnD,KAAM,CAAE,OAAAK,EAAQ,QAAAC,CAAA,EAAYL,EAAO,KACnC,GAAII,IAAW,KAAM,CACpB,IAAIE,EAAW,GACf/B,EAAM,QAAQ,mBAAoB,CACjC,YACC,8DACD,SAAU,IACV,OAAQ,CACP,MAAO,aACP,QAAS,IAAM,CACd+B,EAAW,GACX,OAAO,SAAS,QACjB,GAED,YAAa,IAAM,CACbA,GACJ,OAAO,SAAS,QAElB,EACA,CACF,MACC/B,EAAM,MAAM,4BAA6B,CACxC,YAAa8B,GAAW,gBACxB,CAEH,OAASE,EAAK,CACbhC,EAAM,MAAM,4BAA6B,CACxC,YAAagC,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,EAC5D,CACF,SACCZ,EAAiB,QAAU,GACvBF,EAAkB,UACrBlB,EAAM,QAAQkB,EAAkB,OAAO,EACvCA,EAAkB,QAAU,KAE9B,EACD,GAED,OAAQ,CACP,MAAO,UACP,QAAS,IAAM,CAEVC,EAAqB,UACxBnB,EAAM,QAAQmB,EAAqB,OAAO,EAC1CA,EAAqB,QAAU,MAG3BH,EAAW,QAAQ,OACvB,CAAE,OAAQ,OAAQ,GAAI,eAAeH,CAAY,IACjD,CAAE,OAAQ,OAAQ,OAAQ,uBAAuB,CAEnD,EACD,CACA,EACDM,EAAqB,QAAU1C,CAChC,CACD,EAAG,CAACkC,EAAkBC,EAAUC,CAAY,CAAC,EAEtC,IACR,CCvIO,SAASoB,GAAc,CAC7BC,sBACD,EAEG,CACF,MAAMpB,EAAUC,EAAA,EACVC,EAAaC,SAAOH,CAAO,EAC3BqB,EAAalB,SAAoB,IAAImB,GAAK,EAEhD7B,mBAAU,IAAM,CACf,UAAW8B,KAAgBH,EACtBC,EAAWG,QAAQC,IAAIF,EAAa5D,EAAE,IAC1C0D,EAAWG,QAAQE,IAAIH,EAAa5D,EAAE,EAEtCuB,EAAMyC,KAAKJ,EAAahC,MAAO,CAC9B5B,GAAI4D,EAAa5D,GACjB6B,mBACE,OACAoC,SAAA,CAAAhE,MAAC,KAAGgE,WAAaZ,QAAQ,EACxBO,EAAaM,MACbjE,MAAC,KACAkE,KAAMP,EAAaM,KACnB3J,OAAO,SACP6J,UAAU,oBACVH,SAAA,aAED,GAEF,EAEDI,SAAUC,IACVC,OAAQ,CACPC,MAAO,UACPC,QAASA,IAAM,CACTlC,EAAWsB,QAAQa,OACvB,CAAEC,OAAQ,OAAQ3E,GAAI4D,EAAa5D,EAAG,EACtC,CAAE4E,OAAQ,OAAQL,OAAQ,sBAAuB,CAClD,CACD,CACD,CACD,CAAC,EAEH,EAAG,CAACd,CAAoB,CAAC,EAElB,IACR,CCjEqG,MAAAoB,GAAe,2BCAVC,GAAe,gCCUnHC,GAAgB,sBAEf,SAASC,GAAc,CAC7B,KAAAC,EACA,OAAAC,CACD,EAAwC,CACvC,MAAMlF,EAAKiF,GAAM,IAAMC,GAAQ,IAAM,OAC/BC,EACLF,GAAM,OAASA,EAAK,QAAUF,GAAgBE,EAAK,MAAQ,OAE5D,GAAI,CAACjF,GAAM,CAACmF,EAAO,OAAO,KAE1B,MAAMC,EAAyB,GAC/B,OAAIpF,MAAe,GAAKA,GACpBmF,MAAkB,MAAQA,GACvBC,CACR,CCqCO,MAAMC,GAAuBA,IAC5B,CACN,CAAEC,IAAK,aAAcnB,KAAM,sBAAuB,EAClD,CACCmB,IAAK,aACLnB,KAAM,mHACP,EACA,CAAEmB,IAAK,aAAcnB,KAAMW,EAAsB,EACjD,CAAEQ,IAAK,aAAcnB,KAAMU,EAAiB,EAC5C,CACCS,IAAK,OACLnB,KAAM,eACNoB,MAAO,OACR,EACA,CAAED,IAAK,OAAQ3D,KAAM,gBAAiBwC,KAAM,cAAe,GAIhDqB,GAA2BA,CAAC,CAAEC,YAAW,IAChDA,EAEEC,GAAe,CACrBC,WAAYF,EAAWE,WACvB/D,MAAO6D,EAAWG,cAClB/D,YAAa4D,EAAWI,iBACxBC,YAAaL,EAAWK,WACzB,CAAC,EAPuB,GAwGzB,SAASC,EAAS,CACjB9B,WACA+B,MAAM,GACN5B,YACA6B,OACD,EAKG,CACF,OACC5F,OAAC,QAAK6F,KAAK,KAAK9B,YAAsB6B,QACrChC,SAAA,CAAA5D,OAAC,QACA4D,SAAA,CAAAhE,MAACkG,GAAA,EAAgB,QAChBC,EAAA,EAAK,EACNnG,MAAC,QAAKoG,QAAQ,QAAQ,EACtBpG,MAAC,QAAKqG,KAAK,WAAWC,QAAQ,qCAAqC,QAClEC,EAAA,EAAM,EACPvG,MAAC,UACAwG,wBAAyB,CACxBC,OAAQ,gBAAgBC,KAAKC,UAAUZ,CAAG,CAAC,EAC5C,EACD,GACD,EACA3F,OAAC,QAAK+D,UAAU,uFACdH,SAAA,CAAAA,QACA4C,EAAA,EAAkB,QAClBC,GAAA,EAAQ,GACV,GACD,CAEF,CAEA,SAASC,IAAM,CACd,MAAMhE,EAAOiE,EAAA,EACPC,EAAaC,EAAA,EACbC,EAAcC,gBAAaH,EAAWI,QAAU,OAAQ,CAC7DC,MAAO,IACPC,YAAa,GACd,CAAC,EACKC,EAAUC,GAAA,EACV,CAACC,EAAuBC,CAAwB,EACrD5I,WAAe,EAAK,EAErBA,YAAgB,IAAM,CACrB,MAAM6I,EAAeA,IAAM,CAC1BD,EAA0BE,GAAS,CAACA,CAAI,CACzC,EACAC,cAAOC,iBAAiB,4BAA6BH,CAAY,EAC1D,IAAM,CACZE,OAAOE,oBAAoB,4BAA6BJ,CAAY,CACrE,CACD,EAAG,EAAE,EAEL7I,YAAgB,IAAM,CACrB,GAAI,CAACkJ,IAAIC,sBAAuB,OAChC,MAAM9C,EAAaJ,GAAc,CAChCC,KAAMlC,EAAKkC,KACXC,OAAQnC,EAAKmC,MACd,CAAC,QACI,OAAO,4BAAsB,0BAChCiD,KAAMC,GAAW,CACbhD,EACHgD,EAAOC,QAAQjD,CAAU,EAEzBgD,EAAOC,QAAQ,IAAI,CAErB,CAAC,EACAC,MAAM,IAAM,CAAC,CAAC,CACjB,EAAG,CAACvF,EAAKkC,KAAMlC,EAAKmC,MAAM,CAAC,EAE3B,MAAMqD,EAAQC,GAAA,EACd,OACCnI,OAAC0F,EAAA,CACAE,MACClD,EAAK0F,aAAaC,SACf,CAAEA,SAAU,GAAG3F,EAAK0F,aAAaC,QAAQ,MACzC,GAEJtE,UAAWuE,GACV,4BACAJ,EACA,CAAE,kBAAmBpB,CAAY,EACjCK,EAAU,WAAa,IACxB,EACAxB,IAAKjD,EAAKkF,IAEThE,SAAA,CAAAlB,EAAK6F,iBACL,CAAC7F,EAAK0F,aAAaI,iBAAiBC,iBAClC1I,GAAA,EAAsB,QAExB2I,EAAA,EAAO,EACR9I,MAAC1B,GAAA,CAASyB,GAAI+C,EAAKiG,UAAA,CAAY,EAC/B/I,MAACqB,GAAA,CAAYC,MAAOwB,EAAKxB,KAAA,CAAO,EAChCtB,MAAC+B,GAAA,CAAYC,YAAac,EAAKd,WAAA,CAAa,QAC3CgH,GAAA,EAAa,EACdhJ,MAACuD,GAAA,CAAcC,qBAAsBV,EAAKU,oBAAA,CAAsB,EAChExD,MAACQ,GAAA,CACAC,KAAMgH,EACN/G,aAAcgH,CAAA,CACf,GACD,CAEF,CAEA,MAAAuB,GAAAC,EAAA,UAA2C,CAC1C,KAAM,CAAElE,QAAS+B,EAAA,EACjB,OACC/G,MAACmJ,IAASnE,OACThB,SAAAhE,MAACoJ,IACApF,SAAAhE,MAAC8G,GAAA,EAAI,EACN,EACD,CAEF,GAEOuC,GAAAC,EAAA,UAAyB,CAC/B,aACExD,EAAA,CAAS3B,UAAU,gBACnBH,SAAAhE,MAACuJ,KAAqB,EACvB,CAEF","names":["tweenFunctions","t","b","_c","d","c","a","p","s","v","tweenFunctions_1","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","_extends","source","key","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","degreesToRads","degrees","randomRange","min","max","randomInt","ParticleShape","RotationDirection","Particle","context","getOptions","x","y","_this$getOptions","colors","initialVelocityX","initialVelocityY","_proto","_this$getOptions2","gravity","wind","friction","opacity","drawShape","rotateDelta","ParticleGeneratorClass","canvas","_this","newParticleX","newParticleY","particlesGenerated","lastNumberOfPieces","run","recycle","numberOfPieces","debug","tweenFunction","tweenDuration","nP","activeCount","now","tweenInitTime","progressTime","tweenedVal","numToAdd","ctx","confettiDefaults","tweens","Confetti","opts","computedConfettiDefaults","_this$options","onConfettiComplete","lastRunState","lastRecycleState","ref","React","extractCanvasProps","confettiOptions","refs","rest","confettiOptionKeys","refProps","prop","val","ConfettiReactInternal","_Component","_extractCanvasProps","passedProps","canvasStyles","Component","Index","_ref","id","jsx","ClientOnly","ConfettiShower","ExerciseWarningBanner","jsxs","Link","Icon","shortcutCategories","KeyboardShortcutsDialog","open","onOpenChange","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","category","shortcut","index","keyIndex","React.Fragment","EpicToaster","toast","Fragment","Toaster","ShowToast","type","title","description","useEffect","showToast","UpdateToast","repoUpdates","updatesAvailable","diffLink","remoteCommit","fetcher","useFetcher","fetcherRef","useRef","inProgressToastId","updateNotificationId","updateInProgress","EPICSHOP_PARENT_PORT","EPICSHOP_PARENT_TOKEN","res","data","parsed","z.object","z.enum","z.string","status","message","reloaded","err","Notifications","unmutedNotifications","toastedIds","Set","notification","current","has","add","info","children","link","href","className","duration","Infinity","action","label","onClick","submit","intent","method","appStylesheetUrl","tailwindStylesheetUrl","UNKNOWN_EMAIL","getSentryUser","user","userId","email","sentryUser","links","rel","sizes","meta","loaderData","getSeoMetaTags","instructor","workshopTitle","workshopSubtitle","requestInfo","Document","env","style","lang","ClientHintCheck","Meta","charSet","name","content","Links","dangerouslySetInnerHTML","__html","JSON","stringify","ScrollRestoration","Scripts","App","useLoaderData","navigation","useNavigation","showSpinner","useSpinDelay","state","delay","minDuration","altDown","useAltDown","showKeyboardShortcuts","setShowKeyboardShortcuts","handleToggle","prev","window","addEventListener","removeEventListener","ENV","EPICSHOP_IS_PUBLISHED","then","Sentry","setUser","catch","theme","useTheme","preferences","fontSize","cn","exerciseChanges","exerciseWarning","dismissed","Outlet","confettiId","EpicProgress","root","_UNSAFE_withComponentProps","Presence","TooltipProvider","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","GeneralErrorBoundary"],"ignoreList":[0,1],"sources":["../../../../../node_modules/tween-functions/index.js","../../../../../node_modules/confetti-react/dist/confetti-react.esm.js","../../../app/components/confetti.tsx","../../../app/components/exercise-warning-banner.tsx","../../../app/components/keyboard-shortcuts-dialog.tsx","../../../app/components/toaster.tsx","../../../app/components/update-repo.tsx","../../../app/routes/admin+/notifications.tsx","../../../app/styles/app.css?url","../../../app/styles/tailwind.css?url","../../../app/utils/sentry-user.ts","../../../app/root.tsx"],"sourcesContent":["'use strict';\n\n// t: current time, b: beginning value, _c: final value, d: total duration\nvar tweenFunctions = {\n linear: function(t, b, _c, d) {\n var c = _c - b;\n return c * t / d + b;\n },\n easeInQuad: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t + b;\n },\n easeOutQuad: function(t, b, _c, d) {\n var c = _c - b;\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t + b;\n } else {\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n }\n },\n easeInCubic: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: function(t, b, _c, d) {\n var c = _c - b;\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n },\n easeInQuart: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart: function(t, b, _c, d) {\n var c = _c - b;\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t + b;\n } else {\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n },\n easeInQuint: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint: function(t, b, _c, d) {\n var c = _c - b;\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n },\n easeInSine: function(t, b, _c, d) {\n var c = _c - b;\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n easeOutSine: function(t, b, _c, d) {\n var c = _c - b;\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n easeInOutSine: function(t, b, _c, d) {\n var c = _c - b;\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n easeInExpo: function(t, b, _c, d) {\n var c = _c - b;\n return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n },\n easeOutExpo: function(t, b, _c, d) {\n var c = _c - b;\n return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n },\n easeInOutExpo: function(t, b, _c, d) {\n var c = _c - b;\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n } else {\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n },\n easeInCirc: function(t, b, _c, d) {\n var c = _c - b;\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc: function(t, b, _c, d) {\n var c = _c - b;\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n } else {\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n },\n easeInElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n },\n easeOutElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n },\n easeInOutElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d / 2) === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n if (t < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n } else {\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b;\n }\n },\n easeInBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n } else {\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n },\n easeInBounce: function(t, b, _c, d) {\n var c = _c - b;\n var v;\n v = tweenFunctions.easeOutBounce(d - t, 0, c, d);\n return c - v + b;\n },\n easeOutBounce: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n },\n easeInOutBounce: function(t, b, _c, d) {\n var c = _c - b;\n var v;\n if (t < d / 2) {\n v = tweenFunctions.easeInBounce(t * 2, 0, c, d);\n return v * 0.5 + b;\n } else {\n v = tweenFunctions.easeOutBounce(t * 2 - d, 0, c, d);\n return v * 0.5 + c * 0.5 + b;\n }\n }\n};\n\nmodule.exports = tweenFunctions;\n","import React, { Component } from 'react';\nimport tweens from 'tween-functions';\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction degreesToRads(degrees) {\n return degrees * Math.PI / 180;\n}\nfunction randomRange(min, max) {\n return min + Math.random() * (max - min);\n}\nfunction randomInt(min, max) {\n return Math.floor(min + Math.random() * (max - min + 1));\n}\n\nvar ParticleShape;\n\n(function (ParticleShape) {\n ParticleShape[ParticleShape[\"Circle\"] = 0] = \"Circle\";\n ParticleShape[ParticleShape[\"Square\"] = 1] = \"Square\";\n ParticleShape[ParticleShape[\"Strip\"] = 2] = \"Strip\";\n})(ParticleShape || (ParticleShape = {}));\n\nvar RotationDirection;\n\n(function (RotationDirection) {\n RotationDirection[RotationDirection[\"Positive\"] = 1] = \"Positive\";\n RotationDirection[RotationDirection[\"Negative\"] = -1] = \"Negative\";\n})(RotationDirection || (RotationDirection = {}));\n\nvar Particle = /*#__PURE__*/function () {\n function Particle(context, getOptions, x, y) {\n this.getOptions = getOptions;\n\n var _this$getOptions = this.getOptions(),\n colors = _this$getOptions.colors,\n initialVelocityX = _this$getOptions.initialVelocityX,\n initialVelocityY = _this$getOptions.initialVelocityY;\n\n this.context = context;\n this.x = x;\n this.y = y;\n this.w = randomRange(5, 20);\n this.h = randomRange(5, 20);\n this.radius = randomRange(5, 10);\n this.vx = randomRange(-initialVelocityX, initialVelocityX);\n this.vy = randomRange(-initialVelocityY, 0);\n this.shape = randomInt(0, 2);\n this.angle = degreesToRads(randomRange(0, 360));\n this.angularSpin = randomRange(-0.2, 0.2);\n this.color = colors[Math.floor(Math.random() * colors.length)];\n this.rotateY = randomRange(0, 1);\n this.rotationDirection = randomRange(0, 1) ? RotationDirection.Positive : RotationDirection.Negative;\n }\n\n var _proto = Particle.prototype;\n\n _proto.update = function update() {\n var _this$getOptions2 = this.getOptions(),\n gravity = _this$getOptions2.gravity,\n wind = _this$getOptions2.wind,\n friction = _this$getOptions2.friction,\n opacity = _this$getOptions2.opacity,\n drawShape = _this$getOptions2.drawShape;\n\n this.x += this.vx;\n this.y += this.vy;\n this.vy += gravity;\n this.vx += wind;\n this.vx *= friction;\n this.vy *= friction;\n\n if (this.rotateY >= 1 && this.rotationDirection === RotationDirection.Positive) {\n this.rotationDirection = RotationDirection.Negative;\n } else if (this.rotateY <= -1 && this.rotationDirection === RotationDirection.Negative) {\n this.rotationDirection = RotationDirection.Positive;\n }\n\n var rotateDelta = 0.1 * this.rotationDirection;\n this.rotateY += rotateDelta;\n this.angle += this.angularSpin;\n this.context.save();\n this.context.translate(this.x, this.y);\n this.context.rotate(this.angle);\n this.context.scale(1, this.rotateY);\n this.context.rotate(this.angle);\n this.context.beginPath();\n this.context.fillStyle = this.color;\n this.context.strokeStyle = this.color;\n this.context.globalAlpha = opacity;\n this.context.lineCap = 'round';\n this.context.lineWidth = 2;\n\n if (drawShape && typeof drawShape === 'function') {\n drawShape.call(this, this.context);\n } else {\n switch (this.shape) {\n case ParticleShape.Circle:\n {\n this.context.beginPath();\n this.context.arc(0, 0, this.radius, 0, 2 * Math.PI);\n this.context.fill();\n break;\n }\n\n case ParticleShape.Square:\n {\n this.context.fillRect(-this.w / 2, -this.h / 2, this.w, this.h);\n break;\n }\n\n case ParticleShape.Strip:\n {\n this.context.fillRect(-this.w / 6, -this.h / 2, this.w / 3, this.h);\n break;\n }\n\n default:\n {\n throw new Error('Unknown type in Particle.ts');\n }\n }\n }\n\n this.context.closePath();\n this.context.restore();\n };\n\n return Particle;\n}();\n\nvar ParticleGeneratorClass = function ParticleGeneratorClass(canvas, getOptions) {\n var _this = this;\n\n this.x = 0;\n this.y = 0;\n this.w = 0;\n this.h = 0;\n this.lastNumberOfPieces = 0;\n this.tweenInitTime = Date.now();\n this.particles = [];\n this.particlesGenerated = 0;\n\n this.removeParticleAt = function (i) {\n _this.particles.splice(i, 1);\n };\n\n this.getParticle = function () {\n var newParticleX = randomRange(_this.x, _this.w + _this.x);\n var newParticleY = randomRange(_this.y, _this.h + _this.y);\n return new Particle(_this.context, _this.getOptions, newParticleX, newParticleY);\n };\n\n this.animate = function () {\n var canvas = _this.canvas,\n context = _this.context,\n particlesGenerated = _this.particlesGenerated,\n lastNumberOfPieces = _this.lastNumberOfPieces;\n\n var _this$getOptions = _this.getOptions(),\n run = _this$getOptions.run,\n recycle = _this$getOptions.recycle,\n numberOfPieces = _this$getOptions.numberOfPieces,\n debug = _this$getOptions.debug,\n tweenFunction = _this$getOptions.tweenFunction,\n tweenDuration = _this$getOptions.tweenDuration;\n\n if (!run) {\n return false;\n }\n\n var nP = _this.particles.length;\n var activeCount = recycle ? nP : particlesGenerated;\n var now = Date.now(); // Initial population\n\n if (activeCount < numberOfPieces) {\n // Use the numberOfPieces prop as a key to reset the easing timing\n if (lastNumberOfPieces !== numberOfPieces) {\n _this.tweenInitTime = now;\n _this.lastNumberOfPieces = numberOfPieces;\n }\n\n var tweenInitTime = _this.tweenInitTime; // Add more than one piece per loop, otherwise the number of pieces would\n // be limitted by the RAF framerate\n\n var progressTime = now - tweenInitTime > tweenDuration ? tweenDuration : Math.max(0, now - tweenInitTime);\n var tweenedVal = tweenFunction(progressTime, activeCount, numberOfPieces, tweenDuration);\n var numToAdd = Math.round(tweenedVal - activeCount);\n\n for (var i = 0; i < numToAdd; i += 1) {\n _this.particles.push(_this.getParticle());\n }\n\n _this.particlesGenerated += numToAdd;\n }\n\n if (debug) {\n // Draw debug text\n context.font = '12px sans-serif';\n context.fillStyle = '#333';\n context.textAlign = 'right';\n context.fillText(\"Particles: \" + nP, canvas.width - 10, canvas.height - 20);\n } // Maintain the population\n\n\n _this.particles.forEach(function (p, i) {\n // Update each particle's position\n p.update(); // Prune the off-canvas particles\n\n if (p.y > canvas.height || p.y < -100 || p.x > canvas.width + 100 || p.x < -100) {\n if (recycle && activeCount <= numberOfPieces) {\n // Replace the particle with a brand new one\n _this.particles[i] = _this.getParticle();\n } else {\n _this.removeParticleAt(i);\n }\n }\n });\n\n return nP > 0 || activeCount < numberOfPieces;\n };\n\n this.canvas = canvas;\n var ctx = this.canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n\n this.context = ctx;\n this.getOptions = getOptions;\n};\n\nvar confettiDefaults = {\n width: typeof window !== 'undefined' ? window.innerWidth : 300,\n height: typeof window !== 'undefined' ? window.innerHeight : 200,\n numberOfPieces: 200,\n friction: 0.99,\n wind: 0,\n gravity: 0.1,\n initialVelocityX: 4,\n initialVelocityY: 10,\n colors: ['#f44336', '#e91e63', '#9c27b0', '#673ab7', '#3f51b5', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722', '#795548'],\n opacity: 1.0,\n debug: false,\n tweenFunction: tweens.easeInOutQuad,\n tweenDuration: 5000,\n recycle: true,\n run: true\n};\nvar Confetti = /*#__PURE__*/function () {\n function Confetti(canvas, opts) {\n var _this = this;\n\n this.setOptionsWithDefaults = function (opts) {\n var computedConfettiDefaults = {\n confettiSource: {\n x: 0,\n y: 0,\n w: _this.canvas.width,\n h: 0\n }\n };\n _this._options = _extends({}, computedConfettiDefaults, confettiDefaults, opts);\n Object.assign(_this, opts.confettiSource);\n };\n\n this.update = function () {\n var _this$options = _this.options,\n run = _this$options.run,\n onConfettiComplete = _this$options.onConfettiComplete,\n canvas = _this.canvas,\n context = _this.context;\n\n if (run) {\n context.fillStyle = 'white';\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n if (_this.generator.animate()) {\n _this.rafId = requestAnimationFrame(_this.update);\n } else {\n if (onConfettiComplete && typeof onConfettiComplete === 'function' && _this.generator.particlesGenerated > 0) {\n onConfettiComplete.call(_this, _this);\n }\n\n _this._options.run = false;\n }\n };\n\n this.reset = function () {\n if (_this.generator && _this.generator.particlesGenerated > 0) {\n _this.generator.particlesGenerated = 0;\n _this.generator.particles = [];\n _this.generator.lastNumberOfPieces = 0;\n }\n };\n\n this.stop = function () {\n _this.options = {\n run: false\n };\n\n if (_this.rafId) {\n cancelAnimationFrame(_this.rafId);\n _this.rafId = undefined;\n }\n };\n\n this.canvas = canvas;\n var ctx = this.canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n\n this.context = ctx;\n this.generator = new ParticleGeneratorClass(this.canvas, function () {\n return _this.options;\n });\n this.options = opts;\n this.update();\n }\n\n _createClass(Confetti, [{\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(opts) {\n var lastRunState = this._options && this._options.run;\n var lastRecycleState = this._options && this._options.recycle;\n this.setOptionsWithDefaults(opts);\n\n if (this.generator) {\n Object.assign(this.generator, this.options.confettiSource);\n\n if (typeof opts.recycle === 'boolean' && opts.recycle && lastRecycleState === false) {\n this.generator.lastNumberOfPieces = this.generator.particles.length;\n }\n }\n\n if (typeof opts.run === 'boolean' && opts.run && lastRunState === false) {\n this.update();\n }\n }\n }]);\n\n return Confetti;\n}();\n\nvar ref = /*#__PURE__*/React.createRef();\n\nfunction extractCanvasProps(props) {\n var confettiOptions = {};\n var refs = {};\n var rest = {};\n var confettiOptionKeys = [].concat(Object.keys(confettiDefaults), ['confettiSource', 'drawShape', 'onConfettiComplete']);\n var refProps = ['canvasRef'];\n Object.keys(props).forEach(function (prop) {\n var val = props[prop];\n\n if (confettiOptionKeys.includes(prop)) {\n confettiOptions[prop] = val;\n } else if (refProps.includes(prop)) {\n refProps[prop] = val;\n } else {\n rest[prop] = val;\n }\n });\n return [confettiOptions, rest, refs];\n}\n\nvar ConfettiReactInternal = /*#__PURE__*/function (_Component) {\n _inheritsLoose(ConfettiReactInternal, _Component);\n\n function ConfettiReactInternal(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n _this.canvas = React.createRef();\n _this.canvas = props.canvasRef || ref;\n return _this;\n }\n\n var _proto = ConfettiReactInternal.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.canvas.current) {\n var opts = extractCanvasProps(this.props)[0];\n this.confetti = new Confetti(this.canvas.current, opts);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var confettiOptions = extractCanvasProps(this.props)[0];\n\n if (this.confetti) {\n this.confetti.options = confettiOptions;\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.confetti) {\n this.confetti.stop();\n }\n\n this.confetti = undefined;\n };\n\n _proto.render = function render() {\n var _extractCanvasProps = extractCanvasProps(this.props),\n confettiOptions = _extractCanvasProps[0],\n passedProps = _extractCanvasProps[1];\n\n var canvasStyles = _extends({\n zIndex: 2,\n position: 'absolute',\n pointerEvents: 'none',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n }, passedProps.style);\n\n return React.createElement(\"canvas\", Object.assign({\n width: confettiOptions.width,\n height: confettiOptions.height,\n ref: this.canvas\n }, passedProps, {\n style: canvasStyles\n }));\n };\n\n return ConfettiReactInternal;\n}(Component);\n\nConfettiReactInternal.defaultProps = /*#__PURE__*/_extends({}, confettiDefaults);\nConfettiReactInternal.displayName = 'ConfettiReact'; // eslint-disable-next-line react/display-name\n\nvar Index = /*#__PURE__*/React.forwardRef(function (props, _ref) {\n return React.createElement(ConfettiReactInternal, Object.assign({\n canvasRef: ref\n }, props));\n});\n\nexport default Index;\nexport { Index };\n//# sourceMappingURL=confetti-react.esm.js.map\n","import { Index as ConfettiShower } from 'confetti-react'\nimport { ClientOnly } from 'remix-utils/client-only'\n\nexport function Confetti({ id }: { id?: string | null }) {\n\tif (!id) return null\n\n\treturn (\n\t\t<ClientOnly>\n\t\t\t{() => (\n\t\t\t\t<ConfettiShower\n\t\t\t\t\tkey={id}\n\t\t\t\t\trun={Boolean(id)}\n\t\t\t\t\trecycle={false}\n\t\t\t\t\tnumberOfPieces={800}\n\t\t\t\t\twidth={window.innerWidth}\n\t\t\t\t\theight={window.innerHeight}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ClientOnly>\n\t)\n}\n","import { Link } from 'react-router'\nimport { Icon } from './icons.tsx'\n\nexport function ExerciseWarningBanner() {\n\treturn (\n\t\t<div className=\"border-destructive bg-destructive fixed top-0 right-0 left-0 z-50 border-b\">\n\t\t\t<div className=\"relative w-full p-4\">\n\t\t\t\t{/* Full-banner clickable link, visually hidden but covers the banner */}\n\t\t\t\t<Link\n\t\t\t\t\tto=\"/workspace-structure\"\n\t\t\t\t\tclassName=\"absolute inset-0 z-10 block h-full w-full\"\n\t\t\t\t\taria-label=\"Learn more about workspace structure\"\n\t\t\t\t/>\n\t\t\t\t<div className=\"relative z-0 container flex items-center justify-between\">\n\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tname=\"Error\"\n\t\t\t\t\t\t\tclassName=\"text-destructive-foreground h-5 w-5\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h3 className=\"text-destructive-foreground text-sm font-semibold\">\n\t\t\t\t\t\t\t\tWarning: Changes detected in exercises directory\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<p className=\"text-destructive-foreground/80 text-xs\">\n\t\t\t\t\t\t\t\tYou should typically work in the playground directory, not the\n\t\t\t\t\t\t\t\texercises directory.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"text-destructive-foreground flex items-center gap-2 text-xs\">\n\t\t\t\t\t\t<span>Learn more</span>\n\t\t\t\t\t\t<Icon name=\"ArrowRight\" className=\"h-3 w-3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import * as React from 'react'\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogHeader,\n\tDialogTitle,\n} from './ui/dialog'\n\ninterface KeyboardShortcut {\n\tkeys: string[]\n\tdescription: string\n}\n\ninterface ShortcutCategory {\n\ttitle: string\n\tshortcuts: KeyboardShortcut[]\n}\n\nconst shortcutCategories: ShortcutCategory[] = [\n\t{\n\t\ttitle: 'Navigation',\n\t\tshortcuts: [\n\t\t\t{ keys: ['g', 'h'], description: 'Go to home' },\n\t\t\t{\n\t\t\t\tkeys: ['g', '1-9'],\n\t\t\t\tdescription: 'Go to exercise (e.g., g+1 → /exercise/01)',\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeys: ['g', '1-9', '.', '1-9'],\n\t\t\t\tdescription:\n\t\t\t\t\t'Go to exercise step (e.g., g+1+.+2 → /exercise/01/02/problem)',\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeys: ['g', '1-9', '.', 'f'],\n\t\t\t\tdescription:\n\t\t\t\t\t'Go to exercise finished page (e.g., g+1+.+f → /exercise/01/finished)',\n\t\t\t},\n\t\t\t{ keys: ['g', 'p'], description: 'Go to previous step/page' },\n\t\t\t{ keys: ['g', 'n'], description: 'Go to next step/page' },\n\t\t\t{ keys: ['g', 'a'], description: 'Go to account page' },\n\t\t\t{ keys: ['g', 'd'], description: 'Go to admin page' },\n\t\t\t{ keys: ['g', 'l'], description: 'Go to last exercise solution' },\n\t\t\t{ keys: ['Escape'], description: 'Close sidebar navigation (when open)' },\n\t\t],\n\t},\n\t{\n\t\ttitle: 'Playback Controls',\n\t\tshortcuts: [\n\t\t\t{ keys: ['Space', 'k'], description: 'Play/pause video' },\n\t\t\t{ keys: ['j'], description: 'Seek backward 10 seconds' },\n\t\t\t{ keys: ['l'], description: 'Seek forward 10 seconds' },\n\t\t\t{ keys: ['←'], description: 'Seek backward 10 seconds' },\n\t\t\t{ keys: ['→'], description: 'Seek forward 10 seconds' },\n\t\t],\n\t},\n\t{\n\t\ttitle: 'Frame-by-Frame Navigation',\n\t\tshortcuts: [\n\t\t\t{ keys: [','], description: 'Go to previous frame (when paused)' },\n\t\t\t{ keys: ['.'], description: 'Go to next frame (when paused)' },\n\t\t],\n\t},\n\t{\n\t\ttitle: 'Volume Control',\n\t\tshortcuts: [\n\t\t\t{ keys: ['↑'], description: 'Increase volume by 10%' },\n\t\t\t{ keys: ['↓'], description: 'Decrease volume by 10%' },\n\t\t],\n\t},\n\t{\n\t\ttitle: 'Playback Speed',\n\t\tshortcuts: [\n\t\t\t{ keys: ['Shift', '>'], description: 'Increase playback speed' },\n\t\t\t{ keys: ['Shift', '<'], description: 'Decrease playback speed' },\n\t\t],\n\t},\n\t{\n\t\ttitle: 'Fullscreen and Picture-in-Picture',\n\t\tshortcuts: [\n\t\t\t{ keys: ['f'], description: 'Toggle fullscreen mode' },\n\t\t\t{ keys: ['i'], description: 'Toggle picture-in-picture mode' },\n\t\t],\n\t},\n\t{\n\t\ttitle: 'Captions',\n\t\tshortcuts: [{ keys: ['c'], description: 'Toggle captions/subtitles' }],\n\t},\n\t{\n\t\ttitle: 'Quick Seek',\n\t\tshortcuts: [\n\t\t\t{\n\t\t\t\tkeys: ['0-9'],\n\t\t\t\tdescription:\n\t\t\t\t\t'Seek to percentage of video (0 = 0%, 1 = 10%, ..., 9 = 90%)',\n\t\t\t},\n\t\t],\n\t},\n]\n\nfunction KeyboardShortcutsDialog({\n\topen,\n\tonOpenChange,\n}: {\n\topen: boolean\n\tonOpenChange: (open: boolean) => void\n}) {\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t<DialogContent className=\"max-h-[80vh] max-w-2xl overflow-y-auto\">\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Keyboard Shortcuts</DialogTitle>\n\t\t\t\t\t<DialogDescription>\n\t\t\t\t\t\tUse these keyboard shortcuts to navigate and control the video\n\t\t\t\t\t\tplayer. Press{' '}\n\t\t\t\t\t\t<kbd className=\"border-border bg-muted rounded border px-1.5 py-0.5 font-mono text-xs\">\n\t\t\t\t\t\t\t?\n\t\t\t\t\t\t</kbd>{' '}\n\t\t\t\t\t\tor select the question mark icon in the navigation to open this\n\t\t\t\t\t\tlist.\n\t\t\t\t\t</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div className=\"space-y-6\">\n\t\t\t\t\t{shortcutCategories.map((category) => (\n\t\t\t\t\t\t<div key={category.title}>\n\t\t\t\t\t\t\t<h3 className=\"text-foreground mb-3 text-sm font-semibold\">\n\t\t\t\t\t\t\t\t{category.title}\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t\t\t{category.shortcuts.map((shortcut, index) => (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-between gap-4\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground flex-1 text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t{shortcut.description}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex shrink-0 items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t{shortcut.keys.map((key, keyIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<React.Fragment key={keyIndex}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<kbd className=\"border-border bg-muted rounded border px-2 py-1 font-mono text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{key}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</kbd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{keyIndex < shortcut.keys.length - 1 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">+</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"border-border mt-4 border-t pt-4\">\n\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t<strong>Note:</strong> Shortcuts are ignored when focus is on\n\t\t\t\t\t\tinteractive elements (inputs, buttons, etc.). Press{' '}\n\t\t\t\t\t\t<kbd className=\"border-border bg-muted rounded border px-1.5 py-0.5 font-mono text-xs\">\n\t\t\t\t\t\t\t?\n\t\t\t\t\t\t</kbd>{' '}\n\t\t\t\t\t\tto toggle this dialog.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n\nexport { KeyboardShortcutsDialog }\n","import { useEffect } from 'react'\nimport { Toaster, toast as showToast } from 'sonner'\nimport { type Toast } from '#app/utils/toast.server.ts'\n\nexport function EpicToaster({ toast }: { toast?: Toast | null }) {\n\treturn (\n\t\t<>\n\t\t\t<Toaster closeButton position=\"top-center\" />\n\t\t\t{toast ? <ShowToast toast={toast} /> : null}\n\t\t</>\n\t)\n}\n\nfunction ShowToast({ toast }: { toast: Toast }) {\n\tconst { id, type, title, description } = toast\n\tuseEffect(() => {\n\t\tsetTimeout(() => {\n\t\t\tshowToast[type](title, { id, description })\n\t\t}, 0)\n\t}, [description, id, title, type])\n\treturn null\n}\n","import { type checkForUpdatesCached } from '@epic-web/workshop-utils/git.server'\nimport { useEffect, useRef } from 'react'\nimport { useFetcher } from 'react-router'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nexport function UpdateToast({\n\trepoUpdates,\n}: {\n\trepoUpdates: Awaited<ReturnType<typeof checkForUpdatesCached>>\n}) {\n\tconst { updatesAvailable } = repoUpdates\n\tconst diffLink = 'diffLink' in repoUpdates ? repoUpdates.diffLink : null\n\tconst remoteCommit =\n\t\t'remoteCommit' in repoUpdates ? repoUpdates.remoteCommit : undefined\n\tconst fetcher = useFetcher()\n\tconst fetcherRef = useRef(fetcher)\n\tuseEffect(() => {\n\t\tfetcherRef.current = fetcher\n\t}, [fetcher])\n\n\t// Track the in-progress toast id and update notification id\n\tconst inProgressToastId = useRef<ReturnType<typeof toast.loading> | null>(\n\t\tnull,\n\t)\n\tconst updateNotificationId = useRef<ReturnType<typeof toast.info> | null>(\n\t\tnull,\n\t)\n\tconst updateInProgress = useRef(false)\n\n\tuseEffect(() => {\n\t\tif (updatesAvailable && remoteCommit) {\n\t\t\tconst id = toast.info('New workshop updates available', {\n\t\t\t\tduration: Infinity,\n\t\t\t\tdescription: (\n\t\t\t\t\t<div>\n\t\t\t\t\t\t{`Get the latest updates by clicking the update button. `}\n\t\t\t\t\t\t{diffLink ? (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={diffLink}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t\tclassName=\"text-xs underline\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tView changes\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t\tonDismiss: () => {\n\t\t\t\t\t// No-op for now, could call a dismiss endpoint if needed\n\t\t\t\t},\n\t\t\t\taction: {\n\t\t\t\t\tlabel: 'Update',\n\t\t\t\t\tonClick: async () => {\n\t\t\t\t\t\t// Dismiss the update notification immediately\n\t\t\t\t\t\tif (updateNotificationId.current) {\n\t\t\t\t\t\t\ttoast.dismiss(updateNotificationId.current)\n\t\t\t\t\t\t\tupdateNotificationId.current = null\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Show in-progress toast\n\t\t\t\t\t\tif (!inProgressToastId.current) {\n\t\t\t\t\t\t\tinProgressToastId.current = toast.loading('Update in progress...')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateInProgress.current) return\n\t\t\t\t\t\tupdateInProgress.current = true\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { EPICSHOP_PARENT_PORT, EPICSHOP_PARENT_TOKEN } =\n\t\t\t\t\t\t\t\twindow.ENV || {}\n\t\t\t\t\t\t\tif (!EPICSHOP_PARENT_PORT || !EPICSHOP_PARENT_TOKEN) {\n\t\t\t\t\t\t\t\tthrow new Error('Update API not available')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst res = await fetch(\n\t\t\t\t\t\t\t\t`http://localhost:${EPICSHOP_PARENT_PORT}/__epicshop-restart`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t'x-epicshop-token': EPICSHOP_PARENT_TOKEN,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (!res.ok) {\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t`Request to update workshop failed: ${res.statusText}`,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst data = await res.json().catch(() => ({}))\n\t\t\t\t\t\t\tconst schema = z.object({\n\t\t\t\t\t\t\t\tstatus: z.enum(['ok', 'error']),\n\t\t\t\t\t\t\t\tmessage: z.string().optional(),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tconst parsed = schema.safeParse(data)\n\t\t\t\t\t\t\tif (!parsed.success) {\n\t\t\t\t\t\t\t\tconsole.error('Invalid response from update API', data)\n\t\t\t\t\t\t\t\tthrow new Error('Invalid response from update API')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst { status, message } = parsed.data\n\t\t\t\t\t\t\tif (status === 'ok') {\n\t\t\t\t\t\t\t\tlet reloaded = false\n\t\t\t\t\t\t\t\ttoast.success('Workshop updated', {\n\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t'Reloading in 2 seconds... You can reload now if you prefer.',\n\t\t\t\t\t\t\t\t\tduration: 2000,\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\tlabel: 'Reload now',\n\t\t\t\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\t\t\t\treloaded = true\n\t\t\t\t\t\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonAutoClose: () => {\n\t\t\t\t\t\t\t\t\t\tif (!reloaded) {\n\t\t\t\t\t\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttoast.error('Failed to update workshop', {\n\t\t\t\t\t\t\t\t\tdescription: message || 'Unknown error',\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\ttoast.error('Failed to update workshop', {\n\t\t\t\t\t\t\t\tdescription: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tupdateInProgress.current = false\n\t\t\t\t\t\t\tif (inProgressToastId.current) {\n\t\t\t\t\t\t\t\ttoast.dismiss(inProgressToastId.current)\n\t\t\t\t\t\t\t\tinProgressToastId.current = null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tcancel: {\n\t\t\t\t\tlabel: 'Dismiss',\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t// Dismiss the notification toast\n\t\t\t\t\t\tif (updateNotificationId.current) {\n\t\t\t\t\t\t\ttoast.dismiss(updateNotificationId.current)\n\t\t\t\t\t\t\tupdateNotificationId.current = null\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Mute the notification persistently\n\t\t\t\t\t\tvoid fetcherRef.current.submit(\n\t\t\t\t\t\t\t{ intent: 'mute', id: `update-repo-${remoteCommit}` },\n\t\t\t\t\t\t\t{ method: 'post', action: '/admin/notifications' },\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tupdateNotificationId.current = id\n\t\t}\n\t}, [updatesAvailable, diffLink, remoteCommit])\n\n\treturn null\n}\n","import { muteNotification } from '@epic-web/workshop-utils/db.server'\nimport { type getUnmutedNotifications } from '@epic-web/workshop-utils/notifications.server'\nimport { useEffect, useRef } from 'react'\nimport { data, type ActionFunctionArgs, useFetcher } from 'react-router'\nimport { toast } from 'sonner'\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tconst id = formData.get('id')\n\tif (typeof id !== 'string') {\n\t\treturn data({ error: 'Invalid notification id' }, { status: 400 })\n\t}\n\tif (intent === 'mute') {\n\t\tawait muteNotification(id)\n\t\treturn data({ success: true })\n\t}\n\treturn data({ error: 'Invalid intent' }, { status: 400 })\n}\n\nexport function Notifications({\n\tunmutedNotifications,\n}: {\n\tunmutedNotifications: Awaited<ReturnType<typeof getUnmutedNotifications>>\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst fetcherRef = useRef(fetcher)\n\tconst toastedIds = useRef<Set<string>>(new Set())\n\n\tuseEffect(() => {\n\t\tfor (const notification of unmutedNotifications) {\n\t\t\tif (toastedIds.current.has(notification.id)) continue\n\t\t\ttoastedIds.current.add(notification.id)\n\n\t\t\ttoast.info(notification.title, {\n\t\t\t\tid: notification.id,\n\t\t\t\tdescription: (\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>{notification.message}</p>\n\t\t\t\t\t\t{notification.link && (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={notification.link}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\tclassName=\"text-xs underline\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tLearn more\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t\tduration: Infinity,\n\t\t\t\taction: {\n\t\t\t\t\tlabel: 'Dismiss',\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tvoid fetcherRef.current.submit(\n\t\t\t\t\t\t\t{ intent: 'mute', id: notification.id },\n\t\t\t\t\t\t\t{ method: 'post', action: '/admin/notifications' },\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}, [unmutedNotifications])\n\n\treturn null\n}\n","import \"/home/runner/work/epicshop/epicshop/packages/workshop-app/app/styles/app.css?transform-only\";export default \"__VITE_CSS_URL__2f686f6d652f72756e6e65722f776f726b2f6570696373686f702f6570696373686f702f7061636b616765732f776f726b73686f702d6170702f6170702f7374796c65732f6170702e6373733f7472616e73666f726d2d6f6e6c79__\"","import \"/home/runner/work/epicshop/epicshop/packages/workshop-app/app/styles/tailwind.css?transform-only\";export default \"__VITE_CSS_URL__2f686f6d652f72756e6e65722f776f726b2f6570696373686f702f6570696373686f702f7061636b616765732f776f726b73686f702d6170702f6170702f7374796c65732f7461696c77696e642e6373733f7472616e73666f726d2d6f6e6c79__\"","type SentryUser = {\n\tid?: string\n\temail?: string\n}\n\ntype SentryUserSource = {\n\tuser?: { id?: string | null; email?: string | null } | null\n\tuserId?: { id?: string | null } | null\n}\n\nconst UNKNOWN_EMAIL = 'unknown@example.com'\n\nexport function getSentryUser({\n\tuser,\n\tuserId,\n}: SentryUserSource): SentryUser | null {\n\tconst id = user?.id ?? userId?.id ?? undefined\n\tconst email =\n\t\tuser?.email && user.email !== UNKNOWN_EMAIL ? user.email : undefined\n\n\tif (!id && !email) return null\n\n\tconst sentryUser: SentryUser = {}\n\tif (id) sentryUser.id = id\n\tif (email) sentryUser.email = email\n\treturn sentryUser\n}\n","import path from 'node:path'\nimport { getPresentUsers } from '@epic-web/workshop-presence/presence.server'\nimport { getApps } from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport {\n\tgetLoggedInProductHosts,\n\tgetPreferences,\n\tgetMutedNotifications,\n} from '@epic-web/workshop-utils/db.server'\nimport { getEnv } from '@epic-web/workshop-utils/env.server'\nimport {\n\tgetProgress,\n\tgetUserInfo,\n\tuserHasAccessToWorkshop,\n} from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcheckForUpdatesCached,\n\tcheckForExerciseChanges,\n} from '@epic-web/workshop-utils/git.server'\nimport { getUnmutedNotifications } from '@epic-web/workshop-utils/notifications.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport {\n\tgetSetClientIdCookieHeader,\n\tgetUserId,\n} from '@epic-web/workshop-utils/user.server'\nimport { checkConnection } from '@epic-web/workshop-utils/utils.server'\n\nimport * as React from 'react'\nimport {\n\tdata,\n\ttype LinksFunction,\n\tLinks,\n\tMeta,\n\tOutlet,\n\tScripts,\n\tScrollRestoration,\n\tuseLoaderData,\n\tuseNavigation,\n} from 'react-router'\nimport { promiseHash } from 'remix-utils/promise'\nimport { useSpinDelay } from 'spin-delay'\nimport { type Route } from './+types/root.tsx'\nimport { Confetti } from './components/confetti'\nimport { GeneralErrorBoundary } from './components/error-boundary'\nimport { ExerciseWarningBanner } from './components/exercise-warning-banner'\nimport { KeyboardShortcutsDialog } from './components/keyboard-shortcuts-dialog'\nimport { EpicProgress } from './components/progress-bar'\nimport { EpicToaster } from './components/toaster'\nimport { TooltipProvider } from './components/ui/tooltip'\nimport { UpdateToast } from './components/update-repo'\nimport { Notifications } from './routes/admin+/notifications'\nimport { useTheme } from './routes/theme/index'\nimport { getTheme } from './routes/theme/theme-session.server'\nimport appStylesheetUrl from './styles/app.css?url'\nimport tailwindStylesheetUrl from './styles/tailwind.css?url'\nimport { ClientHintCheck, getHints } from './utils/client-hints'\nimport { getConfetti } from './utils/confetti.server'\nimport { cn, combineHeaders, getDomainUrl, useAltDown } from './utils/misc'\nimport { Presence } from './utils/presence'\nimport { getSentryUser } from './utils/sentry-user'\nimport { getSeoMetaTags } from './utils/seo'\nimport { getToast } from './utils/toast.server'\n\nexport const links: LinksFunction = () => {\n\treturn [\n\t\t{ rel: 'stylesheet', href: '/neogrotesk-font.css' },\n\t\t{\n\t\t\trel: 'stylesheet',\n\t\t\thref: 'https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap',\n\t\t},\n\t\t{ rel: 'stylesheet', href: tailwindStylesheetUrl },\n\t\t{ rel: 'stylesheet', href: appStylesheetUrl },\n\t\t{\n\t\t\trel: 'icon',\n\t\t\thref: '/favicon.ico',\n\t\t\tsizes: '48x48',\n\t\t},\n\t\t{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' },\n\t]\n}\n\nexport const meta: Route.MetaFunction = ({ loaderData }) => {\n\tif (!loaderData) return []\n\n\treturn getSeoMetaTags({\n\t\tinstructor: loaderData.instructor,\n\t\ttitle: loaderData.workshopTitle,\n\t\tdescription: loaderData.workshopSubtitle,\n\t\trequestInfo: loaderData.requestInfo,\n\t})\n}\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tconst timings = makeTimings('rootLoader')\n\tconst workshopConfig = getWorkshopConfig()\n\tconst {\n\t\ttitle: workshopTitle,\n\t\tsubtitle: workshopSubtitle,\n\t\tinstructor,\n\t} = workshopConfig\n\n\tconst theme = getTheme(request)\n\tconst { confettiId, headers: confettiHeaders } = getConfetti(request)\n\tconst { toast, headers: toastHeaders } = await getToast(request)\n\tconst isOnlinePromise = checkConnection({ request, timings })\n\n\tconst asyncStuff = await promiseHash({\n\t\tuserId: getUserId({ request }),\n\t\tpreferences: getPreferences(),\n\t\tprogress: getProgress({ timings }).catch((e) => {\n\t\t\tconsole.error('Failed to get progress', e)\n\t\t\tconst emptyProgress: Awaited<ReturnType<typeof getProgress>> = []\n\t\t\treturn emptyProgress\n\t\t}),\n\t\tuser: getUserInfo(),\n\t\tuserHasAccess: userHasAccessToWorkshop({ request, timings }),\n\t\tapps: getApps({ request, timings }),\n\t\trepoUpdates: checkForUpdatesCached(),\n\t\tunmutedNotifications: getUnmutedNotifications(),\n\t\texerciseChanges: checkForExerciseChanges(),\n\t\tloggedInProductHosts: getLoggedInProductHosts(),\n\t})\n\n\tconst presentUsers = await getPresentUsers({\n\t\trequest,\n\t\ttimings,\n\t})\n\n\t// Filter out repoUpdates if muted\n\tconst mutedNotifications = await getMutedNotifications()\n\tlet repoUpdates = asyncStuff.repoUpdates\n\tif (\n\t\trepoUpdates &&\n\t\t'remoteCommit' in repoUpdates &&\n\t\trepoUpdates.remoteCommit &&\n\t\tmutedNotifications.includes(`update-repo-${repoUpdates.remoteCommit}`)\n\t) {\n\t\trepoUpdates = { ...repoUpdates, updatesAvailable: false }\n\t}\n\n\treturn data(\n\t\t{\n\t\t\t...asyncStuff,\n\t\t\tworkshopConfig,\n\t\t\tworkshopTitle,\n\t\t\tworkshopSubtitle,\n\t\t\tinstructor,\n\t\t\tapps: asyncStuff.apps.map(({ name, fullPath, relativePath }) => ({\n\t\t\t\tname,\n\t\t\t\tfullPath,\n\t\t\t\trelativePath,\n\t\t\t})),\n\t\t\tENV: getEnv(),\n\t\t\trequestInfo: {\n\t\t\t\tprotocol: new URL(request.url).protocol,\n\t\t\t\thostname: new URL(request.url).hostname,\n\t\t\t\tport: new URL(request.url).port,\n\t\t\t\torigin: new URL(request.url).origin,\n\t\t\t\tdomain: getDomainUrl(request),\n\t\t\t\thints: getHints(request),\n\t\t\t\tpath: new URL(request.url).pathname,\n\t\t\t\tsession: { theme },\n\t\t\t\tseparator: path.sep,\n\t\t\t\tonline: await isOnlinePromise,\n\t\t\t},\n\t\t\ttoast,\n\t\t\tconfettiId,\n\t\t\tpresence: {\n\t\t\t\tusers: presentUsers,\n\t\t\t},\n\t\t\trepoUpdates,\n\t\t\texerciseChanges: asyncStuff.exerciseChanges,\n\t\t},\n\t\t{\n\t\t\theaders: combineHeaders(\n\t\t\t\ttoastHeaders,\n\t\t\t\tconfettiHeaders,\n\t\t\t\t{ 'Server-Timing': timings.toString() },\n\t\t\t\tasyncStuff.userId?.type === 'cookie.randomId'\n\t\t\t\t\t? { 'Set-Cookie': getSetClientIdCookieHeader(asyncStuff.userId.id) }\n\t\t\t\t\t: undefined,\n\t\t\t),\n\t\t},\n\t)\n}\n\nfunction Document({\n\tchildren,\n\tenv = {},\n\tclassName,\n\tstyle,\n}: {\n\tchildren: React.ReactNode\n\tenv?: Record<string, unknown>\n\tclassName: string\n\tstyle?: React.CSSProperties\n}) {\n\treturn (\n\t\t<html lang=\"en\" className={className} style={style}>\n\t\t\t<head>\n\t\t\t\t<ClientHintCheck />\n\t\t\t\t<Meta />\n\t\t\t\t<meta charSet=\"utf-8\" />\n\t\t\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n\t\t\t\t<Links />\n\t\t\t\t<script\n\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t__html: `window.ENV = ${JSON.stringify(env)}`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</head>\n\t\t\t<body className=\"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe\">\n\t\t\t\t{children}\n\t\t\t\t<ScrollRestoration />\n\t\t\t\t<Scripts />\n\t\t\t</body>\n\t\t</html>\n\t)\n}\n\nfunction App() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst navigation = useNavigation()\n\tconst showSpinner = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 400,\n\t\tminDuration: 200,\n\t})\n\tconst altDown = useAltDown()\n\tconst [showKeyboardShortcuts, setShowKeyboardShortcuts] =\n\t\tReact.useState(false)\n\n\tReact.useEffect(() => {\n\t\tconst handleToggle = () => {\n\t\t\tsetShowKeyboardShortcuts((prev) => !prev)\n\t\t}\n\t\twindow.addEventListener('toggle-keyboard-shortcuts', handleToggle)\n\t\treturn () => {\n\t\t\twindow.removeEventListener('toggle-keyboard-shortcuts', handleToggle)\n\t\t}\n\t}, [])\n\n\tReact.useEffect(() => {\n\t\tif (!ENV.EPICSHOP_IS_PUBLISHED) return\n\t\tconst sentryUser = getSentryUser({\n\t\t\tuser: data.user,\n\t\t\tuserId: data.userId,\n\t\t})\n\t\tvoid import('@sentry/react-router')\n\t\t\t.then((Sentry) => {\n\t\t\t\tif (sentryUser) {\n\t\t\t\t\tSentry.setUser(sentryUser)\n\t\t\t\t} else {\n\t\t\t\t\tSentry.setUser(null)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {})\n\t}, [data.user, data.userId])\n\n\tconst theme = useTheme()\n\treturn (\n\t\t<Document\n\t\t\tstyle={\n\t\t\t\tdata.preferences?.fontSize\n\t\t\t\t\t? { fontSize: `${data.preferences?.fontSize}px` }\n\t\t\t\t\t: {}\n\t\t\t}\n\t\t\tclassName={cn(\n\t\t\t\t'h-screen-safe antialiased',\n\t\t\t\ttheme,\n\t\t\t\t{ 'cursor-progress': showSpinner },\n\t\t\t\taltDown ? 'alt-down' : null,\n\t\t\t)}\n\t\t\tenv={data.ENV}\n\t\t>\n\t\t\t{data.exerciseChanges &&\n\t\t\t\t!data.preferences?.exerciseWarning?.dismissed && (\n\t\t\t\t\t<ExerciseWarningBanner />\n\t\t\t\t)}\n\t\t\t<Outlet />\n\t\t\t<Confetti id={data.confettiId} />\n\t\t\t<EpicToaster toast={data.toast} />\n\t\t\t<UpdateToast repoUpdates={data.repoUpdates} />\n\t\t\t<EpicProgress />\n\t\t\t<Notifications unmutedNotifications={data.unmutedNotifications} />\n\t\t\t<KeyboardShortcutsDialog\n\t\t\t\topen={showKeyboardShortcuts}\n\t\t\t\tonOpenChange={setShowKeyboardShortcuts}\n\t\t\t/>\n\t\t</Document>\n\t)\n}\n\nexport default function AppWithProviders() {\n\tconst { user } = useLoaderData<typeof loader>()\n\treturn (\n\t\t<Presence user={user}>\n\t\t\t<TooltipProvider>\n\t\t\t\t<App />\n\t\t\t</TooltipProvider>\n\t\t</Presence>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<Document className=\"h-screen-safe\">\n\t\t\t<GeneralErrorBoundary />\n\t\t</Document>\n\t)\n}\n"],"file":"root-4ETVlwNv.js"}