@epic-web/workshop-app 6.73.0 → 6.74.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.
Files changed (57) hide show
  1. package/build/client/assets/_exerciseNumber-jokuvO2V.js +2 -0
  2. package/build/client/assets/{_exerciseNumber-DUwXPNgl.js.map → _exerciseNumber-jokuvO2V.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber_.finished-BaC--Y5p.js +2 -0
  4. package/build/client/assets/{_exerciseNumber_.finished-C_jLQFDa.js.map → _exerciseNumber_.finished-BaC--Y5p.js.map} +1 -1
  5. package/build/client/assets/_extra-DXypL1sc.js +2 -0
  6. package/build/client/assets/{_extra-DkiDFYVP.js.map → _extra-DXypL1sc.js.map} +1 -1
  7. package/build/client/assets/_layout-_Aw6qzZC.js +2 -0
  8. package/build/client/assets/{_layout-DDTXkx2z.js.map → _layout-_Aw6qzZC.js.map} +1 -1
  9. package/build/client/assets/diff-DfWBhj2O.js +2 -0
  10. package/build/client/assets/{diff-DwJn8fSQ.js.map → diff-DfWBhj2O.js.map} +1 -1
  11. package/build/client/assets/{diff-HIgoC1PO.js → diff-Dng5ItOr.js} +2 -2
  12. package/build/client/assets/{diff-HIgoC1PO.js.map → diff-Dng5ItOr.js.map} +1 -1
  13. package/build/client/assets/epic-video-C1_HSISA.js +2 -0
  14. package/build/client/assets/{epic-video-DEq93iL_.js.map → epic-video-C1_HSISA.js.map} +1 -1
  15. package/build/client/assets/{epic-video-DnXXh6qE.js → epic-video-CC0372g5.js} +164 -164
  16. package/build/client/assets/{epic-video-DnXXh6qE.js.map → epic-video-CC0372g5.js.map} +1 -1
  17. package/build/client/assets/finished-BbEk1NdF.js +2 -0
  18. package/build/client/assets/{finished-CCILsO6v.js.map → finished-BbEk1NdF.js.map} +1 -1
  19. package/build/client/assets/format-CZ5n8p10.js +2 -0
  20. package/build/client/assets/format-CZ5n8p10.js.map +1 -0
  21. package/build/client/assets/index-CFM_ffAh.js +2 -0
  22. package/build/client/assets/{index-IgBUhsxX.js.map → index-CFM_ffAh.js.map} +1 -1
  23. package/build/client/assets/index-CfU0fdf7.js +2 -0
  24. package/build/client/assets/{index-PKjGT1Rp.js.map → index-CfU0fdf7.js.map} +1 -1
  25. package/build/client/assets/index-Pxi8WjFA.js +2 -0
  26. package/build/client/assets/{index-BgExztV_.js.map → index-Pxi8WjFA.js.map} +1 -1
  27. package/build/client/assets/manifest-835c6db1.js +1 -0
  28. package/build/client/assets/{mdx-Dun3ONG_.js → mdx-vy-1-0a3.js} +2 -2
  29. package/build/client/assets/{mdx-Dun3ONG_.js.map → mdx-vy-1-0a3.js.map} +1 -1
  30. package/build/client/assets/{offline-videos-BP7_xJkO.js → offline-videos-DAsuWMco.js} +2 -2
  31. package/build/client/assets/offline-videos-DAsuWMco.js.map +1 -0
  32. package/build/client/assets/preferences-B7ND1VS9.js +2 -0
  33. package/build/client/assets/preferences-B7ND1VS9.js.map +1 -0
  34. package/build/client/assets/{retrieval-practice-CBwxJaFi.js → retrieval-practice-BOku32wW.js} +2 -2
  35. package/build/client/assets/{retrieval-practice-CBwxJaFi.js.map → retrieval-practice-BOku32wW.js.map} +1 -1
  36. package/build/client/assets/test-Ciw2aKZE.js +2 -0
  37. package/build/client/assets/{test-BU7jE-eU.js.map → test-Ciw2aKZE.js.map} +1 -1
  38. package/build/client/assets/{tests-1-kVRtTc.js → tests-CZ2AhDKA.js} +2 -2
  39. package/build/client/assets/{tests-1-kVRtTc.js.map → tests-CZ2AhDKA.js.map} +1 -1
  40. package/build/server/index.js +58 -24
  41. package/build/server/index.js.map +1 -1
  42. package/package.json +3 -3
  43. package/build/client/assets/_exerciseNumber-DUwXPNgl.js +0 -2
  44. package/build/client/assets/_exerciseNumber_.finished-C_jLQFDa.js +0 -2
  45. package/build/client/assets/_extra-DkiDFYVP.js +0 -2
  46. package/build/client/assets/_layout-DDTXkx2z.js +0 -2
  47. package/build/client/assets/diff-DwJn8fSQ.js +0 -2
  48. package/build/client/assets/epic-video-DEq93iL_.js +0 -2
  49. package/build/client/assets/finished-CCILsO6v.js +0 -2
  50. package/build/client/assets/index-BgExztV_.js +0 -2
  51. package/build/client/assets/index-IgBUhsxX.js +0 -2
  52. package/build/client/assets/index-PKjGT1Rp.js +0 -2
  53. package/build/client/assets/manifest-b4d09d3a.js +0 -1
  54. package/build/client/assets/offline-videos-BP7_xJkO.js.map +0 -1
  55. package/build/client/assets/preferences-D6HQ5bK1.js +0 -2
  56. package/build/client/assets/preferences-D6HQ5bK1.js.map +0 -1
  57. package/build/client/assets/test-BU7jE-eU.js +0 -2
@@ -0,0 +1,2 @@
1
+ import{w as y,b as N,k as V,f as D,F as r,L as P}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{B as m}from"./button-Cd-ekki5.js";import{b as R,I as o}from"./misc-W4055b-0.js";import{S as l}from"./tooltip-Tlsyx2YO.js";import{f as u}from"./format-CZ5n8p10.js";import{u as S}from"./root-loader-BOzEMapJ.js";import"./index-CqIc3cxq.js";import"./index-vDCSPjrM.js";const k=[{value:"best",label:"Best available"},{value:"high",label:"High"},{value:"medium",label:"Medium"},{value:"low",label:"Low"}],A=y(function(){const h=N(),n=S(),c=n.preferences?.player,p=n.preferences?.offlineVideo,f=n.preferences?.fontSize,b=n.preferences?.presence,j=n.preferences?.playground,g=n.preferences?.exerciseWarning,v=V(),i=D(),s=i.data?.offlineVideos??h.offlineVideos,t=s.downloadState.status==="running",x=[s.unavailableVideos>0?`${s.unavailableVideos} unavailable`:null,s.notDownloadableVideos>0?`${s.notDownloadableVideos} not downloadable`:null].filter(Boolean).join(", "),w=s.totalVideos>0&&s.downloadedVideos<s.totalVideos&&s.remainingDownloadBytes>0,a=v.state==="submitting";return R(()=>{i.state==="idle"&&i.load("/resources/offline-videos")},t?2e3:null),e.jsx("div",{className:"h-full w-full overflow-y-auto",children:e.jsxs("main",{className:"container mt-12 flex w-full max-w-3xl grow flex-col gap-4 pb-24",children:[e.jsx("h1",{className:"text-h1 mb-4",children:"Preferences"}),e.jsxs(r,{method:"post",className:"flex w-full max-w-sm flex-col gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-body-xl mb-2",children:"Video Player Preferences"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"minResolution",children:"Minimum Resolution:"}),e.jsxs("select",{id:"minResolution",name:"minResolution",defaultValue:c?.minResolution,className:"border-border bg-background text-foreground rounded-md border px-2 py-1",children:[e.jsx("option",{value:"",children:"Auto"}),e.jsx("option",{value:"480",children:"480p"}),e.jsx("option",{value:"720",children:"720p"}),e.jsx("option",{value:"1080",children:"1080p"}),e.jsx("option",{value:"1440",children:"1440p"}),e.jsx("option",{value:"2160",children:"2160p (4K)"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"maxResolution",children:"Maximum Resolution:"}),e.jsxs("select",{id:"maxResolution",name:"maxResolution",defaultValue:c?.maxResolution,className:"border-border bg-background text-foreground rounded-md border px-2 py-1",children:[e.jsx("option",{value:"",children:"Auto"}),e.jsx("option",{value:"720",children:"720p"}),e.jsx("option",{value:"1080",children:"1080p"}),e.jsx("option",{value:"1440",children:"1440p"}),e.jsx("option",{value:"2160",children:"2160p (4K)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-body-xl mb-2",children:"Offline Video Downloads"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"downloadResolution",children:"Download Resolution:"}),e.jsx("select",{id:"downloadResolution",name:"downloadResolution",defaultValue:p?.downloadResolution??"best",className:"border-border bg-background text-foreground rounded-md border px-2 py-1",children:k.map(d=>e.jsx("option",{value:d.value,children:d.label},d.value))})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Defaults to the best available resolution."})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Font Size Preference"}),e.jsx(l,{content:"Defaults to 16px",children:e.jsx(o,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"fontSize",children:"Font Size"}),e.jsx("input",{type:"number",id:"fontSize",name:"fontSize",defaultValue:f??16,step:"1",min:"12",max:"26",className:"border-border bg-background text-foreground rounded-md border px-2 py-1"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Presence Preference"}),e.jsx(l,{content:"This controls whether your name and avatar are displayed in the pile of faces in navigation",children:e.jsx(o,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",id:"optOutPresence",name:"optOutPresence",defaultChecked:b?.optOut}),e.jsx("label",{htmlFor:"optOutPresence",children:"Opt out of presence features"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Persist Playground"}),e.jsx(l,{content:'When enabled, clicking "Set to Playground" will save the current playground in the "saved-playgrounds" directory.',children:e.jsx(o,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",id:"persistPlayground",name:"persistPlayground",defaultChecked:j?.persist}),e.jsx("label",{htmlFor:"persistPlayground",children:"Enable saving playground"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Exercise Directory Warning"}),e.jsx(l,{content:"When enabled, you'll see a warning banner when you have changes in the exercises directory. This helps remind you to work in the playground directory instead.",children:e.jsx(o,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",id:"dismissExerciseWarning",name:"dismissExerciseWarning",defaultChecked:g?.dismissed}),e.jsx("label",{htmlFor:"dismissExerciseWarning",children:"Dismiss exercise directory warnings"})]})]}),e.jsx("div",{className:"h-4"}),e.jsx(m,{varient:"primary",type:"submit",name:"intent",value:"update-preferences",disabled:a,children:a?"Updating...":"Update Preferences"})]}),e.jsxs("section",{className:"border-border mt-6 flex w-full max-w-xl flex-col gap-3 border-t pt-6",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Offline videos"}),e.jsx(l,{content:"Keep videos ready to watch when you're offline.",children:e.jsx(o,{name:"Question",tabIndex:0})})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Download all workshop videos so you can watch them when offline."}),e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Admins can manage all downloaded videos on the"," ",e.jsx(P,{className:"text-foreground underline",to:"/admin/offline-videos",children:"Offline videos admin page"}),"."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx(r,{method:"post",children:e.jsx(m,{varient:"primary",type:"submit",name:"intent",value:"download-offline-videos",disabled:t||a||s.totalVideos===0,children:t?"Downloading...":"Download all videos"})}),e.jsx(r,{method:"post",children:e.jsx("button",{type:"submit",name:"intent",value:"delete-offline-videos",disabled:a||s.downloadedVideos===0,className:"border-border text-foreground hover:bg-muted inline-flex items-center gap-2 rounded border px-3 py-2 text-sm disabled:cursor-not-allowed disabled:opacity-50",children:"Delete offline videos"})}),e.jsxs("span",{className:"text-muted-foreground text-sm",children:[s.downloadedVideos," of ",s.totalVideos," ","downloaded",x?` (${x})`:null]})]}),e.jsxs("div",{className:"text-muted-foreground text-sm",children:[s.downloadedVideos>0?e.jsxs("p",{children:["Downloaded size: ",u(s.totalBytes)]}):null,w?e.jsxs("p",{children:["Download all size:"," ",u(s.remainingDownloadBytes)]}):null]}),t?e.jsxs("div",{className:"text-muted-foreground text-sm",children:[e.jsxs("p",{children:["Downloading ",s.downloadState.completed," of"," ",s.downloadState.total," videos"]}),s.downloadState.current?e.jsxs("p",{className:"truncate",children:["Current: ",s.downloadState.current.title]}):null]}):null]})]})})});export{A as default};
2
+ //# sourceMappingURL=preferences-B7ND1VS9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences-B7ND1VS9.js","sources":["../../../app/routes/_app+/preferences.tsx"],"sourcesContent":["import {\n\tgetPreferences,\n\tsetPreferences,\n} from '@epic-web/workshop-utils/db.server'\nimport {\n\tgetOfflineVideoSummary,\n\tstartOfflineVideoDownload,\n\tdeleteOfflineVideosForWorkshop,\n} from '@epic-web/workshop-utils/offline-videos.server'\nimport {\n\tForm,\n\tLink,\n\tuseFetcher,\n\tuseLoaderData,\n\tuseNavigation,\n} from 'react-router'\nimport { Button } from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { formatBytes } from '#app/utils/format.ts'\nimport { ensureUndeployed, useInterval } from '#app/utils/misc.tsx'\nimport { useRootLoaderData } from '#app/utils/root-loader.ts'\nimport { redirectWithToast } from '#app/utils/toast.server.ts'\nimport { type Route } from './+types/preferences.tsx'\n\nconst downloadResolutionOptions = [\n\t{ value: 'best', label: 'Best available' },\n\t{ value: 'high', label: 'High' },\n\t{ value: 'medium', label: 'Medium' },\n\t{ value: 'low', label: 'Low' },\n] as const\ntype DownloadResolutionOption =\n\t(typeof downloadResolutionOptions)[number]['value']\n\nfunction isDownloadResolutionOption(\n\tvalue: FormDataEntryValue | null,\n): value is DownloadResolutionOption {\n\treturn (\n\t\ttypeof value === 'string' &&\n\t\tdownloadResolutionOptions.some((option) => option.value === value)\n\t)\n}\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tensureUndeployed()\n\tconst [preferences, offlineVideos] = await Promise.all([\n\t\tgetPreferences(),\n\t\tgetOfflineVideoSummary({ request }),\n\t])\n\treturn { preferences, offlineVideos }\n}\n\nexport async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\n\tif (intent === 'download-offline-videos') {\n\t\tconst result = await startOfflineVideoDownload({ request })\n\t\tif (result.queued === 0) {\n\t\t\tconst description =\n\t\t\t\tresult.available === 0\n\t\t\t\t\t? 'No downloadable videos were found for this workshop.'\n\t\t\t\t\t: result.unavailable > 0\n\t\t\t\t\t\t? 'All available videos are already downloaded. Some videos require access to download.'\n\t\t\t\t\t\t: 'All available videos are already downloaded.'\n\t\t\treturn redirectWithToast('/preferences', {\n\t\t\t\ttitle: 'Offline videos are ready',\n\t\t\t\tdescription,\n\t\t\t\ttype: 'success',\n\t\t\t})\n\t\t}\n\n\t\treturn redirectWithToast('/preferences', {\n\t\t\ttitle: 'Offline downloads started',\n\t\t\tdescription: `Queued ${result.queued} video${result.queued === 1 ? '' : 's'} for download.`,\n\t\t\ttype: 'success',\n\t\t})\n\t}\n\n\tif (intent === 'delete-offline-videos') {\n\t\tconst result = await deleteOfflineVideosForWorkshop()\n\t\tconst description =\n\t\t\tresult.deletedFiles === 0\n\t\t\t\t? 'No offline videos were removed.'\n\t\t\t\t: `Removed ${result.deletedFiles} offline video${\n\t\t\t\t\t\tresult.deletedFiles === 1 ? '' : 's'\n\t\t\t\t\t}.`\n\t\treturn redirectWithToast('/preferences', {\n\t\t\ttitle: 'Offline videos cleared',\n\t\t\tdescription,\n\t\t\ttype: 'success',\n\t\t})\n\t}\n\n\tconst minResolution = formData.get('minResolution')\n\tconst maxResolution = formData.get('maxResolution')\n\tconst downloadResolution = formData.get('downloadResolution')\n\tconst fontSize = formData.get('fontSize')\n\tconst optOutPresence = formData.get('optOutPresence') === 'on'\n\tconst persistPlayground = formData.get('persistPlayground') === 'on'\n\tconst dismissExerciseWarning = formData.get('dismissExerciseWarning') === 'on'\n\tconst downloadResolutionValue = isDownloadResolutionOption(downloadResolution)\n\t\t? downloadResolution\n\t\t: undefined\n\n\tawait setPreferences({\n\t\tplayer: {\n\t\t\tminResolution: minResolution ? Number(minResolution) : undefined,\n\t\t\tmaxResolution: maxResolution ? Number(maxResolution) : undefined,\n\t\t},\n\t\tofflineVideo: {\n\t\t\tdownloadResolution: downloadResolutionValue,\n\t\t},\n\t\tfontSize: fontSize ? Number(fontSize) : undefined,\n\t\tpresence: { optOut: optOutPresence },\n\t\tplayground: { persist: persistPlayground },\n\t\texerciseWarning: { dismissed: dismissExerciseWarning },\n\t})\n\n\treturn redirectWithToast('/preferences', {\n\t\ttitle: 'Preferences updated',\n\t\tdescription: 'Your preferences have been updated.',\n\t\ttype: 'success',\n\t})\n}\n\nexport default function AccountSettings() {\n\tconst loaderData = useLoaderData<typeof loader>()\n\tconst rootData = useRootLoaderData()\n\tconst playerPreferences = rootData.preferences?.player\n\tconst offlineVideoPreferences = rootData.preferences?.offlineVideo\n\tconst fontSizePreference = rootData.preferences?.fontSize\n\tconst presencePreferences = rootData.preferences?.presence\n\tconst playgroundPreferences = rootData.preferences?.playground\n\tconst exerciseWarningPreferences = rootData.preferences?.exerciseWarning\n\tconst navigation = useNavigation()\n\tconst offlineVideosFetcher = useFetcher<typeof loader>()\n\tconst offlineVideos =\n\t\tofflineVideosFetcher.data?.offlineVideos ?? loaderData.offlineVideos\n\tconst isDownloading = offlineVideos.downloadState.status === 'running'\n\tconst offlineVideoNotes = [\n\t\tofflineVideos.unavailableVideos > 0\n\t\t\t? `${offlineVideos.unavailableVideos} unavailable`\n\t\t\t: null,\n\t\tofflineVideos.notDownloadableVideos > 0\n\t\t\t? `${offlineVideos.notDownloadableVideos} not downloadable`\n\t\t\t: null,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(', ')\n\tconst showRemainingDownloadSize =\n\t\tofflineVideos.totalVideos > 0 &&\n\t\tofflineVideos.downloadedVideos < offlineVideos.totalVideos &&\n\t\tofflineVideos.remainingDownloadBytes > 0\n\n\tconst isSubmitting = navigation.state === 'submitting'\n\n\tuseInterval(\n\t\t() => {\n\t\t\tif (offlineVideosFetcher.state === 'idle') {\n\t\t\t\tvoid offlineVideosFetcher.load('/resources/offline-videos')\n\t\t\t}\n\t\t},\n\t\tisDownloading ? 2000 : null,\n\t)\n\n\treturn (\n\t\t<div className=\"h-full w-full overflow-y-auto\">\n\t\t\t<main className=\"container mt-12 flex w-full max-w-3xl grow flex-col gap-4 pb-24\">\n\t\t\t\t<h1 className=\"text-h1 mb-4\">Preferences</h1>\n\t\t\t\t<Form method=\"post\" className=\"flex w-full max-w-sm flex-col gap-4\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h2 className=\"text-body-xl mb-2\">Video Player Preferences</h2>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<label htmlFor=\"minResolution\">Minimum Resolution:</label>\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\tid=\"minResolution\"\n\t\t\t\t\t\t\t\tname=\"minResolution\"\n\t\t\t\t\t\t\t\tdefaultValue={playerPreferences?.minResolution}\n\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<option value=\"\">Auto</option>\n\t\t\t\t\t\t\t\t<option value=\"480\">480p</option>\n\t\t\t\t\t\t\t\t<option value=\"720\">720p</option>\n\t\t\t\t\t\t\t\t<option value=\"1080\">1080p</option>\n\t\t\t\t\t\t\t\t<option value=\"1440\">1440p</option>\n\t\t\t\t\t\t\t\t<option value=\"2160\">2160p (4K)</option>\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<label htmlFor=\"maxResolution\">Maximum Resolution:</label>\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\tid=\"maxResolution\"\n\t\t\t\t\t\t\t\tname=\"maxResolution\"\n\t\t\t\t\t\t\t\tdefaultValue={playerPreferences?.maxResolution}\n\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<option value=\"\">Auto</option>\n\t\t\t\t\t\t\t\t<option value=\"720\">720p</option>\n\t\t\t\t\t\t\t\t<option value=\"1080\">1080p</option>\n\t\t\t\t\t\t\t\t<option value=\"1440\">1440p</option>\n\t\t\t\t\t\t\t\t<option value=\"2160\">2160p (4K)</option>\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h2 className=\"text-body-xl mb-2\">Offline Video Downloads</h2>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<label htmlFor=\"downloadResolution\">Download Resolution:</label>\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\tid=\"downloadResolution\"\n\t\t\t\t\t\t\t\tname=\"downloadResolution\"\n\t\t\t\t\t\t\t\tdefaultValue={\n\t\t\t\t\t\t\t\t\tofflineVideoPreferences?.downloadResolution ?? 'best'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{downloadResolutionOptions.map((option) => (\n\t\t\t\t\t\t\t\t\t<option key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\tDefaults to the best available resolution.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t\t\t\t<h2 className=\"text-body-xl\">Font Size Preference</h2>\n\t\t\t\t\t\t\t<SimpleTooltip content=\"Defaults to 16px\">\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<label htmlFor=\"fontSize\">Font Size</label>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\tid=\"fontSize\"\n\t\t\t\t\t\t\t\tname=\"fontSize\"\n\t\t\t\t\t\t\t\tdefaultValue={fontSizePreference ?? 16}\n\t\t\t\t\t\t\t\tstep=\"1\"\n\t\t\t\t\t\t\t\tmin=\"12\"\n\t\t\t\t\t\t\t\tmax=\"26\"\n\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t\t\t\t<h2 className=\"text-body-xl\">Presence Preference</h2>\n\n\t\t\t\t\t\t\t<SimpleTooltip content=\"This controls whether your name and avatar are displayed in the pile of faces in navigation\">\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tid=\"optOutPresence\"\n\t\t\t\t\t\t\t\tname=\"optOutPresence\"\n\t\t\t\t\t\t\t\tdefaultChecked={presencePreferences?.optOut}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label htmlFor=\"optOutPresence\">\n\t\t\t\t\t\t\t\tOpt out of presence features\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t\t\t\t<h2 className=\"text-body-xl\">Persist Playground</h2>\n\n\t\t\t\t\t\t\t<SimpleTooltip\n\t\t\t\t\t\t\t\tcontent={`When enabled, clicking \"Set to Playground\" will save the current playground in the \"saved-playgrounds\" directory.`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tid=\"persistPlayground\"\n\t\t\t\t\t\t\t\tname=\"persistPlayground\"\n\t\t\t\t\t\t\t\tdefaultChecked={playgroundPreferences?.persist}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label htmlFor=\"persistPlayground\">\n\t\t\t\t\t\t\t\tEnable saving playground\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t\t\t\t<h2 className=\"text-body-xl\">Exercise Directory Warning</h2>\n\n\t\t\t\t\t\t\t<SimpleTooltip\n\t\t\t\t\t\t\t\tcontent={`When enabled, you'll see a warning banner when you have changes in the exercises directory. This helps remind you to work in the playground directory instead.`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tid=\"dismissExerciseWarning\"\n\t\t\t\t\t\t\t\tname=\"dismissExerciseWarning\"\n\t\t\t\t\t\t\t\tdefaultChecked={exerciseWarningPreferences?.dismissed}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label htmlFor=\"dismissExerciseWarning\">\n\t\t\t\t\t\t\t\tDismiss exercise directory warnings\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"h-4\" />\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tname=\"intent\"\n\t\t\t\t\t\tvalue=\"update-preferences\"\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSubmitting ? 'Updating...' : 'Update Preferences'}\n\t\t\t\t\t</Button>\n\t\t\t\t</Form>\n\n\t\t\t\t<section className=\"border-border mt-6 flex w-full max-w-xl flex-col gap-3 border-t pt-6\">\n\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t<h2 className=\"text-body-xl\">Offline videos</h2>\n\t\t\t\t\t\t<SimpleTooltip content=\"Keep videos ready to watch when you're offline.\">\n\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\tDownload all workshop videos so you can watch them when offline.\n\t\t\t\t\t</p>\n\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\tAdmins can manage all downloaded videos on the{' '}\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tclassName=\"text-foreground underline\"\n\t\t\t\t\t\t\tto=\"/admin/offline-videos\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tOffline videos admin page\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t.\n\t\t\t\t\t</p>\n\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\tname=\"intent\"\n\t\t\t\t\t\t\t\tvalue=\"download-offline-videos\"\n\t\t\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\t\t\tisDownloading ||\n\t\t\t\t\t\t\t\t\tisSubmitting ||\n\t\t\t\t\t\t\t\t\tofflineVideos.totalVideos === 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isDownloading ? 'Downloading...' : 'Download all videos'}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\tname=\"intent\"\n\t\t\t\t\t\t\t\tvalue=\"delete-offline-videos\"\n\t\t\t\t\t\t\t\tdisabled={isSubmitting || offlineVideos.downloadedVideos === 0}\n\t\t\t\t\t\t\t\tclassName=\"border-border text-foreground hover:bg-muted inline-flex items-center gap-2 rounded border px-3 py-2 text-sm disabled:cursor-not-allowed disabled:opacity-50\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tDelete offline videos\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t<span className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t{offlineVideos.downloadedVideos} of {offlineVideos.totalVideos}{' '}\n\t\t\t\t\t\t\tdownloaded\n\t\t\t\t\t\t\t{offlineVideoNotes ? ` (${offlineVideoNotes})` : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t{offlineVideos.downloadedVideos > 0 ? (\n\t\t\t\t\t\t\t<p>Downloaded size: {formatBytes(offlineVideos.totalBytes)}</p>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{showRemainingDownloadSize ? (\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\tDownload all size:{' '}\n\t\t\t\t\t\t\t\t{formatBytes(offlineVideos.remainingDownloadBytes)}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t\t{isDownloading ? (\n\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\tDownloading {offlineVideos.downloadState.completed} of{' '}\n\t\t\t\t\t\t\t\t{offlineVideos.downloadState.total} videos\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{offlineVideos.downloadState.current ? (\n\t\t\t\t\t\t\t\t<p className=\"truncate\">\n\t\t\t\t\t\t\t\t\tCurrent: {offlineVideos.downloadState.current.title}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</section>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n"],"names":["downloadResolutionOptions","value","label","preferences","_UNSAFE_withComponentProps","loaderData","useLoaderData","rootData","useRootLoaderData","playerPreferences","player","offlineVideoPreferences","offlineVideo","fontSizePreference","fontSize","presencePreferences","presence","playgroundPreferences","playground","exerciseWarningPreferences","exerciseWarning","navigation","useNavigation","offlineVideosFetcher","useFetcher","offlineVideos","data","isDownloading","downloadState","status","offlineVideoNotes","unavailableVideos","notDownloadableVideos","filter","Boolean","join","showRemainingDownloadSize","totalVideos","downloadedVideos","remainingDownloadBytes","isSubmitting","state","useInterval","load","className","children","jsxs","jsx","Form","method","htmlFor","id","name","defaultValue","minResolution","maxResolution","downloadResolution","map","option","SimpleTooltip","content","Icon","tabIndex","type","step","min","max","defaultChecked","optOut","persist","dismissed","Button","varient","disabled","Link","to","formatBytes","totalBytes","completed","total","current","title"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{r as a}from"./index-CqIc3cxq.js";import{I as n}from"./misc-W4055b-0.js";function d({exerciseNumber:r}){const[t,s]=a.useState(!1),i=r?`Please quiz me on exercise ${r} using the epicshop MCP server. Call the get_quiz_instructions tool with exerciseNumber "${r}" to get the quiz instructions, then quiz me one question at a time.`:"Please quiz me on this workshop using the epicshop MCP server. Call the get_quiz_instructions tool to get the quiz instructions, then quiz me one question at a time.";a.useEffect(()=>{if(t){const o=setTimeout(()=>s(!1),1e3);return()=>clearTimeout(o)}},[t]);const l=async()=>{try{await navigator.clipboard.writeText(i),s(!0)}catch(o){console.error("Failed to copy to clipboard:",o)}};return e.jsxs("div",{className:"border-t border-border pt-6 mt-6",children:[e.jsx("h2",{className:"text-foreground text-xl font-semibold mb-3",children:"Test Your Knowledge"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"Retrieval practice helps solidify learning by actively recalling information. Use this prompt with your AI assistant to quiz yourself on what you've learned."}),e.jsxs("div",{className:"bg-background border border-border rounded-lg p-4 mb-4 relative",children:[e.jsx("pre",{className:"text-foreground text-sm whitespace-pre-wrap break-words pr-10",children:i}),e.jsx("button",{onClick:l,className:"absolute top-4 right-4 text-muted-foreground hover:text-foreground transition-colors","aria-label":t?"Copied!":"Copy prompt to clipboard",children:e.jsx(n,{name:t?"CheckSmall":"Copy",size:"sm"})})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:e.jsxs("a",{href:"https://www.epicai.pro/your-ai-assistant-instructor-the-epicshop-mcp-server-0eazr",target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline inline-flex items-center gap-1.5",children:["Learn how to set up the epicshop MCP server",e.jsx(n,{name:"ExternalLink",size:"sm"})]})})]})}export{d as R};
2
- //# sourceMappingURL=retrieval-practice-CBwxJaFi.js.map
1
+ import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{r as a}from"./index-CqIc3cxq.js";import{I as n}from"./misc-W4055b-0.js";function d({exerciseNumber:r}){const[t,s]=a.useState(!1),i=r?`Please quiz me on exercise ${r} using the epicshop MCP server. Call the get_quiz_instructions tool with exerciseNumber "${r}" to get the quiz instructions, then quiz me one question at a time.`:"Please quiz me on this workshop using the epicshop MCP server. Call the get_quiz_instructions tool to get the quiz instructions, then quiz me one question at a time.";a.useEffect(()=>{if(t){const o=setTimeout(()=>s(!1),1e3);return()=>clearTimeout(o)}},[t]);const l=async()=>{try{await navigator.clipboard.writeText(i),s(!0)}catch(o){console.error("Failed to copy to clipboard:",o)}};return e.jsxs("div",{className:"border-border mt-6 border-t pt-6",children:[e.jsx("h2",{className:"text-foreground mb-3 text-xl font-semibold",children:"Test Your Knowledge"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"Retrieval practice helps solidify learning by actively recalling information. Use this prompt with your AI assistant to quiz yourself on what you've learned."}),e.jsxs("div",{className:"bg-background border-border relative mb-4 rounded-lg border p-4",children:[e.jsx("pre",{className:"text-foreground pr-10 text-sm break-words whitespace-pre-wrap",children:i}),e.jsx("button",{onClick:l,className:"text-muted-foreground hover:text-foreground absolute top-4 right-4 transition-colors","aria-label":t?"Copied!":"Copy prompt to clipboard",children:e.jsx(n,{name:t?"CheckSmall":"Copy",size:"sm"})})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:e.jsxs("a",{href:"https://www.epicai.pro/your-ai-assistant-instructor-the-epicshop-mcp-server-0eazr",target:"_blank",rel:"noopener noreferrer",className:"text-foreground inline-flex items-center gap-1.5 hover:underline",children:["Learn how to set up the epicshop MCP server",e.jsx(n,{name:"ExternalLink",size:"sm"})]})})]})}export{d as R};
2
+ //# sourceMappingURL=retrieval-practice-BOku32wW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"retrieval-practice-CBwxJaFi.js","sources":["../../../app/components/retrieval-practice.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Icon } from '#app/components/icons.tsx'\n\nexport function RetrievalPractice({\n\texerciseNumber,\n}: {\n\texerciseNumber?: number\n}) {\n\tconst [copied, setCopied] = React.useState(false)\n\n\tconst prompt = exerciseNumber\n\t\t? `Please quiz me on exercise ${exerciseNumber} using the epicshop MCP server. Call the get_quiz_instructions tool with exerciseNumber \"${exerciseNumber}\" to get the quiz instructions, then quiz me one question at a time.`\n\t\t: `Please quiz me on this workshop using the epicshop MCP server. Call the get_quiz_instructions tool to get the quiz instructions, then quiz me one question at a time.`\n\n\tReact.useEffect(() => {\n\t\tif (copied) {\n\t\t\tconst timeoutId = setTimeout(() => setCopied(false), 1000)\n\t\t\treturn () => clearTimeout(timeoutId)\n\t\t}\n\t}, [copied])\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(prompt)\n\t\t\tsetCopied(true)\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to copy to clipboard:', error)\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"border-t border-border pt-6 mt-6\">\n\t\t\t<h2 className=\"text-foreground text-xl font-semibold mb-3\">\n\t\t\t\tTest Your Knowledge\n\t\t\t</h2>\n\t\t\t<p className=\"text-muted-foreground mb-4\">\n\t\t\t\tRetrieval practice helps solidify learning by actively recalling\n\t\t\t\tinformation. Use this prompt with your AI assistant to quiz yourself on\n\t\t\t\twhat you've learned.\n\t\t\t</p>\n\t\t\t<div className=\"bg-background border border-border rounded-lg p-4 mb-4 relative\">\n\t\t\t\t<pre className=\"text-foreground text-sm whitespace-pre-wrap break-words pr-10\">\n\t\t\t\t\t{prompt}\n\t\t\t\t</pre>\n\t\t\t\t<button\n\t\t\t\t\tonClick={handleCopy}\n\t\t\t\t\tclassName=\"absolute top-4 right-4 text-muted-foreground hover:text-foreground transition-colors\"\n\t\t\t\t\taria-label={copied ? 'Copied!' : 'Copy prompt to clipboard'}\n\t\t\t\t>\n\t\t\t\t\t<Icon name={copied ? 'CheckSmall' : 'Copy'} size=\"sm\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://www.epicai.pro/your-ai-assistant-instructor-the-epicshop-mcp-server-0eazr\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tclassName=\"text-foreground hover:underline inline-flex items-center gap-1.5\"\n\t\t\t\t>\n\t\t\t\t\tLearn how to set up the epicshop MCP server\n\t\t\t\t\t<Icon name=\"ExternalLink\" size=\"sm\" />\n\t\t\t\t</a>\n\t\t\t</p>\n\t\t</div>\n\t)\n}\n"],"names":["RetrievalPractice","exerciseNumber","copied","setCopied","React.useState","prompt","React.useEffect","timeoutId","handleCopy","error","jsxs","jsx","Icon"],"mappings":"6HAGO,SAASA,EAAkB,CACjC,eAAAC,CACD,EAEG,CACF,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAe,EAAK,EAE1CC,EAASJ,EACZ,8BAA8BA,CAAc,4FAA4FA,CAAc,uEACtJ,wKAEHK,EAAAA,UAAgB,IAAM,CACrB,GAAIJ,EAAQ,CACX,MAAMK,EAAY,WAAW,IAAMJ,EAAU,EAAK,EAAG,GAAI,EACzD,MAAO,IAAM,aAAaI,CAAS,CACpC,CACD,EAAG,CAACL,CAAM,CAAC,EAEX,MAAMM,EAAa,SAAY,CAC9B,GAAI,CACH,MAAM,UAAU,UAAU,UAAUH,CAAM,EAC1CF,EAAU,EAAI,CACf,OAASM,EAAO,CACf,QAAQ,MAAM,+BAAgCA,CAAK,CACpD,CACD,EAEA,OACCC,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACd,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,6CAA6C,SAAA,sBAE3D,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,gKAI1C,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,kEACd,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,gEACb,SAAAN,EACF,EACAM,EAAAA,IAAC,SAAA,CACA,QAASH,EACT,UAAU,uFACV,aAAYN,EAAS,UAAY,2BAEjC,eAACU,EAAA,CAAK,KAAMV,EAAS,aAAe,OAAQ,KAAK,IAAA,CAAK,CAAA,CAAA,CACvD,EACD,EACAS,EAAAA,IAAC,IAAA,CAAE,UAAU,gCACZ,SAAAD,EAAAA,KAAC,IAAA,CACA,KAAK,oFACL,OAAO,SACP,IAAI,sBACJ,UAAU,mEACV,SAAA,CAAA,8CAEAC,EAAAA,IAACC,EAAA,CAAK,KAAK,eAAe,KAAK,IAAA,CAAK,CAAA,CAAA,CAAA,CACrC,CACD,CAAA,EACD,CAEF"}
1
+ {"version":3,"file":"retrieval-practice-BOku32wW.js","sources":["../../../app/components/retrieval-practice.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Icon } from '#app/components/icons.tsx'\n\nexport function RetrievalPractice({\n\texerciseNumber,\n}: {\n\texerciseNumber?: number\n}) {\n\tconst [copied, setCopied] = React.useState(false)\n\n\tconst prompt = exerciseNumber\n\t\t? `Please quiz me on exercise ${exerciseNumber} using the epicshop MCP server. Call the get_quiz_instructions tool with exerciseNumber \"${exerciseNumber}\" to get the quiz instructions, then quiz me one question at a time.`\n\t\t: `Please quiz me on this workshop using the epicshop MCP server. Call the get_quiz_instructions tool to get the quiz instructions, then quiz me one question at a time.`\n\n\tReact.useEffect(() => {\n\t\tif (copied) {\n\t\t\tconst timeoutId = setTimeout(() => setCopied(false), 1000)\n\t\t\treturn () => clearTimeout(timeoutId)\n\t\t}\n\t}, [copied])\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(prompt)\n\t\t\tsetCopied(true)\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to copy to clipboard:', error)\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"border-border mt-6 border-t pt-6\">\n\t\t\t<h2 className=\"text-foreground mb-3 text-xl font-semibold\">\n\t\t\t\tTest Your Knowledge\n\t\t\t</h2>\n\t\t\t<p className=\"text-muted-foreground mb-4\">\n\t\t\t\tRetrieval practice helps solidify learning by actively recalling\n\t\t\t\tinformation. Use this prompt with your AI assistant to quiz yourself on\n\t\t\t\twhat you've learned.\n\t\t\t</p>\n\t\t\t<div className=\"bg-background border-border relative mb-4 rounded-lg border p-4\">\n\t\t\t\t<pre className=\"text-foreground pr-10 text-sm break-words whitespace-pre-wrap\">\n\t\t\t\t\t{prompt}\n\t\t\t\t</pre>\n\t\t\t\t<button\n\t\t\t\t\tonClick={handleCopy}\n\t\t\t\t\tclassName=\"text-muted-foreground hover:text-foreground absolute top-4 right-4 transition-colors\"\n\t\t\t\t\taria-label={copied ? 'Copied!' : 'Copy prompt to clipboard'}\n\t\t\t\t>\n\t\t\t\t\t<Icon name={copied ? 'CheckSmall' : 'Copy'} size=\"sm\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://www.epicai.pro/your-ai-assistant-instructor-the-epicshop-mcp-server-0eazr\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tclassName=\"text-foreground inline-flex items-center gap-1.5 hover:underline\"\n\t\t\t\t>\n\t\t\t\t\tLearn how to set up the epicshop MCP server\n\t\t\t\t\t<Icon name=\"ExternalLink\" size=\"sm\" />\n\t\t\t\t</a>\n\t\t\t</p>\n\t\t</div>\n\t)\n}\n"],"names":["RetrievalPractice","exerciseNumber","copied","setCopied","React.useState","prompt","React.useEffect","timeoutId","handleCopy","error","jsxs","jsx","Icon"],"mappings":"6HAGO,SAASA,EAAkB,CACjC,eAAAC,CACD,EAEG,CACF,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAe,EAAK,EAE1CC,EAASJ,EACZ,8BAA8BA,CAAc,4FAA4FA,CAAc,uEACtJ,wKAEHK,EAAAA,UAAgB,IAAM,CACrB,GAAIJ,EAAQ,CACX,MAAMK,EAAY,WAAW,IAAMJ,EAAU,EAAK,EAAG,GAAI,EACzD,MAAO,IAAM,aAAaI,CAAS,CACpC,CACD,EAAG,CAACL,CAAM,CAAC,EAEX,MAAMM,EAAa,SAAY,CAC9B,GAAI,CACH,MAAM,UAAU,UAAU,UAAUH,CAAM,EAC1CF,EAAU,EAAI,CACf,OAASM,EAAO,CACf,QAAQ,MAAM,+BAAgCA,CAAK,CACpD,CACD,EAEA,OACCC,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACd,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,6CAA6C,SAAA,sBAE3D,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,gKAI1C,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,kEACd,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,gEACb,SAAAN,EACF,EACAM,EAAAA,IAAC,SAAA,CACA,QAASH,EACT,UAAU,uFACV,aAAYN,EAAS,UAAY,2BAEjC,eAACU,EAAA,CAAK,KAAMV,EAAS,aAAe,OAAQ,KAAK,IAAA,CAAK,CAAA,CAAA,CACvD,EACD,EACAS,EAAAA,IAAC,IAAA,CAAE,UAAU,gCACZ,SAAAD,EAAAA,KAAC,IAAA,CACA,KAAK,oFACL,OAAO,SACP,IAAI,sBACJ,UAAU,mEACV,SAAA,CAAA,8CAEAC,EAAAA,IAACC,EAAA,CAAK,KAAK,eAAe,KAAK,IAAA,CAAK,CAAA,CAAA,CAAA,CACrC,CACD,CAAA,EACD,CAEF"}
@@ -0,0 +1,2 @@
1
+ import{w as r,b as p}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as m}from"./jsx-runtime-C5WNSv3b.js";import{a as i}from"./tests-CZ2AhDKA.js";import"./index-CqIc3cxq.js";import"./accordion-CQ7oujC6.js";import"./tooltip-Tlsyx2YO.js";import"./index-vDCSPjrM.js";import"./misc-W4055b-0.js";import"./index-CJDOQ1bl.js";import"./index-ynYvVAOK.js";import"./epic-video-CC0372g5.js";import"@epic-web/workshop-utils/offline-video-utils";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-CdzVFL-Z.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./format-CZ5n8p10.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./playground-window-x2mQ5o1O.js";import"./set-playground-BSGwH9dH.js";import"./button-Cd-ekki5.js";import"./onboarding-indicator-B-XR90_G.js";import"./progress-bar-DpWhcyhC.js";import"./dialog-CzO65Z5w.js";const z=r(function(){const{appInfo:t,userHasAccess:o}=p();return m.jsx(i,{playgroundAppInfo:t,userHasAccess:o},t.name)});export{z as default};
2
+ //# sourceMappingURL=test-Ciw2aKZE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-BU7jE-eU.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test.tsx"],"sourcesContent":["import { requireExerciseApp } from '@epic-web/workshop-utils/apps.server'\nimport { userHasAccessToExerciseStep } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tdata,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\tuseLoaderData,\n} from 'react-router'\nimport { TestUI } from './__shared/tests.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exercise-step-test')\n\tconst exerciseStepApp = await requireExerciseApp(params, { request, timings })\n\n\treturn data(\n\t\t{\n\t\t\tappInfo: {\n\t\t\t\tname: exerciseStepApp?.name,\n\t\t\t\ttest: exerciseStepApp?.test,\n\t\t\t},\n\t\t\tuserHasAccess: await userHasAccessToExerciseStep({\n\t\t\t\texerciseNumber: Number(params.exerciseNumber),\n\t\t\t\tstepNumber: Number(params.stepNumber),\n\t\t\t\trequest,\n\t\t\t\ttimings,\n\t\t\t}),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': timings.toString(),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function TestsList() {\n\tconst { appInfo, userHasAccess } = useLoaderData<typeof loader>()\n\n\treturn (\n\t\t<TestUI\n\t\t\tkey={appInfo.name}\n\t\t\tplaygroundAppInfo={appInfo}\n\t\t\tuserHasAccess={userHasAccess}\n\t\t/>\n\t)\n}\n"],"names":["test","_UNSAFE_withComponentProps","appInfo","userHasAccess","useLoaderData","jsx","TestUI","playgroundAppInfo","name"],"mappings":"i4BA+CA,MAAAA,EAAAC,EAAA,UAAoC,CACnC,KAAM,CAAEC,QAAAA,EAASC,cAAAA,GAAkBC,EAAA,EAEnC,OACCC,EAAAA,IAACC,EAAA,CAEAC,kBAAmBL,EACnBC,cAAAA,CAAA,EAFKD,EAAQM,IAGd,CAEF,CAAA"}
1
+ {"version":3,"file":"test-Ciw2aKZE.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test.tsx"],"sourcesContent":["import { requireExerciseApp } from '@epic-web/workshop-utils/apps.server'\nimport { userHasAccessToExerciseStep } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tdata,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\tuseLoaderData,\n} from 'react-router'\nimport { TestUI } from './__shared/tests.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exercise-step-test')\n\tconst exerciseStepApp = await requireExerciseApp(params, { request, timings })\n\n\treturn data(\n\t\t{\n\t\t\tappInfo: {\n\t\t\t\tname: exerciseStepApp?.name,\n\t\t\t\ttest: exerciseStepApp?.test,\n\t\t\t},\n\t\t\tuserHasAccess: await userHasAccessToExerciseStep({\n\t\t\t\texerciseNumber: Number(params.exerciseNumber),\n\t\t\t\tstepNumber: Number(params.stepNumber),\n\t\t\t\trequest,\n\t\t\t\ttimings,\n\t\t\t}),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': timings.toString(),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function TestsList() {\n\tconst { appInfo, userHasAccess } = useLoaderData<typeof loader>()\n\n\treturn (\n\t\t<TestUI\n\t\t\tkey={appInfo.name}\n\t\t\tplaygroundAppInfo={appInfo}\n\t\t\tuserHasAccess={userHasAccess}\n\t\t/>\n\t)\n}\n"],"names":["test","_UNSAFE_withComponentProps","appInfo","userHasAccess","useLoaderData","jsx","TestUI","playgroundAppInfo","name"],"mappings":"m9BA+CA,MAAAA,EAAAC,EAAA,UAAoC,CACnC,KAAM,CAAEC,QAAAA,EAASC,cAAAA,GAAkBC,EAAA,EAEnC,OACCC,EAAAA,IAACC,EAAA,CAEAC,kBAAmBL,EACnBC,cAAAA,CAAA,EAFKD,EAAQM,IAGd,CAEF,CAAA"}
@@ -1,4 +1,4 @@
1
- import{j as s}from"./jsx-runtime-C5WNSv3b.js";import{g as Rt,r as L}from"./index-CqIc3cxq.js";import{R as kt,A as Ct,m as Mt}from"./accordion-CQ7oujC6.js";import{l as Ht,f as nt,A as $t}from"./chunk-EPOLDU6W-BCLmut3y.js";import{D as Ot}from"./epic-video-DnXXh6qE.js";import{I as N,p as st}from"./misc-W4055b-0.js";import{u as gt}from"./index-CdzVFL-Z.js";import{u as z,o as I,k as _t,n as G,s as Q,l as k,i as ht,m as Ut}from"./schemas-Uj5SZtvt.js";import{S as K}from"./tooltip-Tlsyx2YO.js";import{u as Ft}from"./use-event-source-BuD4_2SF.js";import{u as ot}from"./pe-CIZUOJMr.js";import{P as It}from"./playground-window-x2mQ5o1O.js";var W={},U={};const Pt="Á",Bt="á",Vt="Ă",Gt="ă",Xt="∾",zt="∿",Yt="∾̳",Jt="Â",Qt="â",Kt="´",Zt="А",Wt="а",tn="Æ",nn="æ",sn="⁡",on="𝔄",cn="𝔞",en="À",rn="à",an="ℵ",ln="ℵ",un="Α",dn="α",pn="Ā",fn="ā",mn="⨿",gn="&",hn="&",bn="⩕",vn="⩓",xn="∧",wn="⩜",yn="⩘",qn="⩚",Ln="∠",Tn="⦤",Sn="∠",En="⦨",jn="⦩",An="⦪",Dn="⦫",Nn="⦬",Rn="⦭",kn="⦮",Cn="⦯",Mn="∡",Hn="∟",$n="⊾",On="⦝",_n="∢",Un="Å",Fn="⍼",In="Ą",Pn="ą",Bn="𝔸",Vn="𝕒",Gn="⩯",Xn="≈",zn="⩰",Yn="≊",Jn="≋",Qn="'",Kn="⁡",Zn="≈",Wn="≊",ts="Å",ns="å",ss="𝒜",os="𝒶",cs="≔",es="*",rs="≈",as="≍",is="Ã",ls="ã",us="Ä",ds="ä",ps="∳",fs="⨑",ms="≌",gs="϶",hs="‵",bs="∽",vs="⋍",xs="∖",ws="⫧",ys="⊽",qs="⌅",Ls="⌆",Ts="⌅",Ss="⎵",Es="⎶",js="≌",As="Б",Ds="б",Ns="„",Rs="∵",ks="∵",Cs="∵",Ms="⦰",Hs="϶",$s="ℬ",Os="ℬ",_s="Β",Us="β",Fs="ℶ",Is="≬",Ps="𝔅",Bs="𝔟",Vs="⋂",Gs="◯",Xs="⋃",zs="⨀",Ys="⨁",Js="⨂",Qs="⨆",Ks="★",Zs="▽",Ws="△",to="⨄",no="⋁",so="⋀",oo="⤍",co="⧫",eo="▪",ro="▴",ao="▾",io="◂",lo="▸",uo="␣",po="▒",fo="░",mo="▓",go="█",ho="=⃥",bo="≡⃥",vo="⫭",xo="⌐",wo="𝔹",yo="𝕓",qo="⊥",Lo="⊥",To="⋈",So="⧉",Eo="┐",jo="╕",Ao="╖",Do="╗",No="┌",Ro="╒",ko="╓",Co="╔",Mo="─",Ho="═",$o="┬",Oo="╤",_o="╥",Uo="╦",Fo="┴",Io="╧",Po="╨",Bo="╩",Vo="⊟",Go="⊞",Xo="⊠",zo="┘",Yo="╛",Jo="╜",Qo="╝",Ko="└",Zo="╘",Wo="╙",tc="╚",nc="│",sc="║",oc="┼",cc="╪",ec="╫",rc="╬",ac="┤",ic="╡",lc="╢",uc="╣",dc="├",pc="╞",fc="╟",mc="╠",gc="‵",hc="˘",bc="˘",vc="¦",xc="𝒷",wc="ℬ",yc="⁏",qc="∽",Lc="⋍",Tc="⧅",Sc="\\",Ec="⟈",jc="•",Ac="•",Dc="≎",Nc="⪮",Rc="≏",kc="≎",Cc="≏",Mc="Ć",Hc="ć",$c="⩄",Oc="⩉",_c="⩋",Uc="∩",Fc="⋒",Ic="⩇",Pc="⩀",Bc="ⅅ",Vc="∩︀",Gc="⁁",Xc="ˇ",zc="ℭ",Yc="⩍",Jc="Č",Qc="č",Kc="Ç",Zc="ç",Wc="Ĉ",te="ĉ",ne="∰",se="⩌",oe="⩐",ce="Ċ",ee="ċ",re="¸",ae="¸",ie="⦲",le="¢",ue="·",de="·",pe="𝔠",fe="ℭ",me="Ч",ge="ч",he="✓",be="✓",ve="Χ",xe="χ",we="ˆ",ye="≗",qe="↺",Le="↻",Te="⊛",Se="⊚",Ee="⊝",je="⊙",Ae="®",De="Ⓢ",Ne="⊖",Re="⊕",ke="⊗",Ce="○",Me="⧃",He="≗",$e="⨐",Oe="⫯",_e="⧂",Ue="∲",Fe="”",Ie="’",Pe="♣",Be="♣",Ve=":",Ge="∷",Xe="⩴",ze="≔",Ye="≔",Je=",",Qe="@",Ke="∁",Ze="∘",We="∁",tr="ℂ",nr="≅",sr="⩭",or="≡",cr="∮",er="∯",rr="∮",ar="𝕔",ir="ℂ",lr="∐",ur="∐",dr="©",pr="©",fr="℗",mr="∳",gr="↵",hr="✗",br="⨯",vr="𝒞",xr="𝒸",wr="⫏",yr="⫑",qr="⫐",Lr="⫒",Tr="⋯",Sr="⤸",Er="⤵",jr="⋞",Ar="⋟",Dr="↶",Nr="⤽",Rr="⩈",kr="⩆",Cr="≍",Mr="∪",Hr="⋓",$r="⩊",Or="⊍",_r="⩅",Ur="∪︀",Fr="↷",Ir="⤼",Pr="⋞",Br="⋟",Vr="⋎",Gr="⋏",Xr="¤",zr="↶",Yr="↷",Jr="⋎",Qr="⋏",Kr="∲",Zr="∱",Wr="⌭",ta="†",na="‡",sa="ℸ",oa="↓",ca="↡",ea="⇓",ra="‐",aa="⫤",ia="⊣",la="⤏",ua="˝",da="Ď",pa="ď",fa="Д",ma="д",ga="‡",ha="⇊",ba="ⅅ",va="ⅆ",xa="⤑",wa="⩷",ya="°",qa="∇",La="Δ",Ta="δ",Sa="⦱",Ea="⥿",ja="𝔇",Aa="𝔡",Da="⥥",Na="⇃",Ra="⇂",ka="´",Ca="˙",Ma="˝",Ha="`",$a="˜",Oa="⋄",_a="⋄",Ua="⋄",Fa="♦",Ia="♦",Pa="¨",Ba="ⅆ",Va="ϝ",Ga="⋲",Xa="÷",za="÷",Ya="⋇",Ja="⋇",Qa="Ђ",Ka="ђ",Za="⌞",Wa="⌍",ti="$",ni="𝔻",si="𝕕",oi="¨",ci="˙",ei="⃜",ri="≐",ai="≑",ii="≐",li="∸",ui="∔",di="⊡",pi="⌆",fi="∯",mi="¨",gi="⇓",hi="⇐",bi="⇔",vi="⫤",xi="⟸",wi="⟺",yi="⟹",qi="⇒",Li="⊨",Ti="⇑",Si="⇕",Ei="∥",ji="⤓",Ai="↓",Di="↓",Ni="⇓",Ri="⇵",ki="̑",Ci="⇊",Mi="⇃",Hi="⇂",$i="⥐",Oi="⥞",_i="⥖",Ui="↽",Fi="⥟",Ii="⥗",Pi="⇁",Bi="↧",Vi="⊤",Gi="⤐",Xi="⌟",zi="⌌",Yi="𝒟",Ji="𝒹",Qi="Ѕ",Ki="ѕ",Zi="⧶",Wi="Đ",tl="đ",nl="⋱",sl="▿",ol="▾",cl="⇵",el="⥯",rl="⦦",al="Џ",il="џ",ll="⟿",ul="É",dl="é",pl="⩮",fl="Ě",ml="ě",gl="Ê",hl="ê",bl="≖",vl="≕",xl="Э",wl="э",yl="⩷",ql="Ė",Ll="ė",Tl="≑",Sl="ⅇ",El="≒",jl="𝔈",Al="𝔢",Dl="⪚",Nl="È",Rl="è",kl="⪖",Cl="⪘",Ml="⪙",Hl="∈",$l="⏧",Ol="ℓ",_l="⪕",Ul="⪗",Fl="Ē",Il="ē",Pl="∅",Bl="∅",Vl="◻",Gl="∅",Xl="▫",zl=" ",Yl=" ",Jl=" ",Ql="Ŋ",Kl="ŋ",Zl=" ",Wl="Ę",tu="ę",nu="𝔼",su="𝕖",ou="⋕",cu="⧣",eu="⩱",ru="ε",au="Ε",iu="ε",lu="ϵ",uu="≖",du="≕",pu="≂",fu="⪖",mu="⪕",gu="⩵",hu="=",bu="≂",vu="≟",xu="⇌",wu="≡",yu="⩸",qu="⧥",Lu="⥱",Tu="≓",Su="ℯ",Eu="ℰ",ju="≐",Au="⩳",Du="≂",Nu="Η",Ru="η",ku="Ð",Cu="ð",Mu="Ë",Hu="ë",$u="€",Ou="!",_u="∃",Uu="∃",Fu="ℰ",Iu="ⅇ",Pu="ⅇ",Bu="≒",Vu="Ф",Gu="ф",Xu="♀",zu="ffi",Yu="ff",Ju="ffl",Qu="𝔉",Ku="𝔣",Zu="fi",Wu="◼",td="▪",nd="fj",sd="♭",od="fl",cd="▱",ed="ƒ",rd="𝔽",ad="𝕗",id="∀",ld="∀",ud="⋔",dd="⫙",pd="ℱ",fd="⨍",md="½",gd="⅓",hd="¼",bd="⅕",vd="⅙",xd="⅛",wd="⅔",yd="⅖",qd="¾",Ld="⅗",Td="⅜",Sd="⅘",Ed="⅚",jd="⅝",Ad="⅞",Dd="⁄",Nd="⌢",Rd="𝒻",kd="ℱ",Cd="ǵ",Md="Γ",Hd="γ",$d="Ϝ",Od="ϝ",_d="⪆",Ud="Ğ",Fd="ğ",Id="Ģ",Pd="Ĝ",Bd="ĝ",Vd="Г",Gd="г",Xd="Ġ",zd="ġ",Yd="≥",Jd="≧",Qd="⪌",Kd="⋛",Zd="≥",Wd="≧",tp="⩾",np="⪩",sp="⩾",op="⪀",cp="⪂",ep="⪄",rp="⋛︀",ap="⪔",ip="𝔊",lp="𝔤",up="≫",dp="⋙",pp="⋙",fp="ℷ",mp="Ѓ",gp="ѓ",hp="⪥",bp="≷",vp="⪒",xp="⪤",wp="⪊",yp="⪊",qp="⪈",Lp="≩",Tp="⪈",Sp="≩",Ep="⋧",jp="𝔾",Ap="𝕘",Dp="`",Np="≥",Rp="⋛",kp="≧",Cp="⪢",Mp="≷",Hp="⩾",$p="≳",Op="𝒢",_p="ℊ",Up="≳",Fp="⪎",Ip="⪐",Pp="⪧",Bp="⩺",Vp=">",Gp=">",Xp="≫",zp="⋗",Yp="⦕",Jp="⩼",Qp="⪆",Kp="⥸",Zp="⋗",Wp="⋛",tf="⪌",nf="≷",sf="≳",of="≩︀",cf="≩︀",ef="ˇ",rf=" ",af="½",lf="ℋ",uf="Ъ",df="ъ",pf="⥈",ff="↔",mf="⇔",gf="↭",hf="^",bf="ℏ",vf="Ĥ",xf="ĥ",wf="♥",yf="♥",qf="…",Lf="⊹",Tf="𝔥",Sf="ℌ",Ef="ℋ",jf="⤥",Af="⤦",Df="⇿",Nf="∻",Rf="↩",kf="↪",Cf="𝕙",Mf="ℍ",Hf="―",$f="─",Of="𝒽",_f="ℋ",Uf="ℏ",Ff="Ħ",If="ħ",Pf="≎",Bf="≏",Vf="⁃",Gf="‐",Xf="Í",zf="í",Yf="⁣",Jf="Î",Qf="î",Kf="И",Zf="и",Wf="İ",tm="Е",nm="е",sm="¡",om="⇔",cm="𝔦",em="ℑ",rm="Ì",am="ì",im="ⅈ",lm="⨌",um="∭",dm="⧜",pm="℩",fm="IJ",mm="ij",gm="Ī",hm="ī",bm="ℑ",vm="ⅈ",xm="ℐ",wm="ℑ",ym="ı",qm="ℑ",Lm="⊷",Tm="Ƶ",Sm="⇒",Em="℅",jm="∞",Am="⧝",Dm="ı",Nm="⊺",Rm="∫",km="∬",Cm="ℤ",Mm="∫",Hm="⊺",$m="⋂",Om="⨗",_m="⨼",Um="⁣",Fm="⁢",Im="Ё",Pm="ё",Bm="Į",Vm="į",Gm="𝕀",Xm="𝕚",zm="Ι",Ym="ι",Jm="⨼",Qm="¿",Km="𝒾",Zm="ℐ",Wm="∈",tg="⋵",ng="⋹",sg="⋴",og="⋳",cg="∈",eg="⁢",rg="Ĩ",ag="ĩ",ig="І",lg="і",ug="Ï",dg="ï",pg="Ĵ",fg="ĵ",mg="Й",gg="й",hg="𝔍",bg="𝔧",vg="ȷ",xg="𝕁",wg="𝕛",yg="𝒥",qg="𝒿",Lg="Ј",Tg="ј",Sg="Є",Eg="є",jg="Κ",Ag="κ",Dg="ϰ",Ng="Ķ",Rg="ķ",kg="К",Cg="к",Mg="𝔎",Hg="𝔨",$g="ĸ",Og="Х",_g="х",Ug="Ќ",Fg="ќ",Ig="𝕂",Pg="𝕜",Bg="𝒦",Vg="𝓀",Gg="⇚",Xg="Ĺ",zg="ĺ",Yg="⦴",Jg="ℒ",Qg="Λ",Kg="λ",Zg="⟨",Wg="⟪",th="⦑",nh="⟨",sh="⪅",oh="ℒ",ch="«",eh="⇤",rh="⤟",ah="←",ih="↞",lh="⇐",uh="⤝",dh="↩",ph="↫",fh="⤹",mh="⥳",gh="↢",hh="⤙",bh="⤛",vh="⪫",xh="⪭",wh="⪭︀",yh="⤌",qh="⤎",Lh="❲",Th="{",Sh="[",Eh="⦋",jh="⦏",Ah="⦍",Dh="Ľ",Nh="ľ",Rh="Ļ",kh="ļ",Ch="⌈",Mh="{",Hh="Л",$h="л",Oh="⤶",_h="“",Uh="„",Fh="⥧",Ih="⥋",Ph="↲",Bh="≤",Vh="≦",Gh="⟨",Xh="⇤",zh="←",Yh="←",Jh="⇐",Qh="⇆",Kh="↢",Zh="⌈",Wh="⟦",tb="⥡",nb="⥙",sb="⇃",ob="⌊",cb="↽",eb="↼",rb="⇇",ab="↔",ib="↔",lb="⇔",ub="⇆",db="⇋",pb="↭",fb="⥎",mb="↤",gb="⊣",hb="⥚",bb="⋋",vb="⧏",xb="⊲",wb="⊴",yb="⥑",qb="⥠",Lb="⥘",Tb="↿",Sb="⥒",Eb="↼",jb="⪋",Ab="⋚",Db="≤",Nb="≦",Rb="⩽",kb="⪨",Cb="⩽",Mb="⩿",Hb="⪁",$b="⪃",Ob="⋚︀",_b="⪓",Ub="⪅",Fb="⋖",Ib="⋚",Pb="⪋",Bb="⋚",Vb="≦",Gb="≶",Xb="≶",zb="⪡",Yb="≲",Jb="⩽",Qb="≲",Kb="⥼",Zb="⌊",Wb="𝔏",tv="𝔩",nv="≶",sv="⪑",ov="⥢",cv="↽",ev="↼",rv="⥪",av="▄",iv="Љ",lv="љ",uv="⇇",dv="≪",pv="⋘",fv="⌞",mv="⇚",gv="⥫",hv="◺",bv="Ŀ",vv="ŀ",xv="⎰",wv="⎰",yv="⪉",qv="⪉",Lv="⪇",Tv="≨",Sv="⪇",Ev="≨",jv="⋦",Av="⟬",Dv="⇽",Nv="⟦",Rv="⟵",kv="⟵",Cv="⟸",Mv="⟷",Hv="⟷",$v="⟺",Ov="⟼",_v="⟶",Uv="⟶",Fv="⟹",Iv="↫",Pv="↬",Bv="⦅",Vv="𝕃",Gv="𝕝",Xv="⨭",zv="⨴",Yv="∗",Jv="_",Qv="↙",Kv="↘",Zv="◊",Wv="◊",tx="⧫",nx="(",sx="⦓",ox="⇆",cx="⌟",ex="⇋",rx="⥭",ax="‎",ix="⊿",lx="‹",ux="𝓁",dx="ℒ",px="↰",fx="↰",mx="≲",gx="⪍",hx="⪏",bx="[",vx="‘",xx="‚",wx="Ł",yx="ł",qx="⪦",Lx="⩹",Tx="<",Sx="<",Ex="≪",jx="⋖",Ax="⋋",Dx="⋉",Nx="⥶",Rx="⩻",kx="◃",Cx="⊴",Mx="◂",Hx="⦖",$x="⥊",Ox="⥦",_x="≨︀",Ux="≨︀",Fx="¯",Ix="♂",Px="✠",Bx="✠",Vx="↦",Gx="↦",Xx="↧",zx="↤",Yx="↥",Jx="▮",Qx="⨩",Kx="М",Zx="м",Wx="—",tw="∺",nw="∡",sw=" ",ow="ℳ",cw="𝔐",ew="𝔪",rw="℧",aw="µ",iw="*",lw="⫰",uw="∣",dw="·",pw="⊟",fw="−",mw="∸",gw="⨪",hw="∓",bw="⫛",vw="…",xw="∓",ww="⊧",yw="𝕄",qw="𝕞",Lw="∓",Tw="𝓂",Sw="ℳ",Ew="∾",jw="Μ",Aw="μ",Dw="⊸",Nw="⊸",Rw="∇",kw="Ń",Cw="ń",Mw="∠⃒",Hw="≉",$w="⩰̸",Ow="≋̸",_w="ʼn",Uw="≉",Fw="♮",Iw="ℕ",Pw="♮",Bw=" ",Vw="≎̸",Gw="≏̸",Xw="⩃",zw="Ň",Yw="ň",Jw="Ņ",Qw="ņ",Kw="≇",Zw="⩭̸",Ww="⩂",ty="Н",ny="н",sy="–",oy="⤤",cy="↗",ey="⇗",ry="↗",ay="≠",iy="≐̸",ly="​",uy="​",dy="​",py="​",fy="≢",my="⤨",gy="≂̸",hy="≫",by="≪",vy=`
1
+ import{j as s}from"./jsx-runtime-C5WNSv3b.js";import{g as Rt,r as L}from"./index-CqIc3cxq.js";import{R as kt,A as Ct,m as Mt}from"./accordion-CQ7oujC6.js";import{l as Ht,f as nt,A as $t}from"./chunk-EPOLDU6W-BCLmut3y.js";import{D as Ot}from"./epic-video-CC0372g5.js";import{I as N,p as st}from"./misc-W4055b-0.js";import{u as gt}from"./index-CdzVFL-Z.js";import{u as z,o as I,k as _t,n as G,s as Q,l as k,i as ht,m as Ut}from"./schemas-Uj5SZtvt.js";import{S as K}from"./tooltip-Tlsyx2YO.js";import{u as Ft}from"./use-event-source-BuD4_2SF.js";import{u as ot}from"./pe-CIZUOJMr.js";import{P as It}from"./playground-window-x2mQ5o1O.js";var W={},U={};const Pt="Á",Bt="á",Vt="Ă",Gt="ă",Xt="∾",zt="∿",Yt="∾̳",Jt="Â",Qt="â",Kt="´",Zt="А",Wt="а",tn="Æ",nn="æ",sn="⁡",on="𝔄",cn="𝔞",en="À",rn="à",an="ℵ",ln="ℵ",un="Α",dn="α",pn="Ā",fn="ā",mn="⨿",gn="&",hn="&",bn="⩕",vn="⩓",xn="∧",wn="⩜",yn="⩘",qn="⩚",Ln="∠",Tn="⦤",Sn="∠",En="⦨",jn="⦩",An="⦪",Dn="⦫",Nn="⦬",Rn="⦭",kn="⦮",Cn="⦯",Mn="∡",Hn="∟",$n="⊾",On="⦝",_n="∢",Un="Å",Fn="⍼",In="Ą",Pn="ą",Bn="𝔸",Vn="𝕒",Gn="⩯",Xn="≈",zn="⩰",Yn="≊",Jn="≋",Qn="'",Kn="⁡",Zn="≈",Wn="≊",ts="Å",ns="å",ss="𝒜",os="𝒶",cs="≔",es="*",rs="≈",as="≍",is="Ã",ls="ã",us="Ä",ds="ä",ps="∳",fs="⨑",ms="≌",gs="϶",hs="‵",bs="∽",vs="⋍",xs="∖",ws="⫧",ys="⊽",qs="⌅",Ls="⌆",Ts="⌅",Ss="⎵",Es="⎶",js="≌",As="Б",Ds="б",Ns="„",Rs="∵",ks="∵",Cs="∵",Ms="⦰",Hs="϶",$s="ℬ",Os="ℬ",_s="Β",Us="β",Fs="ℶ",Is="≬",Ps="𝔅",Bs="𝔟",Vs="⋂",Gs="◯",Xs="⋃",zs="⨀",Ys="⨁",Js="⨂",Qs="⨆",Ks="★",Zs="▽",Ws="△",to="⨄",no="⋁",so="⋀",oo="⤍",co="⧫",eo="▪",ro="▴",ao="▾",io="◂",lo="▸",uo="␣",po="▒",fo="░",mo="▓",go="█",ho="=⃥",bo="≡⃥",vo="⫭",xo="⌐",wo="𝔹",yo="𝕓",qo="⊥",Lo="⊥",To="⋈",So="⧉",Eo="┐",jo="╕",Ao="╖",Do="╗",No="┌",Ro="╒",ko="╓",Co="╔",Mo="─",Ho="═",$o="┬",Oo="╤",_o="╥",Uo="╦",Fo="┴",Io="╧",Po="╨",Bo="╩",Vo="⊟",Go="⊞",Xo="⊠",zo="┘",Yo="╛",Jo="╜",Qo="╝",Ko="└",Zo="╘",Wo="╙",tc="╚",nc="│",sc="║",oc="┼",cc="╪",ec="╫",rc="╬",ac="┤",ic="╡",lc="╢",uc="╣",dc="├",pc="╞",fc="╟",mc="╠",gc="‵",hc="˘",bc="˘",vc="¦",xc="𝒷",wc="ℬ",yc="⁏",qc="∽",Lc="⋍",Tc="⧅",Sc="\\",Ec="⟈",jc="•",Ac="•",Dc="≎",Nc="⪮",Rc="≏",kc="≎",Cc="≏",Mc="Ć",Hc="ć",$c="⩄",Oc="⩉",_c="⩋",Uc="∩",Fc="⋒",Ic="⩇",Pc="⩀",Bc="ⅅ",Vc="∩︀",Gc="⁁",Xc="ˇ",zc="ℭ",Yc="⩍",Jc="Č",Qc="č",Kc="Ç",Zc="ç",Wc="Ĉ",te="ĉ",ne="∰",se="⩌",oe="⩐",ce="Ċ",ee="ċ",re="¸",ae="¸",ie="⦲",le="¢",ue="·",de="·",pe="𝔠",fe="ℭ",me="Ч",ge="ч",he="✓",be="✓",ve="Χ",xe="χ",we="ˆ",ye="≗",qe="↺",Le="↻",Te="⊛",Se="⊚",Ee="⊝",je="⊙",Ae="®",De="Ⓢ",Ne="⊖",Re="⊕",ke="⊗",Ce="○",Me="⧃",He="≗",$e="⨐",Oe="⫯",_e="⧂",Ue="∲",Fe="”",Ie="’",Pe="♣",Be="♣",Ve=":",Ge="∷",Xe="⩴",ze="≔",Ye="≔",Je=",",Qe="@",Ke="∁",Ze="∘",We="∁",tr="ℂ",nr="≅",sr="⩭",or="≡",cr="∮",er="∯",rr="∮",ar="𝕔",ir="ℂ",lr="∐",ur="∐",dr="©",pr="©",fr="℗",mr="∳",gr="↵",hr="✗",br="⨯",vr="𝒞",xr="𝒸",wr="⫏",yr="⫑",qr="⫐",Lr="⫒",Tr="⋯",Sr="⤸",Er="⤵",jr="⋞",Ar="⋟",Dr="↶",Nr="⤽",Rr="⩈",kr="⩆",Cr="≍",Mr="∪",Hr="⋓",$r="⩊",Or="⊍",_r="⩅",Ur="∪︀",Fr="↷",Ir="⤼",Pr="⋞",Br="⋟",Vr="⋎",Gr="⋏",Xr="¤",zr="↶",Yr="↷",Jr="⋎",Qr="⋏",Kr="∲",Zr="∱",Wr="⌭",ta="†",na="‡",sa="ℸ",oa="↓",ca="↡",ea="⇓",ra="‐",aa="⫤",ia="⊣",la="⤏",ua="˝",da="Ď",pa="ď",fa="Д",ma="д",ga="‡",ha="⇊",ba="ⅅ",va="ⅆ",xa="⤑",wa="⩷",ya="°",qa="∇",La="Δ",Ta="δ",Sa="⦱",Ea="⥿",ja="𝔇",Aa="𝔡",Da="⥥",Na="⇃",Ra="⇂",ka="´",Ca="˙",Ma="˝",Ha="`",$a="˜",Oa="⋄",_a="⋄",Ua="⋄",Fa="♦",Ia="♦",Pa="¨",Ba="ⅆ",Va="ϝ",Ga="⋲",Xa="÷",za="÷",Ya="⋇",Ja="⋇",Qa="Ђ",Ka="ђ",Za="⌞",Wa="⌍",ti="$",ni="𝔻",si="𝕕",oi="¨",ci="˙",ei="⃜",ri="≐",ai="≑",ii="≐",li="∸",ui="∔",di="⊡",pi="⌆",fi="∯",mi="¨",gi="⇓",hi="⇐",bi="⇔",vi="⫤",xi="⟸",wi="⟺",yi="⟹",qi="⇒",Li="⊨",Ti="⇑",Si="⇕",Ei="∥",ji="⤓",Ai="↓",Di="↓",Ni="⇓",Ri="⇵",ki="̑",Ci="⇊",Mi="⇃",Hi="⇂",$i="⥐",Oi="⥞",_i="⥖",Ui="↽",Fi="⥟",Ii="⥗",Pi="⇁",Bi="↧",Vi="⊤",Gi="⤐",Xi="⌟",zi="⌌",Yi="𝒟",Ji="𝒹",Qi="Ѕ",Ki="ѕ",Zi="⧶",Wi="Đ",tl="đ",nl="⋱",sl="▿",ol="▾",cl="⇵",el="⥯",rl="⦦",al="Џ",il="џ",ll="⟿",ul="É",dl="é",pl="⩮",fl="Ě",ml="ě",gl="Ê",hl="ê",bl="≖",vl="≕",xl="Э",wl="э",yl="⩷",ql="Ė",Ll="ė",Tl="≑",Sl="ⅇ",El="≒",jl="𝔈",Al="𝔢",Dl="⪚",Nl="È",Rl="è",kl="⪖",Cl="⪘",Ml="⪙",Hl="∈",$l="⏧",Ol="ℓ",_l="⪕",Ul="⪗",Fl="Ē",Il="ē",Pl="∅",Bl="∅",Vl="◻",Gl="∅",Xl="▫",zl=" ",Yl=" ",Jl=" ",Ql="Ŋ",Kl="ŋ",Zl=" ",Wl="Ę",tu="ę",nu="𝔼",su="𝕖",ou="⋕",cu="⧣",eu="⩱",ru="ε",au="Ε",iu="ε",lu="ϵ",uu="≖",du="≕",pu="≂",fu="⪖",mu="⪕",gu="⩵",hu="=",bu="≂",vu="≟",xu="⇌",wu="≡",yu="⩸",qu="⧥",Lu="⥱",Tu="≓",Su="ℯ",Eu="ℰ",ju="≐",Au="⩳",Du="≂",Nu="Η",Ru="η",ku="Ð",Cu="ð",Mu="Ë",Hu="ë",$u="€",Ou="!",_u="∃",Uu="∃",Fu="ℰ",Iu="ⅇ",Pu="ⅇ",Bu="≒",Vu="Ф",Gu="ф",Xu="♀",zu="ffi",Yu="ff",Ju="ffl",Qu="𝔉",Ku="𝔣",Zu="fi",Wu="◼",td="▪",nd="fj",sd="♭",od="fl",cd="▱",ed="ƒ",rd="𝔽",ad="𝕗",id="∀",ld="∀",ud="⋔",dd="⫙",pd="ℱ",fd="⨍",md="½",gd="⅓",hd="¼",bd="⅕",vd="⅙",xd="⅛",wd="⅔",yd="⅖",qd="¾",Ld="⅗",Td="⅜",Sd="⅘",Ed="⅚",jd="⅝",Ad="⅞",Dd="⁄",Nd="⌢",Rd="𝒻",kd="ℱ",Cd="ǵ",Md="Γ",Hd="γ",$d="Ϝ",Od="ϝ",_d="⪆",Ud="Ğ",Fd="ğ",Id="Ģ",Pd="Ĝ",Bd="ĝ",Vd="Г",Gd="г",Xd="Ġ",zd="ġ",Yd="≥",Jd="≧",Qd="⪌",Kd="⋛",Zd="≥",Wd="≧",tp="⩾",np="⪩",sp="⩾",op="⪀",cp="⪂",ep="⪄",rp="⋛︀",ap="⪔",ip="𝔊",lp="𝔤",up="≫",dp="⋙",pp="⋙",fp="ℷ",mp="Ѓ",gp="ѓ",hp="⪥",bp="≷",vp="⪒",xp="⪤",wp="⪊",yp="⪊",qp="⪈",Lp="≩",Tp="⪈",Sp="≩",Ep="⋧",jp="𝔾",Ap="𝕘",Dp="`",Np="≥",Rp="⋛",kp="≧",Cp="⪢",Mp="≷",Hp="⩾",$p="≳",Op="𝒢",_p="ℊ",Up="≳",Fp="⪎",Ip="⪐",Pp="⪧",Bp="⩺",Vp=">",Gp=">",Xp="≫",zp="⋗",Yp="⦕",Jp="⩼",Qp="⪆",Kp="⥸",Zp="⋗",Wp="⋛",tf="⪌",nf="≷",sf="≳",of="≩︀",cf="≩︀",ef="ˇ",rf=" ",af="½",lf="ℋ",uf="Ъ",df="ъ",pf="⥈",ff="↔",mf="⇔",gf="↭",hf="^",bf="ℏ",vf="Ĥ",xf="ĥ",wf="♥",yf="♥",qf="…",Lf="⊹",Tf="𝔥",Sf="ℌ",Ef="ℋ",jf="⤥",Af="⤦",Df="⇿",Nf="∻",Rf="↩",kf="↪",Cf="𝕙",Mf="ℍ",Hf="―",$f="─",Of="𝒽",_f="ℋ",Uf="ℏ",Ff="Ħ",If="ħ",Pf="≎",Bf="≏",Vf="⁃",Gf="‐",Xf="Í",zf="í",Yf="⁣",Jf="Î",Qf="î",Kf="И",Zf="и",Wf="İ",tm="Е",nm="е",sm="¡",om="⇔",cm="𝔦",em="ℑ",rm="Ì",am="ì",im="ⅈ",lm="⨌",um="∭",dm="⧜",pm="℩",fm="IJ",mm="ij",gm="Ī",hm="ī",bm="ℑ",vm="ⅈ",xm="ℐ",wm="ℑ",ym="ı",qm="ℑ",Lm="⊷",Tm="Ƶ",Sm="⇒",Em="℅",jm="∞",Am="⧝",Dm="ı",Nm="⊺",Rm="∫",km="∬",Cm="ℤ",Mm="∫",Hm="⊺",$m="⋂",Om="⨗",_m="⨼",Um="⁣",Fm="⁢",Im="Ё",Pm="ё",Bm="Į",Vm="į",Gm="𝕀",Xm="𝕚",zm="Ι",Ym="ι",Jm="⨼",Qm="¿",Km="𝒾",Zm="ℐ",Wm="∈",tg="⋵",ng="⋹",sg="⋴",og="⋳",cg="∈",eg="⁢",rg="Ĩ",ag="ĩ",ig="І",lg="і",ug="Ï",dg="ï",pg="Ĵ",fg="ĵ",mg="Й",gg="й",hg="𝔍",bg="𝔧",vg="ȷ",xg="𝕁",wg="𝕛",yg="𝒥",qg="𝒿",Lg="Ј",Tg="ј",Sg="Є",Eg="є",jg="Κ",Ag="κ",Dg="ϰ",Ng="Ķ",Rg="ķ",kg="К",Cg="к",Mg="𝔎",Hg="𝔨",$g="ĸ",Og="Х",_g="х",Ug="Ќ",Fg="ќ",Ig="𝕂",Pg="𝕜",Bg="𝒦",Vg="𝓀",Gg="⇚",Xg="Ĺ",zg="ĺ",Yg="⦴",Jg="ℒ",Qg="Λ",Kg="λ",Zg="⟨",Wg="⟪",th="⦑",nh="⟨",sh="⪅",oh="ℒ",ch="«",eh="⇤",rh="⤟",ah="←",ih="↞",lh="⇐",uh="⤝",dh="↩",ph="↫",fh="⤹",mh="⥳",gh="↢",hh="⤙",bh="⤛",vh="⪫",xh="⪭",wh="⪭︀",yh="⤌",qh="⤎",Lh="❲",Th="{",Sh="[",Eh="⦋",jh="⦏",Ah="⦍",Dh="Ľ",Nh="ľ",Rh="Ļ",kh="ļ",Ch="⌈",Mh="{",Hh="Л",$h="л",Oh="⤶",_h="“",Uh="„",Fh="⥧",Ih="⥋",Ph="↲",Bh="≤",Vh="≦",Gh="⟨",Xh="⇤",zh="←",Yh="←",Jh="⇐",Qh="⇆",Kh="↢",Zh="⌈",Wh="⟦",tb="⥡",nb="⥙",sb="⇃",ob="⌊",cb="↽",eb="↼",rb="⇇",ab="↔",ib="↔",lb="⇔",ub="⇆",db="⇋",pb="↭",fb="⥎",mb="↤",gb="⊣",hb="⥚",bb="⋋",vb="⧏",xb="⊲",wb="⊴",yb="⥑",qb="⥠",Lb="⥘",Tb="↿",Sb="⥒",Eb="↼",jb="⪋",Ab="⋚",Db="≤",Nb="≦",Rb="⩽",kb="⪨",Cb="⩽",Mb="⩿",Hb="⪁",$b="⪃",Ob="⋚︀",_b="⪓",Ub="⪅",Fb="⋖",Ib="⋚",Pb="⪋",Bb="⋚",Vb="≦",Gb="≶",Xb="≶",zb="⪡",Yb="≲",Jb="⩽",Qb="≲",Kb="⥼",Zb="⌊",Wb="𝔏",tv="𝔩",nv="≶",sv="⪑",ov="⥢",cv="↽",ev="↼",rv="⥪",av="▄",iv="Љ",lv="љ",uv="⇇",dv="≪",pv="⋘",fv="⌞",mv="⇚",gv="⥫",hv="◺",bv="Ŀ",vv="ŀ",xv="⎰",wv="⎰",yv="⪉",qv="⪉",Lv="⪇",Tv="≨",Sv="⪇",Ev="≨",jv="⋦",Av="⟬",Dv="⇽",Nv="⟦",Rv="⟵",kv="⟵",Cv="⟸",Mv="⟷",Hv="⟷",$v="⟺",Ov="⟼",_v="⟶",Uv="⟶",Fv="⟹",Iv="↫",Pv="↬",Bv="⦅",Vv="𝕃",Gv="𝕝",Xv="⨭",zv="⨴",Yv="∗",Jv="_",Qv="↙",Kv="↘",Zv="◊",Wv="◊",tx="⧫",nx="(",sx="⦓",ox="⇆",cx="⌟",ex="⇋",rx="⥭",ax="‎",ix="⊿",lx="‹",ux="𝓁",dx="ℒ",px="↰",fx="↰",mx="≲",gx="⪍",hx="⪏",bx="[",vx="‘",xx="‚",wx="Ł",yx="ł",qx="⪦",Lx="⩹",Tx="<",Sx="<",Ex="≪",jx="⋖",Ax="⋋",Dx="⋉",Nx="⥶",Rx="⩻",kx="◃",Cx="⊴",Mx="◂",Hx="⦖",$x="⥊",Ox="⥦",_x="≨︀",Ux="≨︀",Fx="¯",Ix="♂",Px="✠",Bx="✠",Vx="↦",Gx="↦",Xx="↧",zx="↤",Yx="↥",Jx="▮",Qx="⨩",Kx="М",Zx="м",Wx="—",tw="∺",nw="∡",sw=" ",ow="ℳ",cw="𝔐",ew="𝔪",rw="℧",aw="µ",iw="*",lw="⫰",uw="∣",dw="·",pw="⊟",fw="−",mw="∸",gw="⨪",hw="∓",bw="⫛",vw="…",xw="∓",ww="⊧",yw="𝕄",qw="𝕞",Lw="∓",Tw="𝓂",Sw="ℳ",Ew="∾",jw="Μ",Aw="μ",Dw="⊸",Nw="⊸",Rw="∇",kw="Ń",Cw="ń",Mw="∠⃒",Hw="≉",$w="⩰̸",Ow="≋̸",_w="ʼn",Uw="≉",Fw="♮",Iw="ℕ",Pw="♮",Bw=" ",Vw="≎̸",Gw="≏̸",Xw="⩃",zw="Ň",Yw="ň",Jw="Ņ",Qw="ņ",Kw="≇",Zw="⩭̸",Ww="⩂",ty="Н",ny="н",sy="–",oy="⤤",cy="↗",ey="⇗",ry="↗",ay="≠",iy="≐̸",ly="​",uy="​",dy="​",py="​",fy="≢",my="⤨",gy="≂̸",hy="≫",by="≪",vy=`
2
2
  `,xy="∄",wy="∄",yy="𝔑",qy="𝔫",Ly="≧̸",Ty="≱",Sy="≱",Ey="≧̸",jy="⩾̸",Ay="⩾̸",Dy="⋙̸",Ny="≵",Ry="≫⃒",ky="≯",Cy="≯",My="≫̸",Hy="↮",$y="⇎",Oy="⫲",_y="∋",Uy="⋼",Fy="⋺",Iy="∋",Py="Њ",By="њ",Vy="↚",Gy="⇍",Xy="‥",zy="≦̸",Yy="≰",Jy="↚",Qy="⇍",Ky="↮",Zy="⇎",Wy="≰",tq="≦̸",nq="⩽̸",sq="⩽̸",oq="≮",cq="⋘̸",eq="≴",rq="≪⃒",aq="≮",iq="⋪",lq="⋬",uq="≪̸",dq="∤",pq="⁠",fq=" ",mq="𝕟",gq="ℕ",hq="⫬",bq="¬",vq="≢",xq="≭",wq="∦",yq="∉",qq="≠",Lq="≂̸",Tq="∄",Sq="≯",Eq="≱",jq="≧̸",Aq="≫̸",Dq="≹",Nq="⩾̸",Rq="≵",kq="≎̸",Cq="≏̸",Mq="∉",Hq="⋵̸",$q="⋹̸",Oq="∉",_q="⋷",Uq="⋶",Fq="⧏̸",Iq="⋪",Pq="⋬",Bq="≮",Vq="≰",Gq="≸",Xq="≪̸",zq="⩽̸",Yq="≴",Jq="⪢̸",Qq="⪡̸",Kq="∌",Zq="∌",Wq="⋾",t1="⋽",n1="⊀",s1="⪯̸",o1="⋠",c1="∌",e1="⧐̸",r1="⋫",a1="⋭",i1="⊏̸",l1="⋢",u1="⊐̸",d1="⋣",p1="⊂⃒",f1="⊈",m1="⊁",g1="⪰̸",h1="⋡",b1="≿̸",v1="⊃⃒",x1="⊉",w1="≁",y1="≄",q1="≇",L1="≉",T1="∤",S1="∦",E1="∦",j1="⫽⃥",A1="∂̸",D1="⨔",N1="⊀",R1="⋠",k1="⊀",C1="⪯̸",M1="⪯̸",H1="⤳̸",$1="↛",O1="⇏",_1="↝̸",U1="↛",F1="⇏",I1="⋫",P1="⋭",B1="⊁",V1="⋡",G1="⪰̸",X1="𝒩",z1="𝓃",Y1="∤",J1="∦",Q1="≁",K1="≄",Z1="≄",W1="∤",tL="∦",nL="⋢",sL="⋣",oL="⊄",cL="⫅̸",eL="⊈",rL="⊂⃒",aL="⊈",iL="⫅̸",lL="⊁",uL="⪰̸",dL="⊅",pL="⫆̸",fL="⊉",mL="⊃⃒",gL="⊉",hL="⫆̸",bL="≹",vL="Ñ",xL="ñ",wL="≸",yL="⋪",qL="⋬",LL="⋫",TL="⋭",SL="Ν",EL="ν",jL="#",AL="№",DL=" ",NL="≍⃒",RL="⊬",kL="⊭",CL="⊮",ML="⊯",HL="≥⃒",$L=">⃒",OL="⤄",_L="⧞",UL="⤂",FL="≤⃒",IL="<⃒",PL="⊴⃒",BL="⤃",VL="⊵⃒",GL="∼⃒",XL="⤣",zL="↖",YL="⇖",JL="↖",QL="⤧",KL="Ó",ZL="ó",WL="⊛",tT="Ô",nT="ô",sT="⊚",oT="О",cT="о",eT="⊝",rT="Ő",aT="ő",iT="⨸",lT="⊙",uT="⦼",dT="Œ",pT="œ",fT="⦿",mT="𝔒",gT="𝔬",hT="˛",bT="Ò",vT="ò",xT="⧁",wT="⦵",yT="Ω",qT="∮",LT="↺",TT="⦾",ST="⦻",ET="‾",jT="⧀",AT="Ō",DT="ō",NT="Ω",RT="ω",kT="Ο",CT="ο",MT="⦶",HT="⊖",$T="𝕆",OT="𝕠",_T="⦷",UT="“",FT="‘",IT="⦹",PT="⊕",BT="↻",VT="⩔",GT="∨",XT="⩝",zT="ℴ",YT="ℴ",JT="ª",QT="º",KT="⊶",ZT="⩖",WT="⩗",tS="⩛",nS="Ⓢ",sS="𝒪",oS="ℴ",cS="Ø",eS="ø",rS="⊘",aS="Õ",iS="õ",lS="⨶",uS="⨷",dS="⊗",pS="Ö",fS="ö",mS="⌽",gS="‾",hS="⏞",bS="⎴",vS="⏜",xS="¶",wS="∥",yS="∥",qS="⫳",LS="⫽",TS="∂",SS="∂",ES="П",jS="п",AS="%",DS=".",NS="‰",RS="⊥",kS="‱",CS="𝔓",MS="𝔭",HS="Φ",$S="φ",OS="ϕ",_S="ℳ",US="☎",FS="Π",IS="π",PS="⋔",BS="ϖ",VS="ℏ",GS="ℎ",XS="ℏ",zS="⨣",YS="⊞",JS="⨢",QS="+",KS="∔",ZS="⨥",WS="⩲",t0="±",n0="±",s0="⨦",o0="⨧",c0="±",e0="ℌ",r0="⨕",a0="𝕡",i0="ℙ",l0="£",u0="⪷",d0="⪻",p0="≺",f0="≼",m0="⪷",g0="≺",h0="≼",b0="≺",v0="⪯",x0="≼",w0="≾",y0="⪯",q0="⪹",L0="⪵",T0="⋨",S0="⪯",E0="⪳",j0="≾",A0="′",D0="″",N0="ℙ",R0="⪹",k0="⪵",C0="⋨",M0="∏",H0="∏",$0="⌮",O0="⌒",_0="⌓",U0="∝",F0="∝",I0="∷",P0="∝",B0="≾",V0="⊰",G0="𝒫",X0="𝓅",z0="Ψ",Y0="ψ",J0=" ",Q0="𝔔",K0="𝔮",Z0="⨌",W0="𝕢",tE="ℚ",nE="⁗",sE="𝒬",oE="𝓆",cE="ℍ",eE="⨖",rE="?",aE="≟",iE='"',lE='"',uE="⇛",dE="∽̱",pE="Ŕ",fE="ŕ",mE="√",gE="⦳",hE="⟩",bE="⟫",vE="⦒",xE="⦥",wE="⟩",yE="»",qE="⥵",LE="⇥",TE="⤠",SE="⤳",EE="→",jE="↠",AE="⇒",DE="⤞",NE="↪",RE="↬",kE="⥅",CE="⥴",ME="⤖",HE="↣",$E="↝",OE="⤚",_E="⤜",UE="∶",FE="ℚ",IE="⤍",PE="⤏",BE="⤐",VE="❳",GE="}",XE="]",zE="⦌",YE="⦎",JE="⦐",QE="Ř",KE="ř",ZE="Ŗ",WE="ŗ",tj="⌉",nj="}",sj="Р",oj="р",cj="⤷",ej="⥩",rj="”",aj="”",ij="↳",lj="ℜ",uj="ℛ",dj="ℜ",pj="ℝ",fj="ℜ",mj="▭",gj="®",hj="®",bj="∋",vj="⇋",xj="⥯",wj="⥽",yj="⌋",qj="𝔯",Lj="ℜ",Tj="⥤",Sj="⇁",Ej="⇀",jj="⥬",Aj="Ρ",Dj="ρ",Nj="ϱ",Rj="⟩",kj="⇥",Cj="→",Mj="→",Hj="⇒",$j="⇄",Oj="↣",_j="⌉",Uj="⟧",Fj="⥝",Ij="⥕",Pj="⇂",Bj="⌋",Vj="⇁",Gj="⇀",Xj="⇄",zj="⇌",Yj="⇉",Jj="↝",Qj="↦",Kj="⊢",Zj="⥛",Wj="⋌",tA="⧐",nA="⊳",sA="⊵",oA="⥏",cA="⥜",eA="⥔",rA="↾",aA="⥓",iA="⇀",lA="˚",uA="≓",dA="⇄",pA="⇌",fA="‏",mA="⎱",gA="⎱",hA="⫮",bA="⟭",vA="⇾",xA="⟧",wA="⦆",yA="𝕣",qA="ℝ",LA="⨮",TA="⨵",SA="⥰",EA=")",jA="⦔",AA="⨒",DA="⇉",NA="⇛",RA="›",kA="𝓇",CA="ℛ",MA="↱",HA="↱",$A="]",OA="’",_A="’",UA="⋌",FA="⋊",IA="▹",PA="⊵",BA="▸",VA="⧎",GA="⧴",XA="⥨",zA="℞",YA="Ś",JA="ś",QA="‚",KA="⪸",ZA="Š",WA="š",tD="⪼",nD="≻",sD="≽",oD="⪰",cD="⪴",eD="Ş",rD="ş",aD="Ŝ",iD="ŝ",lD="⪺",uD="⪶",dD="⋩",pD="⨓",fD="≿",mD="С",gD="с",hD="⊡",bD="⋅",vD="⩦",xD="⤥",wD="↘",yD="⇘",qD="↘",LD="§",TD=";",SD="⤩",ED="∖",jD="∖",AD="✶",DD="𝔖",ND="𝔰",RD="⌢",kD="♯",CD="Щ",MD="щ",HD="Ш",$D="ш",OD="↓",_D="←",UD="∣",FD="∥",ID="→",PD="↑",BD="­",VD="Σ",GD="σ",XD="ς",zD="ς",YD="∼",JD="⩪",QD="≃",KD="≃",ZD="⪞",WD="⪠",tN="⪝",nN="⪟",sN="≆",oN="⨤",cN="⥲",eN="←",rN="∘",aN="∖",iN="⨳",lN="⧤",uN="∣",dN="⌣",pN="⪪",fN="⪬",mN="⪬︀",gN="Ь",hN="ь",bN="⌿",vN="⧄",xN="/",wN="𝕊",yN="𝕤",qN="♠",LN="♠",TN="∥",SN="⊓",EN="⊓︀",jN="⊔",AN="⊔︀",DN="√",NN="⊏",RN="⊑",kN="⊏",CN="⊑",MN="⊐",HN="⊒",$N="⊐",ON="⊒",_N="□",UN="□",FN="⊓",IN="⊏",PN="⊑",BN="⊐",VN="⊒",GN="⊔",XN="▪",zN="□",YN="▪",JN="→",QN="𝒮",KN="𝓈",ZN="∖",WN="⌣",tR="⋆",nR="⋆",sR="☆",oR="★",cR="ϵ",eR="ϕ",rR="¯",aR="⊂",iR="⋐",lR="⪽",uR="⫅",dR="⊆",pR="⫃",fR="⫁",mR="⫋",gR="⊊",hR="⪿",bR="⥹",vR="⊂",xR="⋐",wR="⊆",yR="⫅",qR="⊆",LR="⊊",TR="⫋",SR="⫇",ER="⫕",jR="⫓",AR="⪸",DR="≻",NR="≽",RR="≻",kR="⪰",CR="≽",MR="≿",HR="⪰",$R="⪺",OR="⪶",_R="⋩",UR="≿",FR="∋",IR="∑",PR="∑",BR="♪",VR="¹",GR="²",XR="³",zR="⊃",YR="⋑",JR="⪾",QR="⫘",KR="⫆",ZR="⊇",WR="⫄",tk="⊃",nk="⊇",sk="⟉",ok="⫗",ck="⥻",ek="⫂",rk="⫌",ak="⊋",ik="⫀",lk="⊃",uk="⋑",dk="⊇",pk="⫆",fk="⊋",mk="⫌",gk="⫈",hk="⫔",bk="⫖",vk="⤦",xk="↙",wk="⇙",yk="↙",qk="⤪",Lk="ß",Tk=" ",Sk="⌖",Ek="Τ",jk="τ",Ak="⎴",Dk="Ť",Nk="ť",Rk="Ţ",kk="ţ",Ck="Т",Mk="т",Hk="⃛",$k="⌕",Ok="𝔗",_k="𝔱",Uk="∴",Fk="∴",Ik="∴",Pk="Θ",Bk="θ",Vk="ϑ",Gk="ϑ",Xk="≈",zk="∼",Yk="  ",Jk=" ",Qk=" ",Kk="≈",Zk="∼",Wk="Þ",tC="þ",nC="˜",sC="∼",oC="≃",cC="≅",eC="≈",rC="⨱",aC="⊠",iC="×",lC="⨰",uC="∭",dC="⤨",pC="⌶",fC="⫱",mC="⊤",gC="𝕋",hC="𝕥",bC="⫚",vC="⤩",xC="‴",wC="™",yC="™",qC="▵",LC="▿",TC="◃",SC="⊴",EC="≜",jC="▹",AC="⊵",DC="◬",NC="≜",RC="⨺",kC="⃛",CC="⨹",MC="⧍",HC="⨻",$C="⏢",OC="𝒯",_C="𝓉",UC="Ц",FC="ц",IC="Ћ",PC="ћ",BC="Ŧ",VC="ŧ",GC="≬",XC="↞",zC="↠",YC="Ú",JC="ú",QC="↑",KC="↟",ZC="⇑",WC="⥉",tM="Ў",nM="ў",sM="Ŭ",oM="ŭ",cM="Û",eM="û",rM="У",aM="у",iM="⇅",lM="Ű",uM="ű",dM="⥮",pM="⥾",fM="𝔘",mM="𝔲",gM="Ù",hM="ù",bM="⥣",vM="↿",xM="↾",wM="▀",yM="⌜",qM="⌜",LM="⌏",TM="◸",SM="Ū",EM="ū",jM="¨",AM="_",DM="⏟",NM="⎵",RM="⏝",kM="⋃",CM="⊎",MM="Ų",HM="ų",$M="𝕌",OM="𝕦",_M="⤒",UM="↑",FM="↑",IM="⇑",PM="⇅",BM="↕",VM="↕",GM="⇕",XM="⥮",zM="↿",YM="↾",JM="⊎",QM="↖",KM="↗",ZM="υ",WM="ϒ",tH="ϒ",nH="Υ",sH="υ",oH="↥",cH="⊥",eH="⇈",rH="⌝",aH="⌝",iH="⌎",lH="Ů",uH="ů",dH="◹",pH="𝒰",fH="𝓊",mH="⋰",gH="Ũ",hH="ũ",bH="▵",vH="▴",xH="⇈",wH="Ü",yH="ü",qH="⦧",LH="⦜",TH="ϵ",SH="ϰ",EH="∅",jH="ϕ",AH="ϖ",DH="∝",NH="↕",RH="⇕",kH="ϱ",CH="ς",MH="⊊︀",HH="⫋︀",$H="⊋︀",OH="⫌︀",_H="ϑ",UH="⊲",FH="⊳",IH="⫨",PH="⫫",BH="⫩",VH="В",GH="в",XH="⊢",zH="⊨",YH="⊩",JH="⊫",QH="⫦",KH="⊻",ZH="∨",WH="⋁",t2="≚",n2="⋮",s2="|",o2="‖",c2="|",e2="‖",r2="∣",a2="|",i2="❘",l2="≀",u2=" ",d2="𝔙",p2="𝔳",f2="⊲",m2="⊂⃒",g2="⊃⃒",h2="𝕍",b2="𝕧",v2="∝",x2="⊳",w2="𝒱",y2="𝓋",q2="⫋︀",L2="⊊︀",T2="⫌︀",S2="⊋︀",E2="⊪",j2="⦚",A2="Ŵ",D2="ŵ",N2="⩟",R2="∧",k2="⋀",C2="≙",M2="℘",H2="𝔚",$2="𝔴",O2="𝕎",_2="𝕨",U2="℘",F2="≀",I2="≀",P2="𝒲",B2="𝓌",V2="⋂",G2="◯",X2="⋃",z2="▽",Y2="𝔛",J2="𝔵",Q2="⟷",K2="⟺",Z2="Ξ",W2="ξ",t$="⟵",n$="⟸",s$="⟼",o$="⋻",c$="⨀",e$="𝕏",r$="𝕩",a$="⨁",i$="⨂",l$="⟶",u$="⟹",d$="𝒳",p$="𝓍",f$="⨆",m$="⨄",g$="△",h$="⋁",b$="⋀",v$="Ý",x$="ý",w$="Я",y$="я",q$="Ŷ",L$="ŷ",T$="Ы",S$="ы",E$="¥",j$="𝔜",A$="𝔶",D$="Ї",N$="ї",R$="𝕐",k$="𝕪",C$="𝒴",M$="𝓎",H$="Ю",$$="ю",O$="ÿ",_$="Ÿ",U$="Ź",F$="ź",I$="Ž",P$="ž",B$="З",V$="з",G$="Ż",X$="ż",z$="ℨ",Y$="​",J$="Ζ",Q$="ζ",K$="𝔷",Z$="ℨ",W$="Ж",tO="ж",nO="⇝",sO="𝕫",oO="ℤ",cO="𝒵",eO="𝓏",rO="‍",aO="‌",bt={Aacute:Pt,aacute:Bt,Abreve:Vt,abreve:Gt,ac:Xt,acd:zt,acE:Yt,Acirc:Jt,acirc:Qt,acute:Kt,Acy:Zt,acy:Wt,AElig:tn,aelig:nn,af:sn,Afr:on,afr:cn,Agrave:en,agrave:rn,alefsym:an,aleph:ln,Alpha:un,alpha:dn,Amacr:pn,amacr:fn,amalg:mn,amp:gn,AMP:hn,andand:bn,And:vn,and:xn,andd:wn,andslope:yn,andv:qn,ang:Ln,ange:Tn,angle:Sn,angmsdaa:En,angmsdab:jn,angmsdac:An,angmsdad:Dn,angmsdae:Nn,angmsdaf:Rn,angmsdag:kn,angmsdah:Cn,angmsd:Mn,angrt:Hn,angrtvb:$n,angrtvbd:On,angsph:_n,angst:Un,angzarr:Fn,Aogon:In,aogon:Pn,Aopf:Bn,aopf:Vn,apacir:Gn,ap:Xn,apE:zn,ape:Yn,apid:Jn,apos:Qn,ApplyFunction:Kn,approx:Zn,approxeq:Wn,Aring:ts,aring:ns,Ascr:ss,ascr:os,Assign:cs,ast:es,asymp:rs,asympeq:as,Atilde:is,atilde:ls,Auml:us,auml:ds,awconint:ps,awint:fs,backcong:ms,backepsilon:gs,backprime:hs,backsim:bs,backsimeq:vs,Backslash:xs,Barv:ws,barvee:ys,barwed:qs,Barwed:Ls,barwedge:Ts,bbrk:Ss,bbrktbrk:Es,bcong:js,Bcy:As,bcy:Ds,bdquo:Ns,becaus:Rs,because:ks,Because:Cs,bemptyv:Ms,bepsi:Hs,bernou:$s,Bernoullis:Os,Beta:_s,beta:Us,beth:Fs,between:Is,Bfr:Ps,bfr:Bs,bigcap:Vs,bigcirc:Gs,bigcup:Xs,bigodot:zs,bigoplus:Ys,bigotimes:Js,bigsqcup:Qs,bigstar:Ks,bigtriangledown:Zs,bigtriangleup:Ws,biguplus:to,bigvee:no,bigwedge:so,bkarow:oo,blacklozenge:co,blacksquare:eo,blacktriangle:ro,blacktriangledown:ao,blacktriangleleft:io,blacktriangleright:lo,blank:uo,blk12:po,blk14:fo,blk34:mo,block:go,bne:ho,bnequiv:bo,bNot:vo,bnot:xo,Bopf:wo,bopf:yo,bot:qo,bottom:Lo,bowtie:To,boxbox:So,boxdl:Eo,boxdL:jo,boxDl:Ao,boxDL:Do,boxdr:No,boxdR:Ro,boxDr:ko,boxDR:Co,boxh:Mo,boxH:Ho,boxhd:$o,boxHd:Oo,boxhD:_o,boxHD:Uo,boxhu:Fo,boxHu:Io,boxhU:Po,boxHU:Bo,boxminus:Vo,boxplus:Go,boxtimes:Xo,boxul:zo,boxuL:Yo,boxUl:Jo,boxUL:Qo,boxur:Ko,boxuR:Zo,boxUr:Wo,boxUR:tc,boxv:nc,boxV:sc,boxvh:oc,boxvH:cc,boxVh:ec,boxVH:rc,boxvl:ac,boxvL:ic,boxVl:lc,boxVL:uc,boxvr:dc,boxvR:pc,boxVr:fc,boxVR:mc,bprime:gc,breve:hc,Breve:bc,brvbar:vc,bscr:xc,Bscr:wc,bsemi:yc,bsim:qc,bsime:Lc,bsolb:Tc,bsol:Sc,bsolhsub:Ec,bull:jc,bullet:Ac,bump:Dc,bumpE:Nc,bumpe:Rc,Bumpeq:kc,bumpeq:Cc,Cacute:Mc,cacute:Hc,capand:$c,capbrcup:Oc,capcap:_c,cap:Uc,Cap:Fc,capcup:Ic,capdot:Pc,CapitalDifferentialD:Bc,caps:Vc,caret:Gc,caron:Xc,Cayleys:zc,ccaps:Yc,Ccaron:Jc,ccaron:Qc,Ccedil:Kc,ccedil:Zc,Ccirc:Wc,ccirc:te,Cconint:ne,ccups:se,ccupssm:oe,Cdot:ce,cdot:ee,cedil:re,Cedilla:ae,cemptyv:ie,cent:le,centerdot:ue,CenterDot:de,cfr:pe,Cfr:fe,CHcy:me,chcy:ge,check:he,checkmark:be,Chi:ve,chi:xe,circ:we,circeq:ye,circlearrowleft:qe,circlearrowright:Le,circledast:Te,circledcirc:Se,circleddash:Ee,CircleDot:je,circledR:Ae,circledS:De,CircleMinus:Ne,CirclePlus:Re,CircleTimes:ke,cir:Ce,cirE:Me,cire:He,cirfnint:$e,cirmid:Oe,cirscir:_e,ClockwiseContourIntegral:Ue,CloseCurlyDoubleQuote:Fe,CloseCurlyQuote:Ie,clubs:Pe,clubsuit:Be,colon:Ve,Colon:Ge,Colone:Xe,colone:ze,coloneq:Ye,comma:Je,commat:Qe,comp:Ke,compfn:Ze,complement:We,complexes:tr,cong:nr,congdot:sr,Congruent:or,conint:cr,Conint:er,ContourIntegral:rr,copf:ar,Copf:ir,coprod:lr,Coproduct:ur,copy:dr,COPY:pr,copysr:fr,CounterClockwiseContourIntegral:mr,crarr:gr,cross:hr,Cross:br,Cscr:vr,cscr:xr,csub:wr,csube:yr,csup:qr,csupe:Lr,ctdot:Tr,cudarrl:Sr,cudarrr:Er,cuepr:jr,cuesc:Ar,cularr:Dr,cularrp:Nr,cupbrcap:Rr,cupcap:kr,CupCap:Cr,cup:Mr,Cup:Hr,cupcup:$r,cupdot:Or,cupor:_r,cups:Ur,curarr:Fr,curarrm:Ir,curlyeqprec:Pr,curlyeqsucc:Br,curlyvee:Vr,curlywedge:Gr,curren:Xr,curvearrowleft:zr,curvearrowright:Yr,cuvee:Jr,cuwed:Qr,cwconint:Kr,cwint:Zr,cylcty:Wr,dagger:ta,Dagger:na,daleth:sa,darr:oa,Darr:ca,dArr:ea,dash:ra,Dashv:aa,dashv:ia,dbkarow:la,dblac:ua,Dcaron:da,dcaron:pa,Dcy:fa,dcy:ma,ddagger:ga,ddarr:ha,DD:ba,dd:va,DDotrahd:xa,ddotseq:wa,deg:ya,Del:qa,Delta:La,delta:Ta,demptyv:Sa,dfisht:Ea,Dfr:ja,dfr:Aa,dHar:Da,dharl:Na,dharr:Ra,DiacriticalAcute:ka,DiacriticalDot:Ca,DiacriticalDoubleAcute:Ma,DiacriticalGrave:Ha,DiacriticalTilde:$a,diam:Oa,diamond:_a,Diamond:Ua,diamondsuit:Fa,diams:Ia,die:Pa,DifferentialD:Ba,digamma:Va,disin:Ga,div:Xa,divide:za,divideontimes:Ya,divonx:Ja,DJcy:Qa,djcy:Ka,dlcorn:Za,dlcrop:Wa,dollar:ti,Dopf:ni,dopf:si,Dot:oi,dot:ci,DotDot:ei,doteq:ri,doteqdot:ai,DotEqual:ii,dotminus:li,dotplus:ui,dotsquare:di,doublebarwedge:pi,DoubleContourIntegral:fi,DoubleDot:mi,DoubleDownArrow:gi,DoubleLeftArrow:hi,DoubleLeftRightArrow:bi,DoubleLeftTee:vi,DoubleLongLeftArrow:xi,DoubleLongLeftRightArrow:wi,DoubleLongRightArrow:yi,DoubleRightArrow:qi,DoubleRightTee:Li,DoubleUpArrow:Ti,DoubleUpDownArrow:Si,DoubleVerticalBar:Ei,DownArrowBar:ji,downarrow:Ai,DownArrow:Di,Downarrow:Ni,DownArrowUpArrow:Ri,DownBreve:ki,downdownarrows:Ci,downharpoonleft:Mi,downharpoonright:Hi,DownLeftRightVector:$i,DownLeftTeeVector:Oi,DownLeftVectorBar:_i,DownLeftVector:Ui,DownRightTeeVector:Fi,DownRightVectorBar:Ii,DownRightVector:Pi,DownTeeArrow:Bi,DownTee:Vi,drbkarow:Gi,drcorn:Xi,drcrop:zi,Dscr:Yi,dscr:Ji,DScy:Qi,dscy:Ki,dsol:Zi,Dstrok:Wi,dstrok:tl,dtdot:nl,dtri:sl,dtrif:ol,duarr:cl,duhar:el,dwangle:rl,DZcy:al,dzcy:il,dzigrarr:ll,Eacute:ul,eacute:dl,easter:pl,Ecaron:fl,ecaron:ml,Ecirc:gl,ecirc:hl,ecir:bl,ecolon:vl,Ecy:xl,ecy:wl,eDDot:yl,Edot:ql,edot:Ll,eDot:Tl,ee:Sl,efDot:El,Efr:jl,efr:Al,eg:Dl,Egrave:Nl,egrave:Rl,egs:kl,egsdot:Cl,el:Ml,Element:Hl,elinters:$l,ell:Ol,els:_l,elsdot:Ul,Emacr:Fl,emacr:Il,empty:Pl,emptyset:Bl,EmptySmallSquare:Vl,emptyv:Gl,EmptyVerySmallSquare:Xl,emsp13:zl,emsp14:Yl,emsp:Jl,ENG:Ql,eng:Kl,ensp:Zl,Eogon:Wl,eogon:tu,Eopf:nu,eopf:su,epar:ou,eparsl:cu,eplus:eu,epsi:ru,Epsilon:au,epsilon:iu,epsiv:lu,eqcirc:uu,eqcolon:du,eqsim:pu,eqslantgtr:fu,eqslantless:mu,Equal:gu,equals:hu,EqualTilde:bu,equest:vu,Equilibrium:xu,equiv:wu,equivDD:yu,eqvparsl:qu,erarr:Lu,erDot:Tu,escr:Su,Escr:Eu,esdot:ju,Esim:Au,esim:Du,Eta:Nu,eta:Ru,ETH:ku,eth:Cu,Euml:Mu,euml:Hu,euro:$u,excl:Ou,exist:_u,Exists:Uu,expectation:Fu,exponentiale:Iu,ExponentialE:Pu,fallingdotseq:Bu,Fcy:Vu,fcy:Gu,female:Xu,ffilig:zu,fflig:Yu,ffllig:Ju,Ffr:Qu,ffr:Ku,filig:Zu,FilledSmallSquare:Wu,FilledVerySmallSquare:td,fjlig:nd,flat:sd,fllig:od,fltns:cd,fnof:ed,Fopf:rd,fopf:ad,forall:id,ForAll:ld,fork:ud,forkv:dd,Fouriertrf:pd,fpartint:fd,frac12:md,frac13:gd,frac14:hd,frac15:bd,frac16:vd,frac18:xd,frac23:wd,frac25:yd,frac34:qd,frac35:Ld,frac38:Td,frac45:Sd,frac56:Ed,frac58:jd,frac78:Ad,frasl:Dd,frown:Nd,fscr:Rd,Fscr:kd,gacute:Cd,Gamma:Md,gamma:Hd,Gammad:$d,gammad:Od,gap:_d,Gbreve:Ud,gbreve:Fd,Gcedil:Id,Gcirc:Pd,gcirc:Bd,Gcy:Vd,gcy:Gd,Gdot:Xd,gdot:zd,ge:Yd,gE:Jd,gEl:Qd,gel:Kd,geq:Zd,geqq:Wd,geqslant:tp,gescc:np,ges:sp,gesdot:op,gesdoto:cp,gesdotol:ep,gesl:rp,gesles:ap,Gfr:ip,gfr:lp,gg:up,Gg:dp,ggg:pp,gimel:fp,GJcy:mp,gjcy:gp,gla:hp,gl:bp,glE:vp,glj:xp,gnap:wp,gnapprox:yp,gne:qp,gnE:Lp,gneq:Tp,gneqq:Sp,gnsim:Ep,Gopf:jp,gopf:Ap,grave:Dp,GreaterEqual:Np,GreaterEqualLess:Rp,GreaterFullEqual:kp,GreaterGreater:Cp,GreaterLess:Mp,GreaterSlantEqual:Hp,GreaterTilde:$p,Gscr:Op,gscr:_p,gsim:Up,gsime:Fp,gsiml:Ip,gtcc:Pp,gtcir:Bp,gt:Vp,GT:Gp,Gt:Xp,gtdot:zp,gtlPar:Yp,gtquest:Jp,gtrapprox:Qp,gtrarr:Kp,gtrdot:Zp,gtreqless:Wp,gtreqqless:tf,gtrless:nf,gtrsim:sf,gvertneqq:of,gvnE:cf,Hacek:ef,hairsp:rf,half:af,hamilt:lf,HARDcy:uf,hardcy:df,harrcir:pf,harr:ff,hArr:mf,harrw:gf,Hat:hf,hbar:bf,Hcirc:vf,hcirc:xf,hearts:wf,heartsuit:yf,hellip:qf,hercon:Lf,hfr:Tf,Hfr:Sf,HilbertSpace:Ef,hksearow:jf,hkswarow:Af,hoarr:Df,homtht:Nf,hookleftarrow:Rf,hookrightarrow:kf,hopf:Cf,Hopf:Mf,horbar:Hf,HorizontalLine:$f,hscr:Of,Hscr:_f,hslash:Uf,Hstrok:Ff,hstrok:If,HumpDownHump:Pf,HumpEqual:Bf,hybull:Vf,hyphen:Gf,Iacute:Xf,iacute:zf,ic:Yf,Icirc:Jf,icirc:Qf,Icy:Kf,icy:Zf,Idot:Wf,IEcy:tm,iecy:nm,iexcl:sm,iff:om,ifr:cm,Ifr:em,Igrave:rm,igrave:am,ii:im,iiiint:lm,iiint:um,iinfin:dm,iiota:pm,IJlig:fm,ijlig:mm,Imacr:gm,imacr:hm,image:bm,ImaginaryI:vm,imagline:xm,imagpart:wm,imath:ym,Im:qm,imof:Lm,imped:Tm,Implies:Sm,incare:Em,in:"∈",infin:jm,infintie:Am,inodot:Dm,intcal:Nm,int:Rm,Int:km,integers:Cm,Integral:Mm,intercal:Hm,Intersection:$m,intlarhk:Om,intprod:_m,InvisibleComma:Um,InvisibleTimes:Fm,IOcy:Im,iocy:Pm,Iogon:Bm,iogon:Vm,Iopf:Gm,iopf:Xm,Iota:zm,iota:Ym,iprod:Jm,iquest:Qm,iscr:Km,Iscr:Zm,isin:Wm,isindot:tg,isinE:ng,isins:sg,isinsv:og,isinv:cg,it:eg,Itilde:rg,itilde:ag,Iukcy:ig,iukcy:lg,Iuml:ug,iuml:dg,Jcirc:pg,jcirc:fg,Jcy:mg,jcy:gg,Jfr:hg,jfr:bg,jmath:vg,Jopf:xg,jopf:wg,Jscr:yg,jscr:qg,Jsercy:Lg,jsercy:Tg,Jukcy:Sg,jukcy:Eg,Kappa:jg,kappa:Ag,kappav:Dg,Kcedil:Ng,kcedil:Rg,Kcy:kg,kcy:Cg,Kfr:Mg,kfr:Hg,kgreen:$g,KHcy:Og,khcy:_g,KJcy:Ug,kjcy:Fg,Kopf:Ig,kopf:Pg,Kscr:Bg,kscr:Vg,lAarr:Gg,Lacute:Xg,lacute:zg,laemptyv:Yg,lagran:Jg,Lambda:Qg,lambda:Kg,lang:Zg,Lang:Wg,langd:th,langle:nh,lap:sh,Laplacetrf:oh,laquo:ch,larrb:eh,larrbfs:rh,larr:ah,Larr:ih,lArr:lh,larrfs:uh,larrhk:dh,larrlp:ph,larrpl:fh,larrsim:mh,larrtl:gh,latail:hh,lAtail:bh,lat:vh,late:xh,lates:wh,lbarr:yh,lBarr:qh,lbbrk:Lh,lbrace:Th,lbrack:Sh,lbrke:Eh,lbrksld:jh,lbrkslu:Ah,Lcaron:Dh,lcaron:Nh,Lcedil:Rh,lcedil:kh,lceil:Ch,lcub:Mh,Lcy:Hh,lcy:$h,ldca:Oh,ldquo:_h,ldquor:Uh,ldrdhar:Fh,ldrushar:Ih,ldsh:Ph,le:Bh,lE:Vh,LeftAngleBracket:Gh,LeftArrowBar:Xh,leftarrow:zh,LeftArrow:Yh,Leftarrow:Jh,LeftArrowRightArrow:Qh,leftarrowtail:Kh,LeftCeiling:Zh,LeftDoubleBracket:Wh,LeftDownTeeVector:tb,LeftDownVectorBar:nb,LeftDownVector:sb,LeftFloor:ob,leftharpoondown:cb,leftharpoonup:eb,leftleftarrows:rb,leftrightarrow:ab,LeftRightArrow:ib,Leftrightarrow:lb,leftrightarrows:ub,leftrightharpoons:db,leftrightsquigarrow:pb,LeftRightVector:fb,LeftTeeArrow:mb,LeftTee:gb,LeftTeeVector:hb,leftthreetimes:bb,LeftTriangleBar:vb,LeftTriangle:xb,LeftTriangleEqual:wb,LeftUpDownVector:yb,LeftUpTeeVector:qb,LeftUpVectorBar:Lb,LeftUpVector:Tb,LeftVectorBar:Sb,LeftVector:Eb,lEg:jb,leg:Ab,leq:Db,leqq:Nb,leqslant:Rb,lescc:kb,les:Cb,lesdot:Mb,lesdoto:Hb,lesdotor:$b,lesg:Ob,lesges:_b,lessapprox:Ub,lessdot:Fb,lesseqgtr:Ib,lesseqqgtr:Pb,LessEqualGreater:Bb,LessFullEqual:Vb,LessGreater:Gb,lessgtr:Xb,LessLess:zb,lesssim:Yb,LessSlantEqual:Jb,LessTilde:Qb,lfisht:Kb,lfloor:Zb,Lfr:Wb,lfr:tv,lg:nv,lgE:sv,lHar:ov,lhard:cv,lharu:ev,lharul:rv,lhblk:av,LJcy:iv,ljcy:lv,llarr:uv,ll:dv,Ll:pv,llcorner:fv,Lleftarrow:mv,llhard:gv,lltri:hv,Lmidot:bv,lmidot:vv,lmoustache:xv,lmoust:wv,lnap:yv,lnapprox:qv,lne:Lv,lnE:Tv,lneq:Sv,lneqq:Ev,lnsim:jv,loang:Av,loarr:Dv,lobrk:Nv,longleftarrow:Rv,LongLeftArrow:kv,Longleftarrow:Cv,longleftrightarrow:Mv,LongLeftRightArrow:Hv,Longleftrightarrow:$v,longmapsto:Ov,longrightarrow:_v,LongRightArrow:Uv,Longrightarrow:Fv,looparrowleft:Iv,looparrowright:Pv,lopar:Bv,Lopf:Vv,lopf:Gv,loplus:Xv,lotimes:zv,lowast:Yv,lowbar:Jv,LowerLeftArrow:Qv,LowerRightArrow:Kv,loz:Zv,lozenge:Wv,lozf:tx,lpar:nx,lparlt:sx,lrarr:ox,lrcorner:cx,lrhar:ex,lrhard:rx,lrm:ax,lrtri:ix,lsaquo:lx,lscr:ux,Lscr:dx,lsh:px,Lsh:fx,lsim:mx,lsime:gx,lsimg:hx,lsqb:bx,lsquo:vx,lsquor:xx,Lstrok:wx,lstrok:yx,ltcc:qx,ltcir:Lx,lt:Tx,LT:Sx,Lt:Ex,ltdot:jx,lthree:Ax,ltimes:Dx,ltlarr:Nx,ltquest:Rx,ltri:kx,ltrie:Cx,ltrif:Mx,ltrPar:Hx,lurdshar:$x,luruhar:Ox,lvertneqq:_x,lvnE:Ux,macr:Fx,male:Ix,malt:Px,maltese:Bx,Map:"⤅",map:Vx,mapsto:Gx,mapstodown:Xx,mapstoleft:zx,mapstoup:Yx,marker:Jx,mcomma:Qx,Mcy:Kx,mcy:Zx,mdash:Wx,mDDot:tw,measuredangle:nw,MediumSpace:sw,Mellintrf:ow,Mfr:cw,mfr:ew,mho:rw,micro:aw,midast:iw,midcir:lw,mid:uw,middot:dw,minusb:pw,minus:fw,minusd:mw,minusdu:gw,MinusPlus:hw,mlcp:bw,mldr:vw,mnplus:xw,models:ww,Mopf:yw,mopf:qw,mp:Lw,mscr:Tw,Mscr:Sw,mstpos:Ew,Mu:jw,mu:Aw,multimap:Dw,mumap:Nw,nabla:Rw,Nacute:kw,nacute:Cw,nang:Mw,nap:Hw,napE:$w,napid:Ow,napos:_w,napprox:Uw,natural:Fw,naturals:Iw,natur:Pw,nbsp:Bw,nbump:Vw,nbumpe:Gw,ncap:Xw,Ncaron:zw,ncaron:Yw,Ncedil:Jw,ncedil:Qw,ncong:Kw,ncongdot:Zw,ncup:Ww,Ncy:ty,ncy:ny,ndash:sy,nearhk:oy,nearr:cy,neArr:ey,nearrow:ry,ne:ay,nedot:iy,NegativeMediumSpace:ly,NegativeThickSpace:uy,NegativeThinSpace:dy,NegativeVeryThinSpace:py,nequiv:fy,nesear:my,nesim:gy,NestedGreaterGreater:hy,NestedLessLess:by,NewLine:vy,nexist:xy,nexists:wy,Nfr:yy,nfr:qy,ngE:Ly,nge:Ty,ngeq:Sy,ngeqq:Ey,ngeqslant:jy,nges:Ay,nGg:Dy,ngsim:Ny,nGt:Ry,ngt:ky,ngtr:Cy,nGtv:My,nharr:Hy,nhArr:$y,nhpar:Oy,ni:_y,nis:Uy,nisd:Fy,niv:Iy,NJcy:Py,njcy:By,nlarr:Vy,nlArr:Gy,nldr:Xy,nlE:zy,nle:Yy,nleftarrow:Jy,nLeftarrow:Qy,nleftrightarrow:Ky,nLeftrightarrow:Zy,nleq:Wy,nleqq:tq,nleqslant:nq,nles:sq,nless:oq,nLl:cq,nlsim:eq,nLt:rq,nlt:aq,nltri:iq,nltrie:lq,nLtv:uq,nmid:dq,NoBreak:pq,NonBreakingSpace:fq,nopf:mq,Nopf:gq,Not:hq,not:bq,NotCongruent:vq,NotCupCap:xq,NotDoubleVerticalBar:wq,NotElement:yq,NotEqual:qq,NotEqualTilde:Lq,NotExists:Tq,NotGreater:Sq,NotGreaterEqual:Eq,NotGreaterFullEqual:jq,NotGreaterGreater:Aq,NotGreaterLess:Dq,NotGreaterSlantEqual:Nq,NotGreaterTilde:Rq,NotHumpDownHump:kq,NotHumpEqual:Cq,notin:Mq,notindot:Hq,notinE:$q,notinva:Oq,notinvb:_q,notinvc:Uq,NotLeftTriangleBar:Fq,NotLeftTriangle:Iq,NotLeftTriangleEqual:Pq,NotLess:Bq,NotLessEqual:Vq,NotLessGreater:Gq,NotLessLess:Xq,NotLessSlantEqual:zq,NotLessTilde:Yq,NotNestedGreaterGreater:Jq,NotNestedLessLess:Qq,notni:Kq,notniva:Zq,notnivb:Wq,notnivc:t1,NotPrecedes:n1,NotPrecedesEqual:s1,NotPrecedesSlantEqual:o1,NotReverseElement:c1,NotRightTriangleBar:e1,NotRightTriangle:r1,NotRightTriangleEqual:a1,NotSquareSubset:i1,NotSquareSubsetEqual:l1,NotSquareSuperset:u1,NotSquareSupersetEqual:d1,NotSubset:p1,NotSubsetEqual:f1,NotSucceeds:m1,NotSucceedsEqual:g1,NotSucceedsSlantEqual:h1,NotSucceedsTilde:b1,NotSuperset:v1,NotSupersetEqual:x1,NotTilde:w1,NotTildeEqual:y1,NotTildeFullEqual:q1,NotTildeTilde:L1,NotVerticalBar:T1,nparallel:S1,npar:E1,nparsl:j1,npart:A1,npolint:D1,npr:N1,nprcue:R1,nprec:k1,npreceq:C1,npre:M1,nrarrc:H1,nrarr:$1,nrArr:O1,nrarrw:_1,nrightarrow:U1,nRightarrow:F1,nrtri:I1,nrtrie:P1,nsc:B1,nsccue:V1,nsce:G1,Nscr:X1,nscr:z1,nshortmid:Y1,nshortparallel:J1,nsim:Q1,nsime:K1,nsimeq:Z1,nsmid:W1,nspar:tL,nsqsube:nL,nsqsupe:sL,nsub:oL,nsubE:cL,nsube:eL,nsubset:rL,nsubseteq:aL,nsubseteqq:iL,nsucc:lL,nsucceq:uL,nsup:dL,nsupE:pL,nsupe:fL,nsupset:mL,nsupseteq:gL,nsupseteqq:hL,ntgl:bL,Ntilde:vL,ntilde:xL,ntlg:wL,ntriangleleft:yL,ntrianglelefteq:qL,ntriangleright:LL,ntrianglerighteq:TL,Nu:SL,nu:EL,num:jL,numero:AL,numsp:DL,nvap:NL,nvdash:RL,nvDash:kL,nVdash:CL,nVDash:ML,nvge:HL,nvgt:$L,nvHarr:OL,nvinfin:_L,nvlArr:UL,nvle:FL,nvlt:IL,nvltrie:PL,nvrArr:BL,nvrtrie:VL,nvsim:GL,nwarhk:XL,nwarr:zL,nwArr:YL,nwarrow:JL,nwnear:QL,Oacute:KL,oacute:ZL,oast:WL,Ocirc:tT,ocirc:nT,ocir:sT,Ocy:oT,ocy:cT,odash:eT,Odblac:rT,odblac:aT,odiv:iT,odot:lT,odsold:uT,OElig:dT,oelig:pT,ofcir:fT,Ofr:mT,ofr:gT,ogon:hT,Ograve:bT,ograve:vT,ogt:xT,ohbar:wT,ohm:yT,oint:qT,olarr:LT,olcir:TT,olcross:ST,oline:ET,olt:jT,Omacr:AT,omacr:DT,Omega:NT,omega:RT,Omicron:kT,omicron:CT,omid:MT,ominus:HT,Oopf:$T,oopf:OT,opar:_T,OpenCurlyDoubleQuote:UT,OpenCurlyQuote:FT,operp:IT,oplus:PT,orarr:BT,Or:VT,or:GT,ord:XT,order:zT,orderof:YT,ordf:JT,ordm:QT,origof:KT,oror:ZT,orslope:WT,orv:tS,oS:nS,Oscr:sS,oscr:oS,Oslash:cS,oslash:eS,osol:rS,Otilde:aS,otilde:iS,otimesas:lS,Otimes:uS,otimes:dS,Ouml:pS,ouml:fS,ovbar:mS,OverBar:gS,OverBrace:hS,OverBracket:bS,OverParenthesis:vS,para:xS,parallel:wS,par:yS,parsim:qS,parsl:LS,part:TS,PartialD:SS,Pcy:ES,pcy:jS,percnt:AS,period:DS,permil:NS,perp:RS,pertenk:kS,Pfr:CS,pfr:MS,Phi:HS,phi:$S,phiv:OS,phmmat:_S,phone:US,Pi:FS,pi:IS,pitchfork:PS,piv:BS,planck:VS,planckh:GS,plankv:XS,plusacir:zS,plusb:YS,pluscir:JS,plus:QS,plusdo:KS,plusdu:ZS,pluse:WS,PlusMinus:t0,plusmn:n0,plussim:s0,plustwo:o0,pm:c0,Poincareplane:e0,pointint:r0,popf:a0,Popf:i0,pound:l0,prap:u0,Pr:d0,pr:p0,prcue:f0,precapprox:m0,prec:g0,preccurlyeq:h0,Precedes:b0,PrecedesEqual:v0,PrecedesSlantEqual:x0,PrecedesTilde:w0,preceq:y0,precnapprox:q0,precneqq:L0,precnsim:T0,pre:S0,prE:E0,precsim:j0,prime:A0,Prime:D0,primes:N0,prnap:R0,prnE:k0,prnsim:C0,prod:M0,Product:H0,profalar:$0,profline:O0,profsurf:_0,prop:U0,Proportional:F0,Proportion:I0,propto:P0,prsim:B0,prurel:V0,Pscr:G0,pscr:X0,Psi:z0,psi:Y0,puncsp:J0,Qfr:Q0,qfr:K0,qint:Z0,qopf:W0,Qopf:tE,qprime:nE,Qscr:sE,qscr:oE,quaternions:cE,quatint:eE,quest:rE,questeq:aE,quot:iE,QUOT:lE,rAarr:uE,race:dE,Racute:pE,racute:fE,radic:mE,raemptyv:gE,rang:hE,Rang:bE,rangd:vE,range:xE,rangle:wE,raquo:yE,rarrap:qE,rarrb:LE,rarrbfs:TE,rarrc:SE,rarr:EE,Rarr:jE,rArr:AE,rarrfs:DE,rarrhk:NE,rarrlp:RE,rarrpl:kE,rarrsim:CE,Rarrtl:ME,rarrtl:HE,rarrw:$E,ratail:OE,rAtail:_E,ratio:UE,rationals:FE,rbarr:IE,rBarr:PE,RBarr:BE,rbbrk:VE,rbrace:GE,rbrack:XE,rbrke:zE,rbrksld:YE,rbrkslu:JE,Rcaron:QE,rcaron:KE,Rcedil:ZE,rcedil:WE,rceil:tj,rcub:nj,Rcy:sj,rcy:oj,rdca:cj,rdldhar:ej,rdquo:rj,rdquor:aj,rdsh:ij,real:lj,realine:uj,realpart:dj,reals:pj,Re:fj,rect:mj,reg:gj,REG:hj,ReverseElement:bj,ReverseEquilibrium:vj,ReverseUpEquilibrium:xj,rfisht:wj,rfloor:yj,rfr:qj,Rfr:Lj,rHar:Tj,rhard:Sj,rharu:Ej,rharul:jj,Rho:Aj,rho:Dj,rhov:Nj,RightAngleBracket:Rj,RightArrowBar:kj,rightarrow:Cj,RightArrow:Mj,Rightarrow:Hj,RightArrowLeftArrow:$j,rightarrowtail:Oj,RightCeiling:_j,RightDoubleBracket:Uj,RightDownTeeVector:Fj,RightDownVectorBar:Ij,RightDownVector:Pj,RightFloor:Bj,rightharpoondown:Vj,rightharpoonup:Gj,rightleftarrows:Xj,rightleftharpoons:zj,rightrightarrows:Yj,rightsquigarrow:Jj,RightTeeArrow:Qj,RightTee:Kj,RightTeeVector:Zj,rightthreetimes:Wj,RightTriangleBar:tA,RightTriangle:nA,RightTriangleEqual:sA,RightUpDownVector:oA,RightUpTeeVector:cA,RightUpVectorBar:eA,RightUpVector:rA,RightVectorBar:aA,RightVector:iA,ring:lA,risingdotseq:uA,rlarr:dA,rlhar:pA,rlm:fA,rmoustache:mA,rmoust:gA,rnmid:hA,roang:bA,roarr:vA,robrk:xA,ropar:wA,ropf:yA,Ropf:qA,roplus:LA,rotimes:TA,RoundImplies:SA,rpar:EA,rpargt:jA,rppolint:AA,rrarr:DA,Rrightarrow:NA,rsaquo:RA,rscr:kA,Rscr:CA,rsh:MA,Rsh:HA,rsqb:$A,rsquo:OA,rsquor:_A,rthree:UA,rtimes:FA,rtri:IA,rtrie:PA,rtrif:BA,rtriltri:VA,RuleDelayed:GA,ruluhar:XA,rx:zA,Sacute:YA,sacute:JA,sbquo:QA,scap:KA,Scaron:ZA,scaron:WA,Sc:tD,sc:nD,sccue:sD,sce:oD,scE:cD,Scedil:eD,scedil:rD,Scirc:aD,scirc:iD,scnap:lD,scnE:uD,scnsim:dD,scpolint:pD,scsim:fD,Scy:mD,scy:gD,sdotb:hD,sdot:bD,sdote:vD,searhk:xD,searr:wD,seArr:yD,searrow:qD,sect:LD,semi:TD,seswar:SD,setminus:ED,setmn:jD,sext:AD,Sfr:DD,sfr:ND,sfrown:RD,sharp:kD,SHCHcy:CD,shchcy:MD,SHcy:HD,shcy:$D,ShortDownArrow:OD,ShortLeftArrow:_D,shortmid:UD,shortparallel:FD,ShortRightArrow:ID,ShortUpArrow:PD,shy:BD,Sigma:VD,sigma:GD,sigmaf:XD,sigmav:zD,sim:YD,simdot:JD,sime:QD,simeq:KD,simg:ZD,simgE:WD,siml:tN,simlE:nN,simne:sN,simplus:oN,simrarr:cN,slarr:eN,SmallCircle:rN,smallsetminus:aN,smashp:iN,smeparsl:lN,smid:uN,smile:dN,smt:pN,smte:fN,smtes:mN,SOFTcy:gN,softcy:hN,solbar:bN,solb:vN,sol:xN,Sopf:wN,sopf:yN,spades:qN,spadesuit:LN,spar:TN,sqcap:SN,sqcaps:EN,sqcup:jN,sqcups:AN,Sqrt:DN,sqsub:NN,sqsube:RN,sqsubset:kN,sqsubseteq:CN,sqsup:MN,sqsupe:HN,sqsupset:$N,sqsupseteq:ON,square:_N,Square:UN,SquareIntersection:FN,SquareSubset:IN,SquareSubsetEqual:PN,SquareSuperset:BN,SquareSupersetEqual:VN,SquareUnion:GN,squarf:XN,squ:zN,squf:YN,srarr:JN,Sscr:QN,sscr:KN,ssetmn:ZN,ssmile:WN,sstarf:tR,Star:nR,star:sR,starf:oR,straightepsilon:cR,straightphi:eR,strns:rR,sub:aR,Sub:iR,subdot:lR,subE:uR,sube:dR,subedot:pR,submult:fR,subnE:mR,subne:gR,subplus:hR,subrarr:bR,subset:vR,Subset:xR,subseteq:wR,subseteqq:yR,SubsetEqual:qR,subsetneq:LR,subsetneqq:TR,subsim:SR,subsub:ER,subsup:jR,succapprox:AR,succ:DR,succcurlyeq:NR,Succeeds:RR,SucceedsEqual:kR,SucceedsSlantEqual:CR,SucceedsTilde:MR,succeq:HR,succnapprox:$R,succneqq:OR,succnsim:_R,succsim:UR,SuchThat:FR,sum:IR,Sum:PR,sung:BR,sup1:VR,sup2:GR,sup3:XR,sup:zR,Sup:YR,supdot:JR,supdsub:QR,supE:KR,supe:ZR,supedot:WR,Superset:tk,SupersetEqual:nk,suphsol:sk,suphsub:ok,suplarr:ck,supmult:ek,supnE:rk,supne:ak,supplus:ik,supset:lk,Supset:uk,supseteq:dk,supseteqq:pk,supsetneq:fk,supsetneqq:mk,supsim:gk,supsub:hk,supsup:bk,swarhk:vk,swarr:xk,swArr:wk,swarrow:yk,swnwar:qk,szlig:Lk,Tab:Tk,target:Sk,Tau:Ek,tau:jk,tbrk:Ak,Tcaron:Dk,tcaron:Nk,Tcedil:Rk,tcedil:kk,Tcy:Ck,tcy:Mk,tdot:Hk,telrec:$k,Tfr:Ok,tfr:_k,there4:Uk,therefore:Fk,Therefore:Ik,Theta:Pk,theta:Bk,thetasym:Vk,thetav:Gk,thickapprox:Xk,thicksim:zk,ThickSpace:Yk,ThinSpace:Jk,thinsp:Qk,thkap:Kk,thksim:Zk,THORN:Wk,thorn:tC,tilde:nC,Tilde:sC,TildeEqual:oC,TildeFullEqual:cC,TildeTilde:eC,timesbar:rC,timesb:aC,times:iC,timesd:lC,tint:uC,toea:dC,topbot:pC,topcir:fC,top:mC,Topf:gC,topf:hC,topfork:bC,tosa:vC,tprime:xC,trade:wC,TRADE:yC,triangle:qC,triangledown:LC,triangleleft:TC,trianglelefteq:SC,triangleq:EC,triangleright:jC,trianglerighteq:AC,tridot:DC,trie:NC,triminus:RC,TripleDot:kC,triplus:CC,trisb:MC,tritime:HC,trpezium:$C,Tscr:OC,tscr:_C,TScy:UC,tscy:FC,TSHcy:IC,tshcy:PC,Tstrok:BC,tstrok:VC,twixt:GC,twoheadleftarrow:XC,twoheadrightarrow:zC,Uacute:YC,uacute:JC,uarr:QC,Uarr:KC,uArr:ZC,Uarrocir:WC,Ubrcy:tM,ubrcy:nM,Ubreve:sM,ubreve:oM,Ucirc:cM,ucirc:eM,Ucy:rM,ucy:aM,udarr:iM,Udblac:lM,udblac:uM,udhar:dM,ufisht:pM,Ufr:fM,ufr:mM,Ugrave:gM,ugrave:hM,uHar:bM,uharl:vM,uharr:xM,uhblk:wM,ulcorn:yM,ulcorner:qM,ulcrop:LM,ultri:TM,Umacr:SM,umacr:EM,uml:jM,UnderBar:AM,UnderBrace:DM,UnderBracket:NM,UnderParenthesis:RM,Union:kM,UnionPlus:CM,Uogon:MM,uogon:HM,Uopf:$M,uopf:OM,UpArrowBar:_M,uparrow:UM,UpArrow:FM,Uparrow:IM,UpArrowDownArrow:PM,updownarrow:BM,UpDownArrow:VM,Updownarrow:GM,UpEquilibrium:XM,upharpoonleft:zM,upharpoonright:YM,uplus:JM,UpperLeftArrow:QM,UpperRightArrow:KM,upsi:ZM,Upsi:WM,upsih:tH,Upsilon:nH,upsilon:sH,UpTeeArrow:oH,UpTee:cH,upuparrows:eH,urcorn:rH,urcorner:aH,urcrop:iH,Uring:lH,uring:uH,urtri:dH,Uscr:pH,uscr:fH,utdot:mH,Utilde:gH,utilde:hH,utri:bH,utrif:vH,uuarr:xH,Uuml:wH,uuml:yH,uwangle:qH,vangrt:LH,varepsilon:TH,varkappa:SH,varnothing:EH,varphi:jH,varpi:AH,varpropto:DH,varr:NH,vArr:RH,varrho:kH,varsigma:CH,varsubsetneq:MH,varsubsetneqq:HH,varsupsetneq:$H,varsupsetneqq:OH,vartheta:_H,vartriangleleft:UH,vartriangleright:FH,vBar:IH,Vbar:PH,vBarv:BH,Vcy:VH,vcy:GH,vdash:XH,vDash:zH,Vdash:YH,VDash:JH,Vdashl:QH,veebar:KH,vee:ZH,Vee:WH,veeeq:t2,vellip:n2,verbar:s2,Verbar:o2,vert:c2,Vert:e2,VerticalBar:r2,VerticalLine:a2,VerticalSeparator:i2,VerticalTilde:l2,VeryThinSpace:u2,Vfr:d2,vfr:p2,vltri:f2,vnsub:m2,vnsup:g2,Vopf:h2,vopf:b2,vprop:v2,vrtri:x2,Vscr:w2,vscr:y2,vsubnE:q2,vsubne:L2,vsupnE:T2,vsupne:S2,Vvdash:E2,vzigzag:j2,Wcirc:A2,wcirc:D2,wedbar:N2,wedge:R2,Wedge:k2,wedgeq:C2,weierp:M2,Wfr:H2,wfr:$2,Wopf:O2,wopf:_2,wp:U2,wr:F2,wreath:I2,Wscr:P2,wscr:B2,xcap:V2,xcirc:G2,xcup:X2,xdtri:z2,Xfr:Y2,xfr:J2,xharr:Q2,xhArr:K2,Xi:Z2,xi:W2,xlarr:t$,xlArr:n$,xmap:s$,xnis:o$,xodot:c$,Xopf:e$,xopf:r$,xoplus:a$,xotime:i$,xrarr:l$,xrArr:u$,Xscr:d$,xscr:p$,xsqcup:f$,xuplus:m$,xutri:g$,xvee:h$,xwedge:b$,Yacute:v$,yacute:x$,YAcy:w$,yacy:y$,Ycirc:q$,ycirc:L$,Ycy:T$,ycy:S$,yen:E$,Yfr:j$,yfr:A$,YIcy:D$,yicy:N$,Yopf:R$,yopf:k$,Yscr:C$,yscr:M$,YUcy:H$,yucy:$$,yuml:O$,Yuml:_$,Zacute:U$,zacute:F$,Zcaron:I$,zcaron:P$,Zcy:B$,zcy:V$,Zdot:G$,zdot:X$,zeetrf:z$,ZeroWidthSpace:Y$,Zeta:J$,zeta:Q$,zfr:K$,Zfr:Z$,ZHcy:W$,zhcy:tO,zigrarr:nO,zopf:sO,Zopf:oO,Zscr:cO,zscr:eO,zwj:rO,zwnj:aO},iO="Á",lO="á",uO="Â",dO="â",pO="´",fO="Æ",mO="æ",gO="À",hO="à",bO="&",vO="&",xO="Å",wO="å",yO="Ã",qO="ã",LO="Ä",TO="ä",SO="¦",EO="Ç",jO="ç",AO="¸",DO="¢",NO="©",RO="©",kO="¤",CO="°",MO="÷",HO="É",$O="é",OO="Ê",_O="ê",UO="È",FO="è",IO="Ð",PO="ð",BO="Ë",VO="ë",GO="½",XO="¼",zO="¾",YO=">",JO=">",QO="Í",KO="í",ZO="Î",WO="î",t_="¡",n_="Ì",s_="ì",o_="¿",c_="Ï",e_="ï",r_="«",a_="<",i_="<",l_="¯",u_="µ",d_="·",p_=" ",f_="¬",m_="Ñ",g_="ñ",h_="Ó",b_="ó",v_="Ô",x_="ô",w_="Ò",y_="ò",q_="ª",L_="º",T_="Ø",S_="ø",E_="Õ",j_="õ",A_="Ö",D_="ö",N_="¶",R_="±",k_="£",C_='"',M_='"',H_="»",$_="®",O_="®",__="§",U_="­",F_="¹",I_="²",P_="³",B_="ß",V_="Þ",G_="þ",X_="×",z_="Ú",Y_="ú",J_="Û",Q_="û",K_="Ù",Z_="ù",W_="¨",tU="Ü",nU="ü",sU="Ý",oU="ý",cU="¥",eU="ÿ",rU={Aacute:iO,aacute:lO,Acirc:uO,acirc:dO,acute:pO,AElig:fO,aelig:mO,Agrave:gO,agrave:hO,amp:bO,AMP:vO,Aring:xO,aring:wO,Atilde:yO,atilde:qO,Auml:LO,auml:TO,brvbar:SO,Ccedil:EO,ccedil:jO,cedil:AO,cent:DO,copy:NO,COPY:RO,curren:kO,deg:CO,divide:MO,Eacute:HO,eacute:$O,Ecirc:OO,ecirc:_O,Egrave:UO,egrave:FO,ETH:IO,eth:PO,Euml:BO,euml:VO,frac12:GO,frac14:XO,frac34:zO,gt:YO,GT:JO,Iacute:QO,iacute:KO,Icirc:ZO,icirc:WO,iexcl:t_,Igrave:n_,igrave:s_,iquest:o_,Iuml:c_,iuml:e_,laquo:r_,lt:a_,LT:i_,macr:l_,micro:u_,middot:d_,nbsp:p_,not:f_,Ntilde:m_,ntilde:g_,Oacute:h_,oacute:b_,Ocirc:v_,ocirc:x_,Ograve:w_,ograve:y_,ordf:q_,ordm:L_,Oslash:T_,oslash:S_,Otilde:E_,otilde:j_,Ouml:A_,ouml:D_,para:N_,plusmn:R_,pound:k_,quot:C_,QUOT:M_,raquo:H_,reg:$_,REG:O_,sect:__,shy:U_,sup1:F_,sup2:I_,sup3:P_,szlig:B_,THORN:V_,thorn:G_,times:X_,Uacute:z_,uacute:Y_,Ucirc:J_,ucirc:Q_,Ugrave:K_,ugrave:Z_,uml:W_,Uuml:tU,uuml:nU,Yacute:sU,yacute:oU,yen:cU,yuml:eU},aU="&",iU="'",lU=">",uU="<",dU='"',vt={amp:aU,apos:iU,gt:lU,lt:uU,quot:dU};var V={};const pU={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};var it;function fU(){if(it)return V;it=1;var c=V&&V.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(V,"__esModule",{value:!0});var r=c(pU),i=String.fromCodePoint||function(e){var g="";return e>65535&&(e-=65536,g+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),g+=String.fromCharCode(e),g};function m(e){return e>=55296&&e<=57343||e>1114111?"�":(e in r.default&&(e=r.default[e]),i(e))}return V.default=m,V}var lt;function ut(){if(lt)return U;lt=1;var c=U&&U.__importDefault||function(p){return p&&p.__esModule?p:{default:p}};Object.defineProperty(U,"__esModule",{value:!0}),U.decodeHTML=U.decodeHTMLStrict=U.decodeXML=void 0;var r=c(bt),i=c(rU),m=c(vt),e=c(fU()),g=/&(?:[a-zA-Z0-9]+|#[xX][\da-fA-F]+|#\d+);/g;U.decodeXML=T(m.default),U.decodeHTMLStrict=T(r.default);function T(p){var v=w(p);return function(l){return String(l).replace(g,v)}}var h=function(p,v){return p<v?1:-1};U.decodeHTML=(function(){for(var p=Object.keys(i.default).sort(h),v=Object.keys(r.default).sort(h),l=0,b=0;l<v.length;l++)p[b]===v[l]?(v[l]+=";?",b++):v[l]+=";";var q=new RegExp("&(?:"+v.join("|")+"|#[xX][\\da-fA-F]+;?|#\\d+;?)","g"),j=w(r.default);function S(y){return y.substr(-1)!==";"&&(y+=";"),j(y)}return function(y){return String(y).replace(q,S)}})();function w(p){return function(l){if(l.charAt(1)==="#"){var b=l.charAt(2);return b==="X"||b==="x"?e.default(parseInt(l.substr(3),16)):e.default(parseInt(l.substr(2),10))}return p[l.slice(1,-1)]||l}}return U}var D={},dt;function pt(){if(dt)return D;dt=1;var c=D&&D.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(D,"__esModule",{value:!0}),D.escapeUTF8=D.escape=D.encodeNonAsciiHTML=D.encodeHTML=D.encodeXML=void 0;var r=c(vt),i=h(r.default),m=w(i);D.encodeXML=y(i);var e=c(bt),g=h(e.default),T=w(g);D.encodeHTML=b(g,T),D.encodeNonAsciiHTML=y(g);function h(u){return Object.keys(u).sort().reduce(function(x,A){return x[u[A]]="&"+A+";",x},{})}function w(u){for(var x=[],A=[],R=0,B=Object.keys(u);R<B.length;R++){var P=B[R];P.length===1?x.push("\\"+P):A.push(P)}x.sort();for(var M=0;M<x.length-1;M++){for(var F=M;F<x.length-1&&x[F].charCodeAt(1)+1===x[F+1].charCodeAt(1);)F+=1;var Y=1+F-M;Y<3||x.splice(M,Y,x[M]+"-"+x[F])}return A.unshift("["+x.join("")+"]"),new RegExp(A.join("|"),"g")}var p=/(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g,v=String.prototype.codePointAt!=null?function(u){return u.codePointAt(0)}:function(u){return(u.charCodeAt(0)-55296)*1024+u.charCodeAt(1)-56320+65536};function l(u){return"&#x"+(u.length>1?v(u):u.charCodeAt(0)).toString(16).toUpperCase()+";"}function b(u,x){return function(A){return A.replace(x,function(R){return u[R]}).replace(p,l)}}var q=new RegExp(m.source+"|"+p.source,"g");function j(u){return u.replace(q,l)}D.escape=j;function S(u){return u.replace(m,l)}D.escapeUTF8=S;function y(u){return function(x){return x.replace(q,function(A){return u[A]||l(A)})}}return D}var ft;function mU(){return ft||(ft=1,(function(c){Object.defineProperty(c,"__esModule",{value:!0}),c.decodeXMLStrict=c.decodeHTML5Strict=c.decodeHTML4Strict=c.decodeHTML5=c.decodeHTML4=c.decodeHTMLStrict=c.decodeHTML=c.decodeXML=c.encodeHTML5=c.encodeHTML4=c.escapeUTF8=c.escape=c.encodeNonAsciiHTML=c.encodeHTML=c.encodeXML=c.encode=c.decodeStrict=c.decode=void 0;var r=ut(),i=pt();function m(w,p){return(!p||p<=0?r.decodeXML:r.decodeHTML)(w)}c.decode=m;function e(w,p){return(!p||p<=0?r.decodeXML:r.decodeHTMLStrict)(w)}c.decodeStrict=e;function g(w,p){return(!p||p<=0?i.encodeXML:i.encodeHTML)(w)}c.encode=g;var T=pt();Object.defineProperty(c,"encodeXML",{enumerable:!0,get:function(){return T.encodeXML}}),Object.defineProperty(c,"encodeHTML",{enumerable:!0,get:function(){return T.encodeHTML}}),Object.defineProperty(c,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return T.encodeNonAsciiHTML}}),Object.defineProperty(c,"escape",{enumerable:!0,get:function(){return T.escape}}),Object.defineProperty(c,"escapeUTF8",{enumerable:!0,get:function(){return T.escapeUTF8}}),Object.defineProperty(c,"encodeHTML4",{enumerable:!0,get:function(){return T.encodeHTML}}),Object.defineProperty(c,"encodeHTML5",{enumerable:!0,get:function(){return T.encodeHTML}});var h=ut();Object.defineProperty(c,"decodeXML",{enumerable:!0,get:function(){return h.decodeXML}}),Object.defineProperty(c,"decodeHTML",{enumerable:!0,get:function(){return h.decodeHTML}}),Object.defineProperty(c,"decodeHTMLStrict",{enumerable:!0,get:function(){return h.decodeHTMLStrict}}),Object.defineProperty(c,"decodeHTML4",{enumerable:!0,get:function(){return h.decodeHTML}}),Object.defineProperty(c,"decodeHTML5",{enumerable:!0,get:function(){return h.decodeHTML}}),Object.defineProperty(c,"decodeHTML4Strict",{enumerable:!0,get:function(){return h.decodeHTMLStrict}}),Object.defineProperty(c,"decodeHTML5Strict",{enumerable:!0,get:function(){return h.decodeHTMLStrict}}),Object.defineProperty(c,"decodeXMLStrict",{enumerable:!0,get:function(){return h.decodeXML}})})(W)),W}var tt,mt;function gU(){if(mt)return tt;mt=1;function c(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function r(t,n){for(var o=0;o<n.length;o++){var a=n[o];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function i(t,n,o){return n&&r(t.prototype,n),t}function m(t,n){var o=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!o){if(Array.isArray(t)||(o=e(t))||n){o&&(t=o);var a=0,f=function(){};return{s:f,n:function(){return a>=t.length?{done:!0}:{done:!1,value:t[a++]}},e:function($){throw $},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
3
3
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var d=!0,H=!1,C;return{s:function(){o=o.call(t)},n:function(){var $=o.next();return d=$.done,$},e:function($){H=!0,C=$},f:function(){try{!d&&o.return!=null&&o.return()}finally{if(H)throw C}}}}function e(t,n){if(t){if(typeof t=="string")return g(t,n);var o=Object.prototype.toString.call(t).slice(8,-1);if(o==="Object"&&t.constructor&&(o=t.constructor.name),o==="Map"||o==="Set")return Array.from(t);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return g(t,n)}}function g(t,n){(n==null||n>t.length)&&(n=t.length);for(var o=0,a=new Array(n);o<n;o++)a[o]=t[o];return a}var T=mU(),h={fg:"#FFF",bg:"#000",newline:!1,escapeXML:!1,stream:!1,colors:w()};function w(){var t={0:"#000",1:"#A00",2:"#0A0",3:"#A50",4:"#00A",5:"#A0A",6:"#0AA",7:"#AAA",8:"#555",9:"#F55",10:"#5F5",11:"#FF5",12:"#55F",13:"#F5F",14:"#5FF",15:"#FFF"};return y(0,5).forEach(function(n){y(0,5).forEach(function(o){y(0,5).forEach(function(a){return p(n,o,a,t)})})}),y(0,23).forEach(function(n){var o=n+232,a=v(n*10+8);t[o]="#"+a+a+a}),t}function p(t,n,o,a){var f=16+t*36+n*6+o,d=t>0?t*40+55:0,H=n>0?n*40+55:0,C=o>0?o*40+55:0;a[f]=l([d,H,C])}function v(t){for(var n=t.toString(16);n.length<2;)n="0"+n;return n}function l(t){var n=[],o=m(t),a;try{for(o.s();!(a=o.n()).done;){var f=a.value;n.push(v(f))}}catch(d){o.e(d)}finally{o.f()}return"#"+n.join("")}function b(t,n,o,a){var f;return n==="text"?f=A(o,a):n==="display"?f=j(t,o,a):n==="xterm256Foreground"?f=P(t,a.colors[o]):n==="xterm256Background"?f=M(t,a.colors[o]):n==="rgb"&&(f=q(t,o)),f}function q(t,n){n=n.substring(2).slice(0,-1);var o=+n.substr(0,2),a=n.substring(5).split(";"),f=a.map(function(d){return("0"+Number(d).toString(16)).substr(-2)}).join("");return B(t,(o===38?"color:#":"background-color:#")+f)}function j(t,n,o){n=parseInt(n,10);var a={"-1":function(){return"<br/>"},0:function(){return t.length&&S(t)},1:function(){return R(t,"b")},3:function(){return R(t,"i")},4:function(){return R(t,"u")},8:function(){return B(t,"display:none")},9:function(){return R(t,"strike")},22:function(){return B(t,"font-weight:normal;text-decoration:none;font-style:normal")},23:function(){return F(t,"i")},24:function(){return F(t,"u")},39:function(){return P(t,o.fg)},49:function(){return M(t,o.bg)},53:function(){return B(t,"text-decoration:overline")}},f;return a[n]?f=a[n]():4<n&&n<7?f=R(t,"blink"):29<n&&n<38?f=P(t,o.colors[n-30]):39<n&&n<48?f=M(t,o.colors[n-40]):89<n&&n<98?f=P(t,o.colors[8+(n-90)]):99<n&&n<108&&(f=M(t,o.colors[8+(n-100)])),f}function S(t){var n=t.slice(0);return t.length=0,n.reverse().map(function(o){return"</"+o+">"}).join("")}function y(t,n){for(var o=[],a=t;a<=n;a++)o.push(a);return o}function u(t){return function(n){return(t===null||n.category!==t)&&t!=="all"}}function x(t){t=parseInt(t,10);var n=null;return t===0?n="all":t===1?n="bold":2<t&&t<5?n="underline":4<t&&t<7?n="blink":t===8?n="hide":t===9?n="strike":29<t&&t<38||t===39||89<t&&t<98?n="foreground-color":(39<t&&t<48||t===49||99<t&&t<108)&&(n="background-color"),n}function A(t,n){return n.escapeXML?T.encodeXML(t):t}function R(t,n,o){return o||(o=""),t.push(n),"<".concat(n).concat(o?' style="'.concat(o,'"'):"",">")}function B(t,n){return R(t,"span",n)}function P(t,n){return R(t,"span","color:"+n)}function M(t,n){return R(t,"span","background-color:"+n)}function F(t,n){var o;if(t.slice(-1)[0]===n&&(o=t.pop()),o)return"</"+n+">"}function Y(t,n,o){var a=!1,f=3;function d(){return""}function H(O,_){return o("xterm256Foreground",_),""}function C(O,_){return o("xterm256Background",_),""}function E(O){return n.newline?o("display",-1):o("text",O),""}function $(O,_){a=!0,_.trim().length===0&&(_="0"),_=_.trimRight(";").split(";");var J=m(_),at;try{for(J.s();!(at=J.n()).done;){var Dt=at.value;o("display",Dt)}}catch(Nt){J.e(Nt)}finally{J.f()}return""}function Lt(O){return o("text",O),""}function Tt(O){return o("rgb",O),""}var ct=[{pattern:/^\x08+/,sub:d},{pattern:/^\x1b\[[012]?K/,sub:d},{pattern:/^\x1b\[\(B/,sub:d},{pattern:/^\x1b\[[34]8;2;\d+;\d+;\d+m/,sub:Tt},{pattern:/^\x1b\[38;5;(\d+)m/,sub:H},{pattern:/^\x1b\[48;5;(\d+)m/,sub:C},{pattern:/^\n/,sub:E},{pattern:/^\r+\n/,sub:E},{pattern:/^\r/,sub:E},{pattern:/^\x1b\[((?:\d{1,3};?)+|)m/,sub:$},{pattern:/^\x1b\[\d?J/,sub:d},{pattern:/^\x1b\[\d{0,3};\d{0,3}f/,sub:d},{pattern:/^\x1b\[?[\d;]{0,3}/,sub:d},{pattern:/^(([^\x1b\x08\r\n])+)/,sub:Lt}];function St(O,_){_>f&&a||(a=!1,t=t.replace(O.pattern,O.sub))}var et=[],Et=t,X=Et.length;t:for(;X>0;){for(var Z=0,rt=0,jt=ct.length;rt<jt;Z=++rt){var At=ct[Z];if(St(At,Z),t.length!==X){X=t.length;continue t}}if(t.length===X)break;et.push(0),X=t.length}return et}function yt(t,n,o){return n!=="text"&&(t=t.filter(u(x(o))),t.push({token:n,data:o,category:x(o)})),t}var qt=(function(){function t(n){c(this,t),n=n||{},n.colors&&(n.colors=Object.assign({},h.colors,n.colors)),this.options=Object.assign({},h,n),this.stack=[],this.stickyStack=[]}return i(t,[{key:"toHtml",value:function(o){var a=this;o=typeof o=="string"?[o]:o;var f=this.stack,d=this.options,H=[];return this.stickyStack.forEach(function(C){var E=b(f,C.token,C.data,d);E&&H.push(E)}),Y(o.join(""),d,function(C,E){var $=b(f,C,E,d);$&&H.push($),d.stream&&(a.stickyStack=yt(a.stickyStack,C,E))}),f.length&&H.push(S(f)),H.join("")}}]),t})();return tt=qt,tt}var hU=gU();const bU=Rt(hU);function xt(){const c=gt();return L.useMemo(()=>new bU(c==="dark"?{fg:"#d6deeb",bg:"#121318",escapeXML:!0}:{fg:"#000000",bg:"#f3f3f3",escapeXML:!0}),[c])}function wt(c){return c.replace(/\u001b\[\d+A/g,"").replace(/\u001b\[\d+K/g,"")}const vU=_t(I({type:k("epicshop:test-status-update"),timestamp:G()}),z([I({status:k("pending")}),I({status:k("pass")}),I({status:k("fail"),error:Q()})])),xU=I({type:k("epicshop:test-step-update"),status:k("pass"),title:Q(),timestamp:G()}),wU=z([xU,vU]);function yU({pathname:c,testFile:r}){const i=gt(),m=xt(),e=L.useRef(null),[g,T]=L.useState(null),[h,w]=L.useState([]);L.useEffect(()=>{function b(q){if(q.source!==e.current?.contentWindow||"request"in q.data)return;const j=wU.safeParse(q.data);if(!j.success){console.error("Invalid message from test iframe",q.data,j.error);return}const{data:S}=j;S.type==="epicshop:test-status-update"&&(S.status==="pending"&&w([]),T(S)),S.type==="epicshop:test-step-update"&&w(y=>[...y,S])}return window.addEventListener("message",b),()=>{window.removeEventListener("message",b)}},[]);const p={pending:s.jsx(st,{size:14,"aria-label":"Pending"}),pass:s.jsx(N,{name:"CheckSmall","aria-label":"Passed",className:"text-success"}),fail:s.jsx(N,{name:"Remove","aria-label":"Failed",className:"text-foreground-destructive"}),unknown:s.jsx(N,{name:"Question","aria-label":"Unknown",className:"animate-pulse"})}[g?.status??"unknown"],v=h.sort((b,q)=>b.timestamp-q.timestamp),l={pass:s.jsx(N,{name:"CheckSmall","aria-label":"Passed"}),fail:s.jsx(N,{name:"Remove","aria-label":"Failed"}),unknown:s.jsx(N,{name:"Question","aria-label":"Unknown",className:"animate-pulse"})};return s.jsx(s.Fragment,{children:s.jsx(kt,{className:"w-full",type:"multiple",children:s.jsx(Ct,{icon:p,title:r,forceMount:!0,children:s.jsxs("div",{className:"not-prose",children:[s.jsxs("div",{className:"flex flex-col gap-2 p-5 pt-3",children:[s.jsx("ul",{className:"flex flex-col gap-2",children:v.map((b,q)=>s.jsx("li",{children:s.jsxs("div",{className:"text-success flex items-baseline gap-2",children:[s.jsxs("span",{children:[q+1,"."]}),s.jsx("span",{children:l[b.status]}),s.jsx("pre",{className:"scrollbar-thin scrollbar-thumb-scrollbar max-h-48 overflow-y-auto p-4",children:b.title})]})},b.timestamp+b.title))}),g?.status==="fail"?s.jsxs("div",{className:"text-foreground-destructive flex items-baseline gap-2",children:[s.jsxs("span",{children:[v.length+1,"."]}),s.jsx("span",{children:l.fail}),s.jsx("pre",{className:"scrollbar-thin scrollbar-thumb-scrollbar max-h-48 overflow-y-auto p-4",dangerouslySetInnerHTML:{__html:m.toHtml(wt(g.error))}})]}):null,s.jsx("iframe",{ref:e,title:r,src:c+r,className:"bg-background mt-5 min-h-[420px] w-full border",style:{colorScheme:i},allow:"clipboard-write"})]}),s.jsxs("div",{className:"flex border-y",children:[s.jsx("button",{onClick:()=>e.current?.contentWindow?.location.reload(),className:"border-r p-3",children:s.jsx(N,{name:"Refresh","aria-label":"Rerun Tests"})}),s.jsx("a",{href:c+r,target:"_blank",rel:"noreferrer",className:"border-r p-3",children:s.jsx(N,{name:"ExternalLink","aria-label":"Open in New Window"})})]})]})})})})}const qU=z([I({type:k("init"),exitCode:G().nullable().optional(),isRunning:Ut(),output:ht(I({type:z([k("stdout"),k("stderr")]),content:Q(),timestamp:G()}))}),I({type:z([k("stdout"),k("stderr")]),data:Q(),timestamp:G()}),I({type:k("exit"),isRunning:k(!1),code:G().nullable()})]),LU=ht(qU);function TU(c,r){return r(c)}function SU({name:c}){const[r,i]=L.useReducer(TU,{version:0,isRunning:!1,exitCode:void 0,lines:[]}),m=Ht(),e=L.useRef(m);L.useEffect(()=>{e.current=m},[m]);const g=xt(),{version:T,isRunning:h,exitCode:w,lines:p}=r,v=Ft(`/test?${new URLSearchParams({name:c})}&v=${T}`);return L.useEffect(()=>{if(!v)return;const l=JSON.parse(v),b=LU.safeParse(l);if(!b.success){console.error(b.error.flatten());return}for(const q of b.data)switch(q.type){case"exit":{const{isRunning:j,code:S}=q;i(y=>({...y,isRunning:j,exitCode:S})),e.current.revalidate();break}case"init":{const{output:j,exitCode:S,isRunning:y}=q;i(u=>({...u,lines:j,exitCode:S,isRunning:y}));break}case"stderr":case"stdout":{const{type:j,data:S,timestamp:y}=q;i(u=>({...u,lines:[...u.lines,{type:j,content:S,timestamp:y}].sort((x,A)=>x.timestamp-A.timestamp),isRunning:!0}));break}}},[v]),s.jsxs("div",{className:"relative flex h-full w-full flex-col overflow-hidden",children:[s.jsxs("div",{className:"flex h-12 w-full shrink-0 items-center justify-between border-b",children:[s.jsxs("div",{className:"flex h-full items-center",children:[!h&&s.jsx(EU,{name:c,onRun:()=>{i(l=>({...l,exitCode:void 0,lines:[],version:l.version+1}))}}),h?s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"flex h-full grow items-center justify-center border-r px-3.5",children:s.jsx(st,{role:"status","aria-label":"Running Tests"})}),s.jsx(AU,{name:c})]}):null]}),!h&&w!==void 0&&s.jsx("p",{className:"pr-3.5 leading-none",children:w===0?"Tests passed":`Test failed (exit code ${String(w)})`}),!h&&w!==void 0&&s.jsx(jU,{name:c,onClear:()=>{i(l=>({...l,exitCode:void 0,lines:[]}))}})]}),s.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-5 p-5",children:[s.jsx("p",{className:"font-mono text-sm font-medium uppercase",children:"Test Output"}),s.jsx("pre",{className:"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar min-h-0 flex-1 overflow-y-auto",children:p.map(l=>s.jsx("code",{"data-type":l.type,dangerouslySetInnerHTML:{__html:g.toHtml(wt(l.content))}},l.timestamp))})]})]})}function EU({name:c,onRun:r}){const i=nt(),m=ot(),e=L.useRef(r);return L.useEffect(()=>{e.current=r},[r]),L.useEffect(()=>{i.data?.success&&e.current?.()},[i.data]),s.jsxs(i.Form,{method:"POST",action:"/test",className:"h-full",children:[m,s.jsx("input",{type:"hidden",name:"name",value:c}),s.jsx(K,{content:i.state==="idle"?"Run Tests":"Running Tests...",children:s.jsx("button",{type:"submit",name:"intent",value:"run",className:"flex h-full grow items-center justify-center border-r px-3.5",children:i.state==="idle"?s.jsx(N,{name:"TriangleSmall"}):s.jsx(st,{role:"status"})})})]})}function jU({name:c,onClear:r}){const i=nt(),m=ot(),e=L.useRef(r);return L.useEffect(()=>{e.current=r},[r]),L.useEffect(()=>{i.data?.success&&e.current?.()},[i.data]),s.jsxs(i.Form,{method:"POST",action:"/test",className:"h-full",children:[m,s.jsx("input",{type:"hidden",name:"name",value:c}),s.jsx(K,{content:i.state==="idle"?"Clear Tests":"Clearing Tests...",children:s.jsx("button",{type:"submit",name:"intent",value:"clear",className:"flex h-full grow items-center justify-center border-l px-3.5",children:i.state==="idle"?s.jsx(N,{name:"Clear"}):s.jsx(N,{name:"Clear",className:"animate-pulse",role:"status"})})})]})}function AU({name:c,onStop:r}){const i=nt(),m=ot(),e=L.useRef(r);return L.useEffect(()=>{e.current=r},[r]),L.useEffect(()=>{i.data?.success&&e.current?.()},[i.data]),s.jsxs(i.Form,{method:"POST",action:"/test",className:"h-full",children:[m,s.jsx("input",{type:"hidden",name:"name",value:c}),s.jsx(K,{content:i.state==="idle"?"Stop Tests":"Stopping Tests...",children:s.jsx("button",{type:"submit",name:"intent",value:"stop",className:"flex h-full grow items-center justify-center border-r px-3.5",children:i.state==="idle"?s.jsx(N,{name:"Stop"}):s.jsx(N,{name:"Stop",className:"animate-pulse",role:"status"})})})]})}function PU({appInfo:c,problemAppName:r,allApps:i,isUpToDate:m,userHasAccessPromise:e}){return s.jsx(It,{playgroundAppName:c?.appName,problemAppName:r,allApps:i,isUpToDate:m,children:s.jsx(Mt,{fallbackRender:()=>s.jsx("div",{className:"w-full p-12",children:s.jsxs("div",{className:"flex w-full flex-col gap-4 text-center",children:[s.jsx("p",{className:"text-2xl font-bold",children:"Error"}),s.jsx("p",{className:"text-lg",children:"There was an error loading the user access."})]})}),children:s.jsx(L.Suspense,{fallback:s.jsx("div",{className:"flex items-center justify-center p-8",children:s.jsx(K,{content:"Loading user access",children:s.jsx(N,{name:"Refresh",className:"animate-spin"})})}),children:s.jsx($t,{resolve:e,children:g=>s.jsx(DU,{playgroundAppInfo:c,userHasAccess:g})})})})})}function DU({userHasAccess:c,playgroundAppInfo:r}){const[i,m]=L.useState(0);if(!c)return s.jsxs("div",{className:"w-full p-12",children:[s.jsxs("div",{className:"flex w-full flex-col gap-4 text-center",children:[s.jsx("p",{className:"text-2xl font-bold",children:"Access Denied"}),s.jsx("p",{className:"text-lg",children:"You must login or register for the workshop to view and run the tests."})]}),s.jsx("div",{className:"h-16"}),s.jsx("p",{className:"pb-4",children:"Check out this video to see how the test tab works."}),s.jsx(Ot,{url:"https://www.epicweb.dev/tips/epic-workshop-test-tab-demo"})]});if(!r)return s.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:s.jsx("p",{children:"No tests here 😢 Sorry."})});if(r.test.type==="script")return s.jsx(SU,{name:r.name});if(r.test.type==="browser"){const{pathname:e}=r.test;return s.jsxs("div",{className:"flex h-full min-h-0 w-full grow flex-col overflow-y-auto",children:[r.test.testFiles.map(g=>s.jsx("div",{children:s.jsx(yU,{pathname:e,testFile:g})},g)),s.jsx("div",{className:"px-3 py-[21px]",children:s.jsxs("button",{onClick:()=>m(g=>g+1),className:"flex items-center gap-2 font-mono text-sm leading-none uppercase",children:[s.jsx(N,{name:"Refresh","aria-hidden":!0})," Rerun All Tests"]})})]},i)}return s.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:s.jsx("p",{children:"No tests here 😢 Sorry."})})}export{PU as T,DU as a};
4
- //# sourceMappingURL=tests-1-kVRtTc.js.map
4
+ //# sourceMappingURL=tests-CZ2AhDKA.js.map