]> git.frustrated-labs.net Git - frustrated-functor.dev.git/commitdiff
refactor: use zine SSG
authorAlexander Goussas <[email protected]>
Mon, 18 May 2026 16:30:01 +0000 (11:30 -0500)
committerAlexander Goussas <[email protected]>
Mon, 18 May 2026 16:30:01 +0000 (11:30 -0500)
41 files changed:
assets/Temml-Local.css [new file with mode: 0644]
assets/Temml.woff2 [new file with mode: 0644]
assets/highlight.css [new file with mode: 0644]
assets/hornet.png [new file with mode: 0644]
assets/logo.png [new file with mode: 0644]
assets/render-mathtex.js [new file with mode: 0644]
assets/styles.css [new file with mode: 0644]
assets/temml.min.js [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitattributes [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitignore [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/LICENSE [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/README.md [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/build.zig [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/licenses.txt [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/test.zig [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/time.zig [new file with mode: 0644]
bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/zig.mod [new file with mode: 0644]
content/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.smd [new file with mode: 0644]
content/2026-04-30-how-i-manage-my-blog.smd [new file with mode: 0644]
content/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.smd [new file with mode: 0644]
content/index.smd [new file with mode: 0644]
layouts/index.shtml [new file with mode: 0644]
layouts/page.shtml [new file with mode: 0644]
layouts/post.shtml [new file with mode: 0644]
layouts/rss.xml [new file with mode: 0644]
layouts/templates/base.shtml [new file with mode: 0644]
posts/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md [deleted file]
posts/2026-04-30-how-i-manage-my-blog.md [deleted file]
posts/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md [deleted file]
public/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/index.html [new file with mode: 0644]
public/2026-04-30-how-i-manage-my-blog/index.html [new file with mode: 0644]
public/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/index.html [new file with mode: 0644]
public/Temml-Local.css [new file with mode: 0644]
public/Temml.woff2 [new file with mode: 0644]
public/highlight.css [new file with mode: 0644]
public/index.html
public/render-mathtex.js [new file with mode: 0644]
public/styles.css
public/temml.min.js [new file with mode: 0644]
templates/index.html [deleted file]
zine.ziggy [new file with mode: 0644]

diff --git a/assets/Temml-Local.css b/assets/Temml-Local.css
new file mode 100644 (file)
index 0000000..fe05099
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+Temml.woff2 is a clone of KaTeX_Script-Regular, except that the code points
+have been changed from ASCII to Unicode Mathematical Alphanumeric Symbols Script capitals,
+Unicode range 1D49C to 1D4B5.
+*/
+
+@font-face {
+  font-family: 'Temml';
+  src: url('Temml.woff2') format('woff2');
+  font-weight: normal;
+  font-style: normal;
+}
+
+math {
+  font-family: "Cambria Math", 'STIXTwoMath-Regular', 'NotoSansMath-Regular', math;
+  font-style: normal;
+  font-weight: normal;
+  line-height: normal;
+  font-size-adjust: none;
+  text-indent: 0;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  direction: ltr;
+  /* Prevent Firefox from omitting the dot on i or j. */
+  font-feature-settings: "dtls" off;
+}
+
+math * {
+  border-color: currentColor;
+}
+
+/* Next line is active in Firefox and Safari.
+ * Not in Chromium, which recognizes display: "block math" written inline. */
+math.tml-display { display: block; }
+
+*.mathcal {
+  /* NotoSans */
+  font-feature-settings: 'ss01';
+}
+
+math .mathscr {
+  font-family: "Temml";
+}
+
+mo.tml-prime {
+  font-family: Temml;
+}
+
+/* Prevent f' from overlapping in Chromium */
+mo.prime-pad {
+  padding-left: 0.08em;
+}
+
+/* \cancel & \phase use background images. Get them to print. */
+menclose {
+  -webkit-print-color-adjust: exact;  /* Chrome & Edge */
+          print-color-adjust: exact;
+}
+
+/* Array cell justification in Firefox & WebKit */
+.tml-right {
+  text-align: right;
+}
+.tml-left {
+  text-align: left;
+}
+
+/* Styles for Chromium only */
+@supports (not (-webkit-backdrop-filter: blur(1px))) and (not (-moz-appearance: none)) {
+  /* MathML Core & Chromium do not support the MathML 3.0 element <menclose> attributes. */
+  /* So use styles. */
+  menclose {
+    position: relative;
+    padding: 0.5ex 0ex;
+  }
+  
+    .tml-overline {
+    padding: 0.1em 0 0 0;
+    border-top: 0.065em solid;
+  }
+
+  .tml-underline {
+    padding: 0 0 0.1em 0;
+    border-bottom: 0.065em solid;
+  }
+
+  .tml-cancel {
+    display: inline-block;
+    position: absolute;
+    left: 0.5px;
+    bottom: 0;
+    width: 100%;
+    height: 100%;
+    background-color: currentColor;
+  }
+  .upstrike {
+    clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em);
+  }
+  .downstrike {
+    clip-path: polygon(0em 0.05em, 0.05em 0em, 100% calc(100% - 0.05em), calc(100% - 0.05em) 100%);
+  }
+  .sout {
+    clip-path: polygon(0em calc(55% + 0.0333em), 0em calc(55% - 0.0333em), 100% calc(55% - 0.0333em), 100% calc(55% + 0.0333em));
+  }
+  .tml-xcancel {
+    background: linear-gradient(to top left,
+    rgba(0,0,0,0) 0%,
+    rgba(0,0,0,0) calc(50% - 0.06em),
+    rgba(0,0,0,1) 50%,
+    rgba(0,0,0,0) calc(50% + 0.06em),
+    rgba(0,0,0,0) 100%),
+    linear-gradient(to top right,
+    rgba(0,0,0,0) 0%,
+    rgba(0,0,0,0) calc(50% - 0.06em),
+    rgba(0,0,0,1) 50%,
+    rgba(0,0,0,0) calc(50% + 0.06em),
+    rgba(0,0,0,0) 100%)
+  }
+
+  .longdiv-top {
+    border-top: 0.067em solid;
+    padding: 0.1em 0.2em 0.2em 0.433em;
+  }
+  .longdiv-arc {
+    position: absolute;
+    top: 0;
+    bottom: 0.1em;
+    left: -0.4em;
+    width: 0.7em;
+    border: 0.067em solid;
+    transform: translateY(-0.067em);
+    border-radius: 70%;
+    clip-path: inset(0 0 0 0.4em);
+    box-sizing: border-box;}
+    .menclose {display: inline-block;
+    text-align: left;
+    position: relative;
+  }
+  
+  .phasor-bottom {
+    border-bottom: 0.067em solid;
+    padding: 0.2em 0.2em 0.1em 0.6em;
+  }
+  .phasor-angle {
+    display: inline-block;
+    position: absolute;
+    left: 0.5px;
+    bottom: -0.04em;
+    height: 100%;
+    aspect-ratio: 0.5;
+    background-color: currentColor;
+    clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em);
+  }
+
+  .tml-box {
+    padding: 3pt 0 3pt 0;
+    border: 1px solid;
+  }
+  .tml-fbox {
+    padding: 3pt;
+    border: 1px solid;
+  }
+
+  .circle-pad {
+    padding: 0.267em;
+  }
+  .textcircle {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    right: 0;
+    left: 0;
+    border: 0.067em solid;
+    border-radius: 50%;
+   }
+
+   .actuarial {
+    padding: 0.03889em 0.03889em 0 0.03889em;
+    border-width: 0.08em 0.08em 0em 0em;
+    border-style: solid;
+    margin-right: 0.03889em;
+   }
+
+   /* Stretch \widetilde */
+  .tml-crooked-2 {
+    transform: scale(2.0, 1.1)
+  }
+  .tml-crooked-3 {
+    transform: scale(3.0, 1.3)
+  }
+  .tml-crooked-4 {
+    transform: scale(4.0, 1.4)
+  }
+  /* set array cell justification */
+  .tml-right {
+    text-align: -webkit-right;
+  }
+  .tml-left {
+    text-align: -webkit-left;
+  }
+}
+
+/* Adjust WebKit accents */
+@supports (-webkit-backdrop-filter: blur(1px)) {
+  .tml-xshift { transform: translate(0px, 0.45em) }
+  .tml-capshift { transform: translate(0px, 0.35em) }
+}
+
+/* flex-wrap for line-breaking in Chromium */
+math {
+  display: inline-flex;
+  flex-wrap: wrap;
+  align-items: baseline;
+}
+math > mrow {
+  padding: 0.5ex 0ex;
+}
+
+/* Default mtd top padding is 0.5ex per MathML-Core and user-agent CSS */
+/* We adjust for jot and small */
+mtable.tml-jot mtd {
+  padding-top: 0.7ex;
+  padding-bottom: 0.7ex;
+}
+mtable.tml-small mtd {
+  padding-top: 0.35ex;
+  padding-bottom: 0.35ex;
+}
+
+/* Firefox */
+@-moz-document url-prefix() {
+  /* Avoid flex-wrap */
+  math { display: inline; }
+  math > mrow { padding: 0 }
+  /* Adjust Firefox spacing between array rows */
+  mtd, mtable.tml-small mtd { padding-top: 0; padding-bottom: 0; }
+  mtable.tml-jot mtd { padding-top: 0.2ex; padding-bottom: 0.ex; }
+}
+
+/* AMS environment auto-numbering via CSS counter. */
+.tml-eqn::before {
+  counter-increment: tmlEqnNo;
+  content: "(" counter(tmlEqnNo) ")";
+}
+
+body {
+  counter-reset: tmlEqnNo;
+}
diff --git a/assets/Temml.woff2 b/assets/Temml.woff2
new file mode 100644 (file)
index 0000000..fccefda
Binary files /dev/null and b/assets/Temml.woff2 differ
diff --git a/assets/highlight.css b/assets/highlight.css
new file mode 100644 (file)
index 0000000..f2c4c4a
--- /dev/null
@@ -0,0 +1,37 @@
+:root {
+  --light-yellow: #e5c07b;
+  --dark-yellow: #d19a66;
+  --blue: #61afef;
+  --cyan: #56b6c2;
+  --light-red: #e06c75;
+  --dark-red: #be5046;
+  --comment-gray: #5c6370;
+  --magenta: #c678dd;
+}
+
+pre {
+  border-top: 1px solid white;
+  border-bottom: 1px solid white;
+  padding: 10px 5px;
+}
+
+code.ziggy {
+  color: var(--cyan);
+}
+
+code.ziggy .keyword,
+code.ziggy .type {
+  color: var(--light-yellow);
+}
+
+code.ziggy .string {
+  color: var(--dark-yellow);
+}
+
+code.ziggy .numeric.constant {
+  color: var(--magenta);
+}
+
+code.ziggy .function {
+  color: var(--blue);
+}
\ No newline at end of file
diff --git a/assets/hornet.png b/assets/hornet.png
new file mode 100644 (file)
index 0000000..ba66fce
Binary files /dev/null and b/assets/hornet.png differ
diff --git a/assets/logo.png b/assets/logo.png
new file mode 100644 (file)
index 0000000..764882d
Binary files /dev/null and b/assets/logo.png differ
diff --git a/assets/render-mathtex.js b/assets/render-mathtex.js
new file mode 100644 (file)
index 0000000..b4255ea
--- /dev/null
@@ -0,0 +1,8 @@
+let eqns = document.querySelectorAll("script[type='math/tex']");
+for (let i=eqns.length-1; i>=0; i--) {
+    let eqn = eqns[i];
+    let src = eqn.text;
+    let d = eqn.closest('p') == null; 
+    eqn.outerHTML = temml.renderToString(src, { displayMode: d });
+}
+
diff --git a/assets/styles.css b/assets/styles.css
new file mode 100644 (file)
index 0000000..bed9ab0
--- /dev/null
@@ -0,0 +1,98 @@
+body {
+  width: 60%;
+  margin: auto;
+  margin-top: 1rem;
+  margin-bottom: 1rem;
+  background-color: black;
+  color: white;
+  font-size: 1.18rem;
+}
+
+h1 {
+  text-align: center;
+}
+
+h1 {
+  color: yellow;
+}
+
+h2 {
+  color: green;
+}
+
+a {
+  text-decoration: underline;
+}
+
+nav {
+  display: flex;
+  justify-content: center;
+  ul {
+    list-style: none;
+    display: flex;
+  }
+}
+
+#logo {
+  max-width: 169px;
+  position: fixed;
+  right: 10px;
+  top: 200px;
+  border: 2px lightgreen solid;
+  animation: 0.3s linear infinite alternate blink-green;
+}
+
+#hornet {
+  max-width: 169px;
+  position: fixed;
+  top: 20px;
+  left: 10px;
+  border: 2px red solid;
+  animation: 0.3s linear infinite alternate blink-red;
+}
+
+@keyframes blink-red {
+  from {
+    transform: scale(1);
+    box-shadow: none;
+  }
+  to {
+    transform: scale(0.99);
+    box-shadow: 
+      rgba(255 0 0 / 80%) 3px 3px 8px,
+      rgba(255 0 0 / 80%) -3px -3px 8px;
+  }
+}
+
+@keyframes blink-green {
+  from {
+    transform: scale(1);
+    box-shadow: none;
+  }
+  to {
+    transform: scale(0.99);
+    box-shadow: 
+      rgba(0 255 0 / 80%) 3px 3px 8px,
+      rgba(0 255 0 / 80%) -3px -3px 8px;
+  }
+}
+
+.nav-item {
+  background-color: #ff0000;
+  padding: 1rem;
+  width: fit-content;
+  border: 2px solid black;
+  box-shadow: 
+  inset rgba(0 0 0 / 20%) 5px 0px,
+  inset rgba(0 0 0 / 20%) -5px 0px,
+  inset rgba(0 0 0 / 20%) 0px -5px,
+  inset rgba(255 255 255 / 40%) 0px 5px;
+}
+
+.post-preview {
+  display: flex;
+  align-items: center;
+  gap: 0.4rem;
+  margin-bottom: 0px;
+  height: fit-content;
+}
diff --git a/assets/temml.min.js b/assets/temml.min.js
new file mode 100644 (file)
index 0000000..68a0e9f
--- /dev/null
@@ -0,0 +1 @@
+var temml=function(){"use strict";class e{constructor(t,r){let n,s=" "+t;const o=r&&r.loc;if(o&&o.start<=o.end){const e=o.lexer.input;n=o.start;const t=o.end;n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": \n";const r=e.slice(n,t).replace(/[^]/g,"$&̲");let a,l;a=n>15?"…"+e.slice(n-15,n):e.slice(0,n),l=t+15<e.length?e.slice(t,t+15)+"…":e.slice(t),s+=a+r+l}const a=new Error(s);return a.name="ParseError",a.__proto__=e.prototype,a.position=n,a}}e.prototype.__proto__=Error.prototype;const t=/([A-Z])/g,r={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},n=/[&><"']/g;const s=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?s(e.body[0]):e:"font"===e.type?s(e.body):e};var o={deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(n,(e=>r[e]))},hyphenate:function(e){return e.replace(t,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){const t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"},round:function(e){return+e.toFixed(4)}};class a{constructor(e){e=e||{},this.displayMode=o.deflt(e.displayMode,!1),this.annotate=o.deflt(e.annotate,!1),this.leqno=o.deflt(e.leqno,!1),this.throwOnError=o.deflt(e.throwOnError,!1),this.errorColor=o.deflt(e.errorColor,"#b22222"),this.macros=e.macros||{},this.wrap=o.deflt(e.wrap,"tex"),this.xml=o.deflt(e.xml,!1),this.colorIsTextColor=o.deflt(e.colorIsTextColor,!1),this.strict=o.deflt(e.strict,!1),this.trust=o.deflt(e.trust,!1),this.maxSize=void 0===e.maxSize?[1/0,1/0]:Array.isArray(e.maxSize)?e.maxSize:[1/0,1/0],this.maxExpand=Math.max(0,o.deflt(e.maxExpand,1e3))}isTrusted(e){if(e.url&&!e.protocol){const t=o.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}const t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)}}const l={},i={};function c({type:e,names:t,props:r,handler:n,mathmlBuilder:s}){const o={type:e,numArgs:r.numArgs,argTypes:r.argTypes,allowedInArgument:!!r.allowedInArgument,allowedInText:!!r.allowedInText,allowedInMath:void 0===r.allowedInMath||r.allowedInMath,numOptionalArgs:r.numOptionalArgs||0,infix:!!r.infix,primitive:!!r.primitive,handler:n};for(let e=0;e<t.length;++e)l[t[e]]=o;e&&s&&(i[e]=s)}function d({type:e,mathmlBuilder:t}){c({type:e,names:[],props:{numArgs:0},handler(){throw new Error("Should never be called.")},mathmlBuilder:t})}const m=function(e){return"ordgroup"===e.type&&1===e.body.length?e.body[0]:e},p=function(e){return"ordgroup"===e.type?e.body:[e]};class u{constructor(e){this.children=e,this.classes=[],this.style={}}hasClass(e){return this.classes.includes(e)}toNode(){const e=document.createDocumentFragment();for(let t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}toMarkup(){let e="";for(let t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e}toText(){return this.children.map((e=>e.toText())).join("")}}const h=function(e){return e.filter((e=>e)).join(" ")},g=function(e,t){this.classes=e||[],this.attributes={},this.style=t||{}},f=function(e){const t=document.createElement(e);t.className=h(this.classes);for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t.style[e]=this.style[e]);for(const e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(let e=0;e<this.children.length;e++)t.appendChild(this.children[e].toNode());return t},b=function(e){let t=`<${e}`;this.classes.length&&(t+=` class="${o.escape(h(this.classes))}"`);let r="";for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(r+=`${o.hyphenate(e)}:${this.style[e]};`);r&&(t+=` style="${r}"`);for(const e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=` ${e}="${o.escape(this.attributes[e])}"`);t+=">";for(let e=0;e<this.children.length;e++)t+=this.children[e].toMarkup();return t+=`</${e}>`,t};class y{constructor(e,t,r){g.call(this,e,r),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}toNode(){return f.call(this,"span")}toMarkup(){return b.call(this,"span")}}let w=class{constructor(e){this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return o.escape(this.text)}};class x{constructor(e,t,r){this.href=e,this.classes=t,this.children=r||[]}toNode(){const e=document.createElement("a");e.setAttribute("href",this.href),this.classes.length>0&&(e.className=h(this.classes));for(let t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}toMarkup(){let e=`<a href='${o.escape(this.href)}'`;this.classes.length>0&&(e+=` class="${o.escape(h(this.classes))}"`),e+=">";for(let t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e+="</a>",e}}class k{constructor(e,t,r){this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return this.classes.includes(e)}toNode(){const e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(const t in this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);return e}toMarkup(){let e=`<img src='${this.src}' alt='${this.alt}'`,t="";for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t+=`${o.hyphenate(e)}:${this.style[e]};`);return t&&(e+=` style="${o.escape(t)}"`),e+=">",e}}class v{constructor(e,t,r,n){this.type=e,this.attributes={},this.children=t||[],this.classes=r||[],this.style=n||{},this.label=""}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}setLabel(e){this.label=e}toNode(){const e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=h(this.classes));for(const t in this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);for(let t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}toMarkup(){let e="<"+this.type;for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="',e+=o.escape(this.attributes[t]),e+='"');this.classes.length>0&&(e+=` class="${o.escape(h(this.classes))}"`);let t="";for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t+=`${o.hyphenate(e)}:${this.style[e]};`);t&&(e+=` style="${t}"`),e+=">";for(let t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e+="</"+this.type+">",e}toText(){return this.children.map((e=>e.toText())).join("")}}class A{constructor(e){this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return o.escape(this.toText())}toText(){return this.text}}const N=e=>{let t;return 1===e.length&&"mrow"===e[0].type?(t=e.pop(),t.type="mstyle"):t=new v("mstyle",e),t};var T={MathNode:v,TextNode:A,newDocumentFragment:function(e){return new u(e)}};const S=e=>{let t=0;if(e.body)for(const r of e.body)t+=S(r);else if("supsub"===e.type)t+=S(e.base),e.sub&&(t+=.7*S(e.sub)),e.sup&&(t+=.7*S(e.sup));else if("mathord"===e.type||"textord"===e.type)for(const r of e.text.split("")){const e=r.codePointAt(0);t+=96<e&&e<123||944<e&&e<970?.56:47<e&&e<58?.5:.92}else t+=1;return t},q={widehat:"^",widecheck:"ˇ",widetilde:"~",wideparen:"⏜",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",overgroup:"⏠",overparen:"⏜",undergroup:"⏡",underparen:"⏝",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xrightleftarrows:"⇄",yields:"→",yieldsLeft:"←",mesomerism:"↔",longrightharpoonup:"⇀",longleftharpoondown:"↽",eqrightharpoonup:"⇀",eqleftharpoondown:"↽","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},O=function(e){const t=new T.TextNode(q[e.slice(1)]),r=new T.MathNode("mo",[t]);return r.setAttribute("stretchy","true"),r},M=["\\widetilde","\\widehat","\\widecheck","\\utilde"];var B=O,C=e=>{const t=O(e.label);if(M.includes(e.label)){const r=S(e.base);1<r&&r<1.6?t.classes.push("tml-crooked-2"):1.6<=r&&r<2.5?t.classes.push("tml-crooked-3"):2.5<=r&&t.classes.push("tml-crooked-4")}return t};const z={bin:1,close:1,inner:1,open:1,punct:1,rel:1},E={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},$={math:{},text:{}};function I(e,t,r,n,s){$[e][n]={group:t,replace:r},s&&r&&($[e][r]=$[e][n])}const L="math",F="text",D="accent-token",G="bin",j="close",P="inner",R="mathord",U="op-token",H="open",V="punct",_="rel",W="spacing",X="textord";I(L,_,"≡","\\equiv",!0),I(L,_,"≺","\\prec",!0),I(L,_,"≻","\\succ",!0),I(L,_,"∼","\\sim",!0),I(L,_,"⟂","\\perp",!0),I(L,_,"⪯","\\preceq",!0),I(L,_,"⪰","\\succeq",!0),I(L,_,"≃","\\simeq",!0),I(L,_,"≌","\\backcong",!0),I(L,_,"|","\\mid",!0),I(L,_,"≪","\\ll",!0),I(L,_,"≫","\\gg",!0),I(L,_,"≍","\\asymp",!0),I(L,_,"∥","\\parallel"),I(L,_,"⌣","\\smile",!0),I(L,_,"⊑","\\sqsubseteq",!0),I(L,_,"⊒","\\sqsupseteq",!0),I(L,_,"≐","\\doteq",!0),I(L,_,"⌢","\\frown",!0),I(L,_,"∋","\\ni",!0),I(L,_,"∌","\\notni",!0),I(L,_,"∝","\\propto",!0),I(L,_,"⊢","\\vdash",!0),I(L,_,"⊣","\\dashv",!0),I(L,_,"∋","\\owns"),I(L,_,"≘","\\arceq",!0),I(L,_,"≙","\\wedgeq",!0),I(L,_,"≚","\\veeeq",!0),I(L,_,"≛","\\stareq",!0),I(L,_,"≝","\\eqdef",!0),I(L,_,"≞","\\measeq",!0),I(L,_,"≟","\\questeq",!0),I(L,_,"≠","\\ne",!0),I(L,_,"≠","\\neq"),I(L,_,"⩵","\\eqeq",!0),I(L,_,"⩶","\\eqeqeq",!0),I(L,_,"∷","\\dblcolon",!0),I(L,_,"≔","\\coloneqq",!0),I(L,_,"≕","\\eqqcolon",!0),I(L,_,"∹","\\eqcolon",!0),I(L,_,"⩴","\\Coloneqq",!0),I(L,V,".","\\ldotp"),I(L,V,"·","\\cdotp"),I(L,X,"#","\\#"),I(F,X,"#","\\#"),I(L,X,"&","\\&"),I(F,X,"&","\\&"),I(L,X,"ℵ","\\aleph",!0),I(L,X,"∀","\\forall",!0),I(L,X,"ℏ","\\hbar",!0),I(L,X,"∃","\\exists",!0),I(L,G,"∇","\\nabla",!0),I(L,X,"♭","\\flat",!0),I(L,X,"ℓ","\\ell",!0),I(L,X,"♮","\\natural",!0),I(L,X,"Å","\\Angstrom",!0),I(F,X,"Å","\\Angstrom",!0),I(L,X,"♣","\\clubsuit",!0),I(L,X,"♧","\\varclubsuit",!0),I(L,X,"℘","\\wp",!0),I(L,X,"♯","\\sharp",!0),I(L,X,"♢","\\diamondsuit",!0),I(L,X,"♦","\\vardiamondsuit",!0),I(L,X,"ℜ","\\Re",!0),I(L,X,"♡","\\heartsuit",!0),I(L,X,"♥","\\varheartsuit",!0),I(L,X,"ℑ","\\Im",!0),I(L,X,"♠","\\spadesuit",!0),I(L,X,"♤","\\varspadesuit",!0),I(L,X,"♀","\\female",!0),I(L,X,"♂","\\male",!0),I(L,X,"§","\\S",!0),I(F,X,"§","\\S"),I(L,X,"¶","\\P",!0),I(F,X,"¶","\\P"),I(F,X,"☺","\\smiley",!0),I(L,X,"☺","\\smiley",!0),I(L,X,"†","\\dag"),I(F,X,"†","\\dag"),I(F,X,"†","\\textdagger"),I(L,X,"‡","\\ddag"),I(F,X,"‡","\\ddag"),I(F,X,"‡","\\textdaggerdbl"),I(L,j,"⎱","\\rmoustache",!0),I(L,H,"⎰","\\lmoustache",!0),I(L,j,"⟯","\\rgroup",!0),I(L,H,"⟮","\\lgroup",!0),I(L,G,"∓","\\mp",!0),I(L,G,"⊖","\\ominus",!0),I(L,G,"⊎","\\uplus",!0),I(L,G,"⊓","\\sqcap",!0),I(L,G,"∗","\\ast"),I(L,G,"⊔","\\sqcup",!0),I(L,G,"◯","\\bigcirc",!0),I(L,G,"∙","\\bullet",!0),I(L,G,"‡","\\ddagger"),I(L,G,"≀","\\wr",!0),I(L,G,"⨿","\\amalg"),I(L,G,"&","\\And"),I(L,G,"⫽","\\sslash",!0),I(L,_,"⟵","\\longleftarrow",!0),I(L,_,"⇐","\\Leftarrow",!0),I(L,_,"⟸","\\Longleftarrow",!0),I(L,_,"⟶","\\longrightarrow",!0),I(L,_,"⇒","\\Rightarrow",!0),I(L,_,"⟹","\\Longrightarrow",!0),I(L,_,"↔","\\leftrightarrow",!0),I(L,_,"⟷","\\longleftrightarrow",!0),I(L,_,"⇔","\\Leftrightarrow",!0),I(L,_,"⟺","\\Longleftrightarrow",!0),I(L,_,"↤","\\mapsfrom",!0),I(L,_,"↦","\\mapsto",!0),I(L,_,"⟼","\\longmapsto",!0),I(L,_,"↗","\\nearrow",!0),I(L,_,"↩","\\hookleftarrow",!0),I(L,_,"↪","\\hookrightarrow",!0),I(L,_,"↘","\\searrow",!0),I(L,_,"↼","\\leftharpoonup",!0),I(L,_,"⇀","\\rightharpoonup",!0),I(L,_,"↙","\\swarrow",!0),I(L,_,"↽","\\leftharpoondown",!0),I(L,_,"⇁","\\rightharpoondown",!0),I(L,_,"↖","\\nwarrow",!0),I(L,_,"⇌","\\rightleftharpoons",!0),I(L,R,"↯","\\lightning",!0),I(L,R,"∎","\\QED",!0),I(L,R,"‰","\\permil",!0),I(F,X,"‰","\\permil"),I(L,R,"☉","\\astrosun",!0),I(L,R,"☼","\\sun",!0),I(L,R,"☾","\\leftmoon",!0),I(L,R,"☽","\\rightmoon",!0),I(L,R,"⊕","\\Earth"),I(L,_,"≮","\\nless",!0),I(L,_,"⪇","\\lneq",!0),I(L,_,"≨","\\lneqq",!0),I(L,_,"≨︀","\\lvertneqq"),I(L,_,"⋦","\\lnsim",!0),I(L,_,"⪉","\\lnapprox",!0),I(L,_,"⊀","\\nprec",!0),I(L,_,"⋠","\\npreceq",!0),I(L,_,"⋨","\\precnsim",!0),I(L,_,"⪹","\\precnapprox",!0),I(L,_,"≁","\\nsim",!0),I(L,_,"∤","\\nmid",!0),I(L,_,"∤","\\nshortmid"),I(L,_,"⊬","\\nvdash",!0),I(L,_,"⊭","\\nvDash",!0),I(L,_,"⋪","\\ntriangleleft"),I(L,_,"⋬","\\ntrianglelefteq",!0),I(L,_,"⊄","\\nsubset",!0),I(L,_,"⊅","\\nsupset",!0),I(L,_,"⊊","\\subsetneq",!0),I(L,_,"⊊︀","\\varsubsetneq"),I(L,_,"⫋","\\subsetneqq",!0),I(L,_,"⫋︀","\\varsubsetneqq"),I(L,_,"≯","\\ngtr",!0),I(L,_,"⪈","\\gneq",!0),I(L,_,"≩","\\gneqq",!0),I(L,_,"≩︀","\\gvertneqq"),I(L,_,"⋧","\\gnsim",!0),I(L,_,"⪊","\\gnapprox",!0),I(L,_,"⊁","\\nsucc",!0),I(L,_,"⋡","\\nsucceq",!0),I(L,_,"⋩","\\succnsim",!0),I(L,_,"⪺","\\succnapprox",!0),I(L,_,"≆","\\ncong",!0),I(L,_,"∦","\\nparallel",!0),I(L,_,"∦","\\nshortparallel"),I(L,_,"⊯","\\nVDash",!0),I(L,_,"⋫","\\ntriangleright"),I(L,_,"⋭","\\ntrianglerighteq",!0),I(L,_,"⊋","\\supsetneq",!0),I(L,_,"⊋","\\varsupsetneq"),I(L,_,"⫌","\\supsetneqq",!0),I(L,_,"⫌︀","\\varsupsetneqq"),I(L,_,"⊮","\\nVdash",!0),I(L,_,"⪵","\\precneqq",!0),I(L,_,"⪶","\\succneqq",!0),I(L,G,"⊴","\\unlhd"),I(L,G,"⊵","\\unrhd"),I(L,_,"↚","\\nleftarrow",!0),I(L,_,"↛","\\nrightarrow",!0),I(L,_,"⇍","\\nLeftarrow",!0),I(L,_,"⇏","\\nRightarrow",!0),I(L,_,"↮","\\nleftrightarrow",!0),I(L,_,"⇎","\\nLeftrightarrow",!0),I(L,_,"△","\\vartriangle"),I(L,X,"ℏ","\\hslash"),I(L,X,"▽","\\triangledown"),I(L,X,"◊","\\lozenge"),I(L,X,"Ⓢ","\\circledS"),I(L,X,"®","\\circledR",!0),I(F,X,"®","\\circledR"),I(F,X,"®","\\textregistered"),I(L,X,"∡","\\measuredangle",!0),I(L,X,"∄","\\nexists"),I(L,X,"℧","\\mho"),I(L,X,"Ⅎ","\\Finv",!0),I(L,X,"⅁","\\Game",!0),I(L,X,"‵","\\backprime"),I(L,X,"‶","\\backdprime"),I(L,X,"‷","\\backtrprime"),I(L,X,"▲","\\blacktriangle"),I(L,X,"▼","\\blacktriangledown"),I(L,X,"■","\\blacksquare"),I(L,X,"⧫","\\blacklozenge"),I(L,X,"★","\\bigstar"),I(L,X,"∢","\\sphericalangle",!0),I(L,X,"∁","\\complement",!0),I(L,X,"╱","\\diagup"),I(L,X,"╲","\\diagdown"),I(L,X,"□","\\square"),I(L,X,"□","\\Box"),I(L,X,"◊","\\Diamond"),I(L,X,"¥","\\yen",!0),I(F,X,"¥","\\yen",!0),I(L,X,"✓","\\checkmark",!0),I(F,X,"✓","\\checkmark"),I(L,X,"✗","\\ballotx",!0),I(F,X,"✗","\\ballotx"),I(F,X,"•","\\textbullet"),I(L,X,"ℶ","\\beth",!0),I(L,X,"ℸ","\\daleth",!0),I(L,X,"ℷ","\\gimel",!0),I(L,X,"ϝ","\\digamma",!0),I(L,X,"ϰ","\\varkappa"),I(L,H,"⌜","\\ulcorner",!0),I(L,j,"⌝","\\urcorner",!0),I(L,H,"⌞","\\llcorner",!0),I(L,j,"⌟","\\lrcorner",!0),I(L,_,"≦","\\leqq",!0),I(L,_,"⩽","\\leqslant",!0),I(L,_,"⪕","\\eqslantless",!0),I(L,_,"≲","\\lesssim",!0),I(L,_,"⪅","\\lessapprox",!0),I(L,_,"≊","\\approxeq",!0),I(L,G,"⋖","\\lessdot"),I(L,_,"⋘","\\lll",!0),I(L,_,"≶","\\lessgtr",!0),I(L,_,"⋚","\\lesseqgtr",!0),I(L,_,"⪋","\\lesseqqgtr",!0),I(L,_,"≑","\\doteqdot"),I(L,_,"≓","\\risingdotseq",!0),I(L,_,"≒","\\fallingdotseq",!0),I(L,_,"∽","\\backsim",!0),I(L,_,"⋍","\\backsimeq",!0),I(L,_,"⫅","\\subseteqq",!0),I(L,_,"⋐","\\Subset",!0),I(L,_,"⊏","\\sqsubset",!0),I(L,_,"≼","\\preccurlyeq",!0),I(L,_,"⋞","\\curlyeqprec",!0),I(L,_,"≾","\\precsim",!0),I(L,_,"⪷","\\precapprox",!0),I(L,_,"⊲","\\vartriangleleft"),I(L,_,"⊴","\\trianglelefteq"),I(L,_,"⊨","\\vDash",!0),I(L,_,"⊫","\\VDash",!0),I(L,_,"⊪","\\Vvdash",!0),I(L,_,"⌣","\\smallsmile"),I(L,_,"⌢","\\smallfrown"),I(L,_,"≏","\\bumpeq",!0),I(L,_,"≎","\\Bumpeq",!0),I(L,_,"≧","\\geqq",!0),I(L,_,"⩾","\\geqslant",!0),I(L,_,"⪖","\\eqslantgtr",!0),I(L,_,"≳","\\gtrsim",!0),I(L,_,"⪆","\\gtrapprox",!0),I(L,G,"⋗","\\gtrdot"),I(L,_,"⋙","\\ggg",!0),I(L,_,"≷","\\gtrless",!0),I(L,_,"⋛","\\gtreqless",!0),I(L,_,"⪌","\\gtreqqless",!0),I(L,_,"≖","\\eqcirc",!0),I(L,_,"≗","\\circeq",!0),I(L,_,"≜","\\triangleq",!0),I(L,_,"∼","\\thicksim"),I(L,_,"≈","\\thickapprox"),I(L,_,"⫆","\\supseteqq",!0),I(L,_,"⋑","\\Supset",!0),I(L,_,"⊐","\\sqsupset",!0),I(L,_,"≽","\\succcurlyeq",!0),I(L,_,"⋟","\\curlyeqsucc",!0),I(L,_,"≿","\\succsim",!0),I(L,_,"⪸","\\succapprox",!0),I(L,_,"⊳","\\vartriangleright"),I(L,_,"⊵","\\trianglerighteq"),I(L,_,"⊩","\\Vdash",!0),I(L,_,"∣","\\shortmid"),I(L,_,"∥","\\shortparallel"),I(L,_,"≬","\\between",!0),I(L,_,"⋔","\\pitchfork",!0),I(L,_,"∝","\\varpropto"),I(L,_,"◀","\\blacktriangleleft"),I(L,_,"∴","\\therefore",!0),I(L,_,"∍","\\backepsilon"),I(L,_,"▶","\\blacktriangleright"),I(L,_,"∵","\\because",!0),I(L,_,"⋘","\\llless"),I(L,_,"⋙","\\gggtr"),I(L,G,"⊲","\\lhd"),I(L,G,"⊳","\\rhd"),I(L,_,"≂","\\eqsim",!0),I(L,_,"≑","\\Doteq",!0),I(L,_,"⥽","\\strictif",!0),I(L,_,"⥼","\\strictfi",!0),I(L,G,"∔","\\dotplus",!0),I(L,G,"∖","\\smallsetminus"),I(L,G,"⋒","\\Cap",!0),I(L,G,"⋓","\\Cup",!0),I(L,G,"⩞","\\doublebarwedge",!0),I(L,G,"⊟","\\boxminus",!0),I(L,G,"⊞","\\boxplus",!0),I(L,G,"⧄","\\boxslash",!0),I(L,G,"⋇","\\divideontimes",!0),I(L,G,"⋉","\\ltimes",!0),I(L,G,"⋊","\\rtimes",!0),I(L,G,"⋋","\\leftthreetimes",!0),I(L,G,"⋌","\\rightthreetimes",!0),I(L,G,"⋏","\\curlywedge",!0),I(L,G,"⋎","\\curlyvee",!0),I(L,G,"⊝","\\circleddash",!0),I(L,G,"⊛","\\circledast",!0),I(L,G,"⊺","\\intercal",!0),I(L,G,"⋒","\\doublecap"),I(L,G,"⋓","\\doublecup"),I(L,G,"⊠","\\boxtimes",!0),I(L,G,"⋈","\\bowtie",!0),I(L,G,"⋈","\\Join"),I(L,G,"⟕","\\leftouterjoin",!0),I(L,G,"⟖","\\rightouterjoin",!0),I(L,G,"⟗","\\fullouterjoin",!0),I(L,G,"∸","\\dotminus",!0),I(L,G,"⟑","\\wedgedot",!0),I(L,G,"⟇","\\veedot",!0),I(L,G,"⩢","\\doublebarvee",!0),I(L,G,"⩣","\\veedoublebar",!0),I(L,G,"⩟","\\wedgebar",!0),I(L,G,"⩠","\\wedgedoublebar",!0),I(L,G,"⩔","\\Vee",!0),I(L,G,"⩓","\\Wedge",!0),I(L,G,"⩃","\\barcap",!0),I(L,G,"⩂","\\barcup",!0),I(L,G,"⩈","\\capbarcup",!0),I(L,G,"⩀","\\capdot",!0),I(L,G,"⩇","\\capovercup",!0),I(L,G,"⩆","\\cupovercap",!0),I(L,G,"⩍","\\closedvarcap",!0),I(L,G,"⩌","\\closedvarcup",!0),I(L,G,"⨪","\\minusdot",!0),I(L,G,"⨫","\\minusfdots",!0),I(L,G,"⨬","\\minusrdots",!0),I(L,G,"⊻","\\Xor",!0),I(L,G,"⊼","\\Nand",!0),I(L,G,"⊽","\\Nor",!0),I(L,G,"⊽","\\barvee"),I(L,G,"⫴","\\interleave",!0),I(L,G,"⧢","\\shuffle",!0),I(L,G,"⫶","\\threedotcolon",!0),I(L,G,"⦂","\\typecolon",!0),I(L,G,"∾","\\invlazys",!0),I(L,G,"⩋","\\twocaps",!0),I(L,G,"⩊","\\twocups",!0),I(L,G,"⩎","\\Sqcap",!0),I(L,G,"⩏","\\Sqcup",!0),I(L,G,"⩖","\\veeonvee",!0),I(L,G,"⩕","\\wedgeonwedge",!0),I(L,G,"⧗","\\blackhourglass",!0),I(L,G,"⧆","\\boxast",!0),I(L,G,"⧈","\\boxbox",!0),I(L,G,"⧇","\\boxcircle",!0),I(L,G,"⊜","\\circledequal",!0),I(L,G,"⦷","\\circledparallel",!0),I(L,G,"⦶","\\circledvert",!0),I(L,G,"⦵","\\circlehbar",!0),I(L,G,"⟡","\\concavediamond",!0),I(L,G,"⟢","\\concavediamondtickleft",!0),I(L,G,"⟣","\\concavediamondtickright",!0),I(L,G,"⋄","\\diamond",!0),I(L,G,"⧖","\\hourglass",!0),I(L,G,"⟠","\\lozengeminus",!0),I(L,G,"⌽","\\obar",!0),I(L,G,"⦸","\\obslash",!0),I(L,G,"⨸","\\odiv",!0),I(L,G,"⧁","\\ogreaterthan",!0),I(L,G,"⧀","\\olessthan",!0),I(L,G,"⦹","\\operp",!0),I(L,G,"⨷","\\Otimes",!0),I(L,G,"⨶","\\otimeshat",!0),I(L,G,"⋆","\\star",!0),I(L,G,"△","\\triangle",!0),I(L,G,"⨺","\\triangleminus",!0),I(L,G,"⨹","\\triangleplus",!0),I(L,G,"⨻","\\triangletimes",!0),I(L,G,"⟤","\\whitesquaretickleft",!0),I(L,G,"⟥","\\whitesquaretickright",!0),I(L,G,"⨳","\\smashtimes",!0),I(L,_,"⇢","\\dashrightarrow",!0),I(L,_,"⇠","\\dashleftarrow",!0),I(L,_,"⇇","\\leftleftarrows",!0),I(L,_,"⇆","\\leftrightarrows",!0),I(L,_,"⇚","\\Lleftarrow",!0),I(L,_,"↞","\\twoheadleftarrow",!0),I(L,_,"↢","\\leftarrowtail",!0),I(L,_,"↫","\\looparrowleft",!0),I(L,_,"⇋","\\leftrightharpoons",!0),I(L,_,"↶","\\curvearrowleft",!0),I(L,_,"↺","\\circlearrowleft",!0),I(L,_,"↰","\\Lsh",!0),I(L,_,"⇈","\\upuparrows",!0),I(L,_,"↿","\\upharpoonleft",!0),I(L,_,"⇃","\\downharpoonleft",!0),I(L,_,"⊶","\\origof",!0),I(L,_,"⊷","\\imageof",!0),I(L,_,"⊸","\\multimap",!0),I(L,_,"↭","\\leftrightsquigarrow",!0),I(L,_,"⇉","\\rightrightarrows",!0),I(L,_,"⇄","\\rightleftarrows",!0),I(L,_,"↠","\\twoheadrightarrow",!0),I(L,_,"↣","\\rightarrowtail",!0),I(L,_,"↬","\\looparrowright",!0),I(L,_,"↷","\\curvearrowright",!0),I(L,_,"↻","\\circlearrowright",!0),I(L,_,"↱","\\Rsh",!0),I(L,_,"⇊","\\downdownarrows",!0),I(L,_,"↾","\\upharpoonright",!0),I(L,_,"⇂","\\downharpoonright",!0),I(L,_,"⇝","\\rightsquigarrow",!0),I(L,_,"⇝","\\leadsto"),I(L,_,"⇛","\\Rrightarrow",!0),I(L,_,"↾","\\restriction"),I(L,X,"‘","`"),I(L,X,"$","\\$"),I(F,X,"$","\\$"),I(F,X,"$","\\textdollar"),I(L,X,"¢","\\cent"),I(F,X,"¢","\\cent"),I(L,X,"%","\\%"),I(F,X,"%","\\%"),I(L,X,"_","\\_"),I(F,X,"_","\\_"),I(F,X,"_","\\textunderscore"),I(F,X,"␣","\\textvisiblespace",!0),I(L,X,"∠","\\angle",!0),I(L,X,"∞","\\infty",!0),I(L,X,"′","\\prime"),I(L,X,"″","\\dprime"),I(L,X,"‴","\\trprime"),I(L,X,"⁗","\\qprime"),I(L,X,"△","\\triangle"),I(F,X,"Α","\\Alpha",!0),I(F,X,"Β","\\Beta",!0),I(F,X,"Γ","\\Gamma",!0),I(F,X,"Δ","\\Delta",!0),I(F,X,"Ε","\\Epsilon",!0),I(F,X,"Ζ","\\Zeta",!0),I(F,X,"Η","\\Eta",!0),I(F,X,"Θ","\\Theta",!0),I(F,X,"Ι","\\Iota",!0),I(F,X,"Κ","\\Kappa",!0),I(F,X,"Λ","\\Lambda",!0),I(F,X,"Μ","\\Mu",!0),I(F,X,"Ν","\\Nu",!0),I(F,X,"Ξ","\\Xi",!0),I(F,X,"Ο","\\Omicron",!0),I(F,X,"Π","\\Pi",!0),I(F,X,"Ρ","\\Rho",!0),I(F,X,"Σ","\\Sigma",!0),I(F,X,"Τ","\\Tau",!0),I(F,X,"Υ","\\Upsilon",!0),I(F,X,"Φ","\\Phi",!0),I(F,X,"Χ","\\Chi",!0),I(F,X,"Ψ","\\Psi",!0),I(F,X,"Ω","\\Omega",!0),I(L,R,"Α","\\Alpha",!0),I(L,R,"Β","\\Beta",!0),I(L,R,"Γ","\\Gamma",!0),I(L,R,"Δ","\\Delta",!0),I(L,R,"Ε","\\Epsilon",!0),I(L,R,"Ζ","\\Zeta",!0),I(L,R,"Η","\\Eta",!0),I(L,R,"Θ","\\Theta",!0),I(L,R,"Ι","\\Iota",!0),I(L,R,"Κ","\\Kappa",!0),I(L,R,"Λ","\\Lambda",!0),I(L,R,"Μ","\\Mu",!0),I(L,R,"Ν","\\Nu",!0),I(L,R,"Ξ","\\Xi",!0),I(L,R,"Ο","\\Omicron",!0),I(L,R,"Π","\\Pi",!0),I(L,R,"Ρ","\\Rho",!0),I(L,R,"Σ","\\Sigma",!0),I(L,R,"Τ","\\Tau",!0),I(L,R,"Υ","\\Upsilon",!0),I(L,R,"Φ","\\Phi",!0),I(L,R,"Χ","\\Chi",!0),I(L,R,"Ψ","\\Psi",!0),I(L,R,"Ω","\\Omega",!0),I(L,H,"¬","\\neg",!0),I(L,H,"¬","\\lnot"),I(L,X,"⊤","\\top"),I(L,X,"⊥","\\bot"),I(L,X,"∅","\\emptyset"),I(L,X,"⌀","\\varnothing"),I(L,R,"α","\\alpha",!0),I(L,R,"β","\\beta",!0),I(L,R,"γ","\\gamma",!0),I(L,R,"δ","\\delta",!0),I(L,R,"ϵ","\\epsilon",!0),I(L,R,"ζ","\\zeta",!0),I(L,R,"η","\\eta",!0),I(L,R,"θ","\\theta",!0),I(L,R,"ι","\\iota",!0),I(L,R,"κ","\\kappa",!0),I(L,R,"λ","\\lambda",!0),I(L,R,"μ","\\mu",!0),I(L,R,"ν","\\nu",!0),I(L,R,"ξ","\\xi",!0),I(L,R,"ο","\\omicron",!0),I(L,R,"π","\\pi",!0),I(L,R,"ρ","\\rho",!0),I(L,R,"σ","\\sigma",!0),I(L,R,"τ","\\tau",!0),I(L,R,"υ","\\upsilon",!0),I(L,R,"ϕ","\\phi",!0),I(L,R,"χ","\\chi",!0),I(L,R,"ψ","\\psi",!0),I(L,R,"ω","\\omega",!0),I(L,R,"ε","\\varepsilon",!0),I(L,R,"ϑ","\\vartheta",!0),I(L,R,"ϖ","\\varpi",!0),I(L,R,"ϱ","\\varrho",!0),I(L,R,"ς","\\varsigma",!0),I(L,R,"φ","\\varphi",!0),I(L,R,"Ϙ","\\Coppa",!0),I(L,R,"ϙ","\\coppa",!0),I(L,R,"ϙ","\\varcoppa",!0),I(L,R,"Ϟ","\\Koppa",!0),I(L,R,"ϟ","\\koppa",!0),I(L,R,"Ϡ","\\Sampi",!0),I(L,R,"ϡ","\\sampi",!0),I(L,R,"Ϛ","\\Stigma",!0),I(L,R,"ϛ","\\stigma",!0),I(L,R,"⫫","\\Bot"),I(L,X,"ð","\\eth",!0),I(F,X,"ð","ð"),I(L,X,"Å","\\AA"),I(F,X,"Å","\\AA",!0),I(L,X,"Æ","\\AE",!0),I(F,X,"Æ","\\AE",!0),I(L,X,"Ð","\\DH",!0),I(F,X,"Ð","\\DH",!0),I(L,X,"Þ","\\TH",!0),I(F,X,"Þ","\\TH",!0),I(L,X,"ß","\\ss",!0),I(F,X,"ß","\\ss",!0),I(L,X,"å","\\aa"),I(F,X,"å","\\aa",!0),I(L,X,"æ","\\ae",!0),I(F,X,"æ","\\ae",!0),I(L,X,"ð","\\dh"),I(F,X,"ð","\\dh",!0),I(L,X,"þ","\\th",!0),I(F,X,"þ","\\th",!0),I(L,X,"Đ","\\DJ",!0),I(F,X,"Đ","\\DJ",!0),I(L,X,"đ","\\dj",!0),I(F,X,"đ","\\dj",!0),I(L,X,"Ł","\\L",!0),I(F,X,"Ł","\\L",!0),I(L,X,"Ł","\\l",!0),I(F,X,"Ł","\\l",!0),I(L,X,"Ŋ","\\NG",!0),I(F,X,"Ŋ","\\NG",!0),I(L,X,"ŋ","\\ng",!0),I(F,X,"ŋ","\\ng",!0),I(L,X,"Œ","\\OE",!0),I(F,X,"Œ","\\OE",!0),I(L,X,"œ","\\oe",!0),I(F,X,"œ","\\oe",!0),I(L,G,"∗","∗",!0),I(L,G,"+","+"),I(L,G,"∗","*"),I(L,G,"⁄","/",!0),I(L,G,"⁄","⁄"),I(L,G,"−","-",!0),I(L,G,"⋅","\\cdot",!0),I(L,G,"∘","\\circ",!0),I(L,G,"÷","\\div",!0),I(L,G,"±","\\pm",!0),I(L,G,"×","\\times",!0),I(L,G,"∩","\\cap",!0),I(L,G,"∪","\\cup",!0),I(L,G,"∖","\\setminus",!0),I(L,G,"∧","\\land"),I(L,G,"∨","\\lor"),I(L,G,"∧","\\wedge",!0),I(L,G,"∨","\\vee",!0),I(L,H,"⟦","\\llbracket",!0),I(L,j,"⟧","\\rrbracket",!0),I(L,H,"⟨","\\langle",!0),I(L,H,"⟪","\\lAngle",!0),I(L,H,"⦉","\\llangle",!0),I(L,H,"|","\\lvert"),I(L,H,"‖","\\lVert",!0),I(L,X,"!","\\oc"),I(L,X,"?","\\wn"),I(L,X,"↓","\\shpos"),I(L,X,"↕","\\shift"),I(L,X,"↑","\\shneg"),I(L,j,"?","?"),I(L,j,"!","!"),I(L,j,"‼","‼"),I(L,j,"⟩","\\rangle",!0),I(L,j,"⟫","\\rAngle",!0),I(L,j,"⦊","\\rrangle",!0),I(L,j,"|","\\rvert"),I(L,j,"‖","\\rVert"),I(L,H,"⦃","\\lBrace",!0),I(L,j,"⦄","\\rBrace",!0),I(L,_,"=","\\equal",!0),I(L,_,":",":"),I(L,_,"≈","\\approx",!0),I(L,_,"≅","\\cong",!0),I(L,_,"≥","\\ge"),I(L,_,"≥","\\geq",!0),I(L,_,"←","\\gets"),I(L,_,">","\\gt",!0),I(L,_,"∈","\\in",!0),I(L,_,"∉","\\notin",!0),I(L,_,"","\\@not"),I(L,_,"⊂","\\subset",!0),I(L,_,"⊃","\\supset",!0),I(L,_,"⊆","\\subseteq",!0),I(L,_,"⊇","\\supseteq",!0),I(L,_,"⊈","\\nsubseteq",!0),I(L,_,"⊈","\\nsubseteqq"),I(L,_,"⊉","\\nsupseteq",!0),I(L,_,"⊉","\\nsupseteqq"),I(L,_,"⊨","\\models"),I(L,_,"←","\\leftarrow",!0),I(L,_,"≤","\\le"),I(L,_,"≤","\\leq",!0),I(L,_,"<","\\lt",!0),I(L,_,"→","\\rightarrow",!0),I(L,_,"→","\\to"),I(L,_,"≱","\\ngeq",!0),I(L,_,"≱","\\ngeqq"),I(L,_,"≱","\\ngeqslant"),I(L,_,"≰","\\nleq",!0),I(L,_,"≰","\\nleqq"),I(L,_,"≰","\\nleqslant"),I(L,_,"⫫","\\Perp",!0),I(L,W," ","\\ "),I(L,W," ","\\space"),I(L,W," ","\\nobreakspace"),I(F,W," ","\\ "),I(F,W," "," "),I(F,W," ","\\space"),I(F,W," ","\\nobreakspace"),I(L,W,null,"\\nobreak"),I(L,W,null,"\\allowbreak"),I(L,V,",",","),I(F,V,":",":"),I(L,V,";",";"),I(L,G,"⊼","\\barwedge"),I(L,G,"⊻","\\veebar"),I(L,G,"⊙","\\odot",!0),I(L,G,"⊕︎","\\oplus"),I(L,G,"⊗","\\otimes",!0),I(L,X,"∂","\\partial",!0),I(L,G,"⊘","\\oslash",!0),I(L,G,"⊚","\\circledcirc",!0),I(L,G,"⊡","\\boxdot",!0),I(L,G,"△","\\bigtriangleup"),I(L,G,"▽","\\bigtriangledown"),I(L,G,"†","\\dagger"),I(L,G,"⋄","\\diamond"),I(L,G,"◃","\\triangleleft"),I(L,G,"▹","\\triangleright"),I(L,H,"{","\\{"),I(F,X,"{","\\{"),I(F,X,"{","\\textbraceleft"),I(L,j,"}","\\}"),I(F,X,"}","\\}"),I(F,X,"}","\\textbraceright"),I(L,H,"{","\\lbrace"),I(L,j,"}","\\rbrace"),I(L,H,"[","\\lbrack",!0),I(F,X,"[","\\lbrack",!0),I(L,j,"]","\\rbrack",!0),I(F,X,"]","\\rbrack",!0),I(L,H,"(","\\lparen",!0),I(L,j,")","\\rparen",!0),I(L,H,"⦇","\\llparenthesis",!0),I(L,j,"⦈","\\rrparenthesis",!0),I(F,X,"<","\\textless",!0),I(F,X,">","\\textgreater",!0),I(L,H,"⌊","\\lfloor",!0),I(L,j,"⌋","\\rfloor",!0),I(L,H,"⌈","\\lceil",!0),I(L,j,"⌉","\\rceil",!0),I(L,X,"\\","\\backslash"),I(L,X,"|","|"),I(L,X,"|","\\vert"),I(F,X,"|","\\textbar",!0),I(L,X,"‖","\\|"),I(L,X,"‖","\\Vert"),I(F,X,"‖","\\textbardbl"),I(F,X,"~","\\textasciitilde"),I(F,X,"\\","\\textbackslash"),I(F,X,"^","\\textasciicircum"),I(L,_,"↑","\\uparrow",!0),I(L,_,"⇑","\\Uparrow",!0),I(L,_,"↓","\\downarrow",!0),I(L,_,"⇓","\\Downarrow",!0),I(L,_,"↕","\\updownarrow",!0),I(L,_,"⇕","\\Updownarrow",!0),I(L,U,"∐","\\coprod"),I(L,U,"⋁","\\bigvee"),I(L,U,"⋀","\\bigwedge"),I(L,U,"⨄","\\biguplus"),I(L,U,"⨄","\\bigcupplus"),I(L,U,"⨃","\\bigcupdot"),I(L,U,"⨇","\\bigdoublevee"),I(L,U,"⨈","\\bigdoublewedge"),I(L,U,"⋂","\\bigcap"),I(L,U,"⋃","\\bigcup"),I(L,U,"∫","\\int"),I(L,U,"∫","\\intop"),I(L,U,"∬","\\iint"),I(L,U,"∭","\\iiint"),I(L,U,"∏","\\prod"),I(L,U,"∑","\\sum"),I(L,U,"⨂","\\bigotimes"),I(L,U,"⨁","\\bigoplus"),I(L,U,"⨀","\\bigodot"),I(L,U,"⨉","\\bigtimes"),I(L,U,"∮","\\oint"),I(L,U,"∯","\\oiint"),I(L,U,"∰","\\oiiint"),I(L,U,"∱","\\intclockwise"),I(L,U,"∲","\\varointclockwise"),I(L,U,"⨌","\\iiiint"),I(L,U,"⨍","\\intbar"),I(L,U,"⨎","\\intBar"),I(L,U,"⨏","\\fint"),I(L,U,"⨒","\\rppolint"),I(L,U,"⨓","\\scpolint"),I(L,U,"⨕","\\pointint"),I(L,U,"⨖","\\sqint"),I(L,U,"⨗","\\intlarhk"),I(L,U,"⨘","\\intx"),I(L,U,"⨙","\\intcap"),I(L,U,"⨚","\\intcup"),I(L,U,"⨅","\\bigsqcap"),I(L,U,"⨆","\\bigsqcup"),I(L,U,"∫","\\smallint"),I(F,P,"…","\\textellipsis"),I(L,P,"…","\\mathellipsis"),I(F,P,"…","\\ldots",!0),I(L,P,"…","\\ldots",!0),I(L,P,"⋰","\\iddots",!0),I(L,P,"⋯","\\@cdots",!0),I(L,P,"⋱","\\ddots",!0),I(L,X,"⋮","\\varvdots"),I(F,X,"⋮","\\varvdots"),I(L,D,"ˊ","\\acute"),I(L,D,"`","\\grave"),I(L,D,"¨","\\ddot"),I(L,D,"…","\\dddot"),I(L,D,"….","\\ddddot"),I(L,D,"~","\\tilde"),I(L,D,"‾","\\bar"),I(L,D,"˘","\\breve"),I(L,D,"ˇ","\\check"),I(L,D,"^","\\hat"),I(L,D,"→","\\vec"),I(L,D,"˙","\\dot"),I(L,D,"˚","\\mathring"),I(L,R,"ı","\\imath",!0),I(L,R,"ȷ","\\jmath",!0),I(L,X,"ı","ı"),I(L,X,"ȷ","ȷ"),I(F,X,"ı","\\i",!0),I(F,X,"ȷ","\\j",!0),I(F,X,"ø","\\o",!0),I(L,R,"ø","\\o",!0),I(F,X,"Ø","\\O",!0),I(L,R,"Ø","\\O",!0),I(F,D,"ˊ","\\'"),I(F,D,"ˋ","\\`"),I(F,D,"ˆ","\\^"),I(F,D,"˜","\\~"),I(F,D,"ˉ","\\="),I(F,D,"˘","\\u"),I(F,D,"˙","\\."),I(F,D,"¸","\\c"),I(F,D,"˚","\\r"),I(F,D,"ˇ","\\v");I(F,D,"¨",'\\"'),I(F,D,"˝","\\H"),I(L,D,"ˊ","\\'"),I(L,D,"ˋ","\\`"),I(L,D,"ˆ","\\^"),I(L,D,"˜","\\~"),I(L,D,"ˉ","\\="),I(L,D,"˘","\\u"),I(L,D,"˙","\\."),I(L,D,"¸","\\c"),I(L,D,"˚","\\r"),I(L,D,"ˇ","\\v"),I(L,D,"¨",'\\"'),I(L,D,"˝","\\H");const Z={"--":!0,"---":!0,"``":!0,"''":!0};I(F,X,"–","--",!0),I(F,X,"–","\\textendash"),I(F,X,"—","---",!0),I(F,X,"—","\\textemdash"),I(F,X,"‘","`",!0),I(F,X,"‘","\\textquoteleft"),I(F,X,"’","'",!0),I(F,X,"’","\\textquoteright"),I(F,X,"“","``",!0),I(F,X,"“","\\textquotedblleft"),I(F,X,"”","''",!0),I(F,X,"”","\\textquotedblright"),I(L,X,"°","\\degree",!0),I(F,X,"°","\\degree"),I(F,X,"°","\\textdegree",!0),I(L,X,"£","\\pounds"),I(L,X,"£","\\mathsterling",!0),I(F,X,"£","\\pounds"),I(F,X,"£","\\textsterling",!0),I(L,X,"✠","\\maltese"),I(F,X,"✠","\\maltese"),I(L,X,"€","\\euro",!0),I(F,X,"€","\\euro",!0),I(F,X,"€","\\texteuro"),I(L,X,"©","\\copyright",!0),I(F,X,"©","\\textcopyright"),I(L,X,"⌀","\\diameter",!0),I(F,X,"⌀","\\diameter"),I(L,X,"𝛤","\\varGamma"),I(L,X,"𝛥","\\varDelta"),I(L,X,"𝛩","\\varTheta"),I(L,X,"𝛬","\\varLambda"),I(L,X,"𝛯","\\varXi"),I(L,X,"𝛱","\\varPi"),I(L,X,"𝛴","\\varSigma"),I(L,X,"𝛶","\\varUpsilon"),I(L,X,"𝛷","\\varPhi"),I(L,X,"𝛹","\\varPsi"),I(L,X,"𝛺","\\varOmega"),I(F,X,"𝛤","\\varGamma"),I(F,X,"𝛥","\\varDelta"),I(F,X,"𝛩","\\varTheta"),I(F,X,"𝛬","\\varLambda"),I(F,X,"𝛯","\\varXi"),I(F,X,"𝛱","\\varPi"),I(F,X,"𝛴","\\varSigma"),I(F,X,"𝛶","\\varUpsilon"),I(F,X,"𝛷","\\varPhi"),I(F,X,"𝛹","\\varPsi"),I(F,X,"𝛺","\\varOmega");const Y='0123456789/@."';for(let e=0;e<14;e++){const t=Y.charAt(e);I(L,X,t,t)}const J='0123456789!@*()-=+";:?/.,';for(let e=0;e<25;e++){const t=J.charAt(e);I(F,X,t,t)}const K="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(let e=0;e<52;e++){const t=K.charAt(e);I(L,R,t,t),I(F,X,t,t)}const Q="ÇÐÞçþℂℍℕℙℚℝℤℎℏℊℋℌℐℑℒℓ℘ℛℜℬℰℱℳℭℨ";for(let e=0;e<30;e++){const t=Q.charAt(e);I(L,R,t,t),I(F,X,t,t)}let ee="";for(let e=0;e<52;e++){ee=String.fromCharCode(55349,56320+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56372+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56424+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56580+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56736+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56788+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56840+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56944+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56632+e),I(L,R,ee,ee),I(F,X,ee,ee);const t=K.charAt(e);ee=String.fromCharCode(55349,56476+e),I(L,R,t,ee),I(F,X,t,ee)}for(let e=0;e<10;e++)ee=String.fromCharCode(55349,57294+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57314+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57324+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57334+e),I(L,R,ee,ee),I(F,X,ee,ee);const te=function(e,t,r){return!$[t][e]||!$[t][e].replace||55349===e.charCodeAt(0)||Object.prototype.hasOwnProperty.call(Z,e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=$[t][e].replace),new T.TextNode(e)},re=(e,t)=>{if(0===e.children.length||"mtext"!==e.children[e.children.length-1].type){const r=new T.MathNode("mtext",[new T.TextNode(t.children[0].text)]);e.children.push(r)}else e.children[e.children.length-1].children[0].text+=t.children[0].text},ne=e=>{if("mrow"!==e.type&&"mstyle"!==e.type)return e;if(0===e.children.length)return e;const t=new T.MathNode("mrow");for(let r=0;r<e.children.length;r++){const n=e.children[r];if("mtext"===n.type&&0===Object.keys(n.attributes).length)re(t,n);else if("mrow"===n.type){let e=!0;for(let t=0;t<n.children.length;t++){if("mtext"!==n.children[t].type||0!==Object.keys(n.attributes).length){e=!1;break}}if(e)for(let e=0;e<n.children.length;e++){const r=n.children[e];re(t,r)}else t.children.push(n)}else t.children.push(n)}for(let r=0;r<t.children.length;r++)if("mtext"===t.children[r].type){const n=t.children[r];" "===n.children[0].text.charAt(0)&&(n.children[0].text=" "+n.children[0].text.slice(1));const s=n.children[0].text.length;s>0&&" "===n.children[0].text.charAt(s-1)&&(n.children[0].text=n.children[0].text.slice(0,-1)+" ");for(const[t,r]of Object.entries(e.attributes))n.attributes[t]=r}return 1===t.children.length&&"mtext"===t.children[0].type?t.children[0]:t},se=function(e,t=!1){if(!(1!==e.length||e[0]instanceof u))return e[0];if(!t){e[0]instanceof v&&"mo"===e[0].type&&!e[0].attributes.fence&&(e[0].attributes.lspace="0em",e[0].attributes.rspace="0em");const t=e.length-1;e[t]instanceof v&&"mo"===e[t].type&&!e[t].attributes.fence&&(e[t].attributes.lspace="0em",e[t].attributes.rspace="0em")}return new T.MathNode("mrow",e)};function oe(e){if(!e)return!1;if("mi"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof A&&"."===t.text}if("mtext"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof A&&" "===t.text}if("mo"===e.type&&1===e.children.length&&"true"===e.getAttribute("separator")&&"0em"===e.getAttribute("lspace")&&"0em"===e.getAttribute("rspace")){const t=e.children[0];return t instanceof A&&","===t.text}return!1}const ae=(e,t)=>{const r=e[t],n=e[t+1];return"atom"===r.type&&","===r.text&&r.loc&&n.loc&&r.loc.end===n.loc.start},le=e=>"atom"===e.type&&"rel"===e.family||"mclass"===e.type&&"mrel"===e.mclass,ie=function(e,t,r=!1){if(!r&&1===e.length){const r=de(e[0],t);return r instanceof v&&"mo"===r.type&&(r.setAttribute("lspace","0em"),r.setAttribute("rspace","0em")),[r]}const n=[],s=[];let o;for(let r=0;r<e.length;r++)s.push(de(e[r],t));for(let t=0;t<s.length;t++){const r=s[t];if(t<e.length-1&&le(e[t])&&le(e[t+1])&&r.setAttribute("rspace","0em"),t>0&&le(e[t])&&le(e[t-1])&&r.setAttribute("lspace","0em"),"mn"===r.type&&o&&"mn"===o.type)o.children.push(...r.children);else if(oe(r)&&o&&"mn"===o.type)o.children.push(...r.children);else if(o&&"mn"===o.type&&t<s.length-1&&"mn"===s[t+1].type&&ae(e,t))o.children.push(...r.children);else{if("mn"===r.type&&oe(o))r.children=[...o.children,...r.children],n.pop();else if(("msup"===r.type||"msub"===r.type)&&r.children.length>=1&&o&&("mn"===o.type||oe(o))){const e=r.children[0];e instanceof v&&"mn"===e.type&&o&&(e.children=[...o.children,...e.children],n.pop())}n.push(r),o=r}}return n},ce=function(e,t,r=!1){return se(ie(e,t,r),r)},de=function(t,r){if(!t)return new T.MathNode("mrow");if(i[t.type]){return i[t.type](t,r)}throw new e("Got group of unknown type: '"+t.type+"'")},me=e=>new T.MathNode("mtd",[],[],{padding:"0",width:"50%"}),pe=["mrow","mtd","mtable","mtr"],ue=e=>{for(const t of e.children)if(t.type&&pe.includes(t.type)){if(t.classes&&"tml-label"===t.classes[0]){return t.label}{const e=ue(t);if(e)return e}}else if(!t.type){const e=ue(t);if(e)return e}};function he(e,t,r,n){let s=null;1===e.length&&"tag"===e[0].type&&(s=e[0].tag,e=e[0].body);const o=ie(e,r);if(1===o.length&&o[0]instanceof x)return o[0];const a=n.displayMode||n.annotate?"none":n.wrap,l=0===o.length?null:o[0];let i=1===o.length&&null===s&&l instanceof v?o[0]:function(e,t,r){const n=[];let s=[],o=[],a=0,l=0,i=0;for(;l<e.length;){for(;e[l]instanceof u;)e.splice(l,1,...e[l].children);const r=e[l];if(r.attributes&&r.attributes.linebreak&&"newline"===r.attributes.linebreak){o.length>0&&s.push(new T.MathNode("mrow",o)),s.push(r),o=[];const e=new T.MathNode("mtd",s);e.style.textAlign="left",n.push(new T.MathNode("mtr",[e])),s=[],l+=1}else{if(o.push(r),r.type&&"mo"===r.type&&1===r.children.length&&!Object.prototype.hasOwnProperty.call(r.attributes,"movablelimits")){const n=r.children[0].text;if("([{⌊⌈⟨⟮⎰⟦⦃".indexOf(n)>-1)i+=1;else if(")]}⌋⌉⟩⟯⎱⟦⦄".indexOf(n)>-1)i-=1;else if(0===i&&"="===t&&"="===n){if(a+=1,a>1){o.pop();const e=new T.MathNode("mrow",o);s.push(e),o=[r]}}else if(0===i&&"tex"===t&&"∇"!==n){const t=l<e.length-1?e[l+1]:null;let r=!0;if(!t||"mtext"!==t.type||!t.attributes.linebreak||"nobreak"!==t.attributes.linebreak)for(let t=l+1;t<e.length;t++){const n=e[t];if(!n.type||"mspace"!==n.type||n.attributes.linebreak&&"newline"===n.attributes.linebreak)break;o.push(n),l+=1,n.attributes&&n.attributes.linebreak&&"nobreak"===n.attributes.linebreak&&(r=!1)}if(r){const e=new T.MathNode("mrow",o);s.push(e),o=[]}}}l+=1}}if(o.length>0){const e=new T.MathNode("mrow",o);s.push(e)}if(n.length>0){const e=new T.MathNode("mtd",s);e.style.textAlign="left";const t=new T.MathNode("mtr",[e]);n.push(t);const o=new T.MathNode("mtable",n);return r||(o.setAttribute("columnalign","left"),o.setAttribute("rowspacing","0em")),o}return T.newDocumentFragment(s)}(o,a,n.displayMode);if(s&&(i=((e,t,r,n)=>{t=ce(t[0].body,r),(t=ne(t)).classes.push("tml-tag");const s=ue(e);e=new T.MathNode("mtd",[e]);const o=[me(),e,me()];o[n?0:2].classes.push(n?"tml-left":"tml-right"),o[n?0:2].children.push(t);const a=new T.MathNode("mtr",o,["tml-tageqn"]);s&&a.setAttribute("id",s);const l=new T.MathNode("mtable",[a]);return l.style.width="100%",l.setAttribute("displaystyle","true"),l})(i,s,r,n.leqno)),n.annotate){const e=new T.MathNode("annotation",[new T.TextNode(t)]);e.setAttribute("encoding","application/x-tex"),i=new T.MathNode("semantics",[i,e])}const c=new T.MathNode("math",[i]);return n.xml&&c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),i.style.width&&(c.style.width="100%"),n.displayMode&&(c.setAttribute("display","block"),c.style.display="block math",c.classes=["tml-display"]),c}const ge="acegıȷmnopqrsuvwxyzαγεηικμνοπρςστυχωϕ𝐚𝐜𝐞𝐠𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐮𝐯𝐰𝐱𝐲𝐳",fe="ABCDEFGHIJKLMNOPQRSTUVWXYZbdfhkltΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩβδλζφθψ𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙𝐛𝐝𝐟𝐡𝐤𝐥𝐭",be=new Set(["\\alpha","\\gamma","\\delta","\\epsilon","\\eta","\\iota","\\kappa","\\mu","\\nu","\\pi","\\rho","\\sigma","\\tau","\\upsilon","\\chi","\\psi","\\omega","\\imath","\\jmath"]),ye=new Set(["\\Gamma","\\Delta","\\Sigma","\\Omega","\\beta","\\delta","\\lambda","\\theta","\\psi"]),we=(e,t)=>{const r=e.isStretchy?C(e):new T.MathNode("mo",[te(e.label,e.mode)]);if("\\vec"===e.label)r.style.transform="scale(0.75) translate(10%, 30%)";else if(r.style.mathStyle="normal",r.style.mathDepth="0",ke.has(e.label)&&o.isCharacterBox(e.base)){let t="";const n=e.base.text;(ge.indexOf(n)>-1||be.has(n))&&(t="tml-xshift"),(fe.indexOf(n)>-1||ye.has(n))&&(t="tml-capshift"),t&&r.classes.push(t)}e.isStretchy||r.setAttribute("stretchy","false");return new T.MathNode("\\c"===e.label?"munder":"mover",[de(e.base,t),r])},xe=new Set(["\\acute","\\grave","\\ddot","\\dddot","\\ddddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"]),ke=new Set(["\\acute","\\bar","\\breve","\\check","\\dot","\\ddot","\\grave","\\hat","\\mathring","\\'","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v"]),ve={"\\`":"̀","\\'":"́","\\^":"̂","\\~":"̃","\\=":"̄","\\u":"̆","\\.":"̇",'\\"':"̈","\\r":"̊","\\H":"̋","\\v":"̌"};c({type:"accent",names:["\\acute","\\grave","\\ddot","\\dddot","\\ddddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\overparen","\\widecheck","\\widehat","\\wideparen","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{const r=m(t[0]),n=!xe.has(e.funcName);return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,base:r}},mathmlBuilder:we}),c({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\c","\\u","\\.",'\\"',"\\r","\\H","\\v"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{const r=m(t[0]),n=e.parser.mode;return"math"===n&&e.parser.settings.strict&&console.log(`Temml parse error: Command ${e.funcName} is invalid in math mode.`),"text"===n&&r.text&&1===r.text.length&&e.funcName in ve&&ge.indexOf(r.text)>-1?{type:"textord",mode:"text",text:r.text+ve[e.funcName]}:{type:"accent",mode:n,label:e.funcName,isStretchy:!1,base:r}},mathmlBuilder:we}),c({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underparen","\\utilde"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>{const n=r[0];return{type:"accentUnder",mode:e.mode,label:t,base:n}},mathmlBuilder:(e,t)=>{const r=C(e);r.style["math-depth"]=0;return new T.MathNode("munder",[de(e.base,t),r])}});const Ae={pt:800/803,pc:9600/803,dd:1238/1157*800/803,cc:12.792133216944668,nd:685/642*800/803,nc:1370/107*800/803,sp:1/65536*800/803,mm:25.4/72,cm:2.54/72,in:1/72,px:96/72},Ne=["em","ex","mu","pt","mm","cm","in","px","bp","pc","dd","cc","nd","nc","sp"],Te=function(e){return"string"!=typeof e&&(e=e.unit),Ne.indexOf(e)>-1},Se=e=>[1,.7,.5][Math.max(e-1,0)],qe=function(t,r){let n=t.number;if(r.maxSize[0]<0&&n>0)return{number:0,unit:"em"};const s=t.unit;switch(s){case"mm":case"cm":case"in":case"px":return n*Ae[s]>r.maxSize[1]?{number:r.maxSize[1],unit:"pt"}:{number:n,unit:s};case"em":case"ex":return"ex"===s&&(n*=.431),n=Math.min(n/Se(r.level),r.maxSize[0]),{number:o.round(n),unit:"em"};case"bp":return n>r.maxSize[1]&&(n=r.maxSize[1]),{number:n,unit:"pt"};case"pt":case"pc":case"dd":case"cc":case"nd":case"nc":case"sp":return n=Math.min(n*Ae[s],r.maxSize[1]),{number:o.round(n),unit:"pt"};case"mu":return n=Math.min(n/18,r.maxSize[0]),{number:o.round(n),unit:"em"};default:throw new e("Invalid unit: '"+s+"'")}},Oe=e=>{const t=new T.MathNode("mspace");return t.setAttribute("width",e+"em"),t},Me=(e,t=.3,r=0,n=!1)=>{if(null==e&&0===r)return Oe(t);const s=e?[e]:[];if(0!==t&&s.unshift(Oe(t)),r>0&&s.push(Oe(r)),n){const e=new T.MathNode("mpadded",s);return e.setAttribute("height","0"),e}return new T.MathNode("mrow",s)},Be=(e,t)=>Number(e)/Se(t),Ce=(e,t,r,n)=>{const s=B(e),o="eq"===e.slice(1,3),a="x"===e.charAt(1)?"1.75":"cd"===e.slice(2,4)?"3.0":o?"1.0":"2.0";s.setAttribute("lspace","0"),s.setAttribute("rspace",o?"0.5em":"0");const l=n.withLevel(n.level<2?2:3),i=Be(a,l.level),c=Be(a,3),d=Me(null,i.toFixed(4),0),m=Me(null,c.toFixed(4),0),p=Be(o?0:.3,l.level).toFixed(4);let u,h;const g=t&&t.body&&(t.body.body||t.body.length>0);if(g){let r=de(t,l);r=Me(r,p,p,"\\\\cdrightarrow"===e||"\\\\cdleftarrow"===e),u=new T.MathNode("mover",[r,m])}const f=r&&r.body&&(r.body.body||r.body.length>0);if(f){let e=de(r,l);e=Me(e,p,p),h=new T.MathNode("munder",[e,m])}let b;return b=g||f?g&&f?new T.MathNode("munderover",[s,h,u]):g?new T.MathNode("mover",[s,u]):new T.MathNode("munder",[s,h]):new T.MathNode("mover",[s,d]),"3.0"===a&&(b.style.height="1em"),b.setAttribute("accent","false"),b};c({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\yields","\\yieldsLeft","\\mesomerism","\\longrightharpoonup","\\longleftharpoondown","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:({parser:e,funcName:t},r,n)=>({type:"xArrow",mode:e.mode,name:t,body:r[0],below:n[0]}),mathmlBuilder(e,t){const r=[Ce(e.name,e.body,e.below,t)];return r.unshift(Oe(.2778)),r.push(Oe(.2778)),new T.MathNode("mrow",r)}});const ze={"\\xtofrom":["\\xrightarrow","\\xleftarrow"],"\\xleftrightharpoons":["\\xleftharpoonup","\\xrightharpoondown"],"\\xrightleftharpoons":["\\xrightharpoonup","\\xleftharpoondown"],"\\yieldsLeftRight":["\\yields","\\yieldsLeft"],"\\equilibrium":["\\longrightharpoonup","\\longleftharpoondown"],"\\equilibriumRight":["\\longrightharpoonup","\\eqleftharpoondown"],"\\equilibriumLeft":["\\eqrightharpoonup","\\longleftharpoondown"]};c({type:"stackedArrow",names:["\\xtofrom","\\xleftrightharpoons","\\xrightleftharpoons","\\yieldsLeftRight","\\equilibrium","\\equilibriumRight","\\equilibriumLeft"],props:{numArgs:1,numOptionalArgs:1},handler({parser:e,funcName:t},r,n){const s=r[0]?{type:"hphantom",mode:e.mode,body:r[0]}:null,o=n[0]?{type:"hphantom",mode:e.mode,body:n[0]}:null;return{type:"stackedArrow",mode:e.mode,name:t,body:r[0],upperArrowBelow:o,lowerArrowBody:s,below:n[0]}},mathmlBuilder(e,t){const r=ze[e.name][0],n=ze[e.name][1],s=Ce(r,e.body,e.upperArrowBelow,t),o=Ce(n,e.lowerArrowBody,e.below,t);let a;const l=new T.MathNode("mpadded",[s]);if(l.setAttribute("voffset","0.3em"),l.setAttribute("height","+0.3em"),l.setAttribute("depth","-0.3em"),"\\equilibriumLeft"===e.name){const e=new T.MathNode("mpadded",[o]);e.setAttribute("width","0.5em"),a=new T.MathNode("mpadded",[Oe(.2778),e,l,Oe(.2778)])}else l.setAttribute("width","\\equilibriumRight"===e.name?"0.5em":"0"),a=new T.MathNode("mpadded",[Oe(.2778),l,o,Oe(.2778)]);return a.setAttribute("voffset","-0.18em"),a.setAttribute("height","-0.18em"),a.setAttribute("depth","+0.18em"),a}});const Ee={};function $e({type:e,names:t,props:r,handler:n,mathmlBuilder:s}){const o={type:e,numArgs:r.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n};for(let e=0;e<t.length;++e)Ee[t[e]]=o;s&&(i[e]=s)}function Ie(e,t){if(!e||e.type!==t)throw new Error(`Expected node of type ${t}, but got `+(e?`node of type ${e.type}`:String(e)));return e}function Le(e){const t=Fe(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?`node of type ${e.type}`:String(e)));return t}function Fe(e){return e&&("atom"===e.type||Object.prototype.hasOwnProperty.call(E,e.type))?e:null}const De={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Ge=e=>"textord"===e.type&&"@"===e.text;function je(e,t,r){const n=De[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{const e={type:"atom",text:n,mode:"math",family:"rel"},s={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[e],[]),r.callFunction("\\\\cdright",[t[1]],[])],semisimple:!0};return r.callFunction("\\\\cdparent",[s],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{const e={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[e],[])}default:return{type:"textord",text:" ",mode:"math"}}}c({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>({type:"cdlabel",mode:e.mode,side:t.slice(4),label:r[0]}),mathmlBuilder(e,t){if(0===e.label.body.length)return new T.MathNode("mrow",t);const r=new T.MathNode("mtd",[de(e.label,t)]);r.style.padding="0";const n=new T.MathNode("mtr",[r]),s=new T.MathNode("mtable",[n]),o=new T.MathNode("mpadded",[s]);return o.setAttribute("width","0"),o.setAttribute("displaystyle","false"),o.setAttribute("scriptlevel","1"),"left"===e.side&&(o.style.display="flex",o.style.justifyContent="flex-end"),o}}),c({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:({parser:e},t)=>({type:"cdlabelparent",mode:e.mode,fragment:t[0]}),mathmlBuilder:(e,t)=>new T.MathNode("mrow",[de(e.fragment,t)])});const Pe=e=>({type:"ordgroup",mode:"math",body:e,semisimple:!0}),Re=(e,t)=>({type:t,mode:"math",body:Pe(e)});class Ue{constructor(e,t,r){this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?e&&e.loc&&t.loc&&e.loc.lexer===t.loc.lexer?new Ue(e.loc.lexer,e.loc.start,t.loc.end):null:e&&e.loc}}class He{constructor(e,t){this.text=e,this.loc=t}range(e,t){return new He(t,Ue.range(this,e))}}const Ve=0,_e=1,We=2,Xe=3,Ze={};function Ye(e,t){Ze[e]=t}const Je=Ze;Ye("\\noexpand",(function(e){const t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Ye("\\expandafter",(function(e){const t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Ye("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Ye("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Ye("\\@ifnextchar",(function(e){const t=e.consumeArgs(3);e.consumeSpaces();const r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Ye("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Ye("\\TextOrMath",(function(e){const t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));const Ke=e=>{let t="";for(let r=e.length-1;r>-1;r--)t+=e[r].text;return t},Qe={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15},et=e=>{const t=e.future().text;return"EOF"===t?[null,""]:[Qe[t.charAt(0)],t]},tt=(e,t,r)=>{for(let n=1;n<t.length;n++){e*=r,e+=Qe[t.charAt(n)]}return e};function rt(e){const t=e.consumeArgs(1)[0];let r="",n=t[t.length-1].loc.start;for(let e=t.length-1;e>=0;e--){const s=t[e].loc.start;s>n&&(r+=" ",n=s),r+=t[e].text,n+=t[e].text.length}return r}Ye("\\char",(function(t){let r,n=t.popToken(),s="";if("'"===n.text)r=8,n=t.popToken();else if('"'===n.text)r=16,n=t.popToken();else if("`"===n.text)if(n=t.popToken(),"\\"===n.text[0])s=n.text.charCodeAt(1);else{if("EOF"===n.text)throw new e("\\char` missing argument");s=n.text.charCodeAt(0)}else r=10;if(r){let o,a=n.text;if(s=Qe[a.charAt(0)],null==s||s>=r)throw new e(`Invalid base-${r} digit ${n.text}`);for(s=tt(s,a,r),[o,a]=et(t);null!=o&&o<r;)s*=r,s+=o,s=tt(s,a,r),t.popToken(),[o,a]=et(t)}return`\\@char{${s}}`})),Ye("\\surd","\\sqrt{\\vphantom{|}}"),Ye("⊕","\\oplus"),Ye("\\long",""),Ye("\\bgroup","{"),Ye("\\egroup","}"),Ye("~","\\nobreakspace"),Ye("\\lq","`"),Ye("\\rq","'"),Ye("\\aa","\\r a"),Ye("\\Bbbk","\\Bbb{k}"),Ye("\\mathstrut","\\vphantom{(}"),Ye("\\underbar","\\underline{\\text{#1}}"),Ye("\\vdots","{\\varvdots\\rule{0pt}{15pt}}"),Ye("⋮","\\vdots"),Ye("\\arraystretch","1"),Ye("\\arraycolsep","6pt"),Ye("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Ye("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Ye("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Ye("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");const nt={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcap":"\\dotsb","\\bigsqcup":"\\dotsb","\\bigtimes":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Ye("\\dots",(function(e){let t="\\dotso";const r=e.expandAfterFuture().text;return r in nt?t=nt[r]:("\\not"===r.slice(0,4)||r in $.math&&["bin","rel"].includes($.math[r].group))&&(t="\\dotsb"),t}));const st={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Ye("\\dotso",(function(e){return e.future().text in st?"\\ldots\\,":"\\ldots"})),Ye("\\dotsc",(function(e){const t=e.future().text;return t in st&&","!==t?"\\ldots\\,":"\\ldots"})),Ye("\\cdots",(function(e){return e.future().text in st?"\\@cdots\\,":"\\@cdots"})),Ye("\\dotsb","\\cdots"),Ye("\\dotsm","\\cdots"),Ye("\\dotsi","\\!\\cdots"),Ye("\\idotsint","\\dotsi"),Ye("\\dotsx","\\ldots\\,"),Ye("\\DOTSI","\\relax"),Ye("\\DOTSB","\\relax"),Ye("\\DOTSX","\\relax"),Ye("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Ye("\\,","{\\tmspace+{3mu}{.1667em}}"),Ye("\\thinspace","\\,"),Ye("\\>","\\mskip{4mu}"),Ye("\\:","{\\tmspace+{4mu}{.2222em}}"),Ye("\\medspace","\\:"),Ye("\\;","{\\tmspace+{5mu}{.2777em}}"),Ye("\\thickspace","\\;"),Ye("\\!","{\\tmspace-{3mu}{.1667em}}"),Ye("\\negthinspace","\\!"),Ye("\\negmedspace","{\\tmspace-{4mu}{.2222em}}"),Ye("\\negthickspace","{\\tmspace-{5mu}{.277em}}"),Ye("\\enspace","\\kern.5em "),Ye("\\enskip","\\hskip.5em\\relax"),Ye("\\quad","\\hskip1em\\relax"),Ye("\\qquad","\\hskip2em\\relax"),Ye("\\AA","\\TextOrMath{\\Angstrom}{\\mathring{A}}\\relax"),Ye("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Ye("\\tag@paren","\\tag@literal{({#1})}"),Ye("\\tag@literal",(t=>{if(t.macros.get("\\df@tag"))throw new e("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Ye("\\notag","\\nonumber"),Ye("\\nonumber","\\gdef\\@eqnsw{0}"),Ye("\\bmod","\\mathbin{\\text{mod}}"),Ye("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Ye("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Ye("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Ye("\\newline","\\\\\\relax"),Ye("\\TeX","\\textrm{T}\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125em\\textrm{X}"),Ye("\\LaTeX","\\textrm{L}\\kern-.35em\\raisebox{0.2em}{\\scriptstyle A}\\kern-.15em\\TeX"),Ye("\\Temml","\\textrm{T}\\kern-0.2em\\lower{0.2em}{\\textrm{E}}\\kern-0.08em{\\textrm{M}\\kern-0.08em\\raise{0.2em}\\textrm{M}\\kern-0.08em\\textrm{L}}"),Ye("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Ye("\\@hspace","\\hskip #1\\relax"),Ye("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Ye("\\colon",'\\mathpunct{\\char"3a}'),Ye("\\prescript","\\pres@cript{_{#1}^{#2}}{}{#3}"),Ye("\\ordinarycolon",'\\char"3a'),Ye("\\vcentcolon","\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}}"),Ye("\\coloneq",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"2212}'),Ye("\\Coloneq",'\\mathrel{\\char"2237\\char"2212}'),Ye("\\Eqqcolon",'\\mathrel{\\char"3d\\char"2237}'),Ye("\\Eqcolon",'\\mathrel{\\char"2212\\char"2237}'),Ye("\\colonapprox",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"2248}'),Ye("\\Colonapprox",'\\mathrel{\\char"2237\\char"2248}'),Ye("\\colonsim",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"223c}'),Ye("\\Colonsim",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"223c}'),Ye("\\ratio","\\vcentcolon"),Ye("\\coloncolon","\\dblcolon"),Ye("\\colonequals","\\coloneqq"),Ye("\\coloncolonequals","\\Coloneqq"),Ye("\\equalscolon","\\eqqcolon"),Ye("\\equalscoloncolon","\\Eqqcolon"),Ye("\\colonminus","\\coloneq"),Ye("\\coloncolonminus","\\Coloneq"),Ye("\\minuscolon","\\eqcolon"),Ye("\\minuscoloncolon","\\Eqcolon"),Ye("\\coloncolonapprox","\\Colonapprox"),Ye("\\coloncolonsim","\\Colonsim"),Ye("\\notni","\\mathrel{\\char`∌}"),Ye("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Ye("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Ye("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Ye("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Ye("\\varlimsup","\\DOTSB\\operatorname*{\\overline{\\text{lim}}}"),Ye("\\varliminf","\\DOTSB\\operatorname*{\\underline{\\text{lim}}}"),Ye("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{\\text{lim}}}"),Ye("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{\\text{lim}}}"),Ye("\\centerdot","{\\medspace\\rule{0.167em}{0.189em}\\medspace}"),Ye("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Ye("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Ye("\\plim","\\DOTSB\\operatorname*{plim}"),Ye("\\leftmodels","\\mathop{\\reflectbox{$\\models$}}"),Ye("\\bra","\\mathinner{\\langle{#1}|}"),Ye("\\ket","\\mathinner{|{#1}\\rangle}"),Ye("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Ye("\\Bra","\\left\\langle#1\\right|"),Ye("\\Ket","\\left|#1\\right\\rangle");const ot=(e,t)=>{const r=`}\\,\\middle${"|"===t[0]?"\\vert":"\\Vert"}\\,{`;return e.slice(0,t.index)+r+e.slice(t.index+t[0].length)};Ye("\\Braket",(function(e){let t=rt(e);const r=/\|\||\||\\\|/g;let n;for(;null!==(n=r.exec(t));)t=ot(t,n);return"\\left\\langle{"+t+"}\\right\\rangle"})),Ye("\\Set",(function(e){let t=rt(e);const r=/\|\||\||\\\|/.exec(t);return r&&(t=ot(t,r)),"\\left\\{\\:{"+t+"}\\:\\right\\}"})),Ye("\\set",(function(e){return"\\{{"+rt(e).replace(/\|/,"}\\mid{")+"}\\}"})),Ye("\\angln","{\\angl n}"),Ye("\\odv","\\@ifstar\\odv@next\\odv@numerator"),Ye("\\odv@numerator","\\frac{\\mathrm{d}#1}{\\mathrm{d}#2}"),Ye("\\odv@next","\\frac{\\mathrm{d}}{\\mathrm{d}#2}#1"),Ye("\\pdv","\\@ifstar\\pdv@next\\pdv@numerator");const at=e=>{const t=e[0][0].text,r=Ke(e[1]).split(","),n=String(r.length),s="1"===n?"\\partial":`\\partial^${n}`;let o="";return r.map((e=>{o+="\\partial "+e.trim()+"\\,"})),[t,s,o.replace(/\\,$/,"")]};function lt(e){const t=[];e.consumeSpaces();let r=e.fetch().text;for("\\relax"===r&&(e.consume(),e.consumeSpaces(),r=e.fetch().text);"\\hline"===r||"\\hdashline"===r;)e.consume(),t.push("\\hdashline"===r),e.consumeSpaces(),r=e.fetch().text;return t}Ye("\\pdv@numerator",(function(e){const[t,r,n]=at(e.consumeArgs(2));return`\\frac{${r} ${t}}{${n}}`})),Ye("\\pdv@next",(function(e){const[t,r,n]=at(e.consumeArgs(2));return`\\frac{${r}}{${n}} ${t}`})),Ye("\\upalpha","\\up@greek{\\alpha}"),Ye("\\upbeta","\\up@greek{\\beta}"),Ye("\\upgamma","\\up@greek{\\gamma}"),Ye("\\updelta","\\up@greek{\\delta}"),Ye("\\upepsilon","\\up@greek{\\epsilon}"),Ye("\\upzeta","\\up@greek{\\zeta}"),Ye("\\upeta","\\up@greek{\\eta}"),Ye("\\uptheta","\\up@greek{\\theta}"),Ye("\\upiota","\\up@greek{\\iota}"),Ye("\\upkappa","\\up@greek{\\kappa}"),Ye("\\uplambda","\\up@greek{\\lambda}"),Ye("\\upmu","\\up@greek{\\mu}"),Ye("\\upnu","\\up@greek{\\nu}"),Ye("\\upxi","\\up@greek{\\xi}"),Ye("\\upomicron","\\up@greek{\\omicron}"),Ye("\\uppi","\\up@greek{\\pi}"),Ye("\\upalpha","\\up@greek{\\alpha}"),Ye("\\uprho","\\up@greek{\\rho}"),Ye("\\upsigma","\\up@greek{\\sigma}"),Ye("\\uptau","\\up@greek{\\tau}"),Ye("\\upupsilon","\\up@greek{\\upsilon}"),Ye("\\upphi","\\up@greek{\\phi}"),Ye("\\upchi","\\up@greek{\\chi}"),Ye("\\uppsi","\\up@greek{\\psi}"),Ye("\\upomega","\\up@greek{\\omega}"),Ye("\\invamp",'\\mathbin{\\char"214b}'),Ye("\\parr",'\\mathbin{\\char"214b}'),Ye("\\with",'\\mathbin{\\char"26}'),Ye("\\multimapinv",'\\mathrel{\\char"27dc}'),Ye("\\multimapboth",'\\mathrel{\\char"29df}'),Ye("\\scoh",'{\\mkern5mu\\char"2322\\mkern5mu}'),Ye("\\sincoh",'{\\mkern5mu\\char"2323\\mkern5mu}'),Ye("\\coh",'{\\mkern5mu\\rule{}{0.7em}\\mathrlap{\\smash{\\raise2mu{\\char"2322}}}\n{\\smash{\\lower4mu{\\char"2323}}}\\mkern5mu}'),Ye("\\incoh",'{\\mkern5mu\\rule{}{0.7em}\\mathrlap{\\smash{\\raise2mu{\\char"2323}}}\n{\\smash{\\lower4mu{\\char"2322}}}\\mkern5mu}'),Ye("\\standardstate","\\text{\\tiny\\char`⦵}");const it=t=>{if(!t.parser.settings.displayMode)throw new e(`{${t.envName}} can be used only in display mode.`)},ct=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/,dt=e=>{let t=e.get("\\arraystretch");"string"!=typeof t&&(t=Ke(t.tokens)),t=isNaN(t)?null:Number(t);let r=e.get("\\arraycolsep");"string"!=typeof r&&(r=Ke(r.tokens));const n=ct.exec(r);return[t,n?{number:+(n[1]+n[2]),unit:n[3]}:null]},mt=t=>{let r="";for(let n=0;n<t.length;n++)if("label"===t[n].type){if(r)throw new e("Multiple \\labels in one row");r=t[n].string}return r};function pt(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function ut(t,{cols:r,envClasses:n,autoTag:s,singleRow:o,emptySingleRow:a,maxNumCols:l,leqno:i,arraystretch:c,arraycolsep:d},m){const p=n&&n.includes("bordermatrix")?"}":"\\end";t.gullet.beginGroup(),o||t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();let u=[];const h=[u],g=[],f=[],b=[],y=null!=s?[]:void 0;function w(){s&&t.gullet.macros.set("\\@eqnsw","1",!0)}function x(){y&&(t.gullet.macros.get("\\df@tag")?(y.push(t.subparse([new He("\\df@tag")])),t.gullet.macros.set("\\df@tag",void 0,!0)):y.push(Boolean(s)&&"1"===t.gullet.macros.get("\\@eqnsw")))}for(w(),b.push(lt(t));;){let r=t.parseExpression(!1,o?"\\end":"\\\\");t.gullet.endGroup(),t.gullet.beginGroup(),r={type:"ordgroup",mode:t.mode,body:r,semisimple:!0},u.push(r);const s=t.fetch().text;if("&"===s){if(l&&u.length===l){if(!n.includes("array"))throw new e(2===l?"The split environment accepts no more than two columns":"The equation environment accepts only one column",t.nextToken);if(t.settings.strict)throw new e("Too few columns specified in the {array} column argument.",t.nextToken)}t.consume()}else{if(s===p){x(),1===u.length&&0===r.body.length&&(h.length>1||!a)&&h.pop(),f.push(mt(r.body)),b.length<h.length+1&&b.push([]);break}if("\\\\"!==s)throw new e("Expected & or \\\\ or \\cr or "+p,t.nextToken);{let e;t.consume()," "!==t.gullet.future().text&&(e=t.parseSizeGroup(!0)),g.push(e?e.value:null),x(),f.push(mt(r.body)),b.push(lt(t)),u=[],h.push(u),w()}}}return t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:t.mode,body:h,cols:r,rowGaps:g,hLinesBeforeRow:b,envClasses:n,autoTag:s,scriptLevel:m,tags:y,labels:f,leqno:i,arraystretch:c,arraycolsep:d}}function ht(e){return"d"===e.slice(0,1)?"display":"text"}const gt={c:"center ",l:"left ",r:"right "},ft=e=>{const t=new T.MathNode("mtd",[]);return t.style={padding:"0",width:"50%"},e.envClasses.includes("multline")&&(t.style.width="7.5%"),t},bt=function(e,t){const r=[],n=e.body.length,s=e.hLinesBeforeRow;for(let o=0;o<n;o++){const a=e.body[o],l=[],i="text"===e.scriptLevel?_e:"script"===e.scriptLevel?We:Ve;for(let r=0;r<a.length;r++){const s=new T.MathNode("mtd",[de(a[r],t.withLevel(i))]);if(e.envClasses.includes("multline")){const e=0===o?"left":o===n-1?"right":"center";s.setAttribute("columnalign",e),"center"!==e&&s.classes.push("tml-"+e)}l.push(s)}const c=e.body[0].length;for(let e=0;e<c-a.length;e++)l.push(new T.MathNode("mtd",[],[],t));if(e.autoTag){const r=e.tags[o];let n;!0===r?n=new T.MathNode("mtext",[new y(["tml-eqn"])]):!1===r?n=new T.MathNode("mtext",[],[]):(n=ce(r[0].body,t.withLevel(i),!0),n=ne(n),n.classes=["tml-tag"]),n&&(l.unshift(ft(e)),l.push(ft(e)),e.leqno?(l[0].children.push(n),l[0].classes.push("tml-left")):(l[l.length-1].children.push(n),l[l.length-1].classes.push("tml-right")))}const d=new T.MathNode("mtr",l,[]),m=e.labels.shift();m&&e.tags&&e.tags[o]&&(d.setAttribute("id",m),Array.isArray(e.tags[o])&&d.classes.push("tml-tageqn")),0===o&&s[0].length>0&&(2===s[0].length?d.children.forEach((e=>{e.style.borderTop="0.15em double"})):d.children.forEach((e=>{e.style.borderTop=s[0][0]?"0.06em dashed":"0.06em solid"}))),s[o+1].length>0&&(2===s[o+1].length?d.children.forEach((e=>{e.style.borderBottom="0.15em double"})):d.children.forEach((e=>{e.style.borderBottom=s[o+1][0]?"0.06em dashed":"0.06em solid"})));let p=!0;for(let e=0;e<d.children.length;e++){const t=d.children[e].children[0];if(!t||"mpadded"!==t.type||"0px"!==t.attributes.height){p=!1;break}}if(p)for(let e=0;e<d.children.length;e++)d.children[e].style.paddingTop="0",d.children[e].style.paddingBottom="0";r.push(d)}if(e.arraystretch&&1!==e.arraystretch){const t=String(1.4*e.arraystretch-.8)+"ex";for(let e=0;e<r.length;e++)for(let n=0;n<r[e].children.length;n++)r[e].children[n].style.paddingTop=t,r[e].children[n].style.paddingBottom=t}let o,a;if(e.envClasses.length>0&&(o=e.envClasses.includes("abut")||e.envClasses.includes("cases")?"0":e.envClasses.includes("small")?"0.1389":e.envClasses.includes("cd")?"0.25":"0.4",a="em"),e.arraycolsep){const r=qe(e.arraycolsep,t);o=r.number.toFixed(4),a=r.unit}if(o){const t=0===r.length?0:r[0].children.length,n=(r,n)=>0===r&&0===n||r===t-1&&1===n?"0":"align"!==e.envClasses[0]?o:1===n?"0":e.autoTag?r%2?"1":"0":r%2?"0":"1";for(let e=0;e<r.length;e++)for(let t=0;t<r[e].children.length;t++)r[e].children[t].style.paddingLeft=`${n(t,0)}${a}`,r[e].children[t].style.paddingRight=`${n(t,1)}${a}`}if(0===e.envClasses.length)for(let e=0;e<r.length;e++)r[e].children[0].style.paddingLeft="0em",r[e].children.length===r[0].children.length&&(r[e].children[r[e].children.length-1].style.paddingRight="0em");if(e.envClasses.length>0){const t=e.envClasses.includes("align")||e.envClasses.includes("alignat");for(let n=0;n<r.length;n++){const s=r[n];if(t){for(let e=0;e<s.children.length;e++)s.children[e].classes=["tml-"+(e%2?"left":"right")];if(e.autoTag){const t=e.leqno?0:s.children.length-1;s.children[t].classes=["tml-"+(e.leqno?"left":"right")]}}if(s.children.length>1&&e.envClasses.includes("cases")&&(s.children[1].style.paddingLeft="1em"),e.envClasses.includes("cases")||e.envClasses.includes("subarray"))for(const e of s.children)e.classes.push("tml-left")}}let l=new T.MathNode("mtable",r);e.envClasses.length>0&&(e.envClasses.includes("jot")?l.classes.push("tml-jot"):e.envClasses.includes("small")&&l.classes.push("tml-small")),"display"===e.scriptLevel&&l.setAttribute("displaystyle","true"),(e.autoTag||e.envClasses.includes("multline"))&&(l.style.width="100%");let i="";if(e.cols&&e.cols.length>0){const t=e.cols;let r=!1,n=0,s=t.length;for(;"separator"===t[n].type;)n+=1;for(;"separator"===t[s-1].type;)s-=1;if("separator"===t[0].type){const e="separator"===t[1].type?"0.15em double":"|"===t[0].separator?"0.06em solid ":"0.06em dashed ";for(const t of l.children)t.children[0].style.borderLeft=e}let o=e.autoTag?0:-1;for(let e=n;e<s;e++)if("align"===t[e].type){const n=gt[t[e].align];i+=n,o+=1;for(const e of l.children)"center"!==n.trim()&&o<e.children.length&&(e.children[o].classes=["tml-"+n.trim()]);r=!0}else if("separator"===t[e].type){if(r){const r="separator"===t[e+1].type?"0.15em double":"|"===t[e].separator?"0.06em solid":"0.06em dashed";for(const e of l.children)o<e.children.length&&(e.children[o].style.borderRight=r)}r=!1}if("separator"===t[t.length-1].type){const e="separator"===t[t.length-2].type?"0.15em double":"|"===t[t.length-1].separator?"0.06em solid":"0.06em dashed";for(const t of l.children)t.children[t.children.length-1].style.borderRight=e,t.children[t.children.length-1].style.paddingRight="0.4em"}}return e.autoTag&&(i="left "+(i.length>0?i:"center ")+"right "),i&&l.setAttribute("columnalign",i.trim()),e.envClasses.includes("small")&&(l=new T.MathNode("mstyle",[l]),l.setAttribute("scriptlevel","1")),l},yt=function(t,r){-1===t.envName.indexOf("ed")&&it(t);const n="split"===t.envName,s=[],o=ut(t.parser,{cols:s,emptySingleRow:!0,autoTag:n?void 0:pt(t.envName),envClasses:["abut","jot"],maxNumCols:"split"===t.envName?2:void 0,leqno:t.parser.settings.leqno},"display");let a,l=0;const i=t.envName.indexOf("at")>-1;if(r[0]&&i){let t="";for(let e=0;e<r[0].body.length;e++){t+=Ie(r[0].body[e],"textord").text}if(isNaN(t))throw new e("The alignat enviroment requires a numeric first argument.");a=Number(t),l=2*a}o.body.forEach((function(t){if(i){const r=t.length/2;if(a<r)throw new e(`Too many math in a row: expected ${a}, but got ${r}`,t[0])}else l<t.length&&(l=t.length)}));for(let e=0;e<l;++e){let t="r";e%2==1&&(t="l"),s[e]={type:"align",align:t}}return"split"===t.envName||(i?o.envClasses.push("alignat"):o.envClasses[0]="align"),o};$e({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,r){const n=(Fe(r[0])?[r[0]]:Ie(r[0],"ordgroup").body).map((function(t){const r=Le(t).text;if(-1!=="lcr".indexOf(r))return{type:"align",align:r};if("|"===r)return{type:"separator",separator:"|"};if(":"===r)return{type:"separator",separator:":"};throw new e("Unknown column alignment: "+r,t)})),[s,o]=dt(t.parser.gullet.macros),a={cols:n,envClasses:["array"],maxNumCols:n.length,arraystretch:s,arraycolsep:o};return ut(t.parser,a,ht(t.envName))},mathmlBuilder:bt}),$e({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){const r={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")];let n="c";const s={envClasses:[],cols:[]};if("*"===t.envName.charAt(t.envName.length-1)){const r=t.parser;if(r.consumeSpaces(),"["===r.fetch().text){if(r.consume(),r.consumeSpaces(),n=r.fetch().text,-1==="lcr".indexOf(n))throw new e("Expected l or c or r",r.nextToken);r.consume(),r.consumeSpaces(),r.expect("]"),r.consume(),s.cols=[]}}const o=ut(t.parser,s,"text");o.cols=o.body.length>0?new Array(o.body[0].length).fill({type:"align",align:n}):[];const[a,l]=dt(t.parser.gullet.macros);return o.arraystretch=a,!l||6===l&&"pt"===l||(o.arraycolsep=l),r?{type:"leftright",mode:t.mode,body:[o],left:r[0],right:r[1],rightColor:void 0}:o},mathmlBuilder:bt}),$e({type:"array",names:["bordermatrix"],props:{numArgs:0},handler(e){const t=ut(e.parser,{cols:[],envClasses:["bordermatrix"]},"text");return t.cols=t.body.length>0?new Array(t.body[0].length).fill({type:"align",align:"c"}):[],t.envClasses=[],t.arraystretch=1,"matrix"===e.envName?t:((e,t)=>{const r=e.body;r[0].shift();const n=new Array(r.length-1).fill().map((()=>[]));for(let e=1;e<r.length;e++){n[e-1].push(r[e].shift());const t=[];for(let n=0;n<r[e].length;n++)t.push(r[e][n]);n[e-1].push(Re(t,"vphantom"))}const s=new Array(r.length).fill().map((()=>[]));for(let e=0;e<r[0].length;e++)s[0].push(r[0][e]);for(let e=1;e<r.length;e++)for(let t=0;t<r[0].length;t++)s[e].push(Re(r[e][t].body,"hphantom"));for(let e=0;e<r[0].length;e++)r[0][e]=Re(r[0][e].body,"hphantom");const o={type:"array",mode:"math",body:n,cols:[{type:"align",align:"c"}],rowGaps:new Array(n.length-1).fill(null),hLinesBeforeRow:new Array(n.length+1).fill().map((()=>[])),envClasses:[],scriptLevel:"text",arraystretch:1,labels:new Array(n.length).fill(""),arraycolsep:{number:.04,unit:"em"}},a={type:"styling",mode:"math",scriptLevel:"text",body:[{type:"array",mode:"math",body:s,cols:new Array(s.length).fill({type:"align",align:"c"}),rowGaps:new Array(s.length-1).fill(null),hLinesBeforeRow:new Array(s.length+1).fill().map((()=>[])),envClasses:[],scriptLevel:"text",arraystretch:1,labels:new Array(s.length).fill(""),arraycolsep:null}]},l={type:"leftright",mode:"math",body:[e],left:t?t[0]:"(",right:t?t[1]:")",rightColor:void 0};return Pe([o,{type:"supsub",mode:"math",base:{type:"op",mode:"math",limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!0,symbol:!1,stack:!0,suppressBaseShift:!0,body:[l]},sup:a,sub:null}])})(t,e.delimiters)},mathmlBuilder:bt}),$e({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){const t=ut(e.parser,{type:"small"},"script");return t.envClasses=["small"],t},mathmlBuilder:bt}),$e({type:"array",names:["subarray"],props:{numArgs:1},handler(t,r){const n=(Fe(r[0])?[r[0]]:Ie(r[0],"ordgroup").body).map((function(t){const r=Le(t).text;if(-1!=="lc".indexOf(r))return{type:"align",align:r};throw new e("Unknown column alignment: "+r,t)}));if(n.length>1)throw new e("{subarray} can contain only one column");let s={cols:n,envClasses:["small"]};if(s=ut(t.parser,s,"script"),s.body.length>0&&s.body[0].length>1)throw new e("{subarray} can contain only one column");return s},mathmlBuilder:bt}),$e({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){const t=ut(e.parser,{cols:[],envClasses:["cases"]},ht(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},mathmlBuilder:bt}),$e({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:yt,mathmlBuilder:bt}),$e({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:yt,mathmlBuilder:bt}),$e({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){"gathered"!==e.envName&&it(e);const t={cols:[],envClasses:["abut","jot"],autoTag:pt(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){it(e);const t={autoTag:pt(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,envClasses:["align"],leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["multline","multline*"],props:{numArgs:0},handler(e){it(e);const t={autoTag:"multline"===e.envName,maxNumCols:1,envClasses:["jot","multline"],leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["CD"],props:{numArgs:0},handler:t=>(it(t),function(t){const r=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){r.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();const n=t.fetch().text;if("&"!==n&&"\\\\"!==n){if("\\end"===n){0===r[r.length-1].length&&r.pop();break}throw new e("Expected \\\\ or \\cr or \\end",t.nextToken)}t.consume()}let n=[];const s=[n];for(let l=0;l<r.length;l++){const i=r[l];let c={type:"styling",body:[],mode:"math",scriptLevel:"display"};for(let r=0;r<i.length;r++)if(Ge(i[r])){n.push(c),r+=1;const s=Le(i[r]).text,l=new Array(2);if(l[0]={type:"ordgroup",mode:"math",body:[]},l[1]={type:"ordgroup",mode:"math",body:[]},"=|.".indexOf(s)>-1);else{if(!("<>AV".indexOf(s)>-1))throw new e('Expected one of "<>AV=|." after @.');for(let t=0;t<2;t++){let n=!0;for(let c=r+1;c<i.length;c++){if(a=s,("mathord"===(o=i[c]).type||"atom"===o.type)&&o.text===a){n=!1,r=c;break}if(Ge(i[c]))throw new e("Missing a "+s+" character to complete a CD arrow.",i[c]);l[t].body.push(i[c])}if(n)throw new e("Missing a "+s+" character to complete a CD arrow.",i[r])}}const d=je(s,l,t);n.push(d),c={type:"styling",body:[],mode:"math",scriptLevel:"display"}}else c.body.push(i[r]);l%2==0?n.push(c):n.shift(),n=[],s.push(n)}var o,a;return s.pop(),t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:"math",body:s,tags:null,labels:new Array(s.length+1).fill(""),envClasses:["jot","cd"],cols:[],hLinesBeforeRow:new Array(s.length+1).fill([])}}(t.parser)),mathmlBuilder:bt}),c({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,r){throw new e(`${t.funcName} valid only within array environment`)}});const wt=Ee;c({type:"bordermatrix",names:["\\bordermatrix","\\matrix"],props:{numArgs:0,numOptionalArgs:1},handler:({parser:e,funcName:t},r,n)=>{let s=["(",")"];if("\\bordermatrix"===t&&n[0]&&n[0].body){const e=n[0].body;2===e.length&&"atom"===e[0].type&&"atom"===e[1].type&&"open"===e[0].family&&"close"===e[1].family&&(s=[e[0].text,e[1].text])}e.consumeSpaces(),e.consume();const o=wt.bordermatrix,a={mode:e.mode,envName:t.slice(1),delimiters:s,parser:e},l=o.handler(a);return e.expect("}",!0),l}}),c({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler({parser:t,token:r},n){const s=Ie(n[0],"ordgroup").body;let o="";for(let e=0;e<s.length;e++){o+=Ie(s[e],"textord").text}const a=parseInt(o);if(isNaN(a))throw new e(`\\@char has non-numeric argument ${o}`,r);return{type:"textord",mode:t.mode,text:String.fromCodePoint(a)}}});const xt=/^(#[a-f0-9]{3}|#?[a-f0-9]{6})$/i,kt=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i,vt=/^ *\d{1,3} *(?:, *\d{1,3} *){2}$/,At=/^ *[10](?:\.\d*)? *(?:, *[10](?:\.\d*)? *){2}$/,Nt=/^[a-f0-9]{6}$/i,Tt=e=>{let t=e.toString(16);return 1===t.length&&(t="0"+t),t},St=JSON.parse('{\n  "Apricot": "#ffb484",\n  "Aquamarine": "#08b4bc",\n  "Bittersweet": "#c84c14",\n  "blue": "#0000FF",\n  "Blue": "#303494",\n  "BlueGreen": "#08b4bc",\n  "BlueViolet": "#503c94",\n  "BrickRed": "#b8341c",\n  "brown": "#BF8040",\n  "Brown": "#802404",\n  "BurntOrange": "#f8941c",\n  "CadetBlue": "#78749c",\n  "CarnationPink": "#f884b4",\n  "Cerulean": "#08a4e4",\n  "CornflowerBlue": "#40ace4",\n  "cyan": "#00FFFF",\n  "Cyan": "#08acec",\n  "Dandelion": "#ffbc44",\n  "darkgray": "#404040",\n  "DarkOrchid": "#a8548c",\n  "Emerald": "#08ac9c",\n  "ForestGreen": "#089c54",\n  "Fuchsia": "#90348c",\n  "Goldenrod": "#ffdc44",\n  "gray": "#808080",\n  "Gray": "#98949c",\n  "green": "#00FF00",\n  "Green": "#08a44c",\n  "GreenYellow": "#e0e474",\n  "JungleGreen": "#08ac9c",\n  "Lavender": "#f89cc4",\n  "lightgray": "#c0c0c0",\n  "lime": "#BFFF00",\n  "LimeGreen": "#90c43c",\n  "magenta": "#FF00FF",\n  "Magenta": "#f0048c",\n  "Mahogany": "#b0341c",\n  "Maroon": "#b03434",\n  "Melon": "#f89c7c",\n  "MidnightBlue": "#086494",\n  "Mulberry": "#b03c94",\n  "NavyBlue": "#086cbc",\n  "olive": "#7F7F00",\n  "OliveGreen": "#407c34",\n  "orange": "#FF8000",\n  "Orange": "#f8843c",\n  "OrangeRed": "#f0145c",\n  "Orchid": "#b074ac",\n  "Peach": "#f8945c",\n  "Periwinkle": "#8074bc",\n  "PineGreen": "#088c74",\n  "pink": "#ff7f7f",\n  "Plum": "#98248c",\n  "ProcessBlue": "#08b4ec",\n  "purple": "#BF0040",\n  "Purple": "#a0449c",\n  "RawSienna": "#983c04",\n  "red": "#ff0000",\n  "Red": "#f01c24",\n  "RedOrange": "#f86434",\n  "RedViolet": "#a0246c",\n  "Rhodamine": "#f0549c",\n  "Royallue": "#0874bc",\n  "RoyalPurple": "#683c9c",\n  "RubineRed": "#f0047c",\n  "Salmon": "#f8948c",\n  "SeaGreen": "#30bc9c",\n  "Sepia": "#701404",\n  "SkyBlue": "#48c4dc",\n  "SpringGreen": "#c8dc64",\n  "Tan": "#e09c74",\n  "teal": "#007F7F",\n  "TealBlue": "#08acb4",\n  "Thistle": "#d884b4",\n  "Turquoise": "#08b4cc",\n  "violet": "#800080",\n  "Violet": "#60449c",\n  "VioletRed": "#f054a4",\n  "WildStrawberry": "#f0246c",\n  "yellow": "#FFFF00",\n  "Yellow": "#fff404",\n  "YellowGreen": "#98cc6c",\n  "YellowOrange": "#ffa41c"\n}'),qt=(t,r)=>{let n="";if("HTML"===t){if(!xt.test(r))throw new e("Invalid HTML input.");n=r}else if("RGB"===t){if(!vt.test(r))throw new e("Invalid RGB input.");r.split(",").map((e=>{n+=Tt(Number(e.trim()))}))}else{if(!At.test(r))throw new e("Invalid rbg input.");r.split(",").map((t=>{const r=Number(t.trim());if(r>1)throw new e("Color rgb input must be < 1.");n+=Tt(Number((255*r).toFixed(0)))}))}return"#"!==n.charAt(0)&&(n="#"+n),n},Ot=(t,r,n)=>{const s=`\\\\color@${t}`;if(!kt.exec(t))throw new e("Invalid color: '"+t+"'",n);return Nt.test(t)?"#"+t:("#"===t.charAt(0)||(r.has(s)?t=r.get(s).tokens[0].text:St[t]&&(t=St[t])),t)},Mt=(e,t)=>{let r=ie(e.body,t.withColor(e.color));return 0===r.length&&r.push(new T.MathNode("mrow")),r=r.map((t=>(t.style.color=e.color,t))),T.newDocumentFragment(r)};c({type:"color",names:["\\textcolor"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","original"]},handler({parser:e,token:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o="";if(s){const e=Ie(r[0],"raw").string;o=qt(s,e)}else o=Ot(Ie(r[0],"raw").string,e.gullet.macros,t);const a=r[1];return{type:"color",mode:e.mode,color:o,isTextColor:!0,body:p(a)}},mathmlBuilder:Mt}),c({type:"color",names:["\\color"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw"]},handler({parser:e,breakOnTokenText:t,token:r},n,s){const o=s[0]&&Ie(s[0],"raw").string;let a="";if(o){const e=Ie(n[0],"raw").string;a=qt(o,e)}else a=Ot(Ie(n[0],"raw").string,e.gullet.macros,r);const l=e.parseExpression(!0,t,!0);return{type:"color",mode:e.mode,color:a,isTextColor:!1,body:l}},mathmlBuilder:Mt}),c({type:"color",names:["\\definecolor"],props:{numArgs:3,allowedInText:!0,argTypes:["raw","raw","raw"]},handler({parser:t,funcName:r,token:n},s){const o=Ie(s[0],"raw").string;if(!/^[A-Za-z]+$/.test(o))throw new e("Color name must be latin letters.",n);const a=Ie(s[1],"raw").string;if(!["HTML","RGB","rgb"].includes(a))throw new e("Color model must be HTML, RGB, or rgb.",n);const l=Ie(s[2],"raw").string,i=qt(a,l);return t.gullet.macros.set(`\\\\color@${o}`,{tokens:[{text:i}],numArgs:0}),{type:"internal",mode:t.mode}}}),c({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler({parser:e},t,r){const n="["===e.gullet.future().text?e.parseSizeGroup(!0):null,s=!e.settings.displayMode;return{type:"cr",mode:e.mode,newLine:s,size:n&&Ie(n,"size").value}},mathmlBuilder(e,t){const r=new T.MathNode("mo");if(e.newLine&&(r.setAttribute("linebreak","newline"),e.size)){const n=qe(e.size,t);r.setAttribute("height",n.number+n.unit)}return r}});const Bt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Ct=t=>{const r=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(r))throw new e("Expected a control sequence",t);return r},zt=(e,t,r,n)=>{let s=e.gullet.macros.get(r.text);null==s&&(r.noexpand=!0,s={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,s,n)};c({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler({parser:t,funcName:r}){t.consumeSpaces();const n=t.fetch();if(Bt[n.text])return"\\global"!==r&&"\\\\globallong"!==r||(n.text=Bt[n.text]),Ie(t.parseFunction(),"internal");throw new e("Invalid token after macro prefix",n)}}),c({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:t,funcName:r}){let n=t.gullet.popToken();const s=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new e("Expected a control sequence",n);let o,a=0;const l=[[]];for(;"{"!==t.gullet.future().text;)if(n=t.gullet.popToken(),"#"===n.text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[a].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new e(`Invalid argument number "${n.text}"`);if(parseInt(n.text)!==a+1)throw new e(`Argument number "${n.text}" out of order`);a++,l.push([])}else{if("EOF"===n.text)throw new e("Expected a macro definition");l[a].push(n.text)}let{tokens:i}=t.gullet.consumeArg();if(o&&i.unshift(o),"\\edef"===r||"\\xdef"===r){if(i=t.gullet.expandTokens(i),i.length>t.gullet.settings.maxExpand)throw new e("Too many expansions in an "+r);i.reverse()}return t.gullet.macros.set(s,{tokens:i,numArgs:a,delimiters:l},r===Bt[r]),{type:"internal",mode:t.mode}}}),c({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:e,funcName:t}){const r=Ct(e.gullet.popToken());e.gullet.consumeSpaces();const n=(e=>{let t=e.gullet.popToken();return"="===t.text&&(t=e.gullet.popToken()," "===t.text&&(t=e.gullet.popToken())),t})(e);return zt(e,r,n,"\\\\globallet"===t),{type:"internal",mode:e.mode}}}),c({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:e,funcName:t}){const r=Ct(e.gullet.popToken()),n=e.gullet.popToken(),s=e.gullet.popToken();return zt(e,r,s,"\\\\globalfuture"===t),e.gullet.pushToken(s),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}}),c({type:"internal",names:["\\newcommand","\\renewcommand","\\providecommand"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:t,funcName:r}){let n="";const s=t.gullet.popToken();"{"===s.text?(n=Ct(t.gullet.popToken()),t.gullet.popToken()):n=Ct(s);const o=t.gullet.isDefined(n);if(o&&"\\newcommand"===r)throw new e(`\\newcommand{${n}} attempting to redefine ${n}; use \\renewcommand`);if(!o&&"\\renewcommand"===r)throw new e(`\\renewcommand{${n}} when command ${n} does not yet exist; use \\newcommand`);let a=0;if("["===t.gullet.future().text){let r=t.gullet.popToken();if(r=t.gullet.popToken(),!/^[0-9]$/.test(r.text))throw new e(`Invalid number of arguments: "${r.text}"`);if(a=parseInt(r.text),r=t.gullet.popToken(),"]"!==r.text)throw new e(`Invalid argument "${r.text}"`)}const{tokens:l}=t.gullet.consumeArg();return"\\providecommand"===r&&t.gullet.macros.has(n)||t.gullet.macros.set(n,{tokens:l,numArgs:a}),{type:"internal",mode:t.mode}}});const Et={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},$t=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","⦇","\\llparenthesis","⦈","\\rrparenthesis","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lAngle","⟪","\\rAngle","⟫","\\llangle","⦉","\\rrangle","⦊","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","\\llbracket","\\rrbracket","⟦","⟦","\\lBrace","\\rBrace","⦃","⦄","/","\\backslash","|","\\vert","\\|","\\Vert","‖","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."],It=["}","\\left","\\middle","\\right"],Lt=e=>e.length>0&&($t.includes(e)||Et[e]||It.includes(e)),Ft=[0,1.2,1.8,2.4,3];function Dt(t,r){const n=Fe(t);if(n&&$t.includes(n.text))return["<","\\lt"].includes(n.text)&&(n.text="⟨"),[">","\\gt"].includes(n.text)&&(n.text="⟩"),n;throw new e(n?`Invalid delimiter '${n.text}' after '${r.funcName}'`:`Invalid delimiter type '${t.type}'`,t)}const Gt=["/","\\","\\backslash","\\vert","|"];c({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{const r=Dt(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Et[e.funcName].size,mclass:Et[e.funcName].mclass,delim:r.text}},mathmlBuilder:e=>{const t=[];"."===e.delim&&(e.delim=""),t.push(te(e.delim,e.mode));const r=new T.MathNode("mo",t);return"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),(Gt.includes(e.delim)||e.delim.indexOf("arrow")>-1)&&r.setAttribute("stretchy","true"),r.setAttribute("symmetric","true"),r.setAttribute("minsize",Ft[e.size]+"em"),r.setAttribute("maxsize",Ft[e.size]+"em"),r}}),c({type:"leftright-right",names:["\\right"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>({type:"leftright-right",mode:e.parser.mode,delim:Dt(t[0],e).text})}),c({type:"leftright",names:["\\left"],props:{numArgs:1,argTypes:["primitive"]},handler:(t,r)=>{const n=Dt(r[0],t),s=t.parser;++s.leftrightDepth;let o=s.parseExpression(!1,null,!0),a=s.fetch();for(;"\\middle"===a.text;){s.consume();const t=s.fetch().text;if(!$.math[t])throw new e(`Invalid delimiter '${t}' after '\\middle'`);Dt({type:"atom",mode:"math",text:t},{funcName:"\\middle"}),o.push({type:"middle",mode:"math",delim:t}),s.consume(),o=o.concat(s.parseExpression(!1,null,!0)),a=s.fetch()}--s.leftrightDepth,s.expect("\\right",!1);const l=Ie(s.parseFunction(),"leftright-right");return{type:"leftright",mode:s.mode,body:o,left:n.text,right:l.delim}},mathmlBuilder:(e,t)=>{!function(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}(e);const r=ie(e.body,t);"."===e.left&&(e.left="");const n=new T.MathNode("mo",[te(e.left,e.mode)]);n.setAttribute("fence","true"),n.setAttribute("form","prefix"),("/"===e.left||"\\"===e.left||e.left.indexOf("arrow")>-1)&&n.setAttribute("stretchy","true"),r.unshift(n),"."===e.right&&(e.right="");const s=new T.MathNode("mo",[te(e.right,e.mode)]);if(s.setAttribute("fence","true"),s.setAttribute("form","postfix"),("∖"===e.right||e.right.indexOf("arrow")>-1)&&s.setAttribute("stretchy","true"),e.body.length>0){const t=e.body[e.body.length-1];"color"!==t.type||t.isTextColor||s.setAttribute("mathcolor",t.color)}return r.push(s),se(r)}}),c({type:"middle",names:["\\middle"],props:{numArgs:1,argTypes:["primitive"]},handler:(t,r)=>{const n=Dt(r[0],t);if(!t.parser.leftrightDepth)throw new e("\\middle without preceding \\left",n);return{type:"middle",mode:t.parser.mode,delim:n.text}},mathmlBuilder:(e,t)=>{const r=te(e.delim,e.mode),n=new T.MathNode("mo",[r]);return n.setAttribute("fence","true"),e.delim.indexOf("arrow")>-1&&n.setAttribute("stretchy","true"),n.setAttribute("form","prefix"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});const jt=e=>{const t=new T.MathNode("mspace");return t.setAttribute("width","3pt"),t},Pt=(e,t)=>{let r;switch(r=e.label.indexOf("colorbox")>-1||"\\boxed"===e.label?new T.MathNode("mrow",[jt(),de(e.body,t),jt()]):new T.MathNode("menclose",[de(e.body,t)]),e.label){case"\\overline":r.setAttribute("notation","top"),r.classes.push("tml-overline");break;case"\\underline":r.setAttribute("notation","bottom"),r.classes.push("tml-underline");break;case"\\cancel":r.setAttribute("notation","updiagonalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","upstrike"]));break;case"\\bcancel":r.setAttribute("notation","downdiagonalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","downstrike"]));break;case"\\sout":r.setAttribute("notation","horizontalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","sout"]));break;case"\\xcancel":r.setAttribute("notation","updiagonalstrike downdiagonalstrike"),r.classes.push("tml-xcancel");break;case"\\longdiv":r.setAttribute("notation","longdiv"),r.classes.push("longdiv-top"),r.children.push(new T.MathNode("mrow",[],["longdiv-arc"]));break;case"\\phase":r.setAttribute("notation","phasorangle"),r.classes.push("phasor-bottom"),r.children.push(new T.MathNode("mrow",[],["phasor-angle"]));break;case"\\textcircled":r.setAttribute("notation","circle"),r.classes.push("circle-pad"),r.children.push(new T.MathNode("mrow",[],["textcircle"]));break;case"\\angl":r.setAttribute("notation","actuarial"),r.classes.push("actuarial");break;case"\\boxed":r.setAttribute("notation","box"),r.classes.push("tml-box"),r.setAttribute("scriptlevel","0"),r.setAttribute("displaystyle","true");break;case"\\fbox":r.setAttribute("notation","box"),r.classes.push("tml-fbox");break;case"\\fcolorbox":case"\\colorbox":{const t={padding:"3pt 0 3pt 0"};"\\fcolorbox"===e.label&&(t.border="0.0667em solid "+String(e.borderColor)),r.style=t;break}}return e.backgroundColor&&r.setAttribute("mathbackground",e.backgroundColor),r};c({type:"enclose",names:["\\colorbox"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","text"]},handler({parser:e,funcName:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o="";if(s){const e=Ie(r[0],"raw").string;o=qt(s,e)}else o=Ot(Ie(r[0],"raw").string,e.gullet.macros);const a=r[1];return{type:"enclose",mode:e.mode,label:t,backgroundColor:o,body:a}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","raw","text"]},handler({parser:e,funcName:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o,a="";if(s){const e=Ie(r[0],"raw").string,t=Ie(r[0],"raw").string;a=qt(s,e),o=qt(s,t)}else a=Ot(Ie(r[0],"raw").string,e.gullet.macros),o=Ot(Ie(r[1],"raw").string,e.gullet.macros);const l=r[2];return{type:"enclose",mode:e.mode,label:t,backgroundColor:o,borderColor:a,body:l}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:({parser:e},t)=>({type:"enclose",mode:e.mode,label:"\\fbox",body:t[0]})}),c({type:"enclose",names:["\\angl","\\cancel","\\bcancel","\\xcancel","\\sout","\\overline","\\boxed","\\longdiv","\\phase"],props:{numArgs:1},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\textcircled"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler({parser:t,funcName:r},n){const s=n[0];if("ordgroup"!==s.type)throw new e("Invalid environment name",s);let o="";for(let e=0;e<s.body.length;++e)o+=Ie(s.body[e],"textord").text;if("\\begin"===r){if(!Object.prototype.hasOwnProperty.call(wt,o))throw new e("No such environment: "+o,s);const r=wt[o],{args:n,optArgs:a}=t.parseArguments("\\begin{"+o+"}",r),l={mode:t.mode,envName:o,parser:t},i=r.handler(l,n,a);t.expect("\\end",!1);const c=t.nextToken,d=Ie(t.parseFunction(),"environment");if(d.name!==o)throw new e(`Mismatch: \\begin{${o}} matched by \\end{${d.name}}`,c);return i}return{type:"environment",mode:t.mode,name:o,nameGroup:s}}}),c({type:"envTag",names:["\\env@tag"],props:{numArgs:1,argTypes:["math"]},handler:({parser:e},t)=>({type:"envTag",mode:e.mode,body:t[0]}),mathmlBuilder:(e,t)=>new T.MathNode("mrow")}),c({type:"noTag",names:["\\env@notag"],props:{numArgs:0},handler:({parser:e})=>({type:"noTag",mode:e.mode}),mathmlBuilder:(e,t)=>new T.MathNode("mrow")});const Rt=(e,t)=>{const r=e.font,n=t.withFont(r),s=de(e.body,n);if(0===s.children.length)return s;if("boldsymbol"===r&&["mo","mpadded","mrow"].includes(s.type))return s.style.fontWeight="bold",s;if(((e,t)=>{if("mathrm"!==t||"ordgroup"!==e.body.type||1===e.body.body.length)return!1;if("mathord"!==e.body.body[0].type)return!1;for(let t=1;t<e.body.body.length;t++){const r=e.body.body[t].type;if("mathord"!==r&&("textord"!==r||isNaN(e.body.body[t].text)))return!1}return!0})(e,r)){const e=s.children[0].children[0].children?s.children[0].children[0]:s.children[0];delete e.attributes.mathvariant;for(let t=1;t<s.children.length;t++)e.children[0].text+=s.children[t].children[0].children?s.children[t].children[0].children[0].text:s.children[t].children[0].text;const t=new T.MathNode("mpadded",[e]);return t.setAttribute("lspace","0"),t}let o="mo"===s.children[0].type;for(let e=1;e<s.children.length;e++){"mo"===s.children[e].type&&"boldsymbol"===r&&(s.children[e].style.fontWeight="bold"),"mi"!==s.children[e].type&&(o=!1);"normal"!==(s.children[e].attributes&&s.children[e].attributes.mathvariant||"")&&(o=!1)}if(!o)return s;const a=s.children[0];for(let e=1;e<s.children.length;e++)a.children.push(s.children[e].children[0]);if(a.attributes.mathvariant&&"normal"===a.attributes.mathvariant){const e=new T.MathNode("mtext",new T.TextNode("​"));return new T.MathNode("mrow",[e,a])}return a},Ut={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};c({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\up@greek","\\boldsymbol","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathsfit","\\mathtt","\\Bbb","\\bm","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=m(r[0]);let s=t;return s in Ut&&(s=Ut[s]),{type:"font",mode:e.mode,font:s.slice(1),body:n}},mathmlBuilder:Rt}),c({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:({parser:e,funcName:t,breakOnTokenText:r},n)=>{const{mode:s}=e,o=e.parseExpression(!0,r,!0);return{type:"font",mode:s,font:`math${t.slice(1)}`,body:{type:"ordgroup",mode:e.mode,body:o}}},mathmlBuilder:Rt});const Ht=["display","text","script","scriptscript"],Vt={auto:-1,display:0,text:0,script:1,scriptscript:2},_t=(e,t)=>{const r="auto"===e.scriptLevel?t.incrementLevel():"display"===e.scriptLevel?t.withLevel(_e):"text"===e.scriptLevel?t.withLevel(We):t.withLevel(Xe),n=de(e.numer,r),s=de(e.denom,r);3===t.level&&(n.style.mathDepth="2",n.setAttribute("scriptlevel","2"),s.style.mathDepth="2",s.setAttribute("scriptlevel","2"));let o=new T.MathNode("mfrac",[n,s]);if(e.hasBarLine){if(e.barSize){const r=qe(e.barSize,t);o.setAttribute("linethickness",r.number+r.unit)}}else o.setAttribute("linethickness","0px");if(null!=e.leftDelim||null!=e.rightDelim){const t=[];if(null!=e.leftDelim){const r=new T.MathNode("mo",[new T.TextNode(e.leftDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}if(t.push(o),null!=e.rightDelim){const r=new T.MathNode("mo",[new T.TextNode(e.rightDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}o=se(t)}return"auto"!==e.scriptLevel&&(o=new T.MathNode("mstyle",[o]),o.setAttribute("displaystyle",String("display"===e.scriptLevel)),o.setAttribute("scriptlevel",Vt[e.scriptLevel])),o};c({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=r[1];let o=!1,a=null,l=null,i="auto";switch(t){case"\\dfrac":case"\\frac":case"\\tfrac":o=!0;break;case"\\\\atopfrac":o=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":a="(",l=")";break;case"\\\\bracefrac":a="\\{",l="\\}";break;case"\\\\brackfrac":a="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(t){case"\\dfrac":case"\\dbinom":i="display";break;case"\\tfrac":case"\\tbinom":i="text"}return{type:"genfrac",mode:e.mode,continued:!1,numer:n,denom:s,hasBarLine:o,leftDelim:a,rightDelim:l,scriptLevel:i,barSize:null}},mathmlBuilder:_t}),c({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=r[1];return{type:"genfrac",mode:e.mode,continued:!0,numer:n,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,scriptLevel:"display",barSize:null}}}),c({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler({parser:e,funcName:t,token:r}){let n;switch(t){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:r}}});const Wt=function(e){let t=null;return e.length>0&&(t=e,t="."===t?null:t),t};c({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler({parser:e},t){const r=t[4],n=t[5],s=m(t[0]),o="atom"===s.type&&"open"===s.family?Wt(s.text):null,a=m(t[1]),l="atom"===a.type&&"close"===a.family?Wt(a.text):null,i=Ie(t[2],"size");let c,d=null;i.isBlank?c=!0:(d=i.value,c=d.number>0);let p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){const e=Ie(u.body[0],"textord");p=Ht[Number(e.text)]}}else u=Ie(u,"textord"),p=Ht[Number(u.text)];return{type:"genfrac",mode:e.mode,numer:r,denom:n,continued:!1,hasBarLine:c,barSize:d,leftDelim:o,rightDelim:l,scriptLevel:p}},mathmlBuilder:_t}),c({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:({parser:e,funcName:t,token:r},n)=>({type:"infix",mode:e.mode,replaceWith:"\\\\abovefrac",barSize:Ie(n[0],"size").value,token:r})}),c({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ie(r[1],"infix").barSize),o=r[2],a=s.number>0;return{type:"genfrac",mode:e.mode,numer:n,denom:o,continued:!1,hasBarLine:a,barSize:s,leftDelim:null,rightDelim:null,scriptLevel:"auto"}},mathmlBuilder:_t}),c({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["hbox"],allowedInArgument:!0,allowedInText:!1},handler:({parser:e},t)=>({type:"hbox",mode:e.mode,body:p(t[0])}),mathmlBuilder(e,t){const r=t.withLevel(_e),n=ce(e.body,r);return ne(n)}});c({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>({type:"horizBrace",mode:e.mode,label:t,isOver:/^\\over/.test(t),base:r[0]}),mathmlBuilder:(e,t)=>{const r=B(e.label);return r.style["math-depth"]=0,new T.MathNode(e.isOver?"mover":"munder",[de(e.base,t),r])}}),c({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:({parser:t,token:r},n)=>{const s=n[1],o=Ie(n[0],"url").url;if(!t.settings.isTrusted({command:"\\href",url:o}))throw new e('Function "\\href" is not trusted',r);return{type:"href",mode:t.mode,href:o,body:p(s)}},mathmlBuilder:(e,t)=>{const r=new v("math",[ce(e.body,t)]);return new x(e.href,[],[r])}}),c({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:({parser:t,token:r},n)=>{const s=Ie(n[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:s}))throw new e('Function "\\url" is not trusted',r);const o=[];for(let e=0;e<s.length;e++){let t=s[e];"~"===t&&(t="\\textasciitilde"),o.push({type:"textord",mode:"text",text:t})}const a={type:"text",mode:t.mode,font:"\\texttt",body:o};return{type:"href",mode:t.mode,href:s,body:p(a)}}}),c({type:"html",names:["\\class","\\id","\\style","\\data"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:({parser:t,funcName:r,token:n},s)=>{const o=Ie(s[0],"raw").string,a=s[1];if(t.settings.strict)throw new e(`Function "${r}" is disabled in strict mode`,n);let l;const i={};switch(r){case"\\class":i.class=o,l={command:"\\class",class:o};break;case"\\id":i.id=o,l={command:"\\id",id:o};break;case"\\style":i.style=o,l={command:"\\style",style:o};break;case"\\data":{const t=o.split(",");for(let r=0;r<t.length;r++){const n=t[r].split("=");if(2!==n.length)throw new e("Error parsing key-value for \\data");i["data-"+n[0].trim()]=n[1].trim()}l={command:"\\data",attributes:i};break}default:throw new Error("Unrecognized html command")}if(!t.settings.isTrusted(l))throw new e(`Function "${r}" is not trusted`,n);return{type:"html",mode:t.mode,attributes:i,body:p(a)}},mathmlBuilder:(e,t)=>{const r=ce(e.body,t),n=[];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/)),r.classes=n;for(const t in e.attributes)"class"!==t&&Object.prototype.hasOwnProperty.call(e.attributes,t)&&r.setAttribute(t,e.attributes[t]);return r}});const Xt=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};{const r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new e("Invalid size: '"+t+"' in \\includegraphics");const n={number:+(r[1]+r[2]),unit:r[3]};if(!Te(n))throw new e("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n}};c({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:({parser:t,token:r},n,s)=>{let o={number:0,unit:"em"},a={number:.9,unit:"em"},l={number:0,unit:"em"},i="";if(s[0]){const t=Ie(s[0],"raw").string.split(",");for(let r=0;r<t.length;r++){const n=t[r].split("=");if(2===n.length){const t=n[1].trim();switch(n[0].trim()){case"alt":i=t;break;case"width":o=Xt(t);break;case"height":a=Xt(t);break;case"totalheight":l=Xt(t);break;default:throw new e("Invalid key: '"+n[0]+"' in \\includegraphics.")}}}}const c=Ie(n[0],"url").url;if(""===i&&(i=c,i=i.replace(/^.*[\\/]/,""),i=i.substring(0,i.lastIndexOf("."))),!t.settings.isTrusted({command:"\\includegraphics",url:c}))throw new e('Function "\\includegraphics" is not trusted',r);return{type:"includegraphics",mode:t.mode,alt:i,width:o,height:a,totalheight:l,src:c}},mathmlBuilder:(e,t)=>{const r=qe(e.height,t),n={number:0,unit:"em"};e.totalheight.number>0&&e.totalheight.unit===r.unit&&e.totalheight.number>r.number&&(n.number=e.totalheight.number-r.number,n.unit=r.unit);let s=0;e.width.number>0&&(s=qe(e.width,t));const o={height:r.number+n.number+"em"};s.number>0&&(o.width=s.number+s.unit),n.number>0&&(o.verticalAlign=-n.number+n.unit);const a=new k(e.src,e.alt,o);return a.height=r,a.depth=n,new T.MathNode("mtext",[a])}}),c({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler({parser:t,funcName:r,token:n},s){const o=Ie(s[0],"size");if(t.settings.strict){const s="m"===r[1],a="mu"===o.value.unit;if(s){if(!a)throw new e(`LaTeX's ${r} supports only mu units, not ${o.value.unit} units`,n);if("math"!==t.mode)throw new e(`LaTeX's ${r} works only in math mode`,n)}else if(a)throw new e(`LaTeX's ${r} doesn't support mu units`,n)}return{type:"kern",mode:t.mode,dimension:o.value}},mathmlBuilder(e,t){const r=qe(e.dimension,t),n="em"===r.unit?Zt(r.number):"";if("text"===e.mode&&n.length>0){const e=new T.TextNode(n);return new T.MathNode("mtext",[e])}{const e=new T.MathNode("mspace");return e.setAttribute("width",r.number+r.unit),r.number<0&&(e.style.marginLeft=r.number+r.unit),e}}});const Zt=function(e){return e>=.05555&&e<=.05556?" ":e>=.1666&&e<=.1667?" ":e>=.2222&&e<=.2223?" ":e>=.2777&&e<=.2778?"  ":""},Yt=/[^A-Za-z_0-9-]/g;c({type:"label",names:["\\label"],props:{numArgs:1,argTypes:["raw"]},handler:({parser:e},t)=>({type:"label",mode:e.mode,string:t[0].string.replace(Yt,"")}),mathmlBuilder(e,t){const r=new T.MathNode("mrow",[],["tml-label"]);return e.string.length>0&&r.setLabel(e.string),r}});const Jt=["\\clap","\\llap","\\rlap"];c({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap","\\clap","\\llap","\\rlap"],props:{numArgs:1,allowedInText:!0},handler:({parser:t,funcName:r,token:n},s)=>{if(Jt.includes(r)){if(t.settings.strict&&"text"!==t.mode)throw new e(`{${r}} can be used only in text mode.\n Try \\math${r.slice(1)}`,n);r=r.slice(1)}else r=r.slice(5);const o=s[0];return{type:"lap",mode:t.mode,alignment:r,body:o}},mathmlBuilder:(e,t)=>{let r;if("llap"===e.alignment){const n=ie(p(e.body),t),s=new T.MathNode("mphantom",n);r=new T.MathNode("mpadded",[s]),r.setAttribute("width","0px")}const n=de(e.body,t);let s;if("llap"===e.alignment?(n.style.position="absolute",n.style.right="0",n.style.bottom="0",s=new T.MathNode("mpadded",[r,n])):s=new T.MathNode("mpadded",[n]),"rlap"===e.alignment)e.body.body.length>0&&"genfrac"===e.body.body[0].type&&s.setAttribute("lspace","0.16667em");else{const t="llap"===e.alignment?"-1":"-0.5";s.setAttribute("lspace",t+"width"),"llap"===e.alignment?s.style.position="relative":(s.style.display="flex",s.style.justifyContent="center")}return s.setAttribute("width","0px"),s}}),c({type:"ordgroup",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler({funcName:e,parser:t},r){const n=t.mode;t.switchMode("math");const s="\\("===e?"\\)":"$",o=t.parseExpression(!1,s);return t.expect(s),t.switchMode(n),{type:"ordgroup",mode:t.mode,body:o}}}),c({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,r){throw new e(`Mismatched ${t.funcName}`,r)}});c({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:({parser:e},t)=>({type:"mathchoice",mode:e.mode,display:p(t[0]),text:p(t[1]),script:p(t[2]),scriptscript:p(t[3])}),mathmlBuilder:(e,t)=>{const r=((e,t)=>{switch(t.level){case Ve:return e.display;case _e:return e.text;case We:return e.script;case Xe:return e.scriptscript;default:return e.text}})(e,t);return ce(r,t)}});const Kt=["text","textord","mathord","atom"];function Qt(e,t){let r;const n=ie(e.body,t);if("minner"===e.mclass)r=new T.MathNode("mpadded",n);else if("mord"===e.mclass)e.isCharacterBox||"mathord"===n[0].type?(r=n[0],r.type="mi",1===r.children.length&&r.children[0].text&&"∇"===r.children[0].text&&r.setAttribute("mathvariant","normal")):r=new T.MathNode("mi",n);else{r=new T.MathNode("mrow",n),e.mustPromote?(r=n[0],r.type="mo",e.isCharacterBox&&e.body[0].text&&/[A-Za-z]/.test(e.body[0].text)&&r.setAttribute("mathvariant","italic")):r=new T.MathNode("mrow",n);const s=t.level<2;"mrow"===r.type?s&&("mbin"===e.mclass?(r.children.unshift(Oe(.2222)),r.children.push(Oe(.2222))):"mrel"===e.mclass?(r.children.unshift(Oe(.2778)),r.children.push(Oe(.2778))):"mpunct"===e.mclass?r.children.push(Oe(.1667)):"minner"===e.mclass&&(r.children.unshift(Oe(.0556)),r.children.push(Oe(.0556)))):"mbin"===e.mclass?(r.attributes.lspace=s?"0.2222em":"0",r.attributes.rspace=s?"0.2222em":"0"):"mrel"===e.mclass?(r.attributes.lspace=s?"0.2778em":"0",r.attributes.rspace=s?"0.2778em":"0"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace=s?"0.1667em":"0"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&s&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em"),"mopen"!==e.mclass&&"mclose"!==e.mclass&&(delete r.attributes.stretchy,delete r.attributes.form)}return r}c({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler({parser:e,funcName:t},r){const n=r[0],s=o.isCharacterBox(n);let a=!0;const l={type:"mathord",text:"",mode:e.mode},i=n.body?n.body:[n];for(const t of i){if(!Kt.includes(t.type)){a=!1;break}$[e.mode][t.text]?l.text+=$[e.mode][t.text].replace:t.text?l.text+=t.text:t.body&&t.body.map((e=>{l.text+=e.text}))}return a&&"\\mathord"===t&&"mathord"===l.type&&l.text.length>1?l:{type:"mclass",mode:e.mode,mclass:"m"+t.slice(5),body:p(a?l:n),isCharacterBox:s,mustPromote:a}},mathmlBuilder:Qt});const er=e=>{const t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};c({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:({parser:e},t)=>({type:"mclass",mode:e.mode,mclass:er(t[0]),body:p(t[1]),isCharacterBox:o.isCharacterBox(t[1])})}),c({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler({parser:e,funcName:t},r){const n=r[1],s=r[0],o={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,stack:!0,suppressBaseShift:"\\stackrel"!==t,body:p(n)};return{type:"supsub",mode:s.mode,base:o,sup:"\\underset"===t?null:s,sub:"\\underset"===t?s:null}},mathmlBuilder:Qt});const tr=(e,t,r)=>{if(!e)return r;const n=de(e,t);return"mrow"===n.type&&0===n.children.length?r:n};c({type:"multiscript",names:["\\sideset","\\pres@cript"],props:{numArgs:3},handler({parser:t,funcName:r,token:n},s){if(0===s[2].body.length)throw new e(r+"cannot parse an empty base.");const o=s[2].body[0];if(t.settings.strict&&"\\sideset"===r&&!o.symbol)throw new e("The base of \\sideset must be a big operator. Try \\prescript.");if(s[0].body.length>0&&"supsub"!==s[0].body[0].type||s[1].body.length>0&&"supsub"!==s[1].body[0].type)throw new e("\\sideset can parse only subscripts and superscripts in its first two arguments",n);const a=s[0].body.length>0?s[0].body[0]:null,l=s[1].body.length>0?s[1].body[0]:null;return a||l?a?{type:"multiscript",mode:t.mode,isSideset:"\\sideset"===r,prescripts:a,postscripts:l,base:o}:{type:"styling",mode:t.mode,scriptLevel:"text",body:[{type:"supsub",mode:t.mode,base:o,sup:l.sup,sub:l.sub}]}:o},mathmlBuilder(e,t){const r=de(e.base,t),n=new T.MathNode("mprescripts"),s=new T.MathNode("none");let o=[];const a=tr(e.prescripts.sub,t,s),l=tr(e.prescripts.sup,t,s);if(e.isSideset&&(a.setAttribute("style","text-align: left;"),l.setAttribute("style","text-align: left;")),e.postscripts){o=[r,tr(e.postscripts.sub,t,s),tr(e.postscripts.sup,t,s),n,a,l]}else o=[r,n,a,l];return new T.MathNode("mmultiscripts",o)}}),c({type:"not",names:["\\not"],props:{numArgs:1,primitive:!0,allowedInText:!1},handler({parser:e},t){const r=o.isCharacterBox(t[0]);let n;if(r)n=p(t[0]),"\\"===n[0].text.charAt(0)&&(n[0].text=$.math[n[0].text].replace),n[0].text=n[0].text.slice(0,1)+"̸"+n[0].text.slice(1);else{n=[{type:"textord",mode:"math",text:"̸"},{type:"kern",mode:"math",dimension:{number:-.6,unit:"em"}},t[0]]}return{type:"not",mode:e.mode,body:n,isCharacterBox:r}},mathmlBuilder(e,t){if(e.isCharacterBox){return ie(e.body,t,!0)[0]}return ce(e.body,t)}});const rr=["textord","mathord","atom"],nr=["\\smallint"],sr=["textord","mathord","ordgroup","close","leftright","font"],or=e=>{e.attributes.lspace="0.1667em",e.attributes.rspace="0.1667em"},ar=(e,t)=>{let r;if(e.symbol)r=new v("mo",[te(e.name,e.mode)]),nr.includes(e.name)?r.setAttribute("largeop","false"):r.setAttribute("movablelimits","false"),e.fromMathOp&&or(r);else if(e.body)r=new v("mo",ie(e.body,t)),e.fromMathOp&&or(r);else if(r=new v("mi",[new A(e.name.slice(1))]),!e.parentIsSupSub){const t=[r,new v("mo",[te("⁡","text")])];if(e.needsLeadingSpace){const e=new v("mspace");e.setAttribute("width","0.1667em"),t.unshift(e)}if(!e.isFollowedByDelimiter){const e=new v("mspace");e.setAttribute("width","0.1667em"),t.push(e)}r=new v("mrow",t)}return r},lr={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨅":"\\bigsqcap","⨆":"\\bigsqcup","⨃":"\\bigcupdot","⨇":"\\bigdoublevee","⨈":"\\bigdoublewedge","⨉":"\\bigtimes"};c({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcupplus","\\bigcupdot","\\bigcap","\\bigcup","\\bigdoublevee","\\bigdoublewedge","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcap","\\bigsqcup","\\bigtimes","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨃","⨄","⨅","⨆","⨇","⨈","⨉"],props:{numArgs:0},handler:({parser:e,funcName:t},r)=>{let n=t;return 1===n.length&&(n=lr[n]),{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!0,stack:!1,name:n}},mathmlBuilder:ar}),c({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:({parser:e},t)=>{const r=t[0],n=r.body?r.body:[r],s=1===n.length&&rr.includes(n[0].type);return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:s,fromMathOp:!0,stack:!1,name:s?n[0].text:null,body:s?null:p(r)}},mathmlBuilder:ar});const ir={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint","∱":"\\intclockwise","∲":"\\varointclockwise","⨌":"\\iiiint","⨍":"\\intbar","⨎":"\\intBar","⨏":"\\fint","⨒":"\\rppolint","⨓":"\\scpolint","⨕":"\\pointint","⨖":"\\sqint","⨗":"\\intlarhk","⨘":"\\intx","⨙":"\\intcap","⨚":"\\intcup"};c({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\sgn","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler({parser:e,funcName:t}){const r=e.prevAtomType,n=e.gullet.future().text;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,stack:!1,isFollowedByDelimiter:Lt(n),needsLeadingSpace:r.length>0&&sr.includes(r),name:t}},mathmlBuilder:ar}),c({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler({parser:e,funcName:t}){const r=e.prevAtomType,n=e.gullet.future().text;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,stack:!1,isFollowedByDelimiter:Lt(n),needsLeadingSpace:r.length>0&&sr.includes(r),name:t}},mathmlBuilder:ar}),c({type:"op",names:["\\int","\\iint","\\iiint","\\iiiint","\\oint","\\oiint","\\oiiint","\\intclockwise","\\varointclockwise","\\intbar","\\intBar","\\fint","\\rppolint","\\scpolint","\\pointint","\\sqint","\\intlarhk","\\intx","\\intcap","\\intcup","∫","∬","∭","∮","∯","∰","∱","∲","⨌","⨍","⨎","⨏","⨒","⨓","⨕","⨖","⨗","⨘","⨙","⨚"],props:{numArgs:0},handler({parser:e,funcName:t}){let r=t;return 1===r.length&&(r=ir[r]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,stack:!1,name:r}},mathmlBuilder:ar});c({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=e.prevAtomType,o=e.gullet.future().text;return{type:"operatorname",mode:e.mode,body:p(n),alwaysHandleSupSub:"\\operatornamewithlimits"===t,limits:!1,parentIsSupSub:!1,isFollowedByDelimiter:Lt(o),needsLeadingSpace:s.length>0&&sr.includes(s)}},mathmlBuilder:(e,t)=>{let r,n=ie(e.body,t.withFont("mathrm")),s=!0;for(let e=0;e<n.length;e++){let t=n[e];if(t instanceof T.MathNode)switch(("mrow"===t.type||"mpadded"===t.type)&&1===t.children.length&&t.children[0]instanceof T.MathNode&&(t=t.children[0]),t.type){case"mi":case"mn":case"ms":case"mtext":break;case"mspace":if(t.attributes.width){const r=t.attributes.width.replace("em",""),o=Zt(Number(r));""===o?s=!1:n[e]=new T.MathNode("mtext",[new T.TextNode(o)])}break;case"mo":{const e=t.children[0];1===t.children.length&&e instanceof T.TextNode?e.text=e.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):s=!1;break}default:s=!1}else s=!1}if(s){const e=n.map((e=>e.toText())).join("");n=[new T.TextNode(e)]}else if(1===n.length&&["mover","munder"].includes(n[0].type)&&("mi"===n[0].children[0].type||"mtext"===n[0].children[0].type)){if(n[0].children[0].type="mi",e.parentIsSupSub)return new T.MathNode("mrow",n);{const e=new T.MathNode("mo",[te("⁡","text")]);return T.newDocumentFragment([n[0],e])}}if(s?(r=new T.MathNode("mi",n),1===n[0].text.length&&r.setAttribute("mathvariant","normal")):r=new T.MathNode("mrow",n),!e.parentIsSupSub){const t=[r,new T.MathNode("mo",[te("⁡","text")])];if(e.needsLeadingSpace){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),t.unshift(e)}if(!e.isFollowedByDelimiter){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),t.push(e)}return T.newDocumentFragment(t)}return r}}),Ye("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),d({type:"ordgroup",mathmlBuilder:(e,t)=>ce(e.body,t,e.semisimple)}),c({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"phantom",mode:e.mode,body:p(r)}},mathmlBuilder:(e,t)=>{const r=ie(e.body,t);return new T.MathNode("mphantom",r)}}),c({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"hphantom",mode:e.mode,body:r}},mathmlBuilder:(e,t)=>{const r=ie(p(e.body),t),n=new T.MathNode("mphantom",r),s=new T.MathNode("mpadded",[n]);return s.setAttribute("height","0px"),s.setAttribute("depth","0px"),s}}),c({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"vphantom",mode:e.mode,body:r}},mathmlBuilder:(e,t)=>{const r=ie(p(e.body),t),n=new T.MathNode("mphantom",r),s=new T.MathNode("mpadded",[n]);return s.setAttribute("width","0px"),s}}),c({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>({type:"pmb",mode:e.mode,body:p(t[0])}),mathmlBuilder(e,t){const r=ie(e.body,t),n=N(r);return n.setAttribute("style","font-weight:bold"),n}});const cr=(e,t)=>{const r=t.withLevel(_e),n=new T.MathNode("mpadded",[de(e.body,r)]),s=qe(e.dy,t);return n.setAttribute("voffset",s.number+s.unit),s.number>0?n.style.padding=s.number+s.unit+" 0 0 0":n.style.padding="0 0 "+Math.abs(s.number)+s.unit+" 0",n};c({type:"raise",names:["\\raise","\\lower"],props:{numArgs:2,argTypes:["size","primitive"],primitive:!0},handler({parser:e,funcName:t},r){const n=Ie(r[0],"size").value;"\\lower"===t&&(n.number*=-1);const s=r[1];return{type:"raise",mode:e.mode,dy:n,body:s}},mathmlBuilder:cr}),c({type:"raise",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler({parser:e,funcName:t},r){const n=Ie(r[0],"size").value,s=r[1];return{type:"raise",mode:e.mode,dy:n,body:s}},mathmlBuilder:cr}),c({type:"ref",names:["\\ref","\\eqref"],props:{numArgs:1,argTypes:["raw"]},handler:({parser:e,funcName:t},r)=>({type:"ref",mode:e.mode,funcName:t,string:r[0].string.replace(Yt,"")}),mathmlBuilder(e,t){const r="\\ref"===e.funcName?["tml-ref"]:["tml-ref","tml-eqref"];return new x("#"+e.string,r,null)}}),c({type:"reflect",names:["\\reflectbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:({parser:e},t)=>({type:"reflect",mode:e.mode,body:t[0]}),mathmlBuilder(e,t){const r=de(e.body,t);return r.style.transform="scaleX(-1)",r}}),c({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler:({parser:e})=>({type:"internal",mode:e.mode})}),c({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler({parser:e},t,r){const n=r[0],s=Ie(t[0],"size"),o=Ie(t[1],"size");return{type:"rule",mode:e.mode,shift:n&&Ie(n,"size").value,width:s.value,height:o.value}},mathmlBuilder(e,t){const r=qe(e.width,t),n=qe(e.height,t),s=e.shift?qe(e.shift,t):{number:0,unit:"em"},o=t.color&&t.getColor()||"black",a=new T.MathNode("mspace");if(r.number>0&&n.number>0&&a.setAttribute("mathbackground",o),a.setAttribute("width",r.number+r.unit),a.setAttribute("height",n.number+n.unit),0===s.number)return a;const l=new T.MathNode("mpadded",[a]);return s.number>=0?l.setAttribute("height","+"+s.number+s.unit):(l.setAttribute("height",s.number+s.unit),l.setAttribute("depth","+"+-s.number+s.unit)),l.setAttribute("voffset",s.number+s.unit),l}});const dr={"\\tiny":.5,"\\sixptsize":.6,"\\Tiny":.6,"\\scriptsize":.7,"\\footnotesize":.8,"\\small":.9,"\\normalsize":1,"\\large":1.2,"\\Large":1.44,"\\LARGE":1.728,"\\huge":2.074,"\\Huge":2.488};c({type:"sizing",names:["\\tiny","\\sixptsize","\\Tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],props:{numArgs:0,allowedInText:!0},handler:({breakOnTokenText:e,funcName:t,parser:r},n)=>{r.settings.strict&&"math"===r.mode&&console.log(`Temml strict-mode warning: Command ${t} is invalid in math mode.`);const s=r.parseExpression(!1,e,!0);return{type:"sizing",mode:r.mode,funcName:t,body:s}},mathmlBuilder:(e,t)=>{const r=t.withFontSize(dr[e.funcName]),n=ie(e.body,r),s=N(n),o=(dr[e.funcName]/t.fontSize).toFixed(4);return s.setAttribute("mathsize",o+"em"),s}}),c({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:({parser:e},t,r)=>{let n=!1,s=!1;const o=r[0]&&Ie(r[0],"ordgroup");if(o){let e="";for(let t=0;t<o.body.length;++t){if(e=o.body[t].text,"t"===e)n=!0;else{if("b"!==e){n=!1,s=!1;break}s=!0}}}else n=!0,s=!0;const a=t[0];return{type:"smash",mode:e.mode,body:a,smashHeight:n,smashDepth:s}},mathmlBuilder:(e,t)=>{const r=new T.MathNode("mpadded",[de(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),c({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler({parser:e},t,r){const n=r[0],s=t[0];return{type:"sqrt",mode:e.mode,body:s,index:n}},mathmlBuilder(e,t){const{body:r,index:n}=e;return n?new T.MathNode("mroot",[de(r,t),de(n,t.incrementLevel())]):new T.MathNode("msqrt",[de(r,t)])}});const mr={display:0,text:1,script:2,scriptscript:3},pr={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]};c({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({breakOnTokenText:e,funcName:t,parser:r},n){const s=r.parseExpression(!0,e,!0),o=t.slice(1,t.length-5);return{type:"styling",mode:r.mode,scriptLevel:o,body:s}},mathmlBuilder(e,t){const r=t.withLevel(mr[e.scriptLevel]),n=ie(e.body,r),s=N(n),o=pr[e.scriptLevel];return s.setAttribute("scriptlevel",o[0]),s.setAttribute("displaystyle",o[1]),s}});const ur=/^m(over|under|underover)$/;d({type:"supsub",mathmlBuilder(e,t){let r,n,s=!1,o=!1,a=!1,l=!1;e.base&&"horizBrace"===e.base.type&&(n=!!e.sup,n===e.base.isOver&&(s=!0,r=e.base.isOver)),!e.base||e.base.stack||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0,o=!e.base.symbol,a=o&&!e.isFollowedByDelimiter,l=e.base.needsLeadingSpace);const i=e.base&&e.base.stack?[de(e.base.body[0],t)]:[de(e.base,t)],c=t.inSubOrSup();if(e.sub){const r=de(e.sub,c);3===t.level&&r.setAttribute("scriptlevel","2"),i.push(r)}if(e.sup){const r=de(e.sup,c);3===t.level&&r.setAttribute("scriptlevel","2");const n="mrow"===r.type?r.children[0]:r;n&&"mo"===n.type&&n.classes.includes("tml-prime")&&e.base&&e.base.text&&"fF".indexOf(e.base.text)>-1&&n.classes.push("prime-pad"),i.push(r)}let d;if(s)d=r?"mover":"munder";else if(e.sub)if(e.sup){const r=e.base;d=r&&("op"===r.type&&r.limits||"multiscript"===r.type)&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(t.level===Ve||r.limits)?"munderover":"msubsup"}else{const r=e.base;d=r&&"op"===r.type&&r.limits&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.level===Ve)?"munder":"msub"}else{const r=e.base;d=r&&"op"===r.type&&r.limits&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.level===Ve)?"mover":"msup"}let m=new T.MathNode(d,i);if(o){const e=new T.MathNode("mo",[te("⁡","text")]);if(l){const t=new T.MathNode("mspace");t.setAttribute("width","0.1667em"),m=T.newDocumentFragment([t,m,e])}else m=T.newDocumentFragment([m,e]);if(a){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),m.children.push(e)}}else ur.test(d)&&(m=new T.MathNode("mrow",[m]));return m}});const hr=["\\shortmid","\\nshortmid","\\shortparallel","\\nshortparallel","\\smallsetminus"],gr=["\\Rsh","\\Lsh","\\restriction"];d({type:"atom",mathmlBuilder(e,t){const r=new T.MathNode("mo",[te(e.text,e.mode)]);if("punct"===e.family)r.setAttribute("separator","true");else if("open"===e.family||"close"===e.family)"open"===e.family?(r.setAttribute("form","prefix"),r.setAttribute("stretchy","false")):"close"===e.family&&(r.setAttribute("form","postfix"),r.setAttribute("stretchy","false"));else if("\\mid"===e.text)r.setAttribute("lspace","0.22em"),r.setAttribute("rspace","0.22em"),r.setAttribute("stretchy","false");else if("rel"===e.family&&(e=>{if(1===e.length){const t=e.codePointAt(0);return 8591<t&&t<8704}return e.indexOf("arrow")>-1||e.indexOf("harpoon")>-1||gr.includes(e)})(e.text))r.setAttribute("stretchy","false");else if(hr.includes(e.text))r.setAttribute("mathsize","70%");else if(":"===e.text)r.attributes.lspace="0.2222em",r.attributes.rspace="0.2222em";else if(e.needsSpacing)return"bin"===e.family?new T.MathNode("mrow",[Oe(.222),r,Oe(.222)]):new T.MathNode("mrow",[Oe(.2778),r,Oe(.2778)]);return r}});const fr={mathbf:"bold",mathrm:"normal",textit:"italic",mathit:"italic",mathnormal:"italic",mathbb:"double-struck",mathcal:"script",mathfrak:"fraktur",mathscr:"script",mathsf:"sans-serif",mathtt:"monospace"},br=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsc"===t.fontFamily)return"normal";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"sans-serif-bold":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";const r=t.font;if(!r||"mathnormal"===r)return null;const n=e.mode;switch(r){case"mathit":case"greekItalic":return"italic";case"mathrm":{const t=e.text.codePointAt(0);return 939<t&&t<975?"italic":"normal"}case"up@greek":return"normal";case"boldsymbol":case"mathboldsymbol":return"bold-italic";case"mathbf":return"bold";case"mathbb":return"double-struck";case"mathfrak":return"fraktur";case"mathscr":case"mathcal":return"script";case"mathsf":return"sans-serif";case"mathsfit":return"sans-serif-italic";case"mathtt":return"monospace"}let s=e.text;return $[n][s]&&$[n][s].replace&&(s=$[n][s].replace),Object.prototype.hasOwnProperty.call(fr,r)?fr[r]:null},yr=Object.freeze({B:8426,E:8427,F:8427,H:8387,I:8391,L:8390,M:8422,R:8393,e:8394,g:8355,o:8389}),wr=Object.freeze({C:8426,H:8388,I:8392,R:8394,Z:8398}),xr=Object.freeze({C:8383,H:8389,N:8391,P:8393,Q:8393,R:8395,Z:8394}),kr=Object.freeze({"ϵ":119527,"ϑ":119564,"ϰ":119534,"φ":119577,"ϱ":119535,"ϖ":119563}),vr=Object.freeze({"ϵ":119643,"ϑ":119680,"ϰ":119650,"φ":119693,"ϱ":119651,"ϖ":119679}),Ar=Object.freeze({"ϵ":119701,"ϑ":119738,"ϰ":119708,"φ":119751,"ϱ":119709,"ϖ":119737}),Nr=Object.freeze({"ϵ":119759,"ϑ":119796,"ϰ":119766,"φ":119809,"ϱ":119767,"ϖ":119795}),Tr=Object.freeze({upperCaseLatin:{normal:e=>0,bold:e=>119743,italic:e=>119795,"bold-italic":e=>119847,script:e=>yr[e]||119899,"script-bold":e=>119951,fraktur:e=>wr[e]||120003,"fraktur-bold":e=>120107,"double-struck":e=>xr[e]||120055,"sans-serif":e=>120159,"sans-serif-bold":e=>120211,"sans-serif-italic":e=>120263,"sans-serif-bold-italic":e=>120380,monospace:e=>120367},lowerCaseLatin:{normal:e=>0,bold:e=>119737,italic:e=>"h"===e?8358:119789,"bold-italic":e=>119841,script:e=>yr[e]||119893,"script-bold":e=>119945,fraktur:e=>119997,"fraktur-bold":e=>120101,"double-struck":e=>120049,"sans-serif":e=>120153,"sans-serif-bold":e=>120205,"sans-serif-italic":e=>120257,"sans-serif-bold-italic":e=>120309,monospace:e=>120361},upperCaseGreek:{normal:e=>0,bold:e=>119575,italic:e=>119633,"bold-italic":e=>119575,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>119749,"sans-serif-bold":e=>119749,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>119807,monospace:e=>0},lowerCaseGreek:{normal:e=>0,bold:e=>119569,italic:e=>119627,"bold-italic":e=>"ϕ"===e?119678:119685,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>119743,"sans-serif-bold":e=>119743,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>119801,monospace:e=>0},varGreek:{normal:e=>0,bold:e=>kr[e]||-51,italic:e=>0,"bold-italic":e=>vr[e]||58,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>Ar[e]||116,"sans-serif-bold":e=>Ar[e]||116,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>Nr[e]||174,monospace:e=>0},numeral:{normal:e=>0,bold:e=>120734,italic:e=>0,"bold-italic":e=>0,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>120744,"sans-serif":e=>120754,"sans-serif-bold":e=>120764,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>0,monospace:e=>120774}}),Sr=(e,t)=>{const r=e.codePointAt(0),n=64<r&&r<91?"upperCaseLatin":96<r&&r<123?"lowerCaseLatin":912<r&&r<938?"upperCaseGreek":944<r&&r<970||"ϕ"===e?"lowerCaseGreek":120545<r&&r<120572||kr[e]?"varGreek":47<r&&r<58?"numeral":"other";return"other"===n?e:String.fromCodePoint(r+Tr[n][t](e))},qr=Object.freeze({a:"ᴀ",b:"ʙ",c:"ᴄ",d:"ᴅ",e:"ᴇ",f:"ꜰ",g:"ɢ",h:"ʜ",i:"ɪ",j:"ᴊ",k:"ᴋ",l:"ʟ",m:"ᴍ",n:"ɴ",o:"ᴏ",p:"ᴘ",q:"ǫ",r:"ʀ",s:"s",t:"ᴛ",u:"ᴜ",v:"ᴠ",w:"ᴡ",x:"x",y:"ʏ",z:"ᴢ"}),Or=/^\d(?:[\d,.]*\d)?$/,Mr=/[A-Ba-z]/,Br=new Set(["\\prime","\\dprime","\\trprime","\\qprime","\\backprime","\\backdprime","\\backtrprime"]);d({type:"mathord",mathmlBuilder(e,t){const r=te(e.text,e.mode,t),n=r.text.codePointAt(0),s=912<n&&n<938?"normal":"italic",o=br(e,t)||s;if("script"===o)return r.text=Sr(r.text,o),new T.MathNode("mi",[r],[t.font]);"italic"!==o&&(r.text=Sr(r.text,o));let a=new T.MathNode("mi",[r]);return"normal"===o&&(a.setAttribute("mathvariant","normal"),1===r.text.length&&(a=new T.MathNode("mpadded",[a]),a.setAttribute("lspace","0"))),a}}),d({type:"textord",mathmlBuilder(e,t){let r=e.text;const n=r.codePointAt(0);"textsc"===t.fontFamily&&96<n&&n<123&&(r=qr[r]);const s=te(r,e.mode,t),o=br(e,t)||"normal";let a;if(Or.test(e.text)){const t="text"===e.mode?"mtext":"mn";if("italic"===o||"bold-italic"===o)return((e,t,r)=>{const n=new T.MathNode(r,[e]),s=new T.MathNode("mstyle",[n]);return s.style["font-style"]="italic",s.style["font-family"]="Cambria, 'Times New Roman', serif","bold-italic"===t&&(s.style["font-weight"]="bold"),s})(s,o,t);"normal"!==o&&(s.text=s.text.split("").map((e=>Sr(e,o))).join("")),a=new T.MathNode(t,[s])}else if("text"===e.mode)"normal"!==o&&(s.text=Sr(s.text,o)),a=new T.MathNode("mtext",[s]);else if(Br.has(e.text))a=new T.MathNode("mo",[s]),a.classes.push("tml-prime");else{const e=s.text;"italic"!==o&&(s.text=Sr(s.text,o)),a=new T.MathNode("mi",[s]),s.text===e&&Mr.test(e)&&a.setAttribute("mathvariant","italic")}return a}});const Cr={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},zr={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};d({type:"spacing",mathmlBuilder(t,r){let n;if(Object.prototype.hasOwnProperty.call(zr,t.text))n=new T.MathNode("mtext",[new T.TextNode(" ")]);else{if(!Object.prototype.hasOwnProperty.call(Cr,t.text))throw new e(`Unknown type of space "${t.text}"`);n=new T.MathNode("mo"),"\\nobreak"===t.text&&n.setAttribute("linebreak","nobreak")}return n}}),d({type:"tag"});const Er={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm","\\textsc":"textsc"},$r={"\\textbf":"textbf","\\textmd":"textmd"},Ir={"\\textit":"textit","\\textup":"textup"};c({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textsc","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"text",mode:e.mode,body:p(n),font:t}},mathmlBuilder(e,t){const r=((e,t)=>{const r=e.font;return r?Er[r]?t.withTextFontFamily(Er[r]):$r[r]?t.withTextFontWeight($r[r]):"\\emph"===r?"textit"===t.fontShape?t.withTextFontShape("textup"):t.withTextFontShape("textit"):t.withTextFontShape(Ir[r]):t})(e,t),n=ce(e.body,r);return ne(n)}}),c({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:({parser:e},t)=>({type:"vcenter",mode:e.mode,body:t[0]}),mathmlBuilder(e,t){const r=new T.MathNode("mtd",[de(e.body,t)]);r.style.padding="0";const n=new T.MathNode("mtr",[r]);return new T.MathNode("mtable",[n])}}),c({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,r,n){throw new e("\\verb ended by end of line instead of matching delimiter")},mathmlBuilder(e,t){const r=new T.TextNode(Lr(e)),n=new T.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});const Lr=e=>e.body.replace(/ /g,e.star?"␣":" "),Fr=l,Dr="[ \r\n\t]",Gr=`(\\\\[a-zA-Z@]+)${Dr}*`,jr="[̀-ͯ]",Pr=new RegExp(`${jr}+$`),Rr=`(${Dr}+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-‧‪-퟿豈-￿]${jr}*|[\ud800-\udbff][\udc00-\udfff]${jr}*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|${Gr}|\\\\[^\ud800-\udfff])`;class Ur{constructor(e,t){this.input=e,this.settings=t,this.tokenRegex=new RegExp(Rr,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){const t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new He("EOF",new Ue(this,r,r));const n=this.tokenRegex.exec(t);if(null===n||n.index!==r)throw new e(`Unexpected character: '${t[r]}'`,new He(t[r],new Ue(this,r,r+1)));const s=n[6]||n[3]||(n[2]?"\\ ":" ");if(14===this.catcodes[s]){const r=t.indexOf("\n",this.tokenRegex.lastIndex);if(-1===r){if(this.tokenRegex.lastIndex=t.length,this.settings.strict)throw new e("% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode")}else this.tokenRegex.lastIndex=r+1;return this.lex()}return new He(s,new Ue(this,r,this.tokenRegex.lastIndex))}}class Hr{constructor(e={},t={}){this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new e("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");const t=this.undefStack.pop();for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(void 0===t[e]?delete this.current[e]:this.current[e]=t[e])}has(e){return Object.prototype.hasOwnProperty.call(this.current,e)||Object.prototype.hasOwnProperty.call(this.builtins,e)}get(e){return Object.prototype.hasOwnProperty.call(this.current,e)?this.current[e]:this.builtins[e]}set(e,t,r=!1){if(r){for(let t=0;t<this.undefStack.length;t++)delete this.undefStack[t][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{const t=this.undefStack[this.undefStack.length-1];t&&!Object.prototype.hasOwnProperty.call(t,e)&&(t[e]=this.current[e])}this.current[e]=t}}const Vr={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class _r{constructor(e,t,r){this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Hr(Je,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new Ur(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){let t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:n,end:r}=this.consumeArg(["]"]))}else({tokens:n,start:t,end:r}=this.consumeArg());return this.pushToken(new He("EOF",r.loc)),this.pushTokens(n),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(t){const r=[],n=t&&t.length>0;n||this.consumeSpaces();const s=this.future();let o,a=0,l=0;do{if(o=this.popToken(),r.push(o),"{"===o.text)++a;else if("}"===o.text){if(--a,-1===a)throw new e("Extra }",o)}else if("EOF"===o.text)throw new e("Unexpected end of input in a macro argument, expected '"+(t&&n?t[l]:"}")+"'",o);if(t&&n)if((0===a||1===a&&"{"===t[l])&&o.text===t[l]){if(++l,l===t.length){r.splice(-l,l);break}}else l=0}while(0!==a||n);return"{"===s.text&&"}"===r[r.length-1].text&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:s,end:o}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new e("The length of delimiters doesn't match the number of args!");const n=r[0];for(let t=0;t<n.length;t++){const r=this.popToken();if(n[t]!==r.text)throw new e("Use of the macro doesn't match its definition",r)}}const n=[];for(let e=0;e<t;e++)n.push(this.consumeArg(r&&r[e+1]).tokens);return n}expandOnce(t){const r=this.popToken(),n=r.text,s=r.noexpand?null:this._getExpansion(n);if(null==s||t&&s.unexpandable){if(t&&null==s&&"\\"===n[0]&&!this.isDefined(n))throw new e("Undefined control sequence: "+n);return this.pushToken(r),!1}if(this.expansionCount++,this.expansionCount>this.settings.maxExpand)throw new e("Too many expansions: infinite loop or need to increase maxExpand setting");let o=s.tokens;const a=this.consumeArgs(s.numArgs,s.delimiters);if(s.numArgs){o=o.slice();for(let t=o.length-1;t>=0;--t){let r=o[t];if("#"===r.text){if(0===t)throw new e("Incomplete placeholder at end of macro body",r);if(r=o[--t],"#"===r.text)o.splice(t+1,1);else{if(!/^[1-9]$/.test(r.text))throw new e("Not a valid argument number",r);o.splice(t,2,...a[+r.text-1])}}}}return this.pushTokens(o),o.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){const e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new He(e)]):void 0}expandTokens(e){const t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){const e=this.stack.pop();e.treatAsRelax&&(e.noexpand=!1,e.treatAsRelax=!1),t.push(e)}return t}expandMacroAsText(e){const t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){const t=this.macros.get(e);if(null==t)return t;if(1===e.length){const t=this.lexer.catcodes[e];if(null!=t&&13!==t)return}const r="function"==typeof t?t(this):t;if("string"==typeof r){let e=0;if(-1!==r.indexOf("#")){const t=r.replace(/##/g,"");for(;-1!==t.indexOf("#"+(e+1));)++e}const t=new Ur(r,this.settings),n=[];let s=t.lex();for(;"EOF"!==s.text;)n.push(s),s=t.lex();n.reverse();return{tokens:n,numArgs:e}}return r}isDefined(e){return this.macros.has(e)||Object.prototype.hasOwnProperty.call(Fr,e)||Object.prototype.hasOwnProperty.call($.math,e)||Object.prototype.hasOwnProperty.call($.text,e)||Object.prototype.hasOwnProperty.call(Vr,e)}isExpandable(e){const t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Object.prototype.hasOwnProperty.call(Fr,e)&&!Fr[e].primitive}}const Wr=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Xr=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g","ʰ":"h","ⁱ":"i","ʲ":"j","ᵏ":"k","ˡ":"l","ᵐ":"m","ⁿ":"n","ᵒ":"o","ᵖ":"p","ʳ":"r","ˢ":"s","ᵗ":"t","ᵘ":"u","ᵛ":"v","ʷ":"w","ˣ":"x","ʸ":"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),Zr=Object.freeze({"𝒜":"A","ℬ":"B","𝒞":"C","𝒟":"D","ℰ":"E","ℱ":"F","𝒢":"G","ℋ":"H","ℐ":"I","𝒥":"J","𝒦":"K","ℒ":"L","ℳ":"M","𝒩":"N","𝒪":"O","𝒫":"P","𝒬":"Q","ℛ":"R","𝒮":"S","𝒯":"T","𝒰":"U","𝒱":"V","𝒲":"W","𝒳":"X","𝒴":"Y","𝒵":"Z"});var Yr={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},Jr={"á":"á","à":"à","ä":"ä","ǟ":"ǟ","ã":"ã","ā":"ā","ă":"ă","ắ":"ắ","ằ":"ằ","ẵ":"ẵ","ǎ":"ǎ","â":"â","ấ":"ấ","ầ":"ầ","ẫ":"ẫ","ȧ":"ȧ","ǡ":"ǡ","å":"å","ǻ":"ǻ","ḃ":"ḃ","ć":"ć","č":"č","ĉ":"ĉ","ċ":"ċ","ď":"ď","ḋ":"ḋ","é":"é","è":"è","ë":"ë","ẽ":"ẽ","ē":"ē","ḗ":"ḗ","ḕ":"ḕ","ĕ":"ĕ","ě":"ě","ê":"ê","ế":"ế","ề":"ề","ễ":"ễ","ė":"ė","ḟ":"ḟ","ǵ":"ǵ","ḡ":"ḡ","ğ":"ğ","ǧ":"ǧ","ĝ":"ĝ","ġ":"ġ","ḧ":"ḧ","ȟ":"ȟ","ĥ":"ĥ","ḣ":"ḣ","í":"í","ì":"ì","ï":"ï","ḯ":"ḯ","ĩ":"ĩ","ī":"ī","ĭ":"ĭ","ǐ":"ǐ","î":"î","ǰ":"ǰ","ĵ":"ĵ","ḱ":"ḱ","ǩ":"ǩ","ĺ":"ĺ","ľ":"ľ","ḿ":"ḿ","ṁ":"ṁ","ń":"ń","ǹ":"ǹ","ñ":"ñ","ň":"ň","ṅ":"ṅ","ó":"ó","ò":"ò","ö":"ö","ȫ":"ȫ","õ":"õ","ṍ":"ṍ","ṏ":"ṏ","ȭ":"ȭ","ō":"ō","ṓ":"ṓ","ṑ":"ṑ","ŏ":"ŏ","ǒ":"ǒ","ô":"ô","ố":"ố","ồ":"ồ","ỗ":"ỗ","ȯ":"ȯ","ȱ":"ȱ","ő":"ő","ṕ":"ṕ","ṗ":"ṗ","ŕ":"ŕ","ř":"ř","ṙ":"ṙ","ś":"ś","ṥ":"ṥ","š":"š","ṧ":"ṧ","ŝ":"ŝ","ṡ":"ṡ","ẗ":"ẗ","ť":"ť","ṫ":"ṫ","ú":"ú","ù":"ù","ü":"ü","ǘ":"ǘ","ǜ":"ǜ","ǖ":"ǖ","ǚ":"ǚ","ũ":"ũ","ṹ":"ṹ","ū":"ū","ṻ":"ṻ","ŭ":"ŭ","ǔ":"ǔ","û":"û","ů":"ů","ű":"ű","ṽ":"ṽ","ẃ":"ẃ","ẁ":"ẁ","ẅ":"ẅ","ŵ":"ŵ","ẇ":"ẇ","ẘ":"ẘ","ẍ":"ẍ","ẋ":"ẋ","ý":"ý","ỳ":"ỳ","ÿ":"ÿ","ỹ":"ỹ","ȳ":"ȳ","ŷ":"ŷ","ẏ":"ẏ","ẙ":"ẙ","ź":"ź","ž":"ž","ẑ":"ẑ","ż":"ż","Á":"Á","À":"À","Ä":"Ä","Ǟ":"Ǟ","Ã":"Ã","Ā":"Ā","Ă":"Ă","Ắ":"Ắ","Ằ":"Ằ","Ẵ":"Ẵ","Ǎ":"Ǎ","Â":"Â","Ấ":"Ấ","Ầ":"Ầ","Ẫ":"Ẫ","Ȧ":"Ȧ","Ǡ":"Ǡ","Å":"Å","Ǻ":"Ǻ","Ḃ":"Ḃ","Ć":"Ć","Č":"Č","Ĉ":"Ĉ","Ċ":"Ċ","Ď":"Ď","Ḋ":"Ḋ","É":"É","È":"È","Ë":"Ë","Ẽ":"Ẽ","Ē":"Ē","Ḗ":"Ḗ","Ḕ":"Ḕ","Ĕ":"Ĕ","Ě":"Ě","Ê":"Ê","Ế":"Ế","Ề":"Ề","Ễ":"Ễ","Ė":"Ė","Ḟ":"Ḟ","Ǵ":"Ǵ","Ḡ":"Ḡ","Ğ":"Ğ","Ǧ":"Ǧ","Ĝ":"Ĝ","Ġ":"Ġ","Ḧ":"Ḧ","Ȟ":"Ȟ","Ĥ":"Ĥ","Ḣ":"Ḣ","Í":"Í","Ì":"Ì","Ï":"Ï","Ḯ":"Ḯ","Ĩ":"Ĩ","Ī":"Ī","Ĭ":"Ĭ","Ǐ":"Ǐ","Î":"Î","İ":"İ","Ĵ":"Ĵ","Ḱ":"Ḱ","Ǩ":"Ǩ","Ĺ":"Ĺ","Ľ":"Ľ","Ḿ":"Ḿ","Ṁ":"Ṁ","Ń":"Ń","Ǹ":"Ǹ","Ñ":"Ñ","Ň":"Ň","Ṅ":"Ṅ","Ó":"Ó","Ò":"Ò","Ö":"Ö","Ȫ":"Ȫ","Õ":"Õ","Ṍ":"Ṍ","Ṏ":"Ṏ","Ȭ":"Ȭ","Ō":"Ō","Ṓ":"Ṓ","Ṑ":"Ṑ","Ŏ":"Ŏ","Ǒ":"Ǒ","Ô":"Ô","Ố":"Ố","Ồ":"Ồ","Ỗ":"Ỗ","Ȯ":"Ȯ","Ȱ":"Ȱ","Ő":"Ő","Ṕ":"Ṕ","Ṗ":"Ṗ","Ŕ":"Ŕ","Ř":"Ř","Ṙ":"Ṙ","Ś":"Ś","Ṥ":"Ṥ","Š":"Š","Ṧ":"Ṧ","Ŝ":"Ŝ","Ṡ":"Ṡ","Ť":"Ť","Ṫ":"Ṫ","Ú":"Ú","Ù":"Ù","Ü":"Ü","Ǘ":"Ǘ","Ǜ":"Ǜ","Ǖ":"Ǖ","Ǚ":"Ǚ","Ũ":"Ũ","Ṹ":"Ṹ","Ū":"Ū","Ṻ":"Ṻ","Ŭ":"Ŭ","Ǔ":"Ǔ","Û":"Û","Ů":"Ů","Ű":"Ű","Ṽ":"Ṽ","Ẃ":"Ẃ","Ẁ":"Ẁ","Ẅ":"Ẅ","Ŵ":"Ŵ","Ẇ":"Ẇ","Ẍ":"Ẍ","Ẋ":"Ẋ","Ý":"Ý","Ỳ":"Ỳ","Ÿ":"Ÿ","Ỹ":"Ỹ","Ȳ":"Ȳ","Ŷ":"Ŷ","Ẏ":"Ẏ","Ź":"Ź","Ž":"Ž","Ẑ":"Ẑ","Ż":"Ż","ά":"ά","ὰ":"ὰ","ᾱ":"ᾱ","ᾰ":"ᾰ","έ":"έ","ὲ":"ὲ","ή":"ή","ὴ":"ὴ","ί":"ί","ὶ":"ὶ","ϊ":"ϊ","ΐ":"ΐ","ῒ":"ῒ","ῑ":"ῑ","ῐ":"ῐ","ό":"ό","ὸ":"ὸ","ύ":"ύ","ὺ":"ὺ","ϋ":"ϋ","ΰ":"ΰ","ῢ":"ῢ","ῡ":"ῡ","ῠ":"ῠ","ώ":"ώ","ὼ":"ὼ","Ύ":"Ύ","Ὺ":"Ὺ","Ϋ":"Ϋ","Ῡ":"Ῡ","Ῠ":"Ῠ","Ώ":"Ώ","Ὼ":"Ὼ"};const Kr=["bin","op","open","punct","rel"],Qr=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/,en=/^ *\\text/;class tn{constructor(e,t,r=!1){this.mode="math",this.gullet=new _r(e,t,this.mode),this.settings=t,this.isPreamble=r,this.leftrightDepth=0,this.prevAtomType=""}expect(t,r=!0){if(this.fetch().text!==t)throw new e(`Expected '${t}', got '${this.fetch().text}'`,this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");const e=this.parseExpression(!1);if(this.expect("EOF"),this.isPreamble){const e=Object.create(null);return Object.entries(this.gullet.macros.current).forEach((([t,r])=>{e[t]=r})),this.gullet.endGroup(),e}const t=this.gullet.macros.get("\\df@tag");return this.gullet.endGroup(),t&&(this.gullet.macros.current["\\df@tag"]=t),e}static get endOfExpression(){return["}","\\endgroup","\\end","\\right","\\endtoggle","&"]}subparse(e){const t=this.nextToken;this.consume(),this.gullet.pushToken(new He("}")),this.gullet.pushTokens(e);const r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t,r){const n=[];for(this.prevAtomType="";;){"math"===this.mode&&this.consumeSpaces();const s=this.fetch();if(-1!==tn.endOfExpression.indexOf(s.text))break;if(t&&s.text===t)break;if(r&&"\\middle"===s.text)break;if(e&&Fr[s.text]&&Fr[s.text].infix)break;const o=this.parseAtom(t);if(!o)break;"internal"!==o.type&&(n.push(o),this.prevAtomType="atom"===o.type?o.family:o.type)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){let r,n=-1;for(let s=0;s<t.length;s++)if("infix"===t[s].type){if(-1!==n)throw new e("only one infix operator per group",t[s].token);n=s,r=t[s].replaceWith}if(-1!==n&&r){let e,s;const o=t.slice(0,n),a=t.slice(n+1);let l;return e=1===o.length&&"ordgroup"===o[0].type?o[0]:{type:"ordgroup",mode:this.mode,body:o},s=1===a.length&&"ordgroup"===a[0].type?a[0]:{type:"ordgroup",mode:this.mode,body:a},l="\\\\abovefrac"===r?this.callFunction(r,[e,t[n],s],[]):this.callFunction(r,[e,s],[]),[l]}return t}handleSupSubscript(t){const r=this.fetch(),n=r.text;this.consume(),this.consumeSpaces();const s=this.parseGroup(t);if(!s)throw new e("Expected group after '"+n+"'",r);return s}formatUnsupportedCmd(e){const t=[];for(let r=0;r<e.length;r++)t.push({type:"textord",mode:"text",text:e[r]});const r={type:"text",mode:this.mode,body:t};return{type:"color",mode:this.mode,color:this.settings.errorColor,body:[r]}}parseAtom(t){const r=this.parseGroup("atom",t);if("text"===this.mode)return r;let n,s;for(;;){this.consumeSpaces();const t=this.fetch();if("\\limits"===t.text||"\\nolimits"===t.text){if(r&&"op"===r.type){const e="\\limits"===t.text;r.limits=e,r.alwaysHandleSupSub=!0}else{if(!r||"operatorname"!==r.type)throw new e("Limit controls must follow a math operator",t);r.alwaysHandleSupSub&&(r.limits="\\limits"===t.text)}this.consume()}else if("^"===t.text){if(n)throw new e("Double superscript",t);n=this.handleSupSubscript("superscript")}else if("_"===t.text){if(s)throw new e("Double subscript",t);s=this.handleSupSubscript("subscript")}else if("'"===t.text){if(n)throw new e("Double superscript",t);const r={type:"textord",mode:this.mode,text:"\\prime"},s=[r];for(this.consume();"'"===this.fetch().text;)s.push(r),this.consume();"^"===this.fetch().text&&s.push(this.handleSupSubscript("superscript")),n={type:"ordgroup",mode:this.mode,body:s}}else{if(!Xr[t.text])break;{const e=Wr.test(t.text),r=[];for(r.push(new He(Xr[t.text])),this.consume();;){const t=this.fetch().text;if(!Xr[t])break;if(Wr.test(t)!==e)break;r.unshift(new He(Xr[t])),this.consume()}const o=this.subparse(r);e?s={type:"ordgroup",mode:"math",body:o}:n={type:"ordgroup",mode:"math",body:o}}}}if(n||s){if(r&&"multiscript"===r.type&&!r.postscripts)return r.postscripts={sup:n,sub:s},r;{const e=!r||"op"!==r.type&&"operatorname"!==r.type?void 0:Lt(this.nextToken.text);return{type:"supsub",mode:this.mode,base:r,sup:n,sub:s,isFollowedByDelimiter:e}}}return r}parseFunction(t,r){const n=this.fetch(),s=n.text,o=Fr[s];if(!o)return null;if(this.consume(),r&&"atom"!==r&&!o.allowedInArgument)throw new e("Got function '"+s+"' with no arguments"+(r?" as "+r:""),n);if("text"===this.mode&&!o.allowedInText)throw new e("Can't use function '"+s+"' in text mode",n);if("math"===this.mode&&!1===o.allowedInMath)throw new e("Can't use function '"+s+"' in math mode",n);const a=this.prevAtomType,{args:l,optArgs:i}=this.parseArguments(s,o);return this.prevAtomType=a,this.callFunction(s,l,i,n,t)}callFunction(t,r,n,s,o){const a={funcName:t,parser:this,token:s,breakOnTokenText:o},l=Fr[t];if(l&&l.handler)return l.handler(a,r,n);throw new e(`No function handler for ${t}`)}parseArguments(t,r){const n=r.numArgs+r.numOptionalArgs;if(0===n)return{args:[],optArgs:[]};const s=[],o=[];for(let a=0;a<n;a++){let n=r.argTypes&&r.argTypes[a];const l=a<r.numOptionalArgs;(r.primitive&&null==n||"sqrt"===r.type&&1===a&&null==o[0])&&(n="primitive");const i=this.parseGroupOfType(`argument to '${t}'`,n,l);if(l)o.push(i);else{if(null==i)throw new e("Null argument, please report this as a bug");s.push(i)}}return{args:s,optArgs:o}}parseGroupOfType(t,r,n){switch(r){case"size":return this.parseSizeGroup(n);case"url":return this.parseUrlGroup(n);case"math":case"text":return this.parseArgumentGroup(n,r);case"hbox":{const e=this.parseArgumentGroup(n,"text");return null!=e?{type:"styling",mode:e.mode,body:[e],scriptLevel:"text"}:null}case"raw":{const e=this.parseStringGroup("raw",n);return null!=e?{type:"raw",mode:"text",string:e.text}:null}case"primitive":{if(n)throw new e("A primitive argument cannot be optional");const r=this.parseGroup(t);if(null==r)throw new e("Expected group as "+t,this.fetch());return r}case"original":case null:case void 0:return this.parseArgumentGroup(n);default:throw new e("Unknown group type as "+t,this.fetch())}}consumeSpaces(){for(;;){const e=this.fetch().text;if(" "!==e&&" "!==e&&"︎"!==e)break;this.consume()}}parseStringGroup(e,t){const r=this.gullet.scanArgument(t);if(null==r)return null;let n,s="";for(;"EOF"!==(n=this.fetch()).text;)s+=n.text,this.consume();return this.consume(),r.text=s,r}parseRegexGroup(t,r){const n=this.fetch();let s,o=n,a="";for(;"EOF"!==(s=this.fetch()).text&&t.test(a+s.text);)o=s,a+=o.text,this.consume();if(""===a)throw new e("Invalid "+r+": '"+n.text+"'",n);return n.range(o,a)}parseSizeGroup(t){let r,n=!1;if(this.gullet.consumeSpaces(),r=t||"{"===this.gullet.future().text?this.parseStringGroup("size",t):this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"),!r)return null;t||0!==r.text.length||(r.text="0pt",n=!0);const s=Qr.exec(r.text);if(!s)throw new e("Invalid size: '"+r.text+"'",r);const o={number:+(s[1]+s[2]),unit:s[3]};if(!Te(o))throw new e("Invalid unit: '"+o.unit+"'",r);return{type:"size",mode:this.mode,value:o,isBlank:n}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);const t=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),null==t)return null;let r=t.text.replace(/\\([#$%&~_^{}])/g,"$1");return r=t.text.replace(/{\u2044}/g,"/"),{type:"url",mode:this.mode,url:r}}parseArgumentGroup(e,t){const r=this.gullet.scanArgument(e);if(null==r)return null;const n=this.mode;t&&this.switchMode(t),this.gullet.beginGroup();const s=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();const o={type:"ordgroup",mode:this.mode,loc:r.loc,body:s};return t&&this.switchMode(n),o}parseGroup(e,t){const r=this.fetch(),n=r.text;let s;if("{"===n||"\\begingroup"===n||"\\toggle"===n){this.consume();const e="{"===n?"}":"\\begingroup"===n?"\\endgroup":"\\endtoggle";this.gullet.beginGroup();const t=this.parseExpression(!1,e),o=this.fetch();this.expect(e),this.gullet.endGroup(),s={type:"\\endtoggle"===o.text?"toggle":"ordgroup",mode:this.mode,loc:Ue.range(r,o),body:t,semisimple:"\\begingroup"===n||void 0}}else s=this.parseFunction(t,e)||this.parseSymbol(),null!=s||"\\"!==n[0]||Object.prototype.hasOwnProperty.call(Vr,n)||(s=this.formatUnsupportedCmd(n),this.consume());return s}formLigatures(e){let t=e.length-1;for(let r=0;r<t;++r){const n=e[r],s=n.text;"-"===s&&"-"===e[r+1].text&&(r+1<t&&"-"===e[r+2].text?(e.splice(r,3,{type:"textord",mode:"text",loc:Ue.range(n,e[r+2]),text:"---"}),t-=2):(e.splice(r,2,{type:"textord",mode:"text",loc:Ue.range(n,e[r+1]),text:"--"}),t-=1)),"'"!==s&&"`"!==s||e[r+1].text!==s||(e.splice(r,2,{type:"textord",mode:"text",loc:Ue.range(n,e[r+1]),text:s+s}),t-=1)}}parseSymbol(){const t=this.fetch();let r=t.text;if(/^\\verb[^a-zA-Z]/.test(r)){this.consume();let t=r.slice(5);const n="*"===t.charAt(0);if(n&&(t=t.slice(1)),t.length<2||t.charAt(0)!==t.slice(-1))throw new e("\\verb assertion failed --\n                    please report what input caused this bug");return t=t.slice(1,-1),{type:"verb",mode:"text",body:t,star:n}}if(Object.prototype.hasOwnProperty.call(Jr,r[0])&&"math"===this.mode&&!$[this.mode][r[0]]){if(this.settings.strict&&"math"===this.mode)throw new e(`Accented Unicode text character "${r[0]}" used in math mode`,t);r=Jr[r[0]]+r.slice(1)}const n="math"===this.mode?Pr.exec(r):null;let s;if(n&&(r=r.substring(0,n.index),"i"===r?r="ı":"j"===r&&(r="ȷ")),$[this.mode][r]){let e=$[this.mode][r].group;"bin"===e&&Kr.includes(this.prevAtomType)&&(e="open");const n=Ue.range(t);let o;if(Object.prototype.hasOwnProperty.call(z,e)){const t=e;o={type:"atom",mode:this.mode,family:t,loc:n,text:r},"rel"!==t&&"bin"!==t||"text"!==this.prevAtomType||en.test(n.lexer.input.slice(n.end))&&(o.needsSpacing=!0)}else{if(Zr[r]){this.consume();const e=this.fetch().text.charCodeAt(0),t=65025===e?"mathscr":"mathcal";return 65024!==e&&65025!==e||this.consume(),{type:"font",mode:"math",font:t,body:{type:"mathord",mode:"math",loc:n,text:Zr[r]}}}o={type:e,mode:this.mode,loc:n,text:r}}s=o}else{if(!(r.charCodeAt(0)>=128||Pr.exec(r)))return null;if(this.settings.strict&&"math"===this.mode)throw new e(`Unicode text character "${r[0]}" used in math mode`,t);s={type:"textord",mode:"text",loc:Ue.range(t),text:r}}if(this.consume(),n)for(let r=0;r<n[0].length;r++){const o=n[0][r];if(!Yr[o])throw new e(`Unknown accent ' ${o}'`,t);const a=Yr[o][this.mode]||Yr[o].text;if(!a)throw new e(`Accent ${o} unsupported in ${this.mode} mode`,t);s={type:"accent",mode:this.mode,loc:Ue.range(t),label:a,isStretchy:!1,base:s}}return s}}const rn=function(t,r){if(!("string"==typeof t||t instanceof String))throw new TypeError("Temml can only parse string typed expression");const n=new tn(t,r);delete n.gullet.macros.current["\\df@tag"];let s=n.parse();if(!(s.length>0&&s[0].type&&"array"===s[0].type&&s[0].addEqnNum)&&n.gullet.macros.get("\\df@tag")){if(!r.displayMode)throw new e("\\tag works only in display mode");n.gullet.feed("\\df@tag"),s=[{type:"tag",mode:"text",body:s,tag:n.parse()}]}return s},nn=[2,2,3,3];class sn{constructor(e){this.level=e.level,this.color=e.color,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontSize=e.fontSize||1,this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.maxSize=e.maxSize}extend(e){const t={level:this.level,color:this.color,font:this.font,fontFamily:this.fontFamily,fontSize:this.fontSize,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return new sn(t)}withLevel(e){return this.extend({level:e})}incrementLevel(){return this.extend({level:Math.min(this.level+1,3)})}inSubOrSup(){return this.extend({level:nn[this.level]})}withColor(e){return this.extend({color:e})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withFontSize(e){return this.extend({fontSize:e})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}getColor(){return this.color}}function on(e){const t={};let r=0;const n=document.getElementsByClassName("tml-eqn");for(let e of n)for(r+=1,e.setAttribute("id","tml-eqn-"+String(r));"mtable"!==e.tagName;){if(e.getElementsByClassName("tml-label").length>0){const n=e.attributes.id.value;t[n]=String(r);break}e=e.parentElement}const s=document.getElementsByClassName("tml-tageqn");for(const e of s){if(e.getElementsByClassName("tml-label").length>0){const r=e.getElementsByClassName("tml-tag");if(r.length>0){const n=e.attributes.id.value;t[n]=r[0].textContent}}}[...e.getElementsByClassName("tml-ref")].forEach((e=>{const r=e.getAttribute("href");let n=t[r.slice(1)];-1===e.className.indexOf("tml-eqref")?(n=n.replace(/^\(/,""),n=n.replace(/\)$/,"")):("("!==n.charAt(0)&&(n="("+n),")"!==n.slice(-1)&&(n+=")"));const s=document.createElementNS("http://www.w3.org/1998/Math/MathML","mtext");s.appendChild(document.createTextNode(n));const o=document.createElementNS("http://www.w3.org/1998/Math/MathML","math");o.appendChild(s),e.textContent="",e.appendChild(o)}))}const an=function(e,t,r){let n=r,s=0;const o=e.length;for(;n<t.length;){const r=t[n];if(s<=0&&t.slice(n,n+o)===e)return n;"\\"===r?n++:"{"===r?s++:"}"===r&&s--,n++}return-1},ln=/^\\(?:begin|(?:eq)?ref){/,cn=[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{equation*}",right:"\\end{equation*}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{align*}",right:"\\end{align*}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{alignat*}",right:"\\end{alignat*}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{gather*}",right:"\\end{gather*}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\ref{",right:"}",display:!1},{left:"\\eqref{",right:"}",display:!1},{left:"\\[",right:"\\]",display:!0}],dn={$:[{left:"$$",right:"$$",display:!0},{left:"$`",right:"`$",display:!1},{left:"$",right:"$",display:!1}],"(":[{left:"\\[",right:"\\]",display:!0},{left:"\\(",right:"\\)",display:!1}]},mn=[{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{equation*}",right:"\\end{equation*}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{align*}",right:"\\end{align*}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{alignat*}",right:"\\end{alignat*}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{gather*}",right:"\\end{gather*}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\ref{",right:"}",display:!1},{left:"\\eqref{",right:"}",display:!1}],pn=function(t,r){const n=function(e,t){let r;const n=[],s=new RegExp("("+t.map((e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;r=e.search(s),-1!==r;){r>0&&(n.push({type:"text",data:e.slice(0,r)}),e=e.slice(r));const s=t.findIndex((t=>e.startsWith(t.left)));if(r=an(t[s].right,e,t[s].left.length),-1===r)break;const o=e.slice(0,r+t[s].right.length),a=ln.test(o)?o:e.slice(t[s].left.length,r);n.push({type:"math",data:a,rawData:o,display:t[s].display}),e=e.slice(r+t[s].right.length)}return""!==e&&n.push({type:"text",data:e}),n}(t,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;const s=document.createDocumentFragment();for(let t=0;t<n.length;t++)if("text"===n[t].type)s.appendChild(document.createTextNode(n[t].data));else{const o=document.createElement("span");let a=n[t].data;r.displayMode=n[t].display;try{r.preProcess&&(a=r.preProcess(a)),temml.render(a,o,r)}catch(o){if(!(o instanceof e))throw o;r.errorCallback("Temml auto-render: Failed to parse `"+n[t].data+"` with ",o),s.appendChild(document.createTextNode(n[t].rawData));continue}s.appendChild(o)}return s},un=function(e,t){for(let r=0;r<e.childNodes.length;r++){const n=e.childNodes[r];if(3===n.nodeType){const s=pn(n.textContent,t);s&&(r+=s.childNodes.length-1,e.replaceChild(s,n))}else if(1===n.nodeType){const e=" "+n.className+" ";-1===t.ignoredTags.indexOf(n.nodeName.toLowerCase())&&t.ignoredClasses.every((t=>-1===e.indexOf(" "+t+" ")))&&un(n,t)}}};let hn=function(e,t,r={}){t.textContent="";const n="math"===t.tagName.toLowerCase();n&&(r.wrap="none");const s=gn(e,r);n||s.children.length>1?(t.textContent="",s.children.forEach((e=>{t.appendChild(e.toNode())}))):t.appendChild(s.toNode())};"undefined"!=typeof document&&"CSS1Compat"!==document.compatMode&&("undefined"!=typeof console&&console.warn("Warning: Temml doesn't work in quirks mode. Make sure your website has a suitable doctype."),hn=function(){throw new e("Temml doesn't work in quirks mode.")});const gn=function(t,r){const n=new a(r);try{const e=rn(t,n);return he(e,t,new sn({level:n.displayMode?Ve:_e,maxSize:n.maxSize}),n)}catch(r){return function(t,r,n){if(n.throwOnError||!(t instanceof e))throw t;const s=new y(["temml-error"],[new w(r+"\n\n"+t.toString())]);return s.style.color=n.errorColor,s.style.whiteSpace="pre-line",s}(r,t,n)}};return{version:"0.11.04",render:hn,renderToString:function(e,t){return gn(e,t).toMarkup()},renderMathInElement:function(e,t){if(!e)throw new Error("No element provided to render");const r={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=t[e]);r.fences?r.delimiters=(e=>{if("$"===e||"("===e)return dn[e];if("$+"===e||"(+"===e)return dn[e.slice(0,1)].concat(mn);return"ams"===e?mn:"all"===e?dn["("].concat(dn.$).concat(mn):cn})(r.fences):r.delimiters=r.delimiters||cn,r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},un(e,r),on(e)},postProcess:on,ParseError:e,definePreamble:function(e,t){const r=new a(t);if(r.macros={},!("string"==typeof e||e instanceof String))throw new TypeError("Temml can only parse string typed expression");const n=new tn(e,r,!0);delete n.gullet.macros.current["\\df@tag"];return n.parse()},__parse:function(e,t){const r=new a(t);return rn(e,r)},__renderToMathMLTree:gn,__defineSymbol:I,__defineMacro:Ye}}();
\ No newline at end of file
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitattributes b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitattributes
new file mode 100644 (file)
index 0000000..dfe0770
--- /dev/null
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitignore b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitignore
new file mode 100644 (file)
index 0000000..755aa68
--- /dev/null
@@ -0,0 +1,6 @@
+.zig-cache
+zig-out
+.zigmod
+deps.zig
+files.zig
+zigmod.lock
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/LICENSE b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/LICENSE
new file mode 100644 (file)
index 0000000..f1db97e
--- /dev/null
@@ -0,0 +1,20 @@
+MIT License
+
+Copyright (c) 2021 Meghan Denny
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/README.md b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/README.md
new file mode 100644 (file)
index 0000000..1772b1e
--- /dev/null
@@ -0,0 +1,17 @@
+# zig-time
+
+![loc](https://sloc.xyz/github/nektro/zig-time)
+[![license](https://img.shields.io/github/license/nektro/zig-time.svg)](https://github.com/nektro/zig-time/blob/master/LICENSE)
+[![nektro @ github sponsors](https://img.shields.io/badge/sponsors-nektro-purple?logo=github)](https://github.com/sponsors/nektro)
+[![Zig](https://img.shields.io/badge/Zig-0.14-f7a41d)](https://ziglang.org/)
+[![Zigmod](https://img.shields.io/badge/Zigmod-latest-f7a41d)](https://github.com/nektro/zigmod)
+
+Exposes a `DateTime` structure that can be initialized and acted upon using various methods. All public methods return a new structure.
+
+Currently handles dates and times based on the [Proleptic Gregorian calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar) in adherence to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).
+
+Does not currently support time zones outside of UTC.
+
+Does not handle leap seconds.
+
+See the `FormatSeq` structure for display information on what to pass as a `fmt` string.
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/build.zig b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/build.zig
new file mode 100644 (file)
index 0000000..59036c2
--- /dev/null
@@ -0,0 +1,24 @@
+const std = @import("std");
+const deps = @import("./deps.zig");
+
+pub fn build(b: *std.Build) void {
+    const target = b.standardTargetOptions(.{});
+    const mode = b.option(std.builtin.Mode, "mode", "") orelse .Debug;
+    const disable_llvm = b.option(bool, "disable_llvm", "use the non-llvm zig codegen") orelse false;
+
+    const t = b.addTest(.{
+        .root_source_file = b.path("test.zig"),
+        .target = target,
+        .optimize = mode,
+    });
+    deps.addAllTo(t);
+    t.use_llvm = !disable_llvm;
+    t.use_lld = !disable_llvm;
+
+    const run_t = b.addRunArtifact(t);
+    run_t.setCwd(b.path("."));
+    run_t.has_side_effects = true;
+
+    const t_step = b.step("test", "Run all library tests");
+    t_step.dependOn(&run_t.step);
+}
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/licenses.txt b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/licenses.txt
new file mode 100644 (file)
index 0000000..e2f2f1f
--- /dev/null
@@ -0,0 +1,9 @@
+MIT:
+= https://spdx.org/licenses/MIT
+- This
+- git https://github.com/nektro/zig-expect
+- git https://github.com/nektro/zig-extras
+- git https://github.com/nektro/zig-sys-linux
+
+Unspecified:
+- system_lib c
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/test.zig b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/test.zig
new file mode 100644 (file)
index 0000000..8d89c07
--- /dev/null
@@ -0,0 +1,161 @@
+const std = @import("std");
+const string = []const u8;
+const time = @import("time");
+const expect = @import("expect").expect;
+
+pub fn main() !void {
+    std.log.info("All your codebase are belong to us.", .{});
+}
+
+fn harness(comptime seed: u64, comptime expects: []const [2]string) void {
+    for (0..expects.len) |i| {
+        _ = Case(seed, expects[i][0], expects[i][1]);
+    }
+}
+
+fn Case(comptime seed: u64, comptime fmt: string, comptime expected: string) type {
+    return struct {
+        test {
+            const alloc = std.testing.allocator;
+            const instant = time.DateTime.initUnixMs(seed);
+            const actual = try instant.formatAlloc(alloc, fmt);
+            defer alloc.free(actual);
+            std.testing.expectEqualStrings(expected, actual) catch return error.SkipZigTest;
+        }
+    };
+}
+
+fn expectFmt(instant: time.DateTime, comptime fmt: string, comptime expected: string) !void {
+    const alloc = std.testing.allocator;
+    const actual = try instant.formatAlloc(alloc, fmt);
+    defer alloc.free(actual);
+    std.testing.expectEqualStrings(expected, actual) catch return error.SkipZigTest;
+}
+
+comptime {
+    harness(0, &.{.{ "YYYY-MM-DD HH:mm:ss", "1970-01-01 00:00:00" }});
+    harness(1257894000000, &.{.{ "YYYY-MM-DD HH:mm:ss", "2009-11-10 23:00:00" }});
+    harness(1634858430000, &.{.{ "YYYY-MM-DD HH:mm:ss", "2021-10-21 23:20:30" }});
+    harness(1634858430023, &.{.{ "YYYY-MM-DD HH:mm:ss.SSS", "2021-10-21 23:20:30.023" }});
+    harness(1144509852789, &.{.{ "YYYY-MM-DD HH:mm:ss.SSS", "2006-04-08 15:24:12.789" }});
+
+    harness(1635033600000, &.{
+        .{ "H", "0" },  .{ "HH", "00" },
+        .{ "h", "12" }, .{ "hh", "12" },
+        .{ "k", "24" }, .{ "kk", "24" },
+    });
+
+    harness(1635037200000, &.{
+        .{ "H", "1" }, .{ "HH", "01" },
+        .{ "h", "1" }, .{ "hh", "01" },
+        .{ "k", "1" }, .{ "kk", "01" },
+    });
+
+    harness(1635076800000, &.{
+        .{ "H", "12" }, .{ "HH", "12" },
+        .{ "h", "12" }, .{ "hh", "12" },
+        .{ "k", "12" }, .{ "kk", "12" },
+    });
+    harness(1635080400000, &.{
+        .{ "H", "13" }, .{ "HH", "13" },
+        .{ "h", "1" },  .{ "hh", "01" },
+        .{ "k", "13" }, .{ "kk", "13" },
+    });
+
+    harness(1144509852789, &.{
+        .{ "M", "4" },
+        .{ "Mo", "4th" },
+        .{ "MM", "04" },
+        .{ "MMM", "Apr" },
+        .{ "MMMM", "April" },
+
+        .{ "Q", "2" },
+        .{ "Qo", "2nd" },
+
+        .{ "D", "8" },
+        .{ "Do", "8th" },
+        .{ "DD", "08" },
+
+        .{ "DDD", "98" },
+        .{ "DDDo", "98th" },
+        .{ "DDDD", "098" },
+
+        .{ "d", "6" },
+        .{ "do", "6th" },
+        .{ "dd", "Sa" },
+        .{ "ddd", "Sat" },
+        .{ "dddd", "Saturday" },
+        .{ "e", "6" },
+        .{ "E", "7" },
+
+        .{ "w", "14" },
+        .{ "wo", "14th" },
+        .{ "ww", "14" },
+
+        .{ "Y", "12006" },
+        .{ "YY", "06" },
+        .{ "YYY", "2006" },
+        .{ "YYYY", "2006" },
+
+        .{ "N", "AD" },
+        .{ "NN", "Anno Domini" },
+
+        .{ "A", "PM" },
+        .{ "a", "pm" },
+
+        .{ "H", "15" },
+        .{ "HH", "15" },
+        .{ "h", "3" },
+        .{ "hh", "03" },
+        .{ "k", "15" },
+        .{ "kk", "15" },
+
+        .{ "m", "24" },
+        .{ "mm", "24" },
+
+        .{ "s", "12" },
+        .{ "ss", "12" },
+
+        .{ "S", "7" },
+        .{ "SS", "78" },
+        .{ "SSS", "789" },
+
+        .{ "z", "UTC" },
+        .{ "Z", "+00:00" },
+        .{ "ZZ", "+0000" },
+
+        .{ "x", "1144509852789" },
+        .{ "X", "1144509852" },
+
+        .{ time.format.LT, "3:24 PM" },
+
+        .{ time.format.LTS, "3:24:12 PM" },
+
+        .{ time.format.L, "04/08/2006" },
+
+        .{ time.format.l, "4/8/2006" },
+
+        .{ time.format.LL, "April 8, 2006" },
+
+        .{ time.format.ll, "Apr 8, 2006" },
+
+        .{ time.format.LLL, "April 8, 2006 3:24 PM" },
+
+        .{ time.format.lll, "Apr 8, 2006 3:24 PM" },
+
+        .{ time.format.LLLL, "Saturday, April 8, 2006 3:24 PM" },
+
+        .{ time.format.llll, "Sat, Apr 8, 2006 3:24 PM" },
+    });
+
+    // https://github.com/nektro/zig-time/issues/3
+    harness(1144509852789, &.{.{ "YYYYMM", "200604" }});
+}
+
+// https://github.com/nektro/zig-time/issues/9
+test {
+    var t = time.DateTime.initUnix(1330502962);
+    try expectFmt(t, "YYYY-MM-DD hh:mm:ss A z", "2012-02-29 08:09:22 AM UTC");
+    t = t.addYears(1);
+    try expectFmt(t, "YYYY-MM-DD hh:mm:ss A z", "2013-03-01 08:09:22 AM UTC");
+}
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/time.zig b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/time.zig
new file mode 100644 (file)
index 0000000..20a95f3
--- /dev/null
@@ -0,0 +1,583 @@
+const std = @import("std");
+const builtin = @import("builtin");
+const string = []const u8;
+const extras = @import("extras");
+const sys_linux = @import("sys-linux");
+const time = @This();
+
+const sys = switch (builtin.target.os.tag) {
+    .linux => sys_linux,
+    else => unreachable, // TODO:
+};
+
+pub const DateTime = struct {
+    ms: u16,
+    seconds: u8,
+    minutes: u8,
+    hours: u8,
+    days: u8,
+    months: u8,
+    years: u16,
+    timezone: TimeZone,
+
+    pub fn initUnixMs(unix: u64) DateTime {
+        return epoch_unix.addMs(unix);
+    }
+
+    pub fn initUnix(unix: u64) DateTime {
+        return epoch_unix.addSecs(unix);
+    }
+
+    /// Caller asserts that this is > epoch
+    pub fn init(year: u16, month: u16, day: u16, hr: u16, min: u16, sec: u16, ms: u16) DateTime {
+        return epoch_unix
+            .addYears(year - epoch_unix.years)
+            .addMonths(month)
+            .addDays(day)
+            .addHours(hr)
+            .addMins(min)
+            .addSecs(sec)
+            .addMs(ms);
+    }
+
+    pub fn now() DateTime {
+        return initUnixMs(@intCast(milliTimestamp()));
+    }
+
+    pub const epoch_unix = DateTime{
+        .ms = 0,
+        .seconds = 0,
+        .minutes = 0,
+        .hours = 0,
+        .days = 0,
+        .months = 0,
+        .years = 1970,
+        .timezone = .UTC,
+    };
+
+    pub fn toISOString(self: DateTime) [20]u8 {
+        // "2021-10-21T23:20:30Z"
+        var result: [20]u8 = @splat(0);
+        var fbs = std.io.fixedBufferStream(&result);
+        self.format("YYYY-MM-DD HH:mm:ss", .{}, fbs.writer()) catch unreachable;
+        result[10] = 'T';
+        result[19] = 'Z';
+        return result;
+    }
+
+    pub fn eql(self: DateTime, other: DateTime) bool {
+        return self.ms == other.ms and
+            self.seconds == other.seconds and
+            self.minutes == other.minutes and
+            self.hours == other.hours and
+            self.days == other.days and
+            self.months == other.months and
+            self.years == other.years and
+            self.timezone == other.timezone and
+            self.weekday == other.weekday;
+    }
+
+    pub fn addMs(self: DateTime, count: u64) DateTime {
+        if (count == 0) return self;
+        var result = self;
+        result.ms += @intCast(count % 1000);
+        return result.addSecs(count / 1000);
+    }
+
+    pub fn addSecs(self: DateTime, count: u64) DateTime {
+        if (count == 0) return self;
+        var result = self;
+        result.seconds += @intCast(count % 60);
+        return result.addMins(count / 60);
+    }
+
+    pub fn addMins(self: DateTime, count: u64) DateTime {
+        if (count == 0) return self;
+        var result = self;
+        result.minutes += @intCast(count % 60);
+        return result.addHours(count / 60);
+    }
+
+    pub fn addHours(self: DateTime, count: u64) DateTime {
+        if (count == 0) return self;
+        var result = self;
+        result.hours += @intCast(count % 24);
+        return result.addDays(count / 24);
+    }
+
+    pub fn addDays(self: DateTime, count: u64) DateTime {
+        if (count == 0) return self;
+        var result = self;
+        var input = count;
+
+        while (true) {
+            const year_len = result.daysThisYear();
+            if (input >= year_len) {
+                result.years += 1;
+                input -= year_len;
+                continue;
+            }
+            break;
+        }
+        while (true) {
+            const month_len = result.daysThisMonth();
+            if (input >= month_len) {
+                result.months += 1;
+                input -= month_len;
+
+                if (result.months == 12) {
+                    result.years += 1;
+                    result.months = 0;
+                }
+                continue;
+            }
+            break;
+        }
+        {
+            const month_len = result.daysThisMonth();
+            if (result.days + input > month_len) {
+                const left = month_len -| result.days;
+                input -= left;
+                result.months += 1;
+                result.days = 0;
+            }
+            result.days += @intCast(input);
+
+            if (result.days == result.daysThisMonth()) {
+                result.months += 1;
+                result.days = 0;
+            }
+            if (result.months == 12) {
+                result.years += 1;
+                result.months = 0;
+            }
+        }
+
+        std.debug.assert(result.ms < 1000);
+        std.debug.assert(result.seconds < 60);
+        std.debug.assert(result.minutes < 60);
+        std.debug.assert(result.hours < 24);
+        std.debug.assert(result.days < result.daysThisMonth());
+        std.debug.assert(result.months < 12);
+        return result;
+    }
+
+    pub fn addWeeks(self: DateTime, count: u64) DateTime {
+        if (count == 0) return self;
+        return self.addDays(7).addWeeks(count - 1);
+    }
+
+    pub fn addMonths(self: DateTime, count: u64) DateTime {
+        if (count == 0) return self;
+        var result = self;
+        var input = count;
+        result.years += @intCast(input / 12);
+        input %= 12;
+        result.months += @intCast(input);
+        if (result.months >= 12) result.years += 1;
+        result.months %= 12;
+        result.days = @min(result.days, result.daysInMonth(result.months) - 1);
+        return result;
+    }
+
+    pub fn addYears(self: DateTime, count: u64) DateTime {
+        var result = self;
+        for (0..count) |_| {
+            result = result.addDays(result.daysThisYear());
+        }
+        return result;
+    }
+
+    pub fn addQuarters(self: DateTime, count: u64) DateTime {
+        if (count == 0) return self;
+        return self.addMonths(3).addQuarters(count - 1);
+    }
+
+    pub fn isLeapYear(self: DateTime) bool {
+        return time.isLeapYear(self.years);
+    }
+
+    pub fn daysThisYear(self: DateTime) u16 {
+        return time.daysInYear(self.years);
+    }
+
+    pub fn daysThisMonth(self: DateTime) u16 {
+        return self.daysInMonth(self.months);
+    }
+
+    fn daysInMonth(self: DateTime, month: u16) u16 {
+        return time.daysInMonth(self.years, month);
+    }
+
+    pub fn dayOfThisYear(self: DateTime) u16 {
+        var ret: u16 = 0;
+        for (0..self.months) |item| {
+            ret += self.daysInMonth(@intCast(item));
+        }
+        ret += self.days;
+        return ret;
+    }
+
+    pub fn toUnix(self: DateTime) u64 {
+        const x = self.toUnixMilli();
+        return x / 1000;
+    }
+
+    pub fn toUnixMilli(self: DateTime) u64 {
+        var res: u64 = 0;
+        res += self.ms;
+        res += @as(u64, self.seconds) * ms_per_s;
+        res += @as(u64, self.minutes) * ms_per_min;
+        res += @as(u64, self.hours) * ms_per_hour;
+        res += self.daysSinceEpoch() * ms_per_day;
+        return res;
+    }
+
+    pub fn to_timespec(self: DateTime) sys.struct_timespec {
+        return .{
+            .sec = @intCast(self.toUnix()),
+            .nsec = @as(isize, self.ms) * ns_per_ms,
+        };
+    }
+
+    fn daysSinceEpoch(self: DateTime) u64 {
+        var res: u64 = 0;
+        res += self.days;
+        for (0..self.years - epoch_unix.years) |i| res += time.daysInYear(@intCast(i));
+        for (0..self.months) |i| res += self.daysInMonth(@intCast(i));
+        return res;
+    }
+
+    /// fmt is based on https://momentjs.com/docs/#/displaying/format/
+    pub fn format(self: DateTime, comptime fmt: string, options: std.fmt.FormatOptions, writer: anytype) !void {
+        _ = options;
+
+        if (fmt.len == 0) @compileError("DateTime: format string can't be empty");
+
+        @setEvalBranchQuota(100000);
+
+        comptime var s = 0;
+        comptime var e = 0;
+        comptime var next: ?FormatSeq = null;
+        inline for (fmt, 0..) |c, i| {
+            e = i + 1;
+
+            if (comptime std.meta.stringToEnum(FormatSeq, fmt[s..e])) |tag| {
+                next = tag;
+                if (i < fmt.len - 1) continue;
+            }
+
+            if (next) |tag| {
+                switch (tag) {
+                    .MM => try writer.print("{:0>2}", .{self.months + 1}),
+                    .M => try writer.print("{}", .{self.months + 1}),
+                    .Mo => try printOrdinal(writer, self.months + 1),
+                    .MMM => try printLongName(writer, self.months, &[_]string{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }),
+                    .MMMM => try printLongName(writer, self.months, &[_]string{ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }),
+
+                    .Q => try writer.print("{}", .{self.months / 3 + 1}),
+                    .Qo => try printOrdinal(writer, self.months / 3 + 1),
+
+                    .D => try writer.print("{}", .{self.days + 1}),
+                    .Do => try printOrdinal(writer, self.days + 1),
+                    .DD => try writer.print("{:0>2}", .{self.days + 1}),
+
+                    .DDD => try writer.print("{}", .{self.dayOfThisYear() + 1}),
+                    .DDDo => try printOrdinal(writer, self.dayOfThisYear() + 1),
+                    .DDDD => try writer.print("{:0>3}", .{self.dayOfThisYear() + 1}),
+
+                    .d => try writer.print("{}", .{@intFromEnum(self.weekday())}),
+                    .do => try printOrdinal(writer, @intFromEnum(self.weekday())),
+                    .dd => try writer.writeAll(@tagName(self.weekday())[0..2]),
+                    .ddd => try writer.writeAll(@tagName(self.weekday())),
+                    .dddd => try printLongName(writer, @intFromEnum(self.weekday()), &[_]string{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }),
+                    .e => try writer.print("{}", .{@intFromEnum(self.weekday())}),
+                    .E => try writer.print("{}", .{@intFromEnum(self.weekday()) + 1}),
+
+                    .w => try writer.print("{}", .{self.dayOfThisYear() / 7 + 1}),
+                    .wo => try printOrdinal(writer, self.dayOfThisYear() / 7 + 1),
+                    .ww => try writer.print("{:0>2}", .{self.dayOfThisYear() / 7 + 1}),
+
+                    .Y => try writer.print("{}", .{self.years + 10000}),
+                    .YY => try writer.print("{:0>2}", .{self.years % 100}),
+                    .YYY => try writer.print("{}", .{self.years}),
+                    .YYYY => try writer.print("{:0>4}", .{self.years}),
+
+                    .N => try writer.writeAll(@tagName(self.era())),
+                    .NN => try writer.writeAll("Anno Domini"),
+
+                    .A => try printLongName(writer, self.hours / 12, &[_]string{ "AM", "PM" }),
+                    .a => try printLongName(writer, self.hours / 12, &[_]string{ "am", "pm" }),
+
+                    .H => try writer.print("{}", .{self.hours}),
+                    .HH => try writer.print("{:0>2}", .{self.hours}),
+                    .h => try writer.print("{}", .{wrap(self.hours, 12)}),
+                    .hh => try writer.print("{:0>2}", .{wrap(self.hours, 12)}),
+                    .k => try writer.print("{}", .{wrap(self.hours, 24)}),
+                    .kk => try writer.print("{:0>2}", .{wrap(self.hours, 24)}),
+
+                    .m => try writer.print("{}", .{self.minutes}),
+                    .mm => try writer.print("{:0>2}", .{self.minutes}),
+
+                    .s => try writer.print("{}", .{self.seconds}),
+                    .ss => try writer.print("{:0>2}", .{self.seconds}),
+
+                    .S => try writer.print("{}", .{self.ms / 100}),
+                    .SS => try writer.print("{:0>2}", .{self.ms / 10}),
+                    .SSS => try writer.print("{:0>3}", .{self.ms}),
+
+                    .z => try writer.writeAll(@tagName(self.timezone)),
+                    .Z => try writer.writeAll("+00:00"),
+                    .ZZ => try writer.writeAll("+0000"),
+
+                    .x => try writer.print("{}", .{self.toUnixMilli()}),
+                    .X => try writer.print("{}", .{self.toUnix()}),
+                }
+                next = null;
+                s = i;
+            }
+
+            switch (c) {
+                ',',
+                ' ',
+                ':',
+                '-',
+                '.',
+                'T',
+                'W',
+                '/',
+                => {
+                    try writer.writeAll(&.{c});
+                    s = i + 1;
+                    continue;
+                },
+                else => {},
+            }
+        }
+    }
+
+    pub fn formatAlloc(self: DateTime, alloc: std.mem.Allocator, comptime fmt: string) !string {
+        var list = std.ArrayList(u8).init(alloc);
+        defer list.deinit();
+
+        try self.format(fmt, .{}, list.writer());
+        return list.toOwnedSlice();
+    }
+
+    const FormatSeq = enum {
+        M, // 1 2 ... 11 12
+        Mo, // 1st 2nd ... 11th 12th
+        MM, // 01 02 ... 11 12
+        MMM, // Jan Feb ... Nov Dec
+        MMMM, // January February ... November December
+        Q, // 1 2 3 4
+        Qo, // 1st 2nd 3rd 4th
+        D, // 1 2 ... 30 31
+        Do, // 1st 2nd ... 30th 31st
+        DD, // 01 02 ... 30 31
+        DDD, // 1 2 ... 364 365
+        DDDo, // 1st 2nd ... 364th 365th
+        DDDD, // 001 002 ... 364 365
+        d, // 0 1 ... 5 6
+        do, // 0th 1st ... 5th 6th
+        dd, // Su Mo ... Fr Sa
+        ddd, // Sun Mon ... Fri Sat
+        dddd, // Sunday Monday ... Friday Saturday
+        e, // 0 1 ... 5 6 (locale)
+        E, // 1 2 ... 6 7 (ISO)
+        w, // 1 2 ... 52 53
+        wo, // 1st 2nd ... 52nd 53rd
+        ww, // 01 02 ... 52 53
+        Y, // 11970 11971 ... 19999 20000 20001 (Holocene calendar)
+        YY, // 70 71 ... 29 30
+        YYY, // 1 2 ... 1970 1971 ... 2029 2030
+        YYYY, // 0001 0002 ... 1970 1971 ... 2029 2030
+        N, // BC AD
+        NN, // Before Christ ... Anno Domini
+        A, // AM PM
+        a, // am pm
+        H, // 0 1 ... 22 23
+        HH, // 00 01 ... 22 23
+        h, // 1 2 ... 11 12
+        hh, // 01 02 ... 11 12
+        k, // 1 2 ... 23 24
+        kk, // 01 02 ... 23 24
+        m, // 0 1 ... 58 59
+        mm, // 00 01 ... 58 59
+        s, // 0 1 ... 58 59
+        ss, // 00 01 ... 58 59
+        S, // 0 1 ... 8 9 (second fraction)
+        SS, // 00 01 ... 98 99
+        SSS, // 000 001 ... 998 999
+        z, // EST CST ... MST PST
+        Z, // -07:00 -06:00 ... +06:00 +07:00
+        ZZ, // -0700 -0600 ... +0600 +0700
+        x, // unix milli
+        X, // unix
+    };
+
+    pub fn since(self: DateTime, other_in_the_past: DateTime) Duration {
+        return Duration{
+            .ms = self.toUnixMilli() - other_in_the_past.toUnixMilli(),
+        };
+    }
+
+    pub fn era(self: DateTime) Era {
+        if (self.years >= 0) return .AD;
+        @compileError("TODO");
+    }
+
+    pub fn weekday(self: DateTime) WeekDay {
+        var i = self.daysSinceEpoch() % 7;
+        var result = WeekDay.Thu; // weekday of epoch_unix
+        while (i > 0) : (i -= 1) {
+            result = result.next();
+        }
+        return result;
+    }
+};
+
+pub const format = struct {
+    pub const LT = "h:mm A";
+    pub const LTS = "h:mm:ss A";
+    pub const L = "MM/DD/YYYY";
+    pub const l = "M/D/YYY";
+    pub const LL = "MMMM D, YYYY";
+    pub const ll = "MMM D, YYY";
+    pub const LLL = LL ++ " " ++ LT;
+    pub const lll = ll ++ " " ++ LT;
+    pub const LLLL = "dddd, " ++ LLL;
+    pub const llll = "ddd, " ++ lll;
+};
+
+pub const TimeZone = enum {
+    UTC,
+
+    pub fn jsonStringify(self: @This(), json_stream: anytype) !void {
+        try json_stream.write(@tagName(self));
+    }
+};
+
+pub const WeekDay = enum {
+    Sun,
+    Mon,
+    Tue,
+    Wed,
+    Thu,
+    Fri,
+    Sat,
+
+    pub fn next(self: WeekDay) WeekDay {
+        return switch (self) {
+            .Sun => .Mon,
+            .Mon => .Tue,
+            .Tue => .Wed,
+            .Wed => .Thu,
+            .Thu => .Fri,
+            .Fri => .Sat,
+            .Sat => .Sun,
+        };
+    }
+
+    pub fn jsonStringify(self: @This(), json_stream: anytype) !void {
+        try json_stream.write(@tagName(self));
+    }
+};
+
+pub const Era = enum {
+    // BC,
+    AD,
+
+    pub fn jsonStringify(self: @This(), json_stream: anytype) !void {
+        try json_stream.write(@tagName(self));
+    }
+};
+
+pub fn isLeapYear(year: u16) bool {
+    var ret = false;
+    if (year % 4 == 0) ret = true;
+    if (year % 100 == 0) ret = false;
+    if (year % 400 == 0) ret = true;
+    return ret;
+}
+
+pub fn daysInYear(year: u16) u16 {
+    return if (isLeapYear(year)) 366 else 365;
+}
+
+fn daysInMonth(year: u16, month: u16) u16 {
+    const norm = [12]u16{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+    const leap = [12]u16{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+    const month_days = if (!isLeapYear(year)) norm else leap;
+    return month_days[month];
+}
+
+fn printOrdinal(writer: anytype, num: u16) !void {
+    try writer.print("{}", .{num});
+    try writer.writeAll(switch (num) {
+        1 => "st",
+        2 => "nd",
+        3 => "rd",
+        else => "th",
+    });
+}
+
+fn printLongName(writer: anytype, index: u16, names: []const string) !void {
+    try writer.writeAll(names[index]);
+}
+
+fn wrap(val: u16, at: u16) u16 {
+    const tmp = val % at;
+    return if (tmp == 0) at else tmp;
+}
+
+pub const Duration = struct {
+    ms: u64,
+};
+
+// Divisions of a nanosecond.
+pub const ns_per_us = 1000;
+pub const ns_per_ms = 1000 * ns_per_us;
+pub const ns_per_s = 1000 * ns_per_ms;
+pub const ns_per_min = 60 * ns_per_s;
+pub const ns_per_hour = 60 * ns_per_min;
+pub const ns_per_day = 24 * ns_per_hour;
+pub const ns_per_week = 7 * ns_per_day;
+
+// Divisions of a microsecond.
+pub const us_per_ms = 1000;
+pub const us_per_s = 1000 * us_per_ms;
+pub const us_per_min = 60 * us_per_s;
+pub const us_per_hour = 60 * us_per_min;
+pub const us_per_day = 24 * us_per_hour;
+pub const us_per_week = 7 * us_per_day;
+
+// Divisions of a millisecond.
+pub const ms_per_s = 1000;
+pub const ms_per_min = 60 * ms_per_s;
+pub const ms_per_hour = 60 * ms_per_min;
+pub const ms_per_day = 24 * ms_per_hour;
+pub const ms_per_week = 7 * ms_per_day;
+
+// Divisions of a second.
+pub const s_per_min = 60;
+pub const s_per_hour = s_per_min * 60;
+pub const s_per_day = s_per_hour * 24;
+pub const s_per_week = s_per_day * 7;
+
+pub fn nanoTimestamp() i128 {
+    const ts = sys.clock_gettime(sys.CLOCK.REALTIME) catch return 0;
+    var result: i128 = 0;
+    result += ts.sec;
+    result *= ns_per_s;
+    result += ts.nsec;
+    return result;
+}
+
+pub fn microTimestamp() i64 {
+    return @as(i64, @intCast(@divFloor(nanoTimestamp(), ns_per_us)));
+}
+
+pub fn milliTimestamp() i64 {
+    return @as(i64, @intCast(@divFloor(nanoTimestamp(), ns_per_ms)));
+}
diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/zig.mod b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/zig.mod
new file mode 100644 (file)
index 0000000..7c26948
--- /dev/null
@@ -0,0 +1,11 @@
+id: iecwp4b3bsfmpp4x99gjo4a5ljv6ix4owy8czip32yanpvlb
+name: time
+main: time.zig
+license: MIT
+description: A date and time parsing and formatting library for Zig.
+min_zig_version: 0.11.0-dev.1681+0bb178bbb
+dependencies:
+  - src: git https://github.com/nektro/zig-extras
+  - src: git https://github.com/nektro/zig-sys-linux
+root_dependencies:
+  - src: git https://github.com/nektro/zig-expect
diff --git a/content/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.smd b/content/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.smd
new file mode 100644 (file)
index 0000000..ba16b8b
--- /dev/null
@@ -0,0 +1,32 @@
+---
+.title = "One of the best Skills I've learned as a Programmer",
+.date = @date("2026-04-19T00:00:00"),
+.author = "Sample Author",
+.layout = "post.shtml",
+.draft = false,
+--- 
+
+There are many different skills one might invest it when getting into programming.
+There is a plethora of programming languages, each with their unique appeal.
+And within each language ecosystem, a plethora of web frameworks and stuff to learn.
+
+But for me, one of the greatest investments came from something else altogether:
+learning how to touch type.
+
+For those of you that don't know, touch typing basically means typing without
+looking at your keyboard. But I include in the definition typing with all your 
+fingers.
+
+Before learning to touch type, I only used both my index fingers. I literally did 
+not use any other finger. One day, I decided to change that and started dedicating
+a lot of time to acquiring the ability to touch type.
+
+There was a free website I used for this, whose name I have since forgotten.
+Something like typingrace of something like that.
+
+Anywho, today, I can write at ~120 WPM, which is not a crazy speed, but pretty
+respectable, if I may say so myself. Sometimes I just like typing whatever to feel
+the vertigo as my fingers speed through my keyboard.
+
+Also, this is a transferable skill, so if you can't touch type yet, I encourage you
+to.
diff --git a/content/2026-04-30-how-i-manage-my-blog.smd b/content/2026-04-30-how-i-manage-my-blog.smd
new file mode 100644 (file)
index 0000000..b6ac3bc
--- /dev/null
@@ -0,0 +1,48 @@
+---
+.title = "How I Manage my Blog",
+.date = @date("2026-04-30T00:00:00"),
+.author = "Sample Author",
+.layout = "post.shtml",
+.draft = false,
+---
+
+There is an accompanying video devlog available on YouTube, where I go more in
+depth about how this stuff is actually implemented: <a
+href="https://www.youtube.com/watch?v=c6z5A_PRodg">https://www.youtube.com/watch?v=c6z5A_PRodg</a>.
+
+Recently I went down the Kubernetes rabbit-hole and automated my whole blog's
+pipeline. From build to deployment. No GitHub actions or any other 3rd party CI
+provider. All self-hosted, literally. Well, with the sole exception of
+CloudFlare Tunnels, of course. 
+
+How did I do it?
+
+For starters, my blog repository is deployed as static files in a NGINX Docker
+container. As part of the build process, I execute a little CLI tool I built in
+Zig to transform my posts from markdown to html.
+
+So, I process the posts, build the image, tag it appropriately and push it to
+Docker Hub. This is all automated in my git server, as we'll see in a minute.
+
+Next, my stuff is hosted in a git server that I own. This server is exposed via
+SSH and cloudflare tunnels. I have it configured to only allow public key
+authentication and no root login, for example. Also, the SSH port is not
+publicly exposed and is only accessible via cloudflared.
+
+Now, Git has hooks for both server and client. In this case, we are interested
+in the post-receive server hook. This hook runs after the changes have been
+accepted by the server, so we have access to the latest code.
+
+In my case, what the hook does is clone the repository from the bare repo in
+the server, execute the build script (that is located in the cloned
+repository), and finally executes a rollout in my Kubernetes cluster to pull
+the latest image.
+
+So, that's it. A pretty damn simple configuration, if I may say.
+
+Next steps for me would be to configure redundancy for the disk where my git
+stuff is. Right now I have the stuff in my local dev machine and on that
+server, but ideally I'd want to make backups to an external drive periodically.
+
+If you, dear reader, have any tips or tricks for me, please feel free to 
+contact me in whichever way you might deem appropriate.
diff --git a/content/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.smd b/content/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.smd
new file mode 100644 (file)
index 0000000..d0764f9
--- /dev/null
@@ -0,0 +1,71 @@
+---
+.title = "How I cut my expenses by a freaking lot",
+.date = @date("2026-05-02T00:00:00"),
+.author = "Sample Author",
+.layout = "post.shtml",
+.draft = false,
+---
+
+Let's start with the why.
+
+I have no family, and, as of the time of writing, no university degree either.
+This means that were I to be fired from my current job, I'd have a hard time
+(probably, I don't really know) finding a new one, and that I'd have no where
+to go but the street. I <i>could</i> go to a friend's, but I would not want to
+bother them like that.
+
+Then, a few months ago I started seriously thinking about the role of AI in my
+area of work. I do not think AI can replace developers (I've seen it try and
+fail magnificently) but I am also aware of the fact that employers do think so,
+and, at least in my environment, have already started putting into action plans
+to cut personnel and replace humans with AI tools.
+
+This led me to have a little crisis. I thought about switching careers and more
+extreme things as well. As of today, I no longer have these feelings. I love
+programming and I will continue doing it in whichever way I can. At the same
+time, I was thinking: what is it that I really need to have a "happy" life? For
+me, the answer is books, coffee and someplace I can walk in peace while
+listening to podcasts and stuff.
+
+As you can see, I need barely any money for these things. And right now I am
+living in a city where I can do the latter. So, this realization led me to make
+a budget. Write down how much money I actually need in order to live. This
+resulted in a grand total of about 250 US dollars per month. Let's break it down.
+
+I spend around 120 USD a month in groceries, 20 USD in laundry, 8 for YouTube
+premium and ... well, that's it. I am excluding rent because I am in the
+process of moving, but I am aiming to go somewhere under 200 USD. Right now I
+am in a 500 USD apartment, but only because I took the first thing I found,
+since I came fleeing Guayaquil after being almost murdered in the street.
+
+What did I do in order to achieve this?
+
+First, groceries. I started <i>really</i> looking at the prices of stuff I was
+buying. I did not sacrifice quality for price. I found alternative products,
+and bought at cheaper replaces. I also set a hard rule of absolutely no eating
+out. Only in <i>very</i> special ocassions. You might try and gaslight yourself
+into believing that you <i>need</i> to eat out in order to socialize or
+whatever, but if you learned to cook well you could have friends at your house
+for dinner, for example. I say from the bottom of my heart that I like my food
+way more than a great deal of restaurants I've been to.
+
+Next, I stopped smoking. This one is self-explanatory. Cigarrettes are freaking
+expensive.
+
+The other thing is I started doing as much as I can online. So for example,
+books and classes for whatever are usually cheaper online. You don't have to
+pay for delivery or transportation this way either.
+
+Then, I started using the least amount of clothes possible. A week, I use 12
+pieces of underwear, 6 shirts, 2 short and 1 sweater. Also, the cloth needs to
+be as lightweight as possible. So, no jeans. This way, I took my laundry cost
+from ~8USD a week to ~3USD. I live in a pretty cold city, but surprisingly I've
+found that my body has adapted pretty well. I barely feel any cold anymore.
+
+That's basically it. Pretty simple, but effective. I honestly think we've
+gotten too lazy and used to the comforts of modernity, which is exactly what
+our capitalistic society wants. They want us to cOnSOom.
+
+I hope you got something useful from this, and I really encourage you to try
+and get out of the trap of consumerism. If you can afford it. And if you have a
+different perspective, please don't hesitate to share it.
diff --git a/content/index.smd b/content/index.smd
new file mode 100644 (file)
index 0000000..70d1f1a
--- /dev/null
@@ -0,0 +1,7 @@
+---
+.title = "Programming and Friends",
+.date = @date("1990-01-01T00:00:00"),
+.author = "Alexander Goussas",
+.layout = "index.shtml",
+.draft = false,
+--- 
diff --git a/layouts/index.shtml b/layouts/index.shtml
new file mode 100644 (file)
index 0000000..5a2098f
--- /dev/null
@@ -0,0 +1,18 @@
+<extend template="base.shtml">
+<head id="head">
+</head>
+<body id="body">
+       <h1 :text="$page.title"></h1>
+       <div :html="$page.content()"></div>
+       <div>
+               <h2>Posts</h2>
+               <div :loop="$page.subpages()">
+      <div class="post-preview">
+                         <span class="date" :text="$loop.it.date.format('January 02, 2006')"></span>
+                         <a href="$loop.it.link()">
+                               <h3 :text="$loop.it.title"></h3>
+                         </a>
+      </div>
+               </div>
+       </div>
+</body>
diff --git a/layouts/page.shtml b/layouts/page.shtml
new file mode 100644 (file)
index 0000000..36efa7f
--- /dev/null
@@ -0,0 +1,7 @@
+<extend template="base.shtml">
+<head id="head">
+</head>
+<body id="body">
+       <h1 :text="$page.title"></h1>
+       <div :html="$page.content()"></div>
+</body>
diff --git a/layouts/post.shtml b/layouts/post.shtml
new file mode 100644 (file)
index 0000000..74329a5
--- /dev/null
@@ -0,0 +1,21 @@
+<extend template="base.shtml">
+<head id="head">
+</head>
+<body id="body">
+       <h1 :text="$page.title"></h1>
+       <div class="post" :html="$page.content()"></div>
+       <div id="prev-next">
+               <div :if="$page.prevPage?()">
+                       <a href="$if.link()">
+                               ←
+                               <span :text="$if.title"></span>
+                       </a>
+               </div>
+               <div :if="$page.nextPage?()">
+                       <a href="$if.link()">
+                               <span :text="$if.title"></span>
+                               →
+                       </a>
+               </div>
+       </div>
+</body>
diff --git a/layouts/rss.xml b/layouts/rss.xml
new file mode 100644 (file)
index 0000000..ec985d0
--- /dev/null
@@ -0,0 +1,21 @@
+<rss version="2.0">
+  <channel>
+    <title :text="$site.title"></title>
+    <link :text="$site.host_url"></link>
+    <description :text="$site.title.suffix(' - Blog')"></description>
+    <generator>Zine -- https://zine-ssg.io</generator>
+    <language>en-US</language>
+    <lastBuildDate :text="$build.generated.formatHTTP()"></lastBuildDate>
+    <ctx :if="$page.subpages().first?()">
+      <ctx :loop="$if.contentSections().slice(1)">
+        <item>
+          <title :text="$loop.it.heading()"></title>
+          <description :text="$loop.it.html()"></description>
+          <link :text="$site.host_url.addPath($page.link().suffix('#', $loop.it.id))"></link>
+          <pubDate :text="$loop.it.id.parseDate().formatHTTP()"></pubDate>
+          <guid :text="$site.host_url.addPath($page.link().suffix('#', $loop.it.id))"></guid>
+        </item>
+      </ctx>
+    </ctx>
+  </channel>
+</rss>
diff --git a/layouts/templates/base.shtml b/layouts/templates/base.shtml
new file mode 100644 (file)
index 0000000..337d76e
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title :text="$site.title"></title>
+               <link type="text/css" rel="stylesheet" href="$site.asset('styles.css').link()">
+               <link type="text/css" rel="stylesheet" href="$site.asset('highlight.css').link()">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="$site.asset('Temml-Local.css').link()">
+               <script defer src="$site.asset('temml.min.js').link()"></script>
+               <script defer src="$site.asset('render-mathtex.js').link()"></script>
+               <!-- /mathtex -->
+               <super>
+       </head>
+       <body id="body">
+    <img id="logo" src="$site.asset('logo.png').link()" >
+    <img id="hornet" src="$site.asset('hornet.png').link()" >
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="$site.page('').link()">home</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: purple;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: blue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               <super>
+               <footer>
+                       <hr>
+               </footer>
+       </body>
+</html>
diff --git a/posts/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md b/posts/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md
deleted file mode 100644 (file)
index 7d379d4..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: One of the best Skills I've learned as a Programmer
-date: 19 april 2026
----
-
-There are many different skills one might invest it when getting into programming.
-There is a plethora of programming languages, each with their unique appeal.
-And within each language ecosystem, a plethora of web frameworks and stuff to learn.
-
-But for me, one of the greatest investments came from something else altogether:
-learning how to touch type.
-
-For those of you that don't know, touch typing basically means typing without
-looking at your keyboard. But I include in the definition typing with all your 
-fingers.
-
-Before learning to touch type, I only used both my index fingers. I literally did 
-not use any other finger. One day, I decided to change that and started dedicating
-a lot of time to acquiring the ability to touch type.
-
-There was a free website I used for this, whose name I have since forgotten.
-Something like typingrace of something like that.
-
-Anywho, today, I can write at ~120 WPM, which is not a crazy speed, but pretty
-respectable, if I may say so myself. Sometimes I just like typing whatever to feel
-the vertigo as my fingers speed through my keyboard.
-
-Also, this is a transferable skill, so if you can't touch type yet, I encourage you
-to.
diff --git a/posts/2026-04-30-how-i-manage-my-blog.md b/posts/2026-04-30-how-i-manage-my-blog.md
deleted file mode 100644 (file)
index 6d6dec4..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: How I Manage my Blog
-date: 30 april 2026
----
-
-There is an accompanying video devlog available on YouTube, where I go more in
-depth about how this stuff is actually implemented: <a
-href="https://www.youtube.com/watch?v=c6z5A_PRodg">https://www.youtube.com/watch?v=c6z5A_PRodg</a>.
-
-Recently I went down the Kubernetes rabbit-hole and automated my whole blog's
-pipeline. From build to deployment. No GitHub actions or any other 3rd party CI
-provider. All self-hosted, literally. Well, with the sole exception of
-CloudFlare Tunnels, of course. 
-
-How did I do it?
-
-For starters, my blog repository is deployed as static files in a NGINX Docker
-container. As part of the build process, I execute a little CLI tool I built in
-Zig to transform my posts from markdown to html.
-
-So, I process the posts, build the image, tag it appropriately and push it to
-Docker Hub. This is all automated in my git server, as we'll see in a minute.
-
-Next, my stuff is hosted in a git server that I own. This server is exposed via
-SSH and cloudflare tunnels. I have it configured to only allow public key
-authentication and no root login, for example. Also, the SSH port is not
-publicly exposed and is only accessible via cloudflared.
-
-Now, Git has hooks for both server and client. In this case, we are interested
-in the post-receive server hook. This hook runs after the changes have been
-accepted by the server, so we have access to the latest code.
-
-In my case, what the hook does is clone the repository from the bare repo in
-the server, execute the build script (that is located in the cloned
-repository), and finally executes a rollout in my Kubernetes cluster to pull
-the latest image.
-
-So, that's it. A pretty damn simple configuration, if I may say.
-
-Next steps for me would be to configure redundancy for the disk where my git
-stuff is. Right now I have the stuff in my local dev machine and on that
-server, but ideally I'd want to make backups to an external drive periodically.
-
-If you, dear reader, have any tips or tricks for me, please feel free to 
-contact me in whichever way you might deem appropriate.
diff --git a/posts/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md b/posts/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md
deleted file mode 100644 (file)
index f844192..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
----
-title: How I cut my expenses by a freaking lot
-date: 2 may 2026
----
-
-Let's start with the why.
-
-I have no family, and, as of the time of writing, no university degree either.
-This means that were I to be fired from my current job, I'd have a hard time
-(probably, I don't really know) finding a new one, and that I'd have no where
-to go but the street. I <i>could</i> go to a friend's, but I would not want to
-bother them like that.
-
-Then, a few months ago I started seriously thinking about the role of AI in my
-area of work. I do not think AI can replace developers (I've seen it try and
-fail magnificently) but I am also aware of the fact that employers do think so,
-and, at least in my environment, have already started putting into action plans
-to cut personnel and replace humans with AI tools.
-
-This led me to have a little crisis. I thought about switching careers and more
-extreme things as well. As of today, I no longer have these feelings. I love
-programming and I will continue doing it in whichever way I can. At the same
-time, I was thinking: what is it that I really need to have a "happy" life? For
-me, the answer is books, coffee and someplace I can walk in peace while
-listening to podcasts and stuff.
-
-As you can see, I need barely any money for these things. And right now I am
-living in a city where I can do the latter. So, this realization led me to make
-a budget. Write down how much money I actually need in order to live. This
-resulted in a grand total of about 250 US dollars per month. Let's break it down.
-
-I spend around 120 USD a month in groceries, 20 USD in laundry, 8 for YouTube
-premium and ... well, that's it. I am excluding rent because I am in the
-process of moving, but I am aiming to go somewhere under 200 USD. Right now I
-am in a 500 USD apartment, but only because I took the first thing I found,
-since I came fleeing Guayaquil after being almost murdered in the street.
-
-What did I do in order to achieve this?
-
-First, groceries. I started <i>really</i> looking at the prices of stuff I was
-buying. I did not sacrifice quality for price. I found alternative products,
-and bought at cheaper replaces. I also set a hard rule of absolutely no eating
-out. Only in <i>very</i> special ocassions. You might try and gaslight yourself
-into believing that you <i>need</i> to eat out in order to socialize or
-whatever, but if you learned to cook well you could have friends at your house
-for dinner, for example. I say from the bottom of my heart that I like my food
-way more than a great deal of restaurants I've been to.
-
-Next, I stopped smoking. This one is self-explanatory. Cigarrettes are freaking
-expensive.
-
-The other thing is I started doing as much as I can online. So for example,
-books and classes for whatever are usually cheaper online. You don't have to
-pay for delivery or transportation this way either.
-
-Then, I started using the least amount of clothes possible. A week, I use 12
-pieces of underwear, 6 shirts, 2 short and 1 sweater. Also, the cloth needs to
-be as lightweight as possible. So, no jeans. This way, I took my laundry cost
-from ~8USD a week to ~3USD. I live in a pretty cold city, but surprisingly I've
-found that my body has adapted pretty well. I barely feel any cold anymore.
-
-That's basically it. Pretty simple, but effective. I honestly think we've
-gotten too lazy and used to the comforts of modernity, which is exactly what
-our capitalistic society wants. They want us to cOnSOom.
-
-I hope you got something useful from this, and I really encourage you to try
-and get out of the trap of consumerism. If you can afford it. And if you have a
-different perspective, please don't hesitate to share it.
diff --git a/public/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/index.html b/public/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/index.html
new file mode 100644 (file)
index 0000000..926364f
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
+
+       </head>
+       <body id="body">
+    <img id="logo" src="/logo.png">
+    <img id="hornet" src="/hornet.png">
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: purple;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: blue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               
+       <h1>One of the best Skills I&apos;ve learned as a Programmer</h1>
+       <div class="post"><p>There are many different skills one might invest it when getting into programming. There is a plethora of programming languages, each with their unique appeal. And within each language ecosystem, a plethora of web frameworks and stuff to learn.</p><p>But for me, one of the greatest investments came from something else altogether: learning how to touch type.</p><p>For those of you that don’t know, touch typing basically means typing without looking at your keyboard. But I include in the definition typing with all your fingers.</p><p>Before learning to touch type, I only used both my index fingers. I literally did not use any other finger. One day, I decided to change that and started dedicating a lot of time to acquiring the ability to touch type.</p><p>There was a free website I used for this, whose name I have since forgotten. Something like typingrace of something like that.</p><p>Anywho, today, I can write at ~120 WPM, which is not a crazy speed, but pretty respectable, if I may say so myself. Sometimes I just like typing whatever to feel the vertigo as my fingers speed through my keyboard.</p><p>Also, this is a transferable skill, so if you can’t touch type yet, I encourage you to.</p></div>
+       <div id="prev-next">
+               <div></div>
+               <div>
+                       <a href="/2026-04-30-how-i-manage-my-blog/">
+                               <span>How I Manage my Blog</span>
+                               →
+                       </a>
+               </div>
+       </div>
+
+               <footer>
+                       <hr>
+               </footer>
+       </body>
+</html>
diff --git a/public/2026-04-30-how-i-manage-my-blog/index.html b/public/2026-04-30-how-i-manage-my-blog/index.html
new file mode 100644 (file)
index 0000000..45c5c96
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
+
+       </head>
+       <body id="body">
+    <img id="logo" src="/logo.png">
+    <img id="hornet" src="/hornet.png">
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: purple;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: blue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               
+       <h1>How I Manage my Blog</h1>
+       <div class="post"><p>There is an accompanying video devlog available on YouTube, where I go more in depth about how this stuff is actually implemented: <a
+href="https://www.youtube.com/watch?v=c6z5A_PRodg"><a href="https://www.youtube.com/watch?v=c6z5A_PRodg" target="_blank">https://www.youtube.com/watch?v=c6z5A_PRodg</a></a>.</p><p>Recently I went down the Kubernetes rabbit-hole and automated my whole blog’s pipeline. From build to deployment. No GitHub actions or any other 3rd party CI provider. All self-hosted, literally. Well, with the sole exception of CloudFlare Tunnels, of course.</p><p>How did I do it?</p><p>For starters, my blog repository is deployed as static files in a NGINX Docker container. As part of the build process, I execute a little CLI tool I built in Zig to transform my posts from markdown to html.</p><p>So, I process the posts, build the image, tag it appropriately and push it to Docker Hub. This is all automated in my git server, as we’ll see in a minute.</p><p>Next, my stuff is hosted in a git server that I own. This server is exposed via SSH and cloudflare tunnels. I have it configured to only allow public key authentication and no root login, for example. Also, the SSH port is not publicly exposed and is only accessible via cloudflared.</p><p>Now, Git has hooks for both server and client. In this case, we are interested in the post-receive server hook. This hook runs after the changes have been accepted by the server, so we have access to the latest code.</p><p>In my case, what the hook does is clone the repository from the bare repo in the server, execute the build script (that is located in the cloned repository), and finally executes a rollout in my Kubernetes cluster to pull the latest image.</p><p>So, that’s it. A pretty damn simple configuration, if I may say.</p><p>Next steps for me would be to configure redundancy for the disk where my git stuff is. Right now I have the stuff in my local dev machine and on that server, but ideally I’d want to make backups to an external drive periodically.</p><p>If you, dear reader, have any tips or tricks for me, please feel free to contact me in whichever way you might deem appropriate.</p></div>
+       <div id="prev-next">
+               <div>
+                       <a href="/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/">
+                               ←
+                               <span>One of the best Skills I&apos;ve learned as a Programmer</span>
+                       </a>
+               </div>
+               <div>
+                       <a href="/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/">
+                               <span>How I cut my expenses by a freaking lot</span>
+                               →
+                       </a>
+               </div>
+       </div>
+
+               <footer>
+                       <hr>
+               </footer>
+       </body>
+</html>
diff --git a/public/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/index.html b/public/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/index.html
new file mode 100644 (file)
index 0000000..499c828
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
+
+       </head>
+       <body id="body">
+    <img id="logo" src="/logo.png">
+    <img id="hornet" src="/hornet.png">
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: purple;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: blue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               
+       <h1>How I cut my expenses by a freaking lot</h1>
+       <div class="post"><p>Let’s start with the why.</p><p>I have no family, and, as of the time of writing, no university degree either. This means that were I to be fired from my current job, I’d have a hard time (probably, I don’t really know) finding a new one, and that I’d have no where to go but the street. I <i>could</i> go to a friend’s, but I would not want to bother them like that.</p><p>Then, a few months ago I started seriously thinking about the role of AI in my area of work. I do not think AI can replace developers (I’ve seen it try and fail magnificently) but I am also aware of the fact that employers do think so, and, at least in my environment, have already started putting into action plans to cut personnel and replace humans with AI tools.</p><p>This led me to have a little crisis. I thought about switching careers and more extreme things as well. As of today, I no longer have these feelings. I love programming and I will continue doing it in whichever way I can. At the same time, I was thinking: what is it that I really need to have a “happy” life? For me, the answer is books, coffee and someplace I can walk in peace while listening to podcasts and stuff.</p><p>As you can see, I need barely any money for these things. And right now I am living in a city where I can do the latter. So, this realization led me to make a budget. Write down how much money I actually need in order to live. This resulted in a grand total of about 250 US dollars per month. Let’s break it down.</p><p>I spend around 120 USD a month in groceries, 20 USD in laundry, 8 for YouTube premium and … well, that’s it. I am excluding rent because I am in the process of moving, but I am aiming to go somewhere under 200 USD. Right now I am in a 500 USD apartment, but only because I took the first thing I found, since I came fleeing Guayaquil after being almost murdered in the street.</p><p>What did I do in order to achieve this?</p><p>First, groceries. I started <i>really</i> looking at the prices of stuff I was buying. I did not sacrifice quality for price. I found alternative products, and bought at cheaper replaces. I also set a hard rule of absolutely no eating out. Only in <i>very</i> special ocassions. You might try and gaslight yourself into believing that you <i>need</i> to eat out in order to socialize or whatever, but if you learned to cook well you could have friends at your house for dinner, for example. I say from the bottom of my heart that I like my food way more than a great deal of restaurants I’ve been to.</p><p>Next, I stopped smoking. This one is self-explanatory. Cigarrettes are freaking expensive.</p><p>The other thing is I started doing as much as I can online. So for example, books and classes for whatever are usually cheaper online. You don’t have to pay for delivery or transportation this way either.</p><p>Then, I started using the least amount of clothes possible. A week, I use 12 pieces of underwear, 6 shirts, 2 short and 1 sweater. Also, the cloth needs to be as lightweight as possible. So, no jeans. This way, I took my laundry cost from ~8USD a week to ~3USD. I live in a pretty cold city, but surprisingly I’ve found that my body has adapted pretty well. I barely feel any cold anymore.</p><p>That’s basically it. Pretty simple, but effective. I honestly think we’ve gotten too lazy and used to the comforts of modernity, which is exactly what our capitalistic society wants. They want us to cOnSOom.</p><p>I hope you got something useful from this, and I really encourage you to try and get out of the trap of consumerism. If you can afford it. And if you have a different perspective, please don’t hesitate to share it.</p></div>
+       <div id="prev-next">
+               <div>
+                       <a href="/2026-04-30-how-i-manage-my-blog/">
+                               ←
+                               <span>How I Manage my Blog</span>
+                       </a>
+               </div>
+               <div></div>
+       </div>
+
+               <footer>
+                       <hr>
+               </footer>
+       </body>
+</html>
diff --git a/public/Temml-Local.css b/public/Temml-Local.css
new file mode 100644 (file)
index 0000000..fe05099
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+Temml.woff2 is a clone of KaTeX_Script-Regular, except that the code points
+have been changed from ASCII to Unicode Mathematical Alphanumeric Symbols Script capitals,
+Unicode range 1D49C to 1D4B5.
+*/
+
+@font-face {
+  font-family: 'Temml';
+  src: url('Temml.woff2') format('woff2');
+  font-weight: normal;
+  font-style: normal;
+}
+
+math {
+  font-family: "Cambria Math", 'STIXTwoMath-Regular', 'NotoSansMath-Regular', math;
+  font-style: normal;
+  font-weight: normal;
+  line-height: normal;
+  font-size-adjust: none;
+  text-indent: 0;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  direction: ltr;
+  /* Prevent Firefox from omitting the dot on i or j. */
+  font-feature-settings: "dtls" off;
+}
+
+math * {
+  border-color: currentColor;
+}
+
+/* Next line is active in Firefox and Safari.
+ * Not in Chromium, which recognizes display: "block math" written inline. */
+math.tml-display { display: block; }
+
+*.mathcal {
+  /* NotoSans */
+  font-feature-settings: 'ss01';
+}
+
+math .mathscr {
+  font-family: "Temml";
+}
+
+mo.tml-prime {
+  font-family: Temml;
+}
+
+/* Prevent f' from overlapping in Chromium */
+mo.prime-pad {
+  padding-left: 0.08em;
+}
+
+/* \cancel & \phase use background images. Get them to print. */
+menclose {
+  -webkit-print-color-adjust: exact;  /* Chrome & Edge */
+          print-color-adjust: exact;
+}
+
+/* Array cell justification in Firefox & WebKit */
+.tml-right {
+  text-align: right;
+}
+.tml-left {
+  text-align: left;
+}
+
+/* Styles for Chromium only */
+@supports (not (-webkit-backdrop-filter: blur(1px))) and (not (-moz-appearance: none)) {
+  /* MathML Core & Chromium do not support the MathML 3.0 element <menclose> attributes. */
+  /* So use styles. */
+  menclose {
+    position: relative;
+    padding: 0.5ex 0ex;
+  }
+  
+    .tml-overline {
+    padding: 0.1em 0 0 0;
+    border-top: 0.065em solid;
+  }
+
+  .tml-underline {
+    padding: 0 0 0.1em 0;
+    border-bottom: 0.065em solid;
+  }
+
+  .tml-cancel {
+    display: inline-block;
+    position: absolute;
+    left: 0.5px;
+    bottom: 0;
+    width: 100%;
+    height: 100%;
+    background-color: currentColor;
+  }
+  .upstrike {
+    clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em);
+  }
+  .downstrike {
+    clip-path: polygon(0em 0.05em, 0.05em 0em, 100% calc(100% - 0.05em), calc(100% - 0.05em) 100%);
+  }
+  .sout {
+    clip-path: polygon(0em calc(55% + 0.0333em), 0em calc(55% - 0.0333em), 100% calc(55% - 0.0333em), 100% calc(55% + 0.0333em));
+  }
+  .tml-xcancel {
+    background: linear-gradient(to top left,
+    rgba(0,0,0,0) 0%,
+    rgba(0,0,0,0) calc(50% - 0.06em),
+    rgba(0,0,0,1) 50%,
+    rgba(0,0,0,0) calc(50% + 0.06em),
+    rgba(0,0,0,0) 100%),
+    linear-gradient(to top right,
+    rgba(0,0,0,0) 0%,
+    rgba(0,0,0,0) calc(50% - 0.06em),
+    rgba(0,0,0,1) 50%,
+    rgba(0,0,0,0) calc(50% + 0.06em),
+    rgba(0,0,0,0) 100%)
+  }
+
+  .longdiv-top {
+    border-top: 0.067em solid;
+    padding: 0.1em 0.2em 0.2em 0.433em;
+  }
+  .longdiv-arc {
+    position: absolute;
+    top: 0;
+    bottom: 0.1em;
+    left: -0.4em;
+    width: 0.7em;
+    border: 0.067em solid;
+    transform: translateY(-0.067em);
+    border-radius: 70%;
+    clip-path: inset(0 0 0 0.4em);
+    box-sizing: border-box;}
+    .menclose {display: inline-block;
+    text-align: left;
+    position: relative;
+  }
+  
+  .phasor-bottom {
+    border-bottom: 0.067em solid;
+    padding: 0.2em 0.2em 0.1em 0.6em;
+  }
+  .phasor-angle {
+    display: inline-block;
+    position: absolute;
+    left: 0.5px;
+    bottom: -0.04em;
+    height: 100%;
+    aspect-ratio: 0.5;
+    background-color: currentColor;
+    clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em);
+  }
+
+  .tml-box {
+    padding: 3pt 0 3pt 0;
+    border: 1px solid;
+  }
+  .tml-fbox {
+    padding: 3pt;
+    border: 1px solid;
+  }
+
+  .circle-pad {
+    padding: 0.267em;
+  }
+  .textcircle {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    right: 0;
+    left: 0;
+    border: 0.067em solid;
+    border-radius: 50%;
+   }
+
+   .actuarial {
+    padding: 0.03889em 0.03889em 0 0.03889em;
+    border-width: 0.08em 0.08em 0em 0em;
+    border-style: solid;
+    margin-right: 0.03889em;
+   }
+
+   /* Stretch \widetilde */
+  .tml-crooked-2 {
+    transform: scale(2.0, 1.1)
+  }
+  .tml-crooked-3 {
+    transform: scale(3.0, 1.3)
+  }
+  .tml-crooked-4 {
+    transform: scale(4.0, 1.4)
+  }
+  /* set array cell justification */
+  .tml-right {
+    text-align: -webkit-right;
+  }
+  .tml-left {
+    text-align: -webkit-left;
+  }
+}
+
+/* Adjust WebKit accents */
+@supports (-webkit-backdrop-filter: blur(1px)) {
+  .tml-xshift { transform: translate(0px, 0.45em) }
+  .tml-capshift { transform: translate(0px, 0.35em) }
+}
+
+/* flex-wrap for line-breaking in Chromium */
+math {
+  display: inline-flex;
+  flex-wrap: wrap;
+  align-items: baseline;
+}
+math > mrow {
+  padding: 0.5ex 0ex;
+}
+
+/* Default mtd top padding is 0.5ex per MathML-Core and user-agent CSS */
+/* We adjust for jot and small */
+mtable.tml-jot mtd {
+  padding-top: 0.7ex;
+  padding-bottom: 0.7ex;
+}
+mtable.tml-small mtd {
+  padding-top: 0.35ex;
+  padding-bottom: 0.35ex;
+}
+
+/* Firefox */
+@-moz-document url-prefix() {
+  /* Avoid flex-wrap */
+  math { display: inline; }
+  math > mrow { padding: 0 }
+  /* Adjust Firefox spacing between array rows */
+  mtd, mtable.tml-small mtd { padding-top: 0; padding-bottom: 0; }
+  mtable.tml-jot mtd { padding-top: 0.2ex; padding-bottom: 0.ex; }
+}
+
+/* AMS environment auto-numbering via CSS counter. */
+.tml-eqn::before {
+  counter-increment: tmlEqnNo;
+  content: "(" counter(tmlEqnNo) ")";
+}
+
+body {
+  counter-reset: tmlEqnNo;
+}
diff --git a/public/Temml.woff2 b/public/Temml.woff2
new file mode 100644 (file)
index 0000000..fccefda
Binary files /dev/null and b/public/Temml.woff2 differ
diff --git a/public/highlight.css b/public/highlight.css
new file mode 100644 (file)
index 0000000..f2c4c4a
--- /dev/null
@@ -0,0 +1,37 @@
+:root {
+  --light-yellow: #e5c07b;
+  --dark-yellow: #d19a66;
+  --blue: #61afef;
+  --cyan: #56b6c2;
+  --light-red: #e06c75;
+  --dark-red: #be5046;
+  --comment-gray: #5c6370;
+  --magenta: #c678dd;
+}
+
+pre {
+  border-top: 1px solid white;
+  border-bottom: 1px solid white;
+  padding: 10px 5px;
+}
+
+code.ziggy {
+  color: var(--cyan);
+}
+
+code.ziggy .keyword,
+code.ziggy .type {
+  color: var(--light-yellow);
+}
+
+code.ziggy .string {
+  color: var(--dark-yellow);
+}
+
+code.ziggy .numeric.constant {
+  color: var(--magenta);
+}
+
+code.ziggy .function {
+  color: var(--blue);
+}
\ No newline at end of file
index 769c70bcff07a00af7af1e0e5248eae063418f60..09d116fee6ef69eb95996bfaa7d4082dcf245c54 100644 (file)
@@ -1,52 +1,75 @@
 <!DOCTYPE html>
 <html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
 
-<head>
-  <meta charset="utf-8">
-  <title>Alexander Goussas | Programming & Friends</title>
-  <meta name="author" content="Alexander Goussas">
-  <meta name="description" content="Blog about programming">
-  <meta name="viewport" content="width=device-width, initial-scale=1">
-  <link href="./styles.css" rel="stylesheet">
-  <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
-  <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
-</head>
-
-<body>
-  <header>
-    <nav>
-      <ul>
-        <li class="nav-item" style="background-color: yellow; color: black;">
-          <a href="/">home</a>
-        </li>
-        <li class="nav-item">
-          <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
-        </li>
-        <li class="nav-item" style="background-color: purple;">
-          <a href="https://github.com/aloussase" target="_blank">github</a>
-        </li>
-        <li class="nav-item" style="background-color: blue;">
-          <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
-        </li>
-      </ul>
-    </nav>
-  </header>
-
-  <h1 style="color: yellow;">Alexander Goussas</h1>
-  <h2 style="color: green; text-align: center;">Blog about programming & friends</h2>
-
-  <img id="logo" src="./logo.png" />
-  <img id="hornet" src="./hornet.png" />
-
-  <section id="posts">
-    <h2 style="color: yellow;">Posts</h2>
-    <ul>
-      <li><a href="./2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md.html">How I cut my expenses by a freaking lot</a></li>
-      <li><a href="./2026-04-30-how-i-manage-my-blog.md.html">How I manage my blog with my own Git server and Kubernetes</a></li>
-      <li><a href="./2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md.html">One of the best skills I've learned as a programmer</a></li>
-    </ul>
-  </section>
-  <script src="js/script.js"></script>
-</body>
+       </head>
+       <body id="body">
+    <img id="logo" src="/logo.png">
+    <img id="hornet" src="/hornet.png">
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: purple;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: blue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               
+       <h1>Programming and Friends</h1>
+       <div></div>
+       <div>
+               <h2>Posts</h2>
+               <div>
+      <div class="post-preview">
+                         <span class="date">May 02, 2026</span>
+                         <a href="/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/">
+                               <h3>How I cut my expenses by a freaking lot</h3>
+                         </a>
+      </div>
+               
+      <div class="post-preview">
+                         <span class="date">April 30, 2026</span>
+                         <a href="/2026-04-30-how-i-manage-my-blog/">
+                               <h3>How I Manage my Blog</h3>
+                         </a>
+      </div>
+               
+      <div class="post-preview">
+                         <span class="date">April 19, 2026</span>
+                         <a href="/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/">
+                               <h3>One of the best Skills I&apos;ve learned as a Programmer</h3>
+                         </a>
+      </div>
+               </div>
+       </div>
 
+               <footer>
+                       <hr>
+               </footer>
+       </body>
 </html>
diff --git a/public/render-mathtex.js b/public/render-mathtex.js
new file mode 100644 (file)
index 0000000..b4255ea
--- /dev/null
@@ -0,0 +1,8 @@
+let eqns = document.querySelectorAll("script[type='math/tex']");
+for (let i=eqns.length-1; i>=0; i--) {
+    let eqn = eqns[i];
+    let src = eqn.text;
+    let d = eqn.closest('p') == null; 
+    eqn.outerHTML = temml.renderToString(src, { displayMode: d });
+}
+
index 0312ea1ef6077b6f23488275facf6765719c5f53..bed9ab0a864bdc390ed53fad054e58a1f6a3b55e 100644 (file)
@@ -88,3 +88,11 @@ nav {
   inset rgba(0 0 0 / 20%) 0px -5px,
   inset rgba(255 255 255 / 40%) 0px 5px;
 }
+
+.post-preview {
+  display: flex;
+  align-items: center;
+  gap: 0.4rem;
+  margin-bottom: 0px;
+  height: fit-content;
+}
diff --git a/public/temml.min.js b/public/temml.min.js
new file mode 100644 (file)
index 0000000..68a0e9f
--- /dev/null
@@ -0,0 +1 @@
+var temml=function(){"use strict";class e{constructor(t,r){let n,s=" "+t;const o=r&&r.loc;if(o&&o.start<=o.end){const e=o.lexer.input;n=o.start;const t=o.end;n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": \n";const r=e.slice(n,t).replace(/[^]/g,"$&̲");let a,l;a=n>15?"…"+e.slice(n-15,n):e.slice(0,n),l=t+15<e.length?e.slice(t,t+15)+"…":e.slice(t),s+=a+r+l}const a=new Error(s);return a.name="ParseError",a.__proto__=e.prototype,a.position=n,a}}e.prototype.__proto__=Error.prototype;const t=/([A-Z])/g,r={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},n=/[&><"']/g;const s=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?s(e.body[0]):e:"font"===e.type?s(e.body):e};var o={deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(n,(e=>r[e]))},hyphenate:function(e){return e.replace(t,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){const t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"},round:function(e){return+e.toFixed(4)}};class a{constructor(e){e=e||{},this.displayMode=o.deflt(e.displayMode,!1),this.annotate=o.deflt(e.annotate,!1),this.leqno=o.deflt(e.leqno,!1),this.throwOnError=o.deflt(e.throwOnError,!1),this.errorColor=o.deflt(e.errorColor,"#b22222"),this.macros=e.macros||{},this.wrap=o.deflt(e.wrap,"tex"),this.xml=o.deflt(e.xml,!1),this.colorIsTextColor=o.deflt(e.colorIsTextColor,!1),this.strict=o.deflt(e.strict,!1),this.trust=o.deflt(e.trust,!1),this.maxSize=void 0===e.maxSize?[1/0,1/0]:Array.isArray(e.maxSize)?e.maxSize:[1/0,1/0],this.maxExpand=Math.max(0,o.deflt(e.maxExpand,1e3))}isTrusted(e){if(e.url&&!e.protocol){const t=o.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}const t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)}}const l={},i={};function c({type:e,names:t,props:r,handler:n,mathmlBuilder:s}){const o={type:e,numArgs:r.numArgs,argTypes:r.argTypes,allowedInArgument:!!r.allowedInArgument,allowedInText:!!r.allowedInText,allowedInMath:void 0===r.allowedInMath||r.allowedInMath,numOptionalArgs:r.numOptionalArgs||0,infix:!!r.infix,primitive:!!r.primitive,handler:n};for(let e=0;e<t.length;++e)l[t[e]]=o;e&&s&&(i[e]=s)}function d({type:e,mathmlBuilder:t}){c({type:e,names:[],props:{numArgs:0},handler(){throw new Error("Should never be called.")},mathmlBuilder:t})}const m=function(e){return"ordgroup"===e.type&&1===e.body.length?e.body[0]:e},p=function(e){return"ordgroup"===e.type?e.body:[e]};class u{constructor(e){this.children=e,this.classes=[],this.style={}}hasClass(e){return this.classes.includes(e)}toNode(){const e=document.createDocumentFragment();for(let t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}toMarkup(){let e="";for(let t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e}toText(){return this.children.map((e=>e.toText())).join("")}}const h=function(e){return e.filter((e=>e)).join(" ")},g=function(e,t){this.classes=e||[],this.attributes={},this.style=t||{}},f=function(e){const t=document.createElement(e);t.className=h(this.classes);for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t.style[e]=this.style[e]);for(const e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(let e=0;e<this.children.length;e++)t.appendChild(this.children[e].toNode());return t},b=function(e){let t=`<${e}`;this.classes.length&&(t+=` class="${o.escape(h(this.classes))}"`);let r="";for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(r+=`${o.hyphenate(e)}:${this.style[e]};`);r&&(t+=` style="${r}"`);for(const e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=` ${e}="${o.escape(this.attributes[e])}"`);t+=">";for(let e=0;e<this.children.length;e++)t+=this.children[e].toMarkup();return t+=`</${e}>`,t};class y{constructor(e,t,r){g.call(this,e,r),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}toNode(){return f.call(this,"span")}toMarkup(){return b.call(this,"span")}}let w=class{constructor(e){this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return o.escape(this.text)}};class x{constructor(e,t,r){this.href=e,this.classes=t,this.children=r||[]}toNode(){const e=document.createElement("a");e.setAttribute("href",this.href),this.classes.length>0&&(e.className=h(this.classes));for(let t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}toMarkup(){let e=`<a href='${o.escape(this.href)}'`;this.classes.length>0&&(e+=` class="${o.escape(h(this.classes))}"`),e+=">";for(let t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e+="</a>",e}}class k{constructor(e,t,r){this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return this.classes.includes(e)}toNode(){const e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(const t in this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);return e}toMarkup(){let e=`<img src='${this.src}' alt='${this.alt}'`,t="";for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t+=`${o.hyphenate(e)}:${this.style[e]};`);return t&&(e+=` style="${o.escape(t)}"`),e+=">",e}}class v{constructor(e,t,r,n){this.type=e,this.attributes={},this.children=t||[],this.classes=r||[],this.style=n||{},this.label=""}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}setLabel(e){this.label=e}toNode(){const e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=h(this.classes));for(const t in this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);for(let t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}toMarkup(){let e="<"+this.type;for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="',e+=o.escape(this.attributes[t]),e+='"');this.classes.length>0&&(e+=` class="${o.escape(h(this.classes))}"`);let t="";for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t+=`${o.hyphenate(e)}:${this.style[e]};`);t&&(e+=` style="${t}"`),e+=">";for(let t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e+="</"+this.type+">",e}toText(){return this.children.map((e=>e.toText())).join("")}}class A{constructor(e){this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return o.escape(this.toText())}toText(){return this.text}}const N=e=>{let t;return 1===e.length&&"mrow"===e[0].type?(t=e.pop(),t.type="mstyle"):t=new v("mstyle",e),t};var T={MathNode:v,TextNode:A,newDocumentFragment:function(e){return new u(e)}};const S=e=>{let t=0;if(e.body)for(const r of e.body)t+=S(r);else if("supsub"===e.type)t+=S(e.base),e.sub&&(t+=.7*S(e.sub)),e.sup&&(t+=.7*S(e.sup));else if("mathord"===e.type||"textord"===e.type)for(const r of e.text.split("")){const e=r.codePointAt(0);t+=96<e&&e<123||944<e&&e<970?.56:47<e&&e<58?.5:.92}else t+=1;return t},q={widehat:"^",widecheck:"ˇ",widetilde:"~",wideparen:"⏜",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",overgroup:"⏠",overparen:"⏜",undergroup:"⏡",underparen:"⏝",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xrightleftarrows:"⇄",yields:"→",yieldsLeft:"←",mesomerism:"↔",longrightharpoonup:"⇀",longleftharpoondown:"↽",eqrightharpoonup:"⇀",eqleftharpoondown:"↽","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},O=function(e){const t=new T.TextNode(q[e.slice(1)]),r=new T.MathNode("mo",[t]);return r.setAttribute("stretchy","true"),r},M=["\\widetilde","\\widehat","\\widecheck","\\utilde"];var B=O,C=e=>{const t=O(e.label);if(M.includes(e.label)){const r=S(e.base);1<r&&r<1.6?t.classes.push("tml-crooked-2"):1.6<=r&&r<2.5?t.classes.push("tml-crooked-3"):2.5<=r&&t.classes.push("tml-crooked-4")}return t};const z={bin:1,close:1,inner:1,open:1,punct:1,rel:1},E={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},$={math:{},text:{}};function I(e,t,r,n,s){$[e][n]={group:t,replace:r},s&&r&&($[e][r]=$[e][n])}const L="math",F="text",D="accent-token",G="bin",j="close",P="inner",R="mathord",U="op-token",H="open",V="punct",_="rel",W="spacing",X="textord";I(L,_,"≡","\\equiv",!0),I(L,_,"≺","\\prec",!0),I(L,_,"≻","\\succ",!0),I(L,_,"∼","\\sim",!0),I(L,_,"⟂","\\perp",!0),I(L,_,"⪯","\\preceq",!0),I(L,_,"⪰","\\succeq",!0),I(L,_,"≃","\\simeq",!0),I(L,_,"≌","\\backcong",!0),I(L,_,"|","\\mid",!0),I(L,_,"≪","\\ll",!0),I(L,_,"≫","\\gg",!0),I(L,_,"≍","\\asymp",!0),I(L,_,"∥","\\parallel"),I(L,_,"⌣","\\smile",!0),I(L,_,"⊑","\\sqsubseteq",!0),I(L,_,"⊒","\\sqsupseteq",!0),I(L,_,"≐","\\doteq",!0),I(L,_,"⌢","\\frown",!0),I(L,_,"∋","\\ni",!0),I(L,_,"∌","\\notni",!0),I(L,_,"∝","\\propto",!0),I(L,_,"⊢","\\vdash",!0),I(L,_,"⊣","\\dashv",!0),I(L,_,"∋","\\owns"),I(L,_,"≘","\\arceq",!0),I(L,_,"≙","\\wedgeq",!0),I(L,_,"≚","\\veeeq",!0),I(L,_,"≛","\\stareq",!0),I(L,_,"≝","\\eqdef",!0),I(L,_,"≞","\\measeq",!0),I(L,_,"≟","\\questeq",!0),I(L,_,"≠","\\ne",!0),I(L,_,"≠","\\neq"),I(L,_,"⩵","\\eqeq",!0),I(L,_,"⩶","\\eqeqeq",!0),I(L,_,"∷","\\dblcolon",!0),I(L,_,"≔","\\coloneqq",!0),I(L,_,"≕","\\eqqcolon",!0),I(L,_,"∹","\\eqcolon",!0),I(L,_,"⩴","\\Coloneqq",!0),I(L,V,".","\\ldotp"),I(L,V,"·","\\cdotp"),I(L,X,"#","\\#"),I(F,X,"#","\\#"),I(L,X,"&","\\&"),I(F,X,"&","\\&"),I(L,X,"ℵ","\\aleph",!0),I(L,X,"∀","\\forall",!0),I(L,X,"ℏ","\\hbar",!0),I(L,X,"∃","\\exists",!0),I(L,G,"∇","\\nabla",!0),I(L,X,"♭","\\flat",!0),I(L,X,"ℓ","\\ell",!0),I(L,X,"♮","\\natural",!0),I(L,X,"Å","\\Angstrom",!0),I(F,X,"Å","\\Angstrom",!0),I(L,X,"♣","\\clubsuit",!0),I(L,X,"♧","\\varclubsuit",!0),I(L,X,"℘","\\wp",!0),I(L,X,"♯","\\sharp",!0),I(L,X,"♢","\\diamondsuit",!0),I(L,X,"♦","\\vardiamondsuit",!0),I(L,X,"ℜ","\\Re",!0),I(L,X,"♡","\\heartsuit",!0),I(L,X,"♥","\\varheartsuit",!0),I(L,X,"ℑ","\\Im",!0),I(L,X,"♠","\\spadesuit",!0),I(L,X,"♤","\\varspadesuit",!0),I(L,X,"♀","\\female",!0),I(L,X,"♂","\\male",!0),I(L,X,"§","\\S",!0),I(F,X,"§","\\S"),I(L,X,"¶","\\P",!0),I(F,X,"¶","\\P"),I(F,X,"☺","\\smiley",!0),I(L,X,"☺","\\smiley",!0),I(L,X,"†","\\dag"),I(F,X,"†","\\dag"),I(F,X,"†","\\textdagger"),I(L,X,"‡","\\ddag"),I(F,X,"‡","\\ddag"),I(F,X,"‡","\\textdaggerdbl"),I(L,j,"⎱","\\rmoustache",!0),I(L,H,"⎰","\\lmoustache",!0),I(L,j,"⟯","\\rgroup",!0),I(L,H,"⟮","\\lgroup",!0),I(L,G,"∓","\\mp",!0),I(L,G,"⊖","\\ominus",!0),I(L,G,"⊎","\\uplus",!0),I(L,G,"⊓","\\sqcap",!0),I(L,G,"∗","\\ast"),I(L,G,"⊔","\\sqcup",!0),I(L,G,"◯","\\bigcirc",!0),I(L,G,"∙","\\bullet",!0),I(L,G,"‡","\\ddagger"),I(L,G,"≀","\\wr",!0),I(L,G,"⨿","\\amalg"),I(L,G,"&","\\And"),I(L,G,"⫽","\\sslash",!0),I(L,_,"⟵","\\longleftarrow",!0),I(L,_,"⇐","\\Leftarrow",!0),I(L,_,"⟸","\\Longleftarrow",!0),I(L,_,"⟶","\\longrightarrow",!0),I(L,_,"⇒","\\Rightarrow",!0),I(L,_,"⟹","\\Longrightarrow",!0),I(L,_,"↔","\\leftrightarrow",!0),I(L,_,"⟷","\\longleftrightarrow",!0),I(L,_,"⇔","\\Leftrightarrow",!0),I(L,_,"⟺","\\Longleftrightarrow",!0),I(L,_,"↤","\\mapsfrom",!0),I(L,_,"↦","\\mapsto",!0),I(L,_,"⟼","\\longmapsto",!0),I(L,_,"↗","\\nearrow",!0),I(L,_,"↩","\\hookleftarrow",!0),I(L,_,"↪","\\hookrightarrow",!0),I(L,_,"↘","\\searrow",!0),I(L,_,"↼","\\leftharpoonup",!0),I(L,_,"⇀","\\rightharpoonup",!0),I(L,_,"↙","\\swarrow",!0),I(L,_,"↽","\\leftharpoondown",!0),I(L,_,"⇁","\\rightharpoondown",!0),I(L,_,"↖","\\nwarrow",!0),I(L,_,"⇌","\\rightleftharpoons",!0),I(L,R,"↯","\\lightning",!0),I(L,R,"∎","\\QED",!0),I(L,R,"‰","\\permil",!0),I(F,X,"‰","\\permil"),I(L,R,"☉","\\astrosun",!0),I(L,R,"☼","\\sun",!0),I(L,R,"☾","\\leftmoon",!0),I(L,R,"☽","\\rightmoon",!0),I(L,R,"⊕","\\Earth"),I(L,_,"≮","\\nless",!0),I(L,_,"⪇","\\lneq",!0),I(L,_,"≨","\\lneqq",!0),I(L,_,"≨︀","\\lvertneqq"),I(L,_,"⋦","\\lnsim",!0),I(L,_,"⪉","\\lnapprox",!0),I(L,_,"⊀","\\nprec",!0),I(L,_,"⋠","\\npreceq",!0),I(L,_,"⋨","\\precnsim",!0),I(L,_,"⪹","\\precnapprox",!0),I(L,_,"≁","\\nsim",!0),I(L,_,"∤","\\nmid",!0),I(L,_,"∤","\\nshortmid"),I(L,_,"⊬","\\nvdash",!0),I(L,_,"⊭","\\nvDash",!0),I(L,_,"⋪","\\ntriangleleft"),I(L,_,"⋬","\\ntrianglelefteq",!0),I(L,_,"⊄","\\nsubset",!0),I(L,_,"⊅","\\nsupset",!0),I(L,_,"⊊","\\subsetneq",!0),I(L,_,"⊊︀","\\varsubsetneq"),I(L,_,"⫋","\\subsetneqq",!0),I(L,_,"⫋︀","\\varsubsetneqq"),I(L,_,"≯","\\ngtr",!0),I(L,_,"⪈","\\gneq",!0),I(L,_,"≩","\\gneqq",!0),I(L,_,"≩︀","\\gvertneqq"),I(L,_,"⋧","\\gnsim",!0),I(L,_,"⪊","\\gnapprox",!0),I(L,_,"⊁","\\nsucc",!0),I(L,_,"⋡","\\nsucceq",!0),I(L,_,"⋩","\\succnsim",!0),I(L,_,"⪺","\\succnapprox",!0),I(L,_,"≆","\\ncong",!0),I(L,_,"∦","\\nparallel",!0),I(L,_,"∦","\\nshortparallel"),I(L,_,"⊯","\\nVDash",!0),I(L,_,"⋫","\\ntriangleright"),I(L,_,"⋭","\\ntrianglerighteq",!0),I(L,_,"⊋","\\supsetneq",!0),I(L,_,"⊋","\\varsupsetneq"),I(L,_,"⫌","\\supsetneqq",!0),I(L,_,"⫌︀","\\varsupsetneqq"),I(L,_,"⊮","\\nVdash",!0),I(L,_,"⪵","\\precneqq",!0),I(L,_,"⪶","\\succneqq",!0),I(L,G,"⊴","\\unlhd"),I(L,G,"⊵","\\unrhd"),I(L,_,"↚","\\nleftarrow",!0),I(L,_,"↛","\\nrightarrow",!0),I(L,_,"⇍","\\nLeftarrow",!0),I(L,_,"⇏","\\nRightarrow",!0),I(L,_,"↮","\\nleftrightarrow",!0),I(L,_,"⇎","\\nLeftrightarrow",!0),I(L,_,"△","\\vartriangle"),I(L,X,"ℏ","\\hslash"),I(L,X,"▽","\\triangledown"),I(L,X,"◊","\\lozenge"),I(L,X,"Ⓢ","\\circledS"),I(L,X,"®","\\circledR",!0),I(F,X,"®","\\circledR"),I(F,X,"®","\\textregistered"),I(L,X,"∡","\\measuredangle",!0),I(L,X,"∄","\\nexists"),I(L,X,"℧","\\mho"),I(L,X,"Ⅎ","\\Finv",!0),I(L,X,"⅁","\\Game",!0),I(L,X,"‵","\\backprime"),I(L,X,"‶","\\backdprime"),I(L,X,"‷","\\backtrprime"),I(L,X,"▲","\\blacktriangle"),I(L,X,"▼","\\blacktriangledown"),I(L,X,"■","\\blacksquare"),I(L,X,"⧫","\\blacklozenge"),I(L,X,"★","\\bigstar"),I(L,X,"∢","\\sphericalangle",!0),I(L,X,"∁","\\complement",!0),I(L,X,"╱","\\diagup"),I(L,X,"╲","\\diagdown"),I(L,X,"□","\\square"),I(L,X,"□","\\Box"),I(L,X,"◊","\\Diamond"),I(L,X,"¥","\\yen",!0),I(F,X,"¥","\\yen",!0),I(L,X,"✓","\\checkmark",!0),I(F,X,"✓","\\checkmark"),I(L,X,"✗","\\ballotx",!0),I(F,X,"✗","\\ballotx"),I(F,X,"•","\\textbullet"),I(L,X,"ℶ","\\beth",!0),I(L,X,"ℸ","\\daleth",!0),I(L,X,"ℷ","\\gimel",!0),I(L,X,"ϝ","\\digamma",!0),I(L,X,"ϰ","\\varkappa"),I(L,H,"⌜","\\ulcorner",!0),I(L,j,"⌝","\\urcorner",!0),I(L,H,"⌞","\\llcorner",!0),I(L,j,"⌟","\\lrcorner",!0),I(L,_,"≦","\\leqq",!0),I(L,_,"⩽","\\leqslant",!0),I(L,_,"⪕","\\eqslantless",!0),I(L,_,"≲","\\lesssim",!0),I(L,_,"⪅","\\lessapprox",!0),I(L,_,"≊","\\approxeq",!0),I(L,G,"⋖","\\lessdot"),I(L,_,"⋘","\\lll",!0),I(L,_,"≶","\\lessgtr",!0),I(L,_,"⋚","\\lesseqgtr",!0),I(L,_,"⪋","\\lesseqqgtr",!0),I(L,_,"≑","\\doteqdot"),I(L,_,"≓","\\risingdotseq",!0),I(L,_,"≒","\\fallingdotseq",!0),I(L,_,"∽","\\backsim",!0),I(L,_,"⋍","\\backsimeq",!0),I(L,_,"⫅","\\subseteqq",!0),I(L,_,"⋐","\\Subset",!0),I(L,_,"⊏","\\sqsubset",!0),I(L,_,"≼","\\preccurlyeq",!0),I(L,_,"⋞","\\curlyeqprec",!0),I(L,_,"≾","\\precsim",!0),I(L,_,"⪷","\\precapprox",!0),I(L,_,"⊲","\\vartriangleleft"),I(L,_,"⊴","\\trianglelefteq"),I(L,_,"⊨","\\vDash",!0),I(L,_,"⊫","\\VDash",!0),I(L,_,"⊪","\\Vvdash",!0),I(L,_,"⌣","\\smallsmile"),I(L,_,"⌢","\\smallfrown"),I(L,_,"≏","\\bumpeq",!0),I(L,_,"≎","\\Bumpeq",!0),I(L,_,"≧","\\geqq",!0),I(L,_,"⩾","\\geqslant",!0),I(L,_,"⪖","\\eqslantgtr",!0),I(L,_,"≳","\\gtrsim",!0),I(L,_,"⪆","\\gtrapprox",!0),I(L,G,"⋗","\\gtrdot"),I(L,_,"⋙","\\ggg",!0),I(L,_,"≷","\\gtrless",!0),I(L,_,"⋛","\\gtreqless",!0),I(L,_,"⪌","\\gtreqqless",!0),I(L,_,"≖","\\eqcirc",!0),I(L,_,"≗","\\circeq",!0),I(L,_,"≜","\\triangleq",!0),I(L,_,"∼","\\thicksim"),I(L,_,"≈","\\thickapprox"),I(L,_,"⫆","\\supseteqq",!0),I(L,_,"⋑","\\Supset",!0),I(L,_,"⊐","\\sqsupset",!0),I(L,_,"≽","\\succcurlyeq",!0),I(L,_,"⋟","\\curlyeqsucc",!0),I(L,_,"≿","\\succsim",!0),I(L,_,"⪸","\\succapprox",!0),I(L,_,"⊳","\\vartriangleright"),I(L,_,"⊵","\\trianglerighteq"),I(L,_,"⊩","\\Vdash",!0),I(L,_,"∣","\\shortmid"),I(L,_,"∥","\\shortparallel"),I(L,_,"≬","\\between",!0),I(L,_,"⋔","\\pitchfork",!0),I(L,_,"∝","\\varpropto"),I(L,_,"◀","\\blacktriangleleft"),I(L,_,"∴","\\therefore",!0),I(L,_,"∍","\\backepsilon"),I(L,_,"▶","\\blacktriangleright"),I(L,_,"∵","\\because",!0),I(L,_,"⋘","\\llless"),I(L,_,"⋙","\\gggtr"),I(L,G,"⊲","\\lhd"),I(L,G,"⊳","\\rhd"),I(L,_,"≂","\\eqsim",!0),I(L,_,"≑","\\Doteq",!0),I(L,_,"⥽","\\strictif",!0),I(L,_,"⥼","\\strictfi",!0),I(L,G,"∔","\\dotplus",!0),I(L,G,"∖","\\smallsetminus"),I(L,G,"⋒","\\Cap",!0),I(L,G,"⋓","\\Cup",!0),I(L,G,"⩞","\\doublebarwedge",!0),I(L,G,"⊟","\\boxminus",!0),I(L,G,"⊞","\\boxplus",!0),I(L,G,"⧄","\\boxslash",!0),I(L,G,"⋇","\\divideontimes",!0),I(L,G,"⋉","\\ltimes",!0),I(L,G,"⋊","\\rtimes",!0),I(L,G,"⋋","\\leftthreetimes",!0),I(L,G,"⋌","\\rightthreetimes",!0),I(L,G,"⋏","\\curlywedge",!0),I(L,G,"⋎","\\curlyvee",!0),I(L,G,"⊝","\\circleddash",!0),I(L,G,"⊛","\\circledast",!0),I(L,G,"⊺","\\intercal",!0),I(L,G,"⋒","\\doublecap"),I(L,G,"⋓","\\doublecup"),I(L,G,"⊠","\\boxtimes",!0),I(L,G,"⋈","\\bowtie",!0),I(L,G,"⋈","\\Join"),I(L,G,"⟕","\\leftouterjoin",!0),I(L,G,"⟖","\\rightouterjoin",!0),I(L,G,"⟗","\\fullouterjoin",!0),I(L,G,"∸","\\dotminus",!0),I(L,G,"⟑","\\wedgedot",!0),I(L,G,"⟇","\\veedot",!0),I(L,G,"⩢","\\doublebarvee",!0),I(L,G,"⩣","\\veedoublebar",!0),I(L,G,"⩟","\\wedgebar",!0),I(L,G,"⩠","\\wedgedoublebar",!0),I(L,G,"⩔","\\Vee",!0),I(L,G,"⩓","\\Wedge",!0),I(L,G,"⩃","\\barcap",!0),I(L,G,"⩂","\\barcup",!0),I(L,G,"⩈","\\capbarcup",!0),I(L,G,"⩀","\\capdot",!0),I(L,G,"⩇","\\capovercup",!0),I(L,G,"⩆","\\cupovercap",!0),I(L,G,"⩍","\\closedvarcap",!0),I(L,G,"⩌","\\closedvarcup",!0),I(L,G,"⨪","\\minusdot",!0),I(L,G,"⨫","\\minusfdots",!0),I(L,G,"⨬","\\minusrdots",!0),I(L,G,"⊻","\\Xor",!0),I(L,G,"⊼","\\Nand",!0),I(L,G,"⊽","\\Nor",!0),I(L,G,"⊽","\\barvee"),I(L,G,"⫴","\\interleave",!0),I(L,G,"⧢","\\shuffle",!0),I(L,G,"⫶","\\threedotcolon",!0),I(L,G,"⦂","\\typecolon",!0),I(L,G,"∾","\\invlazys",!0),I(L,G,"⩋","\\twocaps",!0),I(L,G,"⩊","\\twocups",!0),I(L,G,"⩎","\\Sqcap",!0),I(L,G,"⩏","\\Sqcup",!0),I(L,G,"⩖","\\veeonvee",!0),I(L,G,"⩕","\\wedgeonwedge",!0),I(L,G,"⧗","\\blackhourglass",!0),I(L,G,"⧆","\\boxast",!0),I(L,G,"⧈","\\boxbox",!0),I(L,G,"⧇","\\boxcircle",!0),I(L,G,"⊜","\\circledequal",!0),I(L,G,"⦷","\\circledparallel",!0),I(L,G,"⦶","\\circledvert",!0),I(L,G,"⦵","\\circlehbar",!0),I(L,G,"⟡","\\concavediamond",!0),I(L,G,"⟢","\\concavediamondtickleft",!0),I(L,G,"⟣","\\concavediamondtickright",!0),I(L,G,"⋄","\\diamond",!0),I(L,G,"⧖","\\hourglass",!0),I(L,G,"⟠","\\lozengeminus",!0),I(L,G,"⌽","\\obar",!0),I(L,G,"⦸","\\obslash",!0),I(L,G,"⨸","\\odiv",!0),I(L,G,"⧁","\\ogreaterthan",!0),I(L,G,"⧀","\\olessthan",!0),I(L,G,"⦹","\\operp",!0),I(L,G,"⨷","\\Otimes",!0),I(L,G,"⨶","\\otimeshat",!0),I(L,G,"⋆","\\star",!0),I(L,G,"△","\\triangle",!0),I(L,G,"⨺","\\triangleminus",!0),I(L,G,"⨹","\\triangleplus",!0),I(L,G,"⨻","\\triangletimes",!0),I(L,G,"⟤","\\whitesquaretickleft",!0),I(L,G,"⟥","\\whitesquaretickright",!0),I(L,G,"⨳","\\smashtimes",!0),I(L,_,"⇢","\\dashrightarrow",!0),I(L,_,"⇠","\\dashleftarrow",!0),I(L,_,"⇇","\\leftleftarrows",!0),I(L,_,"⇆","\\leftrightarrows",!0),I(L,_,"⇚","\\Lleftarrow",!0),I(L,_,"↞","\\twoheadleftarrow",!0),I(L,_,"↢","\\leftarrowtail",!0),I(L,_,"↫","\\looparrowleft",!0),I(L,_,"⇋","\\leftrightharpoons",!0),I(L,_,"↶","\\curvearrowleft",!0),I(L,_,"↺","\\circlearrowleft",!0),I(L,_,"↰","\\Lsh",!0),I(L,_,"⇈","\\upuparrows",!0),I(L,_,"↿","\\upharpoonleft",!0),I(L,_,"⇃","\\downharpoonleft",!0),I(L,_,"⊶","\\origof",!0),I(L,_,"⊷","\\imageof",!0),I(L,_,"⊸","\\multimap",!0),I(L,_,"↭","\\leftrightsquigarrow",!0),I(L,_,"⇉","\\rightrightarrows",!0),I(L,_,"⇄","\\rightleftarrows",!0),I(L,_,"↠","\\twoheadrightarrow",!0),I(L,_,"↣","\\rightarrowtail",!0),I(L,_,"↬","\\looparrowright",!0),I(L,_,"↷","\\curvearrowright",!0),I(L,_,"↻","\\circlearrowright",!0),I(L,_,"↱","\\Rsh",!0),I(L,_,"⇊","\\downdownarrows",!0),I(L,_,"↾","\\upharpoonright",!0),I(L,_,"⇂","\\downharpoonright",!0),I(L,_,"⇝","\\rightsquigarrow",!0),I(L,_,"⇝","\\leadsto"),I(L,_,"⇛","\\Rrightarrow",!0),I(L,_,"↾","\\restriction"),I(L,X,"‘","`"),I(L,X,"$","\\$"),I(F,X,"$","\\$"),I(F,X,"$","\\textdollar"),I(L,X,"¢","\\cent"),I(F,X,"¢","\\cent"),I(L,X,"%","\\%"),I(F,X,"%","\\%"),I(L,X,"_","\\_"),I(F,X,"_","\\_"),I(F,X,"_","\\textunderscore"),I(F,X,"␣","\\textvisiblespace",!0),I(L,X,"∠","\\angle",!0),I(L,X,"∞","\\infty",!0),I(L,X,"′","\\prime"),I(L,X,"″","\\dprime"),I(L,X,"‴","\\trprime"),I(L,X,"⁗","\\qprime"),I(L,X,"△","\\triangle"),I(F,X,"Α","\\Alpha",!0),I(F,X,"Β","\\Beta",!0),I(F,X,"Γ","\\Gamma",!0),I(F,X,"Δ","\\Delta",!0),I(F,X,"Ε","\\Epsilon",!0),I(F,X,"Ζ","\\Zeta",!0),I(F,X,"Η","\\Eta",!0),I(F,X,"Θ","\\Theta",!0),I(F,X,"Ι","\\Iota",!0),I(F,X,"Κ","\\Kappa",!0),I(F,X,"Λ","\\Lambda",!0),I(F,X,"Μ","\\Mu",!0),I(F,X,"Ν","\\Nu",!0),I(F,X,"Ξ","\\Xi",!0),I(F,X,"Ο","\\Omicron",!0),I(F,X,"Π","\\Pi",!0),I(F,X,"Ρ","\\Rho",!0),I(F,X,"Σ","\\Sigma",!0),I(F,X,"Τ","\\Tau",!0),I(F,X,"Υ","\\Upsilon",!0),I(F,X,"Φ","\\Phi",!0),I(F,X,"Χ","\\Chi",!0),I(F,X,"Ψ","\\Psi",!0),I(F,X,"Ω","\\Omega",!0),I(L,R,"Α","\\Alpha",!0),I(L,R,"Β","\\Beta",!0),I(L,R,"Γ","\\Gamma",!0),I(L,R,"Δ","\\Delta",!0),I(L,R,"Ε","\\Epsilon",!0),I(L,R,"Ζ","\\Zeta",!0),I(L,R,"Η","\\Eta",!0),I(L,R,"Θ","\\Theta",!0),I(L,R,"Ι","\\Iota",!0),I(L,R,"Κ","\\Kappa",!0),I(L,R,"Λ","\\Lambda",!0),I(L,R,"Μ","\\Mu",!0),I(L,R,"Ν","\\Nu",!0),I(L,R,"Ξ","\\Xi",!0),I(L,R,"Ο","\\Omicron",!0),I(L,R,"Π","\\Pi",!0),I(L,R,"Ρ","\\Rho",!0),I(L,R,"Σ","\\Sigma",!0),I(L,R,"Τ","\\Tau",!0),I(L,R,"Υ","\\Upsilon",!0),I(L,R,"Φ","\\Phi",!0),I(L,R,"Χ","\\Chi",!0),I(L,R,"Ψ","\\Psi",!0),I(L,R,"Ω","\\Omega",!0),I(L,H,"¬","\\neg",!0),I(L,H,"¬","\\lnot"),I(L,X,"⊤","\\top"),I(L,X,"⊥","\\bot"),I(L,X,"∅","\\emptyset"),I(L,X,"⌀","\\varnothing"),I(L,R,"α","\\alpha",!0),I(L,R,"β","\\beta",!0),I(L,R,"γ","\\gamma",!0),I(L,R,"δ","\\delta",!0),I(L,R,"ϵ","\\epsilon",!0),I(L,R,"ζ","\\zeta",!0),I(L,R,"η","\\eta",!0),I(L,R,"θ","\\theta",!0),I(L,R,"ι","\\iota",!0),I(L,R,"κ","\\kappa",!0),I(L,R,"λ","\\lambda",!0),I(L,R,"μ","\\mu",!0),I(L,R,"ν","\\nu",!0),I(L,R,"ξ","\\xi",!0),I(L,R,"ο","\\omicron",!0),I(L,R,"π","\\pi",!0),I(L,R,"ρ","\\rho",!0),I(L,R,"σ","\\sigma",!0),I(L,R,"τ","\\tau",!0),I(L,R,"υ","\\upsilon",!0),I(L,R,"ϕ","\\phi",!0),I(L,R,"χ","\\chi",!0),I(L,R,"ψ","\\psi",!0),I(L,R,"ω","\\omega",!0),I(L,R,"ε","\\varepsilon",!0),I(L,R,"ϑ","\\vartheta",!0),I(L,R,"ϖ","\\varpi",!0),I(L,R,"ϱ","\\varrho",!0),I(L,R,"ς","\\varsigma",!0),I(L,R,"φ","\\varphi",!0),I(L,R,"Ϙ","\\Coppa",!0),I(L,R,"ϙ","\\coppa",!0),I(L,R,"ϙ","\\varcoppa",!0),I(L,R,"Ϟ","\\Koppa",!0),I(L,R,"ϟ","\\koppa",!0),I(L,R,"Ϡ","\\Sampi",!0),I(L,R,"ϡ","\\sampi",!0),I(L,R,"Ϛ","\\Stigma",!0),I(L,R,"ϛ","\\stigma",!0),I(L,R,"⫫","\\Bot"),I(L,X,"ð","\\eth",!0),I(F,X,"ð","ð"),I(L,X,"Å","\\AA"),I(F,X,"Å","\\AA",!0),I(L,X,"Æ","\\AE",!0),I(F,X,"Æ","\\AE",!0),I(L,X,"Ð","\\DH",!0),I(F,X,"Ð","\\DH",!0),I(L,X,"Þ","\\TH",!0),I(F,X,"Þ","\\TH",!0),I(L,X,"ß","\\ss",!0),I(F,X,"ß","\\ss",!0),I(L,X,"å","\\aa"),I(F,X,"å","\\aa",!0),I(L,X,"æ","\\ae",!0),I(F,X,"æ","\\ae",!0),I(L,X,"ð","\\dh"),I(F,X,"ð","\\dh",!0),I(L,X,"þ","\\th",!0),I(F,X,"þ","\\th",!0),I(L,X,"Đ","\\DJ",!0),I(F,X,"Đ","\\DJ",!0),I(L,X,"đ","\\dj",!0),I(F,X,"đ","\\dj",!0),I(L,X,"Ł","\\L",!0),I(F,X,"Ł","\\L",!0),I(L,X,"Ł","\\l",!0),I(F,X,"Ł","\\l",!0),I(L,X,"Ŋ","\\NG",!0),I(F,X,"Ŋ","\\NG",!0),I(L,X,"ŋ","\\ng",!0),I(F,X,"ŋ","\\ng",!0),I(L,X,"Œ","\\OE",!0),I(F,X,"Œ","\\OE",!0),I(L,X,"œ","\\oe",!0),I(F,X,"œ","\\oe",!0),I(L,G,"∗","∗",!0),I(L,G,"+","+"),I(L,G,"∗","*"),I(L,G,"⁄","/",!0),I(L,G,"⁄","⁄"),I(L,G,"−","-",!0),I(L,G,"⋅","\\cdot",!0),I(L,G,"∘","\\circ",!0),I(L,G,"÷","\\div",!0),I(L,G,"±","\\pm",!0),I(L,G,"×","\\times",!0),I(L,G,"∩","\\cap",!0),I(L,G,"∪","\\cup",!0),I(L,G,"∖","\\setminus",!0),I(L,G,"∧","\\land"),I(L,G,"∨","\\lor"),I(L,G,"∧","\\wedge",!0),I(L,G,"∨","\\vee",!0),I(L,H,"⟦","\\llbracket",!0),I(L,j,"⟧","\\rrbracket",!0),I(L,H,"⟨","\\langle",!0),I(L,H,"⟪","\\lAngle",!0),I(L,H,"⦉","\\llangle",!0),I(L,H,"|","\\lvert"),I(L,H,"‖","\\lVert",!0),I(L,X,"!","\\oc"),I(L,X,"?","\\wn"),I(L,X,"↓","\\shpos"),I(L,X,"↕","\\shift"),I(L,X,"↑","\\shneg"),I(L,j,"?","?"),I(L,j,"!","!"),I(L,j,"‼","‼"),I(L,j,"⟩","\\rangle",!0),I(L,j,"⟫","\\rAngle",!0),I(L,j,"⦊","\\rrangle",!0),I(L,j,"|","\\rvert"),I(L,j,"‖","\\rVert"),I(L,H,"⦃","\\lBrace",!0),I(L,j,"⦄","\\rBrace",!0),I(L,_,"=","\\equal",!0),I(L,_,":",":"),I(L,_,"≈","\\approx",!0),I(L,_,"≅","\\cong",!0),I(L,_,"≥","\\ge"),I(L,_,"≥","\\geq",!0),I(L,_,"←","\\gets"),I(L,_,">","\\gt",!0),I(L,_,"∈","\\in",!0),I(L,_,"∉","\\notin",!0),I(L,_,"","\\@not"),I(L,_,"⊂","\\subset",!0),I(L,_,"⊃","\\supset",!0),I(L,_,"⊆","\\subseteq",!0),I(L,_,"⊇","\\supseteq",!0),I(L,_,"⊈","\\nsubseteq",!0),I(L,_,"⊈","\\nsubseteqq"),I(L,_,"⊉","\\nsupseteq",!0),I(L,_,"⊉","\\nsupseteqq"),I(L,_,"⊨","\\models"),I(L,_,"←","\\leftarrow",!0),I(L,_,"≤","\\le"),I(L,_,"≤","\\leq",!0),I(L,_,"<","\\lt",!0),I(L,_,"→","\\rightarrow",!0),I(L,_,"→","\\to"),I(L,_,"≱","\\ngeq",!0),I(L,_,"≱","\\ngeqq"),I(L,_,"≱","\\ngeqslant"),I(L,_,"≰","\\nleq",!0),I(L,_,"≰","\\nleqq"),I(L,_,"≰","\\nleqslant"),I(L,_,"⫫","\\Perp",!0),I(L,W," ","\\ "),I(L,W," ","\\space"),I(L,W," ","\\nobreakspace"),I(F,W," ","\\ "),I(F,W," "," "),I(F,W," ","\\space"),I(F,W," ","\\nobreakspace"),I(L,W,null,"\\nobreak"),I(L,W,null,"\\allowbreak"),I(L,V,",",","),I(F,V,":",":"),I(L,V,";",";"),I(L,G,"⊼","\\barwedge"),I(L,G,"⊻","\\veebar"),I(L,G,"⊙","\\odot",!0),I(L,G,"⊕︎","\\oplus"),I(L,G,"⊗","\\otimes",!0),I(L,X,"∂","\\partial",!0),I(L,G,"⊘","\\oslash",!0),I(L,G,"⊚","\\circledcirc",!0),I(L,G,"⊡","\\boxdot",!0),I(L,G,"△","\\bigtriangleup"),I(L,G,"▽","\\bigtriangledown"),I(L,G,"†","\\dagger"),I(L,G,"⋄","\\diamond"),I(L,G,"◃","\\triangleleft"),I(L,G,"▹","\\triangleright"),I(L,H,"{","\\{"),I(F,X,"{","\\{"),I(F,X,"{","\\textbraceleft"),I(L,j,"}","\\}"),I(F,X,"}","\\}"),I(F,X,"}","\\textbraceright"),I(L,H,"{","\\lbrace"),I(L,j,"}","\\rbrace"),I(L,H,"[","\\lbrack",!0),I(F,X,"[","\\lbrack",!0),I(L,j,"]","\\rbrack",!0),I(F,X,"]","\\rbrack",!0),I(L,H,"(","\\lparen",!0),I(L,j,")","\\rparen",!0),I(L,H,"⦇","\\llparenthesis",!0),I(L,j,"⦈","\\rrparenthesis",!0),I(F,X,"<","\\textless",!0),I(F,X,">","\\textgreater",!0),I(L,H,"⌊","\\lfloor",!0),I(L,j,"⌋","\\rfloor",!0),I(L,H,"⌈","\\lceil",!0),I(L,j,"⌉","\\rceil",!0),I(L,X,"\\","\\backslash"),I(L,X,"|","|"),I(L,X,"|","\\vert"),I(F,X,"|","\\textbar",!0),I(L,X,"‖","\\|"),I(L,X,"‖","\\Vert"),I(F,X,"‖","\\textbardbl"),I(F,X,"~","\\textasciitilde"),I(F,X,"\\","\\textbackslash"),I(F,X,"^","\\textasciicircum"),I(L,_,"↑","\\uparrow",!0),I(L,_,"⇑","\\Uparrow",!0),I(L,_,"↓","\\downarrow",!0),I(L,_,"⇓","\\Downarrow",!0),I(L,_,"↕","\\updownarrow",!0),I(L,_,"⇕","\\Updownarrow",!0),I(L,U,"∐","\\coprod"),I(L,U,"⋁","\\bigvee"),I(L,U,"⋀","\\bigwedge"),I(L,U,"⨄","\\biguplus"),I(L,U,"⨄","\\bigcupplus"),I(L,U,"⨃","\\bigcupdot"),I(L,U,"⨇","\\bigdoublevee"),I(L,U,"⨈","\\bigdoublewedge"),I(L,U,"⋂","\\bigcap"),I(L,U,"⋃","\\bigcup"),I(L,U,"∫","\\int"),I(L,U,"∫","\\intop"),I(L,U,"∬","\\iint"),I(L,U,"∭","\\iiint"),I(L,U,"∏","\\prod"),I(L,U,"∑","\\sum"),I(L,U,"⨂","\\bigotimes"),I(L,U,"⨁","\\bigoplus"),I(L,U,"⨀","\\bigodot"),I(L,U,"⨉","\\bigtimes"),I(L,U,"∮","\\oint"),I(L,U,"∯","\\oiint"),I(L,U,"∰","\\oiiint"),I(L,U,"∱","\\intclockwise"),I(L,U,"∲","\\varointclockwise"),I(L,U,"⨌","\\iiiint"),I(L,U,"⨍","\\intbar"),I(L,U,"⨎","\\intBar"),I(L,U,"⨏","\\fint"),I(L,U,"⨒","\\rppolint"),I(L,U,"⨓","\\scpolint"),I(L,U,"⨕","\\pointint"),I(L,U,"⨖","\\sqint"),I(L,U,"⨗","\\intlarhk"),I(L,U,"⨘","\\intx"),I(L,U,"⨙","\\intcap"),I(L,U,"⨚","\\intcup"),I(L,U,"⨅","\\bigsqcap"),I(L,U,"⨆","\\bigsqcup"),I(L,U,"∫","\\smallint"),I(F,P,"…","\\textellipsis"),I(L,P,"…","\\mathellipsis"),I(F,P,"…","\\ldots",!0),I(L,P,"…","\\ldots",!0),I(L,P,"⋰","\\iddots",!0),I(L,P,"⋯","\\@cdots",!0),I(L,P,"⋱","\\ddots",!0),I(L,X,"⋮","\\varvdots"),I(F,X,"⋮","\\varvdots"),I(L,D,"ˊ","\\acute"),I(L,D,"`","\\grave"),I(L,D,"¨","\\ddot"),I(L,D,"…","\\dddot"),I(L,D,"….","\\ddddot"),I(L,D,"~","\\tilde"),I(L,D,"‾","\\bar"),I(L,D,"˘","\\breve"),I(L,D,"ˇ","\\check"),I(L,D,"^","\\hat"),I(L,D,"→","\\vec"),I(L,D,"˙","\\dot"),I(L,D,"˚","\\mathring"),I(L,R,"ı","\\imath",!0),I(L,R,"ȷ","\\jmath",!0),I(L,X,"ı","ı"),I(L,X,"ȷ","ȷ"),I(F,X,"ı","\\i",!0),I(F,X,"ȷ","\\j",!0),I(F,X,"ø","\\o",!0),I(L,R,"ø","\\o",!0),I(F,X,"Ø","\\O",!0),I(L,R,"Ø","\\O",!0),I(F,D,"ˊ","\\'"),I(F,D,"ˋ","\\`"),I(F,D,"ˆ","\\^"),I(F,D,"˜","\\~"),I(F,D,"ˉ","\\="),I(F,D,"˘","\\u"),I(F,D,"˙","\\."),I(F,D,"¸","\\c"),I(F,D,"˚","\\r"),I(F,D,"ˇ","\\v");I(F,D,"¨",'\\"'),I(F,D,"˝","\\H"),I(L,D,"ˊ","\\'"),I(L,D,"ˋ","\\`"),I(L,D,"ˆ","\\^"),I(L,D,"˜","\\~"),I(L,D,"ˉ","\\="),I(L,D,"˘","\\u"),I(L,D,"˙","\\."),I(L,D,"¸","\\c"),I(L,D,"˚","\\r"),I(L,D,"ˇ","\\v"),I(L,D,"¨",'\\"'),I(L,D,"˝","\\H");const Z={"--":!0,"---":!0,"``":!0,"''":!0};I(F,X,"–","--",!0),I(F,X,"–","\\textendash"),I(F,X,"—","---",!0),I(F,X,"—","\\textemdash"),I(F,X,"‘","`",!0),I(F,X,"‘","\\textquoteleft"),I(F,X,"’","'",!0),I(F,X,"’","\\textquoteright"),I(F,X,"“","``",!0),I(F,X,"“","\\textquotedblleft"),I(F,X,"”","''",!0),I(F,X,"”","\\textquotedblright"),I(L,X,"°","\\degree",!0),I(F,X,"°","\\degree"),I(F,X,"°","\\textdegree",!0),I(L,X,"£","\\pounds"),I(L,X,"£","\\mathsterling",!0),I(F,X,"£","\\pounds"),I(F,X,"£","\\textsterling",!0),I(L,X,"✠","\\maltese"),I(F,X,"✠","\\maltese"),I(L,X,"€","\\euro",!0),I(F,X,"€","\\euro",!0),I(F,X,"€","\\texteuro"),I(L,X,"©","\\copyright",!0),I(F,X,"©","\\textcopyright"),I(L,X,"⌀","\\diameter",!0),I(F,X,"⌀","\\diameter"),I(L,X,"𝛤","\\varGamma"),I(L,X,"𝛥","\\varDelta"),I(L,X,"𝛩","\\varTheta"),I(L,X,"𝛬","\\varLambda"),I(L,X,"𝛯","\\varXi"),I(L,X,"𝛱","\\varPi"),I(L,X,"𝛴","\\varSigma"),I(L,X,"𝛶","\\varUpsilon"),I(L,X,"𝛷","\\varPhi"),I(L,X,"𝛹","\\varPsi"),I(L,X,"𝛺","\\varOmega"),I(F,X,"𝛤","\\varGamma"),I(F,X,"𝛥","\\varDelta"),I(F,X,"𝛩","\\varTheta"),I(F,X,"𝛬","\\varLambda"),I(F,X,"𝛯","\\varXi"),I(F,X,"𝛱","\\varPi"),I(F,X,"𝛴","\\varSigma"),I(F,X,"𝛶","\\varUpsilon"),I(F,X,"𝛷","\\varPhi"),I(F,X,"𝛹","\\varPsi"),I(F,X,"𝛺","\\varOmega");const Y='0123456789/@."';for(let e=0;e<14;e++){const t=Y.charAt(e);I(L,X,t,t)}const J='0123456789!@*()-=+";:?/.,';for(let e=0;e<25;e++){const t=J.charAt(e);I(F,X,t,t)}const K="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(let e=0;e<52;e++){const t=K.charAt(e);I(L,R,t,t),I(F,X,t,t)}const Q="ÇÐÞçþℂℍℕℙℚℝℤℎℏℊℋℌℐℑℒℓ℘ℛℜℬℰℱℳℭℨ";for(let e=0;e<30;e++){const t=Q.charAt(e);I(L,R,t,t),I(F,X,t,t)}let ee="";for(let e=0;e<52;e++){ee=String.fromCharCode(55349,56320+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56372+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56424+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56580+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56736+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56788+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56840+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56944+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56632+e),I(L,R,ee,ee),I(F,X,ee,ee);const t=K.charAt(e);ee=String.fromCharCode(55349,56476+e),I(L,R,t,ee),I(F,X,t,ee)}for(let e=0;e<10;e++)ee=String.fromCharCode(55349,57294+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57314+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57324+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57334+e),I(L,R,ee,ee),I(F,X,ee,ee);const te=function(e,t,r){return!$[t][e]||!$[t][e].replace||55349===e.charCodeAt(0)||Object.prototype.hasOwnProperty.call(Z,e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=$[t][e].replace),new T.TextNode(e)},re=(e,t)=>{if(0===e.children.length||"mtext"!==e.children[e.children.length-1].type){const r=new T.MathNode("mtext",[new T.TextNode(t.children[0].text)]);e.children.push(r)}else e.children[e.children.length-1].children[0].text+=t.children[0].text},ne=e=>{if("mrow"!==e.type&&"mstyle"!==e.type)return e;if(0===e.children.length)return e;const t=new T.MathNode("mrow");for(let r=0;r<e.children.length;r++){const n=e.children[r];if("mtext"===n.type&&0===Object.keys(n.attributes).length)re(t,n);else if("mrow"===n.type){let e=!0;for(let t=0;t<n.children.length;t++){if("mtext"!==n.children[t].type||0!==Object.keys(n.attributes).length){e=!1;break}}if(e)for(let e=0;e<n.children.length;e++){const r=n.children[e];re(t,r)}else t.children.push(n)}else t.children.push(n)}for(let r=0;r<t.children.length;r++)if("mtext"===t.children[r].type){const n=t.children[r];" "===n.children[0].text.charAt(0)&&(n.children[0].text=" "+n.children[0].text.slice(1));const s=n.children[0].text.length;s>0&&" "===n.children[0].text.charAt(s-1)&&(n.children[0].text=n.children[0].text.slice(0,-1)+" ");for(const[t,r]of Object.entries(e.attributes))n.attributes[t]=r}return 1===t.children.length&&"mtext"===t.children[0].type?t.children[0]:t},se=function(e,t=!1){if(!(1!==e.length||e[0]instanceof u))return e[0];if(!t){e[0]instanceof v&&"mo"===e[0].type&&!e[0].attributes.fence&&(e[0].attributes.lspace="0em",e[0].attributes.rspace="0em");const t=e.length-1;e[t]instanceof v&&"mo"===e[t].type&&!e[t].attributes.fence&&(e[t].attributes.lspace="0em",e[t].attributes.rspace="0em")}return new T.MathNode("mrow",e)};function oe(e){if(!e)return!1;if("mi"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof A&&"."===t.text}if("mtext"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof A&&" "===t.text}if("mo"===e.type&&1===e.children.length&&"true"===e.getAttribute("separator")&&"0em"===e.getAttribute("lspace")&&"0em"===e.getAttribute("rspace")){const t=e.children[0];return t instanceof A&&","===t.text}return!1}const ae=(e,t)=>{const r=e[t],n=e[t+1];return"atom"===r.type&&","===r.text&&r.loc&&n.loc&&r.loc.end===n.loc.start},le=e=>"atom"===e.type&&"rel"===e.family||"mclass"===e.type&&"mrel"===e.mclass,ie=function(e,t,r=!1){if(!r&&1===e.length){const r=de(e[0],t);return r instanceof v&&"mo"===r.type&&(r.setAttribute("lspace","0em"),r.setAttribute("rspace","0em")),[r]}const n=[],s=[];let o;for(let r=0;r<e.length;r++)s.push(de(e[r],t));for(let t=0;t<s.length;t++){const r=s[t];if(t<e.length-1&&le(e[t])&&le(e[t+1])&&r.setAttribute("rspace","0em"),t>0&&le(e[t])&&le(e[t-1])&&r.setAttribute("lspace","0em"),"mn"===r.type&&o&&"mn"===o.type)o.children.push(...r.children);else if(oe(r)&&o&&"mn"===o.type)o.children.push(...r.children);else if(o&&"mn"===o.type&&t<s.length-1&&"mn"===s[t+1].type&&ae(e,t))o.children.push(...r.children);else{if("mn"===r.type&&oe(o))r.children=[...o.children,...r.children],n.pop();else if(("msup"===r.type||"msub"===r.type)&&r.children.length>=1&&o&&("mn"===o.type||oe(o))){const e=r.children[0];e instanceof v&&"mn"===e.type&&o&&(e.children=[...o.children,...e.children],n.pop())}n.push(r),o=r}}return n},ce=function(e,t,r=!1){return se(ie(e,t,r),r)},de=function(t,r){if(!t)return new T.MathNode("mrow");if(i[t.type]){return i[t.type](t,r)}throw new e("Got group of unknown type: '"+t.type+"'")},me=e=>new T.MathNode("mtd",[],[],{padding:"0",width:"50%"}),pe=["mrow","mtd","mtable","mtr"],ue=e=>{for(const t of e.children)if(t.type&&pe.includes(t.type)){if(t.classes&&"tml-label"===t.classes[0]){return t.label}{const e=ue(t);if(e)return e}}else if(!t.type){const e=ue(t);if(e)return e}};function he(e,t,r,n){let s=null;1===e.length&&"tag"===e[0].type&&(s=e[0].tag,e=e[0].body);const o=ie(e,r);if(1===o.length&&o[0]instanceof x)return o[0];const a=n.displayMode||n.annotate?"none":n.wrap,l=0===o.length?null:o[0];let i=1===o.length&&null===s&&l instanceof v?o[0]:function(e,t,r){const n=[];let s=[],o=[],a=0,l=0,i=0;for(;l<e.length;){for(;e[l]instanceof u;)e.splice(l,1,...e[l].children);const r=e[l];if(r.attributes&&r.attributes.linebreak&&"newline"===r.attributes.linebreak){o.length>0&&s.push(new T.MathNode("mrow",o)),s.push(r),o=[];const e=new T.MathNode("mtd",s);e.style.textAlign="left",n.push(new T.MathNode("mtr",[e])),s=[],l+=1}else{if(o.push(r),r.type&&"mo"===r.type&&1===r.children.length&&!Object.prototype.hasOwnProperty.call(r.attributes,"movablelimits")){const n=r.children[0].text;if("([{⌊⌈⟨⟮⎰⟦⦃".indexOf(n)>-1)i+=1;else if(")]}⌋⌉⟩⟯⎱⟦⦄".indexOf(n)>-1)i-=1;else if(0===i&&"="===t&&"="===n){if(a+=1,a>1){o.pop();const e=new T.MathNode("mrow",o);s.push(e),o=[r]}}else if(0===i&&"tex"===t&&"∇"!==n){const t=l<e.length-1?e[l+1]:null;let r=!0;if(!t||"mtext"!==t.type||!t.attributes.linebreak||"nobreak"!==t.attributes.linebreak)for(let t=l+1;t<e.length;t++){const n=e[t];if(!n.type||"mspace"!==n.type||n.attributes.linebreak&&"newline"===n.attributes.linebreak)break;o.push(n),l+=1,n.attributes&&n.attributes.linebreak&&"nobreak"===n.attributes.linebreak&&(r=!1)}if(r){const e=new T.MathNode("mrow",o);s.push(e),o=[]}}}l+=1}}if(o.length>0){const e=new T.MathNode("mrow",o);s.push(e)}if(n.length>0){const e=new T.MathNode("mtd",s);e.style.textAlign="left";const t=new T.MathNode("mtr",[e]);n.push(t);const o=new T.MathNode("mtable",n);return r||(o.setAttribute("columnalign","left"),o.setAttribute("rowspacing","0em")),o}return T.newDocumentFragment(s)}(o,a,n.displayMode);if(s&&(i=((e,t,r,n)=>{t=ce(t[0].body,r),(t=ne(t)).classes.push("tml-tag");const s=ue(e);e=new T.MathNode("mtd",[e]);const o=[me(),e,me()];o[n?0:2].classes.push(n?"tml-left":"tml-right"),o[n?0:2].children.push(t);const a=new T.MathNode("mtr",o,["tml-tageqn"]);s&&a.setAttribute("id",s);const l=new T.MathNode("mtable",[a]);return l.style.width="100%",l.setAttribute("displaystyle","true"),l})(i,s,r,n.leqno)),n.annotate){const e=new T.MathNode("annotation",[new T.TextNode(t)]);e.setAttribute("encoding","application/x-tex"),i=new T.MathNode("semantics",[i,e])}const c=new T.MathNode("math",[i]);return n.xml&&c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),i.style.width&&(c.style.width="100%"),n.displayMode&&(c.setAttribute("display","block"),c.style.display="block math",c.classes=["tml-display"]),c}const ge="acegıȷmnopqrsuvwxyzαγεηικμνοπρςστυχωϕ𝐚𝐜𝐞𝐠𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐮𝐯𝐰𝐱𝐲𝐳",fe="ABCDEFGHIJKLMNOPQRSTUVWXYZbdfhkltΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩβδλζφθψ𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙𝐛𝐝𝐟𝐡𝐤𝐥𝐭",be=new Set(["\\alpha","\\gamma","\\delta","\\epsilon","\\eta","\\iota","\\kappa","\\mu","\\nu","\\pi","\\rho","\\sigma","\\tau","\\upsilon","\\chi","\\psi","\\omega","\\imath","\\jmath"]),ye=new Set(["\\Gamma","\\Delta","\\Sigma","\\Omega","\\beta","\\delta","\\lambda","\\theta","\\psi"]),we=(e,t)=>{const r=e.isStretchy?C(e):new T.MathNode("mo",[te(e.label,e.mode)]);if("\\vec"===e.label)r.style.transform="scale(0.75) translate(10%, 30%)";else if(r.style.mathStyle="normal",r.style.mathDepth="0",ke.has(e.label)&&o.isCharacterBox(e.base)){let t="";const n=e.base.text;(ge.indexOf(n)>-1||be.has(n))&&(t="tml-xshift"),(fe.indexOf(n)>-1||ye.has(n))&&(t="tml-capshift"),t&&r.classes.push(t)}e.isStretchy||r.setAttribute("stretchy","false");return new T.MathNode("\\c"===e.label?"munder":"mover",[de(e.base,t),r])},xe=new Set(["\\acute","\\grave","\\ddot","\\dddot","\\ddddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"]),ke=new Set(["\\acute","\\bar","\\breve","\\check","\\dot","\\ddot","\\grave","\\hat","\\mathring","\\'","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v"]),ve={"\\`":"̀","\\'":"́","\\^":"̂","\\~":"̃","\\=":"̄","\\u":"̆","\\.":"̇",'\\"':"̈","\\r":"̊","\\H":"̋","\\v":"̌"};c({type:"accent",names:["\\acute","\\grave","\\ddot","\\dddot","\\ddddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\overparen","\\widecheck","\\widehat","\\wideparen","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{const r=m(t[0]),n=!xe.has(e.funcName);return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,base:r}},mathmlBuilder:we}),c({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\c","\\u","\\.",'\\"',"\\r","\\H","\\v"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{const r=m(t[0]),n=e.parser.mode;return"math"===n&&e.parser.settings.strict&&console.log(`Temml parse error: Command ${e.funcName} is invalid in math mode.`),"text"===n&&r.text&&1===r.text.length&&e.funcName in ve&&ge.indexOf(r.text)>-1?{type:"textord",mode:"text",text:r.text+ve[e.funcName]}:{type:"accent",mode:n,label:e.funcName,isStretchy:!1,base:r}},mathmlBuilder:we}),c({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underparen","\\utilde"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>{const n=r[0];return{type:"accentUnder",mode:e.mode,label:t,base:n}},mathmlBuilder:(e,t)=>{const r=C(e);r.style["math-depth"]=0;return new T.MathNode("munder",[de(e.base,t),r])}});const Ae={pt:800/803,pc:9600/803,dd:1238/1157*800/803,cc:12.792133216944668,nd:685/642*800/803,nc:1370/107*800/803,sp:1/65536*800/803,mm:25.4/72,cm:2.54/72,in:1/72,px:96/72},Ne=["em","ex","mu","pt","mm","cm","in","px","bp","pc","dd","cc","nd","nc","sp"],Te=function(e){return"string"!=typeof e&&(e=e.unit),Ne.indexOf(e)>-1},Se=e=>[1,.7,.5][Math.max(e-1,0)],qe=function(t,r){let n=t.number;if(r.maxSize[0]<0&&n>0)return{number:0,unit:"em"};const s=t.unit;switch(s){case"mm":case"cm":case"in":case"px":return n*Ae[s]>r.maxSize[1]?{number:r.maxSize[1],unit:"pt"}:{number:n,unit:s};case"em":case"ex":return"ex"===s&&(n*=.431),n=Math.min(n/Se(r.level),r.maxSize[0]),{number:o.round(n),unit:"em"};case"bp":return n>r.maxSize[1]&&(n=r.maxSize[1]),{number:n,unit:"pt"};case"pt":case"pc":case"dd":case"cc":case"nd":case"nc":case"sp":return n=Math.min(n*Ae[s],r.maxSize[1]),{number:o.round(n),unit:"pt"};case"mu":return n=Math.min(n/18,r.maxSize[0]),{number:o.round(n),unit:"em"};default:throw new e("Invalid unit: '"+s+"'")}},Oe=e=>{const t=new T.MathNode("mspace");return t.setAttribute("width",e+"em"),t},Me=(e,t=.3,r=0,n=!1)=>{if(null==e&&0===r)return Oe(t);const s=e?[e]:[];if(0!==t&&s.unshift(Oe(t)),r>0&&s.push(Oe(r)),n){const e=new T.MathNode("mpadded",s);return e.setAttribute("height","0"),e}return new T.MathNode("mrow",s)},Be=(e,t)=>Number(e)/Se(t),Ce=(e,t,r,n)=>{const s=B(e),o="eq"===e.slice(1,3),a="x"===e.charAt(1)?"1.75":"cd"===e.slice(2,4)?"3.0":o?"1.0":"2.0";s.setAttribute("lspace","0"),s.setAttribute("rspace",o?"0.5em":"0");const l=n.withLevel(n.level<2?2:3),i=Be(a,l.level),c=Be(a,3),d=Me(null,i.toFixed(4),0),m=Me(null,c.toFixed(4),0),p=Be(o?0:.3,l.level).toFixed(4);let u,h;const g=t&&t.body&&(t.body.body||t.body.length>0);if(g){let r=de(t,l);r=Me(r,p,p,"\\\\cdrightarrow"===e||"\\\\cdleftarrow"===e),u=new T.MathNode("mover",[r,m])}const f=r&&r.body&&(r.body.body||r.body.length>0);if(f){let e=de(r,l);e=Me(e,p,p),h=new T.MathNode("munder",[e,m])}let b;return b=g||f?g&&f?new T.MathNode("munderover",[s,h,u]):g?new T.MathNode("mover",[s,u]):new T.MathNode("munder",[s,h]):new T.MathNode("mover",[s,d]),"3.0"===a&&(b.style.height="1em"),b.setAttribute("accent","false"),b};c({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\yields","\\yieldsLeft","\\mesomerism","\\longrightharpoonup","\\longleftharpoondown","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:({parser:e,funcName:t},r,n)=>({type:"xArrow",mode:e.mode,name:t,body:r[0],below:n[0]}),mathmlBuilder(e,t){const r=[Ce(e.name,e.body,e.below,t)];return r.unshift(Oe(.2778)),r.push(Oe(.2778)),new T.MathNode("mrow",r)}});const ze={"\\xtofrom":["\\xrightarrow","\\xleftarrow"],"\\xleftrightharpoons":["\\xleftharpoonup","\\xrightharpoondown"],"\\xrightleftharpoons":["\\xrightharpoonup","\\xleftharpoondown"],"\\yieldsLeftRight":["\\yields","\\yieldsLeft"],"\\equilibrium":["\\longrightharpoonup","\\longleftharpoondown"],"\\equilibriumRight":["\\longrightharpoonup","\\eqleftharpoondown"],"\\equilibriumLeft":["\\eqrightharpoonup","\\longleftharpoondown"]};c({type:"stackedArrow",names:["\\xtofrom","\\xleftrightharpoons","\\xrightleftharpoons","\\yieldsLeftRight","\\equilibrium","\\equilibriumRight","\\equilibriumLeft"],props:{numArgs:1,numOptionalArgs:1},handler({parser:e,funcName:t},r,n){const s=r[0]?{type:"hphantom",mode:e.mode,body:r[0]}:null,o=n[0]?{type:"hphantom",mode:e.mode,body:n[0]}:null;return{type:"stackedArrow",mode:e.mode,name:t,body:r[0],upperArrowBelow:o,lowerArrowBody:s,below:n[0]}},mathmlBuilder(e,t){const r=ze[e.name][0],n=ze[e.name][1],s=Ce(r,e.body,e.upperArrowBelow,t),o=Ce(n,e.lowerArrowBody,e.below,t);let a;const l=new T.MathNode("mpadded",[s]);if(l.setAttribute("voffset","0.3em"),l.setAttribute("height","+0.3em"),l.setAttribute("depth","-0.3em"),"\\equilibriumLeft"===e.name){const e=new T.MathNode("mpadded",[o]);e.setAttribute("width","0.5em"),a=new T.MathNode("mpadded",[Oe(.2778),e,l,Oe(.2778)])}else l.setAttribute("width","\\equilibriumRight"===e.name?"0.5em":"0"),a=new T.MathNode("mpadded",[Oe(.2778),l,o,Oe(.2778)]);return a.setAttribute("voffset","-0.18em"),a.setAttribute("height","-0.18em"),a.setAttribute("depth","+0.18em"),a}});const Ee={};function $e({type:e,names:t,props:r,handler:n,mathmlBuilder:s}){const o={type:e,numArgs:r.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n};for(let e=0;e<t.length;++e)Ee[t[e]]=o;s&&(i[e]=s)}function Ie(e,t){if(!e||e.type!==t)throw new Error(`Expected node of type ${t}, but got `+(e?`node of type ${e.type}`:String(e)));return e}function Le(e){const t=Fe(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?`node of type ${e.type}`:String(e)));return t}function Fe(e){return e&&("atom"===e.type||Object.prototype.hasOwnProperty.call(E,e.type))?e:null}const De={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Ge=e=>"textord"===e.type&&"@"===e.text;function je(e,t,r){const n=De[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{const e={type:"atom",text:n,mode:"math",family:"rel"},s={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[e],[]),r.callFunction("\\\\cdright",[t[1]],[])],semisimple:!0};return r.callFunction("\\\\cdparent",[s],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{const e={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[e],[])}default:return{type:"textord",text:" ",mode:"math"}}}c({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>({type:"cdlabel",mode:e.mode,side:t.slice(4),label:r[0]}),mathmlBuilder(e,t){if(0===e.label.body.length)return new T.MathNode("mrow",t);const r=new T.MathNode("mtd",[de(e.label,t)]);r.style.padding="0";const n=new T.MathNode("mtr",[r]),s=new T.MathNode("mtable",[n]),o=new T.MathNode("mpadded",[s]);return o.setAttribute("width","0"),o.setAttribute("displaystyle","false"),o.setAttribute("scriptlevel","1"),"left"===e.side&&(o.style.display="flex",o.style.justifyContent="flex-end"),o}}),c({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:({parser:e},t)=>({type:"cdlabelparent",mode:e.mode,fragment:t[0]}),mathmlBuilder:(e,t)=>new T.MathNode("mrow",[de(e.fragment,t)])});const Pe=e=>({type:"ordgroup",mode:"math",body:e,semisimple:!0}),Re=(e,t)=>({type:t,mode:"math",body:Pe(e)});class Ue{constructor(e,t,r){this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?e&&e.loc&&t.loc&&e.loc.lexer===t.loc.lexer?new Ue(e.loc.lexer,e.loc.start,t.loc.end):null:e&&e.loc}}class He{constructor(e,t){this.text=e,this.loc=t}range(e,t){return new He(t,Ue.range(this,e))}}const Ve=0,_e=1,We=2,Xe=3,Ze={};function Ye(e,t){Ze[e]=t}const Je=Ze;Ye("\\noexpand",(function(e){const t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Ye("\\expandafter",(function(e){const t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Ye("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Ye("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Ye("\\@ifnextchar",(function(e){const t=e.consumeArgs(3);e.consumeSpaces();const r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Ye("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Ye("\\TextOrMath",(function(e){const t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));const Ke=e=>{let t="";for(let r=e.length-1;r>-1;r--)t+=e[r].text;return t},Qe={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15},et=e=>{const t=e.future().text;return"EOF"===t?[null,""]:[Qe[t.charAt(0)],t]},tt=(e,t,r)=>{for(let n=1;n<t.length;n++){e*=r,e+=Qe[t.charAt(n)]}return e};function rt(e){const t=e.consumeArgs(1)[0];let r="",n=t[t.length-1].loc.start;for(let e=t.length-1;e>=0;e--){const s=t[e].loc.start;s>n&&(r+=" ",n=s),r+=t[e].text,n+=t[e].text.length}return r}Ye("\\char",(function(t){let r,n=t.popToken(),s="";if("'"===n.text)r=8,n=t.popToken();else if('"'===n.text)r=16,n=t.popToken();else if("`"===n.text)if(n=t.popToken(),"\\"===n.text[0])s=n.text.charCodeAt(1);else{if("EOF"===n.text)throw new e("\\char` missing argument");s=n.text.charCodeAt(0)}else r=10;if(r){let o,a=n.text;if(s=Qe[a.charAt(0)],null==s||s>=r)throw new e(`Invalid base-${r} digit ${n.text}`);for(s=tt(s,a,r),[o,a]=et(t);null!=o&&o<r;)s*=r,s+=o,s=tt(s,a,r),t.popToken(),[o,a]=et(t)}return`\\@char{${s}}`})),Ye("\\surd","\\sqrt{\\vphantom{|}}"),Ye("⊕","\\oplus"),Ye("\\long",""),Ye("\\bgroup","{"),Ye("\\egroup","}"),Ye("~","\\nobreakspace"),Ye("\\lq","`"),Ye("\\rq","'"),Ye("\\aa","\\r a"),Ye("\\Bbbk","\\Bbb{k}"),Ye("\\mathstrut","\\vphantom{(}"),Ye("\\underbar","\\underline{\\text{#1}}"),Ye("\\vdots","{\\varvdots\\rule{0pt}{15pt}}"),Ye("⋮","\\vdots"),Ye("\\arraystretch","1"),Ye("\\arraycolsep","6pt"),Ye("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Ye("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Ye("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Ye("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");const nt={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcap":"\\dotsb","\\bigsqcup":"\\dotsb","\\bigtimes":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Ye("\\dots",(function(e){let t="\\dotso";const r=e.expandAfterFuture().text;return r in nt?t=nt[r]:("\\not"===r.slice(0,4)||r in $.math&&["bin","rel"].includes($.math[r].group))&&(t="\\dotsb"),t}));const st={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Ye("\\dotso",(function(e){return e.future().text in st?"\\ldots\\,":"\\ldots"})),Ye("\\dotsc",(function(e){const t=e.future().text;return t in st&&","!==t?"\\ldots\\,":"\\ldots"})),Ye("\\cdots",(function(e){return e.future().text in st?"\\@cdots\\,":"\\@cdots"})),Ye("\\dotsb","\\cdots"),Ye("\\dotsm","\\cdots"),Ye("\\dotsi","\\!\\cdots"),Ye("\\idotsint","\\dotsi"),Ye("\\dotsx","\\ldots\\,"),Ye("\\DOTSI","\\relax"),Ye("\\DOTSB","\\relax"),Ye("\\DOTSX","\\relax"),Ye("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Ye("\\,","{\\tmspace+{3mu}{.1667em}}"),Ye("\\thinspace","\\,"),Ye("\\>","\\mskip{4mu}"),Ye("\\:","{\\tmspace+{4mu}{.2222em}}"),Ye("\\medspace","\\:"),Ye("\\;","{\\tmspace+{5mu}{.2777em}}"),Ye("\\thickspace","\\;"),Ye("\\!","{\\tmspace-{3mu}{.1667em}}"),Ye("\\negthinspace","\\!"),Ye("\\negmedspace","{\\tmspace-{4mu}{.2222em}}"),Ye("\\negthickspace","{\\tmspace-{5mu}{.277em}}"),Ye("\\enspace","\\kern.5em "),Ye("\\enskip","\\hskip.5em\\relax"),Ye("\\quad","\\hskip1em\\relax"),Ye("\\qquad","\\hskip2em\\relax"),Ye("\\AA","\\TextOrMath{\\Angstrom}{\\mathring{A}}\\relax"),Ye("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Ye("\\tag@paren","\\tag@literal{({#1})}"),Ye("\\tag@literal",(t=>{if(t.macros.get("\\df@tag"))throw new e("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Ye("\\notag","\\nonumber"),Ye("\\nonumber","\\gdef\\@eqnsw{0}"),Ye("\\bmod","\\mathbin{\\text{mod}}"),Ye("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Ye("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Ye("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Ye("\\newline","\\\\\\relax"),Ye("\\TeX","\\textrm{T}\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125em\\textrm{X}"),Ye("\\LaTeX","\\textrm{L}\\kern-.35em\\raisebox{0.2em}{\\scriptstyle A}\\kern-.15em\\TeX"),Ye("\\Temml","\\textrm{T}\\kern-0.2em\\lower{0.2em}{\\textrm{E}}\\kern-0.08em{\\textrm{M}\\kern-0.08em\\raise{0.2em}\\textrm{M}\\kern-0.08em\\textrm{L}}"),Ye("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Ye("\\@hspace","\\hskip #1\\relax"),Ye("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Ye("\\colon",'\\mathpunct{\\char"3a}'),Ye("\\prescript","\\pres@cript{_{#1}^{#2}}{}{#3}"),Ye("\\ordinarycolon",'\\char"3a'),Ye("\\vcentcolon","\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}}"),Ye("\\coloneq",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"2212}'),Ye("\\Coloneq",'\\mathrel{\\char"2237\\char"2212}'),Ye("\\Eqqcolon",'\\mathrel{\\char"3d\\char"2237}'),Ye("\\Eqcolon",'\\mathrel{\\char"2212\\char"2237}'),Ye("\\colonapprox",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"2248}'),Ye("\\Colonapprox",'\\mathrel{\\char"2237\\char"2248}'),Ye("\\colonsim",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"223c}'),Ye("\\Colonsim",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"223c}'),Ye("\\ratio","\\vcentcolon"),Ye("\\coloncolon","\\dblcolon"),Ye("\\colonequals","\\coloneqq"),Ye("\\coloncolonequals","\\Coloneqq"),Ye("\\equalscolon","\\eqqcolon"),Ye("\\equalscoloncolon","\\Eqqcolon"),Ye("\\colonminus","\\coloneq"),Ye("\\coloncolonminus","\\Coloneq"),Ye("\\minuscolon","\\eqcolon"),Ye("\\minuscoloncolon","\\Eqcolon"),Ye("\\coloncolonapprox","\\Colonapprox"),Ye("\\coloncolonsim","\\Colonsim"),Ye("\\notni","\\mathrel{\\char`∌}"),Ye("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Ye("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Ye("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Ye("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Ye("\\varlimsup","\\DOTSB\\operatorname*{\\overline{\\text{lim}}}"),Ye("\\varliminf","\\DOTSB\\operatorname*{\\underline{\\text{lim}}}"),Ye("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{\\text{lim}}}"),Ye("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{\\text{lim}}}"),Ye("\\centerdot","{\\medspace\\rule{0.167em}{0.189em}\\medspace}"),Ye("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Ye("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Ye("\\plim","\\DOTSB\\operatorname*{plim}"),Ye("\\leftmodels","\\mathop{\\reflectbox{$\\models$}}"),Ye("\\bra","\\mathinner{\\langle{#1}|}"),Ye("\\ket","\\mathinner{|{#1}\\rangle}"),Ye("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Ye("\\Bra","\\left\\langle#1\\right|"),Ye("\\Ket","\\left|#1\\right\\rangle");const ot=(e,t)=>{const r=`}\\,\\middle${"|"===t[0]?"\\vert":"\\Vert"}\\,{`;return e.slice(0,t.index)+r+e.slice(t.index+t[0].length)};Ye("\\Braket",(function(e){let t=rt(e);const r=/\|\||\||\\\|/g;let n;for(;null!==(n=r.exec(t));)t=ot(t,n);return"\\left\\langle{"+t+"}\\right\\rangle"})),Ye("\\Set",(function(e){let t=rt(e);const r=/\|\||\||\\\|/.exec(t);return r&&(t=ot(t,r)),"\\left\\{\\:{"+t+"}\\:\\right\\}"})),Ye("\\set",(function(e){return"\\{{"+rt(e).replace(/\|/,"}\\mid{")+"}\\}"})),Ye("\\angln","{\\angl n}"),Ye("\\odv","\\@ifstar\\odv@next\\odv@numerator"),Ye("\\odv@numerator","\\frac{\\mathrm{d}#1}{\\mathrm{d}#2}"),Ye("\\odv@next","\\frac{\\mathrm{d}}{\\mathrm{d}#2}#1"),Ye("\\pdv","\\@ifstar\\pdv@next\\pdv@numerator");const at=e=>{const t=e[0][0].text,r=Ke(e[1]).split(","),n=String(r.length),s="1"===n?"\\partial":`\\partial^${n}`;let o="";return r.map((e=>{o+="\\partial "+e.trim()+"\\,"})),[t,s,o.replace(/\\,$/,"")]};function lt(e){const t=[];e.consumeSpaces();let r=e.fetch().text;for("\\relax"===r&&(e.consume(),e.consumeSpaces(),r=e.fetch().text);"\\hline"===r||"\\hdashline"===r;)e.consume(),t.push("\\hdashline"===r),e.consumeSpaces(),r=e.fetch().text;return t}Ye("\\pdv@numerator",(function(e){const[t,r,n]=at(e.consumeArgs(2));return`\\frac{${r} ${t}}{${n}}`})),Ye("\\pdv@next",(function(e){const[t,r,n]=at(e.consumeArgs(2));return`\\frac{${r}}{${n}} ${t}`})),Ye("\\upalpha","\\up@greek{\\alpha}"),Ye("\\upbeta","\\up@greek{\\beta}"),Ye("\\upgamma","\\up@greek{\\gamma}"),Ye("\\updelta","\\up@greek{\\delta}"),Ye("\\upepsilon","\\up@greek{\\epsilon}"),Ye("\\upzeta","\\up@greek{\\zeta}"),Ye("\\upeta","\\up@greek{\\eta}"),Ye("\\uptheta","\\up@greek{\\theta}"),Ye("\\upiota","\\up@greek{\\iota}"),Ye("\\upkappa","\\up@greek{\\kappa}"),Ye("\\uplambda","\\up@greek{\\lambda}"),Ye("\\upmu","\\up@greek{\\mu}"),Ye("\\upnu","\\up@greek{\\nu}"),Ye("\\upxi","\\up@greek{\\xi}"),Ye("\\upomicron","\\up@greek{\\omicron}"),Ye("\\uppi","\\up@greek{\\pi}"),Ye("\\upalpha","\\up@greek{\\alpha}"),Ye("\\uprho","\\up@greek{\\rho}"),Ye("\\upsigma","\\up@greek{\\sigma}"),Ye("\\uptau","\\up@greek{\\tau}"),Ye("\\upupsilon","\\up@greek{\\upsilon}"),Ye("\\upphi","\\up@greek{\\phi}"),Ye("\\upchi","\\up@greek{\\chi}"),Ye("\\uppsi","\\up@greek{\\psi}"),Ye("\\upomega","\\up@greek{\\omega}"),Ye("\\invamp",'\\mathbin{\\char"214b}'),Ye("\\parr",'\\mathbin{\\char"214b}'),Ye("\\with",'\\mathbin{\\char"26}'),Ye("\\multimapinv",'\\mathrel{\\char"27dc}'),Ye("\\multimapboth",'\\mathrel{\\char"29df}'),Ye("\\scoh",'{\\mkern5mu\\char"2322\\mkern5mu}'),Ye("\\sincoh",'{\\mkern5mu\\char"2323\\mkern5mu}'),Ye("\\coh",'{\\mkern5mu\\rule{}{0.7em}\\mathrlap{\\smash{\\raise2mu{\\char"2322}}}\n{\\smash{\\lower4mu{\\char"2323}}}\\mkern5mu}'),Ye("\\incoh",'{\\mkern5mu\\rule{}{0.7em}\\mathrlap{\\smash{\\raise2mu{\\char"2323}}}\n{\\smash{\\lower4mu{\\char"2322}}}\\mkern5mu}'),Ye("\\standardstate","\\text{\\tiny\\char`⦵}");const it=t=>{if(!t.parser.settings.displayMode)throw new e(`{${t.envName}} can be used only in display mode.`)},ct=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/,dt=e=>{let t=e.get("\\arraystretch");"string"!=typeof t&&(t=Ke(t.tokens)),t=isNaN(t)?null:Number(t);let r=e.get("\\arraycolsep");"string"!=typeof r&&(r=Ke(r.tokens));const n=ct.exec(r);return[t,n?{number:+(n[1]+n[2]),unit:n[3]}:null]},mt=t=>{let r="";for(let n=0;n<t.length;n++)if("label"===t[n].type){if(r)throw new e("Multiple \\labels in one row");r=t[n].string}return r};function pt(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function ut(t,{cols:r,envClasses:n,autoTag:s,singleRow:o,emptySingleRow:a,maxNumCols:l,leqno:i,arraystretch:c,arraycolsep:d},m){const p=n&&n.includes("bordermatrix")?"}":"\\end";t.gullet.beginGroup(),o||t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();let u=[];const h=[u],g=[],f=[],b=[],y=null!=s?[]:void 0;function w(){s&&t.gullet.macros.set("\\@eqnsw","1",!0)}function x(){y&&(t.gullet.macros.get("\\df@tag")?(y.push(t.subparse([new He("\\df@tag")])),t.gullet.macros.set("\\df@tag",void 0,!0)):y.push(Boolean(s)&&"1"===t.gullet.macros.get("\\@eqnsw")))}for(w(),b.push(lt(t));;){let r=t.parseExpression(!1,o?"\\end":"\\\\");t.gullet.endGroup(),t.gullet.beginGroup(),r={type:"ordgroup",mode:t.mode,body:r,semisimple:!0},u.push(r);const s=t.fetch().text;if("&"===s){if(l&&u.length===l){if(!n.includes("array"))throw new e(2===l?"The split environment accepts no more than two columns":"The equation environment accepts only one column",t.nextToken);if(t.settings.strict)throw new e("Too few columns specified in the {array} column argument.",t.nextToken)}t.consume()}else{if(s===p){x(),1===u.length&&0===r.body.length&&(h.length>1||!a)&&h.pop(),f.push(mt(r.body)),b.length<h.length+1&&b.push([]);break}if("\\\\"!==s)throw new e("Expected & or \\\\ or \\cr or "+p,t.nextToken);{let e;t.consume()," "!==t.gullet.future().text&&(e=t.parseSizeGroup(!0)),g.push(e?e.value:null),x(),f.push(mt(r.body)),b.push(lt(t)),u=[],h.push(u),w()}}}return t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:t.mode,body:h,cols:r,rowGaps:g,hLinesBeforeRow:b,envClasses:n,autoTag:s,scriptLevel:m,tags:y,labels:f,leqno:i,arraystretch:c,arraycolsep:d}}function ht(e){return"d"===e.slice(0,1)?"display":"text"}const gt={c:"center ",l:"left ",r:"right "},ft=e=>{const t=new T.MathNode("mtd",[]);return t.style={padding:"0",width:"50%"},e.envClasses.includes("multline")&&(t.style.width="7.5%"),t},bt=function(e,t){const r=[],n=e.body.length,s=e.hLinesBeforeRow;for(let o=0;o<n;o++){const a=e.body[o],l=[],i="text"===e.scriptLevel?_e:"script"===e.scriptLevel?We:Ve;for(let r=0;r<a.length;r++){const s=new T.MathNode("mtd",[de(a[r],t.withLevel(i))]);if(e.envClasses.includes("multline")){const e=0===o?"left":o===n-1?"right":"center";s.setAttribute("columnalign",e),"center"!==e&&s.classes.push("tml-"+e)}l.push(s)}const c=e.body[0].length;for(let e=0;e<c-a.length;e++)l.push(new T.MathNode("mtd",[],[],t));if(e.autoTag){const r=e.tags[o];let n;!0===r?n=new T.MathNode("mtext",[new y(["tml-eqn"])]):!1===r?n=new T.MathNode("mtext",[],[]):(n=ce(r[0].body,t.withLevel(i),!0),n=ne(n),n.classes=["tml-tag"]),n&&(l.unshift(ft(e)),l.push(ft(e)),e.leqno?(l[0].children.push(n),l[0].classes.push("tml-left")):(l[l.length-1].children.push(n),l[l.length-1].classes.push("tml-right")))}const d=new T.MathNode("mtr",l,[]),m=e.labels.shift();m&&e.tags&&e.tags[o]&&(d.setAttribute("id",m),Array.isArray(e.tags[o])&&d.classes.push("tml-tageqn")),0===o&&s[0].length>0&&(2===s[0].length?d.children.forEach((e=>{e.style.borderTop="0.15em double"})):d.children.forEach((e=>{e.style.borderTop=s[0][0]?"0.06em dashed":"0.06em solid"}))),s[o+1].length>0&&(2===s[o+1].length?d.children.forEach((e=>{e.style.borderBottom="0.15em double"})):d.children.forEach((e=>{e.style.borderBottom=s[o+1][0]?"0.06em dashed":"0.06em solid"})));let p=!0;for(let e=0;e<d.children.length;e++){const t=d.children[e].children[0];if(!t||"mpadded"!==t.type||"0px"!==t.attributes.height){p=!1;break}}if(p)for(let e=0;e<d.children.length;e++)d.children[e].style.paddingTop="0",d.children[e].style.paddingBottom="0";r.push(d)}if(e.arraystretch&&1!==e.arraystretch){const t=String(1.4*e.arraystretch-.8)+"ex";for(let e=0;e<r.length;e++)for(let n=0;n<r[e].children.length;n++)r[e].children[n].style.paddingTop=t,r[e].children[n].style.paddingBottom=t}let o,a;if(e.envClasses.length>0&&(o=e.envClasses.includes("abut")||e.envClasses.includes("cases")?"0":e.envClasses.includes("small")?"0.1389":e.envClasses.includes("cd")?"0.25":"0.4",a="em"),e.arraycolsep){const r=qe(e.arraycolsep,t);o=r.number.toFixed(4),a=r.unit}if(o){const t=0===r.length?0:r[0].children.length,n=(r,n)=>0===r&&0===n||r===t-1&&1===n?"0":"align"!==e.envClasses[0]?o:1===n?"0":e.autoTag?r%2?"1":"0":r%2?"0":"1";for(let e=0;e<r.length;e++)for(let t=0;t<r[e].children.length;t++)r[e].children[t].style.paddingLeft=`${n(t,0)}${a}`,r[e].children[t].style.paddingRight=`${n(t,1)}${a}`}if(0===e.envClasses.length)for(let e=0;e<r.length;e++)r[e].children[0].style.paddingLeft="0em",r[e].children.length===r[0].children.length&&(r[e].children[r[e].children.length-1].style.paddingRight="0em");if(e.envClasses.length>0){const t=e.envClasses.includes("align")||e.envClasses.includes("alignat");for(let n=0;n<r.length;n++){const s=r[n];if(t){for(let e=0;e<s.children.length;e++)s.children[e].classes=["tml-"+(e%2?"left":"right")];if(e.autoTag){const t=e.leqno?0:s.children.length-1;s.children[t].classes=["tml-"+(e.leqno?"left":"right")]}}if(s.children.length>1&&e.envClasses.includes("cases")&&(s.children[1].style.paddingLeft="1em"),e.envClasses.includes("cases")||e.envClasses.includes("subarray"))for(const e of s.children)e.classes.push("tml-left")}}let l=new T.MathNode("mtable",r);e.envClasses.length>0&&(e.envClasses.includes("jot")?l.classes.push("tml-jot"):e.envClasses.includes("small")&&l.classes.push("tml-small")),"display"===e.scriptLevel&&l.setAttribute("displaystyle","true"),(e.autoTag||e.envClasses.includes("multline"))&&(l.style.width="100%");let i="";if(e.cols&&e.cols.length>0){const t=e.cols;let r=!1,n=0,s=t.length;for(;"separator"===t[n].type;)n+=1;for(;"separator"===t[s-1].type;)s-=1;if("separator"===t[0].type){const e="separator"===t[1].type?"0.15em double":"|"===t[0].separator?"0.06em solid ":"0.06em dashed ";for(const t of l.children)t.children[0].style.borderLeft=e}let o=e.autoTag?0:-1;for(let e=n;e<s;e++)if("align"===t[e].type){const n=gt[t[e].align];i+=n,o+=1;for(const e of l.children)"center"!==n.trim()&&o<e.children.length&&(e.children[o].classes=["tml-"+n.trim()]);r=!0}else if("separator"===t[e].type){if(r){const r="separator"===t[e+1].type?"0.15em double":"|"===t[e].separator?"0.06em solid":"0.06em dashed";for(const e of l.children)o<e.children.length&&(e.children[o].style.borderRight=r)}r=!1}if("separator"===t[t.length-1].type){const e="separator"===t[t.length-2].type?"0.15em double":"|"===t[t.length-1].separator?"0.06em solid":"0.06em dashed";for(const t of l.children)t.children[t.children.length-1].style.borderRight=e,t.children[t.children.length-1].style.paddingRight="0.4em"}}return e.autoTag&&(i="left "+(i.length>0?i:"center ")+"right "),i&&l.setAttribute("columnalign",i.trim()),e.envClasses.includes("small")&&(l=new T.MathNode("mstyle",[l]),l.setAttribute("scriptlevel","1")),l},yt=function(t,r){-1===t.envName.indexOf("ed")&&it(t);const n="split"===t.envName,s=[],o=ut(t.parser,{cols:s,emptySingleRow:!0,autoTag:n?void 0:pt(t.envName),envClasses:["abut","jot"],maxNumCols:"split"===t.envName?2:void 0,leqno:t.parser.settings.leqno},"display");let a,l=0;const i=t.envName.indexOf("at")>-1;if(r[0]&&i){let t="";for(let e=0;e<r[0].body.length;e++){t+=Ie(r[0].body[e],"textord").text}if(isNaN(t))throw new e("The alignat enviroment requires a numeric first argument.");a=Number(t),l=2*a}o.body.forEach((function(t){if(i){const r=t.length/2;if(a<r)throw new e(`Too many math in a row: expected ${a}, but got ${r}`,t[0])}else l<t.length&&(l=t.length)}));for(let e=0;e<l;++e){let t="r";e%2==1&&(t="l"),s[e]={type:"align",align:t}}return"split"===t.envName||(i?o.envClasses.push("alignat"):o.envClasses[0]="align"),o};$e({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,r){const n=(Fe(r[0])?[r[0]]:Ie(r[0],"ordgroup").body).map((function(t){const r=Le(t).text;if(-1!=="lcr".indexOf(r))return{type:"align",align:r};if("|"===r)return{type:"separator",separator:"|"};if(":"===r)return{type:"separator",separator:":"};throw new e("Unknown column alignment: "+r,t)})),[s,o]=dt(t.parser.gullet.macros),a={cols:n,envClasses:["array"],maxNumCols:n.length,arraystretch:s,arraycolsep:o};return ut(t.parser,a,ht(t.envName))},mathmlBuilder:bt}),$e({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){const r={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")];let n="c";const s={envClasses:[],cols:[]};if("*"===t.envName.charAt(t.envName.length-1)){const r=t.parser;if(r.consumeSpaces(),"["===r.fetch().text){if(r.consume(),r.consumeSpaces(),n=r.fetch().text,-1==="lcr".indexOf(n))throw new e("Expected l or c or r",r.nextToken);r.consume(),r.consumeSpaces(),r.expect("]"),r.consume(),s.cols=[]}}const o=ut(t.parser,s,"text");o.cols=o.body.length>0?new Array(o.body[0].length).fill({type:"align",align:n}):[];const[a,l]=dt(t.parser.gullet.macros);return o.arraystretch=a,!l||6===l&&"pt"===l||(o.arraycolsep=l),r?{type:"leftright",mode:t.mode,body:[o],left:r[0],right:r[1],rightColor:void 0}:o},mathmlBuilder:bt}),$e({type:"array",names:["bordermatrix"],props:{numArgs:0},handler(e){const t=ut(e.parser,{cols:[],envClasses:["bordermatrix"]},"text");return t.cols=t.body.length>0?new Array(t.body[0].length).fill({type:"align",align:"c"}):[],t.envClasses=[],t.arraystretch=1,"matrix"===e.envName?t:((e,t)=>{const r=e.body;r[0].shift();const n=new Array(r.length-1).fill().map((()=>[]));for(let e=1;e<r.length;e++){n[e-1].push(r[e].shift());const t=[];for(let n=0;n<r[e].length;n++)t.push(r[e][n]);n[e-1].push(Re(t,"vphantom"))}const s=new Array(r.length).fill().map((()=>[]));for(let e=0;e<r[0].length;e++)s[0].push(r[0][e]);for(let e=1;e<r.length;e++)for(let t=0;t<r[0].length;t++)s[e].push(Re(r[e][t].body,"hphantom"));for(let e=0;e<r[0].length;e++)r[0][e]=Re(r[0][e].body,"hphantom");const o={type:"array",mode:"math",body:n,cols:[{type:"align",align:"c"}],rowGaps:new Array(n.length-1).fill(null),hLinesBeforeRow:new Array(n.length+1).fill().map((()=>[])),envClasses:[],scriptLevel:"text",arraystretch:1,labels:new Array(n.length).fill(""),arraycolsep:{number:.04,unit:"em"}},a={type:"styling",mode:"math",scriptLevel:"text",body:[{type:"array",mode:"math",body:s,cols:new Array(s.length).fill({type:"align",align:"c"}),rowGaps:new Array(s.length-1).fill(null),hLinesBeforeRow:new Array(s.length+1).fill().map((()=>[])),envClasses:[],scriptLevel:"text",arraystretch:1,labels:new Array(s.length).fill(""),arraycolsep:null}]},l={type:"leftright",mode:"math",body:[e],left:t?t[0]:"(",right:t?t[1]:")",rightColor:void 0};return Pe([o,{type:"supsub",mode:"math",base:{type:"op",mode:"math",limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!0,symbol:!1,stack:!0,suppressBaseShift:!0,body:[l]},sup:a,sub:null}])})(t,e.delimiters)},mathmlBuilder:bt}),$e({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){const t=ut(e.parser,{type:"small"},"script");return t.envClasses=["small"],t},mathmlBuilder:bt}),$e({type:"array",names:["subarray"],props:{numArgs:1},handler(t,r){const n=(Fe(r[0])?[r[0]]:Ie(r[0],"ordgroup").body).map((function(t){const r=Le(t).text;if(-1!=="lc".indexOf(r))return{type:"align",align:r};throw new e("Unknown column alignment: "+r,t)}));if(n.length>1)throw new e("{subarray} can contain only one column");let s={cols:n,envClasses:["small"]};if(s=ut(t.parser,s,"script"),s.body.length>0&&s.body[0].length>1)throw new e("{subarray} can contain only one column");return s},mathmlBuilder:bt}),$e({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){const t=ut(e.parser,{cols:[],envClasses:["cases"]},ht(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},mathmlBuilder:bt}),$e({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:yt,mathmlBuilder:bt}),$e({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:yt,mathmlBuilder:bt}),$e({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){"gathered"!==e.envName&&it(e);const t={cols:[],envClasses:["abut","jot"],autoTag:pt(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){it(e);const t={autoTag:pt(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,envClasses:["align"],leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["multline","multline*"],props:{numArgs:0},handler(e){it(e);const t={autoTag:"multline"===e.envName,maxNumCols:1,envClasses:["jot","multline"],leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["CD"],props:{numArgs:0},handler:t=>(it(t),function(t){const r=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){r.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();const n=t.fetch().text;if("&"!==n&&"\\\\"!==n){if("\\end"===n){0===r[r.length-1].length&&r.pop();break}throw new e("Expected \\\\ or \\cr or \\end",t.nextToken)}t.consume()}let n=[];const s=[n];for(let l=0;l<r.length;l++){const i=r[l];let c={type:"styling",body:[],mode:"math",scriptLevel:"display"};for(let r=0;r<i.length;r++)if(Ge(i[r])){n.push(c),r+=1;const s=Le(i[r]).text,l=new Array(2);if(l[0]={type:"ordgroup",mode:"math",body:[]},l[1]={type:"ordgroup",mode:"math",body:[]},"=|.".indexOf(s)>-1);else{if(!("<>AV".indexOf(s)>-1))throw new e('Expected one of "<>AV=|." after @.');for(let t=0;t<2;t++){let n=!0;for(let c=r+1;c<i.length;c++){if(a=s,("mathord"===(o=i[c]).type||"atom"===o.type)&&o.text===a){n=!1,r=c;break}if(Ge(i[c]))throw new e("Missing a "+s+" character to complete a CD arrow.",i[c]);l[t].body.push(i[c])}if(n)throw new e("Missing a "+s+" character to complete a CD arrow.",i[r])}}const d=je(s,l,t);n.push(d),c={type:"styling",body:[],mode:"math",scriptLevel:"display"}}else c.body.push(i[r]);l%2==0?n.push(c):n.shift(),n=[],s.push(n)}var o,a;return s.pop(),t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:"math",body:s,tags:null,labels:new Array(s.length+1).fill(""),envClasses:["jot","cd"],cols:[],hLinesBeforeRow:new Array(s.length+1).fill([])}}(t.parser)),mathmlBuilder:bt}),c({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,r){throw new e(`${t.funcName} valid only within array environment`)}});const wt=Ee;c({type:"bordermatrix",names:["\\bordermatrix","\\matrix"],props:{numArgs:0,numOptionalArgs:1},handler:({parser:e,funcName:t},r,n)=>{let s=["(",")"];if("\\bordermatrix"===t&&n[0]&&n[0].body){const e=n[0].body;2===e.length&&"atom"===e[0].type&&"atom"===e[1].type&&"open"===e[0].family&&"close"===e[1].family&&(s=[e[0].text,e[1].text])}e.consumeSpaces(),e.consume();const o=wt.bordermatrix,a={mode:e.mode,envName:t.slice(1),delimiters:s,parser:e},l=o.handler(a);return e.expect("}",!0),l}}),c({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler({parser:t,token:r},n){const s=Ie(n[0],"ordgroup").body;let o="";for(let e=0;e<s.length;e++){o+=Ie(s[e],"textord").text}const a=parseInt(o);if(isNaN(a))throw new e(`\\@char has non-numeric argument ${o}`,r);return{type:"textord",mode:t.mode,text:String.fromCodePoint(a)}}});const xt=/^(#[a-f0-9]{3}|#?[a-f0-9]{6})$/i,kt=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i,vt=/^ *\d{1,3} *(?:, *\d{1,3} *){2}$/,At=/^ *[10](?:\.\d*)? *(?:, *[10](?:\.\d*)? *){2}$/,Nt=/^[a-f0-9]{6}$/i,Tt=e=>{let t=e.toString(16);return 1===t.length&&(t="0"+t),t},St=JSON.parse('{\n  "Apricot": "#ffb484",\n  "Aquamarine": "#08b4bc",\n  "Bittersweet": "#c84c14",\n  "blue": "#0000FF",\n  "Blue": "#303494",\n  "BlueGreen": "#08b4bc",\n  "BlueViolet": "#503c94",\n  "BrickRed": "#b8341c",\n  "brown": "#BF8040",\n  "Brown": "#802404",\n  "BurntOrange": "#f8941c",\n  "CadetBlue": "#78749c",\n  "CarnationPink": "#f884b4",\n  "Cerulean": "#08a4e4",\n  "CornflowerBlue": "#40ace4",\n  "cyan": "#00FFFF",\n  "Cyan": "#08acec",\n  "Dandelion": "#ffbc44",\n  "darkgray": "#404040",\n  "DarkOrchid": "#a8548c",\n  "Emerald": "#08ac9c",\n  "ForestGreen": "#089c54",\n  "Fuchsia": "#90348c",\n  "Goldenrod": "#ffdc44",\n  "gray": "#808080",\n  "Gray": "#98949c",\n  "green": "#00FF00",\n  "Green": "#08a44c",\n  "GreenYellow": "#e0e474",\n  "JungleGreen": "#08ac9c",\n  "Lavender": "#f89cc4",\n  "lightgray": "#c0c0c0",\n  "lime": "#BFFF00",\n  "LimeGreen": "#90c43c",\n  "magenta": "#FF00FF",\n  "Magenta": "#f0048c",\n  "Mahogany": "#b0341c",\n  "Maroon": "#b03434",\n  "Melon": "#f89c7c",\n  "MidnightBlue": "#086494",\n  "Mulberry": "#b03c94",\n  "NavyBlue": "#086cbc",\n  "olive": "#7F7F00",\n  "OliveGreen": "#407c34",\n  "orange": "#FF8000",\n  "Orange": "#f8843c",\n  "OrangeRed": "#f0145c",\n  "Orchid": "#b074ac",\n  "Peach": "#f8945c",\n  "Periwinkle": "#8074bc",\n  "PineGreen": "#088c74",\n  "pink": "#ff7f7f",\n  "Plum": "#98248c",\n  "ProcessBlue": "#08b4ec",\n  "purple": "#BF0040",\n  "Purple": "#a0449c",\n  "RawSienna": "#983c04",\n  "red": "#ff0000",\n  "Red": "#f01c24",\n  "RedOrange": "#f86434",\n  "RedViolet": "#a0246c",\n  "Rhodamine": "#f0549c",\n  "Royallue": "#0874bc",\n  "RoyalPurple": "#683c9c",\n  "RubineRed": "#f0047c",\n  "Salmon": "#f8948c",\n  "SeaGreen": "#30bc9c",\n  "Sepia": "#701404",\n  "SkyBlue": "#48c4dc",\n  "SpringGreen": "#c8dc64",\n  "Tan": "#e09c74",\n  "teal": "#007F7F",\n  "TealBlue": "#08acb4",\n  "Thistle": "#d884b4",\n  "Turquoise": "#08b4cc",\n  "violet": "#800080",\n  "Violet": "#60449c",\n  "VioletRed": "#f054a4",\n  "WildStrawberry": "#f0246c",\n  "yellow": "#FFFF00",\n  "Yellow": "#fff404",\n  "YellowGreen": "#98cc6c",\n  "YellowOrange": "#ffa41c"\n}'),qt=(t,r)=>{let n="";if("HTML"===t){if(!xt.test(r))throw new e("Invalid HTML input.");n=r}else if("RGB"===t){if(!vt.test(r))throw new e("Invalid RGB input.");r.split(",").map((e=>{n+=Tt(Number(e.trim()))}))}else{if(!At.test(r))throw new e("Invalid rbg input.");r.split(",").map((t=>{const r=Number(t.trim());if(r>1)throw new e("Color rgb input must be < 1.");n+=Tt(Number((255*r).toFixed(0)))}))}return"#"!==n.charAt(0)&&(n="#"+n),n},Ot=(t,r,n)=>{const s=`\\\\color@${t}`;if(!kt.exec(t))throw new e("Invalid color: '"+t+"'",n);return Nt.test(t)?"#"+t:("#"===t.charAt(0)||(r.has(s)?t=r.get(s).tokens[0].text:St[t]&&(t=St[t])),t)},Mt=(e,t)=>{let r=ie(e.body,t.withColor(e.color));return 0===r.length&&r.push(new T.MathNode("mrow")),r=r.map((t=>(t.style.color=e.color,t))),T.newDocumentFragment(r)};c({type:"color",names:["\\textcolor"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","original"]},handler({parser:e,token:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o="";if(s){const e=Ie(r[0],"raw").string;o=qt(s,e)}else o=Ot(Ie(r[0],"raw").string,e.gullet.macros,t);const a=r[1];return{type:"color",mode:e.mode,color:o,isTextColor:!0,body:p(a)}},mathmlBuilder:Mt}),c({type:"color",names:["\\color"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw"]},handler({parser:e,breakOnTokenText:t,token:r},n,s){const o=s[0]&&Ie(s[0],"raw").string;let a="";if(o){const e=Ie(n[0],"raw").string;a=qt(o,e)}else a=Ot(Ie(n[0],"raw").string,e.gullet.macros,r);const l=e.parseExpression(!0,t,!0);return{type:"color",mode:e.mode,color:a,isTextColor:!1,body:l}},mathmlBuilder:Mt}),c({type:"color",names:["\\definecolor"],props:{numArgs:3,allowedInText:!0,argTypes:["raw","raw","raw"]},handler({parser:t,funcName:r,token:n},s){const o=Ie(s[0],"raw").string;if(!/^[A-Za-z]+$/.test(o))throw new e("Color name must be latin letters.",n);const a=Ie(s[1],"raw").string;if(!["HTML","RGB","rgb"].includes(a))throw new e("Color model must be HTML, RGB, or rgb.",n);const l=Ie(s[2],"raw").string,i=qt(a,l);return t.gullet.macros.set(`\\\\color@${o}`,{tokens:[{text:i}],numArgs:0}),{type:"internal",mode:t.mode}}}),c({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler({parser:e},t,r){const n="["===e.gullet.future().text?e.parseSizeGroup(!0):null,s=!e.settings.displayMode;return{type:"cr",mode:e.mode,newLine:s,size:n&&Ie(n,"size").value}},mathmlBuilder(e,t){const r=new T.MathNode("mo");if(e.newLine&&(r.setAttribute("linebreak","newline"),e.size)){const n=qe(e.size,t);r.setAttribute("height",n.number+n.unit)}return r}});const Bt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Ct=t=>{const r=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(r))throw new e("Expected a control sequence",t);return r},zt=(e,t,r,n)=>{let s=e.gullet.macros.get(r.text);null==s&&(r.noexpand=!0,s={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,s,n)};c({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler({parser:t,funcName:r}){t.consumeSpaces();const n=t.fetch();if(Bt[n.text])return"\\global"!==r&&"\\\\globallong"!==r||(n.text=Bt[n.text]),Ie(t.parseFunction(),"internal");throw new e("Invalid token after macro prefix",n)}}),c({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:t,funcName:r}){let n=t.gullet.popToken();const s=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new e("Expected a control sequence",n);let o,a=0;const l=[[]];for(;"{"!==t.gullet.future().text;)if(n=t.gullet.popToken(),"#"===n.text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[a].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new e(`Invalid argument number "${n.text}"`);if(parseInt(n.text)!==a+1)throw new e(`Argument number "${n.text}" out of order`);a++,l.push([])}else{if("EOF"===n.text)throw new e("Expected a macro definition");l[a].push(n.text)}let{tokens:i}=t.gullet.consumeArg();if(o&&i.unshift(o),"\\edef"===r||"\\xdef"===r){if(i=t.gullet.expandTokens(i),i.length>t.gullet.settings.maxExpand)throw new e("Too many expansions in an "+r);i.reverse()}return t.gullet.macros.set(s,{tokens:i,numArgs:a,delimiters:l},r===Bt[r]),{type:"internal",mode:t.mode}}}),c({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:e,funcName:t}){const r=Ct(e.gullet.popToken());e.gullet.consumeSpaces();const n=(e=>{let t=e.gullet.popToken();return"="===t.text&&(t=e.gullet.popToken()," "===t.text&&(t=e.gullet.popToken())),t})(e);return zt(e,r,n,"\\\\globallet"===t),{type:"internal",mode:e.mode}}}),c({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:e,funcName:t}){const r=Ct(e.gullet.popToken()),n=e.gullet.popToken(),s=e.gullet.popToken();return zt(e,r,s,"\\\\globalfuture"===t),e.gullet.pushToken(s),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}}),c({type:"internal",names:["\\newcommand","\\renewcommand","\\providecommand"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:t,funcName:r}){let n="";const s=t.gullet.popToken();"{"===s.text?(n=Ct(t.gullet.popToken()),t.gullet.popToken()):n=Ct(s);const o=t.gullet.isDefined(n);if(o&&"\\newcommand"===r)throw new e(`\\newcommand{${n}} attempting to redefine ${n}; use \\renewcommand`);if(!o&&"\\renewcommand"===r)throw new e(`\\renewcommand{${n}} when command ${n} does not yet exist; use \\newcommand`);let a=0;if("["===t.gullet.future().text){let r=t.gullet.popToken();if(r=t.gullet.popToken(),!/^[0-9]$/.test(r.text))throw new e(`Invalid number of arguments: "${r.text}"`);if(a=parseInt(r.text),r=t.gullet.popToken(),"]"!==r.text)throw new e(`Invalid argument "${r.text}"`)}const{tokens:l}=t.gullet.consumeArg();return"\\providecommand"===r&&t.gullet.macros.has(n)||t.gullet.macros.set(n,{tokens:l,numArgs:a}),{type:"internal",mode:t.mode}}});const Et={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},$t=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","⦇","\\llparenthesis","⦈","\\rrparenthesis","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lAngle","⟪","\\rAngle","⟫","\\llangle","⦉","\\rrangle","⦊","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","\\llbracket","\\rrbracket","⟦","⟦","\\lBrace","\\rBrace","⦃","⦄","/","\\backslash","|","\\vert","\\|","\\Vert","‖","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."],It=["}","\\left","\\middle","\\right"],Lt=e=>e.length>0&&($t.includes(e)||Et[e]||It.includes(e)),Ft=[0,1.2,1.8,2.4,3];function Dt(t,r){const n=Fe(t);if(n&&$t.includes(n.text))return["<","\\lt"].includes(n.text)&&(n.text="⟨"),[">","\\gt"].includes(n.text)&&(n.text="⟩"),n;throw new e(n?`Invalid delimiter '${n.text}' after '${r.funcName}'`:`Invalid delimiter type '${t.type}'`,t)}const Gt=["/","\\","\\backslash","\\vert","|"];c({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{const r=Dt(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Et[e.funcName].size,mclass:Et[e.funcName].mclass,delim:r.text}},mathmlBuilder:e=>{const t=[];"."===e.delim&&(e.delim=""),t.push(te(e.delim,e.mode));const r=new T.MathNode("mo",t);return"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),(Gt.includes(e.delim)||e.delim.indexOf("arrow")>-1)&&r.setAttribute("stretchy","true"),r.setAttribute("symmetric","true"),r.setAttribute("minsize",Ft[e.size]+"em"),r.setAttribute("maxsize",Ft[e.size]+"em"),r}}),c({type:"leftright-right",names:["\\right"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>({type:"leftright-right",mode:e.parser.mode,delim:Dt(t[0],e).text})}),c({type:"leftright",names:["\\left"],props:{numArgs:1,argTypes:["primitive"]},handler:(t,r)=>{const n=Dt(r[0],t),s=t.parser;++s.leftrightDepth;let o=s.parseExpression(!1,null,!0),a=s.fetch();for(;"\\middle"===a.text;){s.consume();const t=s.fetch().text;if(!$.math[t])throw new e(`Invalid delimiter '${t}' after '\\middle'`);Dt({type:"atom",mode:"math",text:t},{funcName:"\\middle"}),o.push({type:"middle",mode:"math",delim:t}),s.consume(),o=o.concat(s.parseExpression(!1,null,!0)),a=s.fetch()}--s.leftrightDepth,s.expect("\\right",!1);const l=Ie(s.parseFunction(),"leftright-right");return{type:"leftright",mode:s.mode,body:o,left:n.text,right:l.delim}},mathmlBuilder:(e,t)=>{!function(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}(e);const r=ie(e.body,t);"."===e.left&&(e.left="");const n=new T.MathNode("mo",[te(e.left,e.mode)]);n.setAttribute("fence","true"),n.setAttribute("form","prefix"),("/"===e.left||"\\"===e.left||e.left.indexOf("arrow")>-1)&&n.setAttribute("stretchy","true"),r.unshift(n),"."===e.right&&(e.right="");const s=new T.MathNode("mo",[te(e.right,e.mode)]);if(s.setAttribute("fence","true"),s.setAttribute("form","postfix"),("∖"===e.right||e.right.indexOf("arrow")>-1)&&s.setAttribute("stretchy","true"),e.body.length>0){const t=e.body[e.body.length-1];"color"!==t.type||t.isTextColor||s.setAttribute("mathcolor",t.color)}return r.push(s),se(r)}}),c({type:"middle",names:["\\middle"],props:{numArgs:1,argTypes:["primitive"]},handler:(t,r)=>{const n=Dt(r[0],t);if(!t.parser.leftrightDepth)throw new e("\\middle without preceding \\left",n);return{type:"middle",mode:t.parser.mode,delim:n.text}},mathmlBuilder:(e,t)=>{const r=te(e.delim,e.mode),n=new T.MathNode("mo",[r]);return n.setAttribute("fence","true"),e.delim.indexOf("arrow")>-1&&n.setAttribute("stretchy","true"),n.setAttribute("form","prefix"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});const jt=e=>{const t=new T.MathNode("mspace");return t.setAttribute("width","3pt"),t},Pt=(e,t)=>{let r;switch(r=e.label.indexOf("colorbox")>-1||"\\boxed"===e.label?new T.MathNode("mrow",[jt(),de(e.body,t),jt()]):new T.MathNode("menclose",[de(e.body,t)]),e.label){case"\\overline":r.setAttribute("notation","top"),r.classes.push("tml-overline");break;case"\\underline":r.setAttribute("notation","bottom"),r.classes.push("tml-underline");break;case"\\cancel":r.setAttribute("notation","updiagonalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","upstrike"]));break;case"\\bcancel":r.setAttribute("notation","downdiagonalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","downstrike"]));break;case"\\sout":r.setAttribute("notation","horizontalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","sout"]));break;case"\\xcancel":r.setAttribute("notation","updiagonalstrike downdiagonalstrike"),r.classes.push("tml-xcancel");break;case"\\longdiv":r.setAttribute("notation","longdiv"),r.classes.push("longdiv-top"),r.children.push(new T.MathNode("mrow",[],["longdiv-arc"]));break;case"\\phase":r.setAttribute("notation","phasorangle"),r.classes.push("phasor-bottom"),r.children.push(new T.MathNode("mrow",[],["phasor-angle"]));break;case"\\textcircled":r.setAttribute("notation","circle"),r.classes.push("circle-pad"),r.children.push(new T.MathNode("mrow",[],["textcircle"]));break;case"\\angl":r.setAttribute("notation","actuarial"),r.classes.push("actuarial");break;case"\\boxed":r.setAttribute("notation","box"),r.classes.push("tml-box"),r.setAttribute("scriptlevel","0"),r.setAttribute("displaystyle","true");break;case"\\fbox":r.setAttribute("notation","box"),r.classes.push("tml-fbox");break;case"\\fcolorbox":case"\\colorbox":{const t={padding:"3pt 0 3pt 0"};"\\fcolorbox"===e.label&&(t.border="0.0667em solid "+String(e.borderColor)),r.style=t;break}}return e.backgroundColor&&r.setAttribute("mathbackground",e.backgroundColor),r};c({type:"enclose",names:["\\colorbox"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","text"]},handler({parser:e,funcName:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o="";if(s){const e=Ie(r[0],"raw").string;o=qt(s,e)}else o=Ot(Ie(r[0],"raw").string,e.gullet.macros);const a=r[1];return{type:"enclose",mode:e.mode,label:t,backgroundColor:o,body:a}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","raw","text"]},handler({parser:e,funcName:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o,a="";if(s){const e=Ie(r[0],"raw").string,t=Ie(r[0],"raw").string;a=qt(s,e),o=qt(s,t)}else a=Ot(Ie(r[0],"raw").string,e.gullet.macros),o=Ot(Ie(r[1],"raw").string,e.gullet.macros);const l=r[2];return{type:"enclose",mode:e.mode,label:t,backgroundColor:o,borderColor:a,body:l}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:({parser:e},t)=>({type:"enclose",mode:e.mode,label:"\\fbox",body:t[0]})}),c({type:"enclose",names:["\\angl","\\cancel","\\bcancel","\\xcancel","\\sout","\\overline","\\boxed","\\longdiv","\\phase"],props:{numArgs:1},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\textcircled"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler({parser:t,funcName:r},n){const s=n[0];if("ordgroup"!==s.type)throw new e("Invalid environment name",s);let o="";for(let e=0;e<s.body.length;++e)o+=Ie(s.body[e],"textord").text;if("\\begin"===r){if(!Object.prototype.hasOwnProperty.call(wt,o))throw new e("No such environment: "+o,s);const r=wt[o],{args:n,optArgs:a}=t.parseArguments("\\begin{"+o+"}",r),l={mode:t.mode,envName:o,parser:t},i=r.handler(l,n,a);t.expect("\\end",!1);const c=t.nextToken,d=Ie(t.parseFunction(),"environment");if(d.name!==o)throw new e(`Mismatch: \\begin{${o}} matched by \\end{${d.name}}`,c);return i}return{type:"environment",mode:t.mode,name:o,nameGroup:s}}}),c({type:"envTag",names:["\\env@tag"],props:{numArgs:1,argTypes:["math"]},handler:({parser:e},t)=>({type:"envTag",mode:e.mode,body:t[0]}),mathmlBuilder:(e,t)=>new T.MathNode("mrow")}),c({type:"noTag",names:["\\env@notag"],props:{numArgs:0},handler:({parser:e})=>({type:"noTag",mode:e.mode}),mathmlBuilder:(e,t)=>new T.MathNode("mrow")});const Rt=(e,t)=>{const r=e.font,n=t.withFont(r),s=de(e.body,n);if(0===s.children.length)return s;if("boldsymbol"===r&&["mo","mpadded","mrow"].includes(s.type))return s.style.fontWeight="bold",s;if(((e,t)=>{if("mathrm"!==t||"ordgroup"!==e.body.type||1===e.body.body.length)return!1;if("mathord"!==e.body.body[0].type)return!1;for(let t=1;t<e.body.body.length;t++){const r=e.body.body[t].type;if("mathord"!==r&&("textord"!==r||isNaN(e.body.body[t].text)))return!1}return!0})(e,r)){const e=s.children[0].children[0].children?s.children[0].children[0]:s.children[0];delete e.attributes.mathvariant;for(let t=1;t<s.children.length;t++)e.children[0].text+=s.children[t].children[0].children?s.children[t].children[0].children[0].text:s.children[t].children[0].text;const t=new T.MathNode("mpadded",[e]);return t.setAttribute("lspace","0"),t}let o="mo"===s.children[0].type;for(let e=1;e<s.children.length;e++){"mo"===s.children[e].type&&"boldsymbol"===r&&(s.children[e].style.fontWeight="bold"),"mi"!==s.children[e].type&&(o=!1);"normal"!==(s.children[e].attributes&&s.children[e].attributes.mathvariant||"")&&(o=!1)}if(!o)return s;const a=s.children[0];for(let e=1;e<s.children.length;e++)a.children.push(s.children[e].children[0]);if(a.attributes.mathvariant&&"normal"===a.attributes.mathvariant){const e=new T.MathNode("mtext",new T.TextNode("​"));return new T.MathNode("mrow",[e,a])}return a},Ut={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};c({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\up@greek","\\boldsymbol","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathsfit","\\mathtt","\\Bbb","\\bm","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=m(r[0]);let s=t;return s in Ut&&(s=Ut[s]),{type:"font",mode:e.mode,font:s.slice(1),body:n}},mathmlBuilder:Rt}),c({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:({parser:e,funcName:t,breakOnTokenText:r},n)=>{const{mode:s}=e,o=e.parseExpression(!0,r,!0);return{type:"font",mode:s,font:`math${t.slice(1)}`,body:{type:"ordgroup",mode:e.mode,body:o}}},mathmlBuilder:Rt});const Ht=["display","text","script","scriptscript"],Vt={auto:-1,display:0,text:0,script:1,scriptscript:2},_t=(e,t)=>{const r="auto"===e.scriptLevel?t.incrementLevel():"display"===e.scriptLevel?t.withLevel(_e):"text"===e.scriptLevel?t.withLevel(We):t.withLevel(Xe),n=de(e.numer,r),s=de(e.denom,r);3===t.level&&(n.style.mathDepth="2",n.setAttribute("scriptlevel","2"),s.style.mathDepth="2",s.setAttribute("scriptlevel","2"));let o=new T.MathNode("mfrac",[n,s]);if(e.hasBarLine){if(e.barSize){const r=qe(e.barSize,t);o.setAttribute("linethickness",r.number+r.unit)}}else o.setAttribute("linethickness","0px");if(null!=e.leftDelim||null!=e.rightDelim){const t=[];if(null!=e.leftDelim){const r=new T.MathNode("mo",[new T.TextNode(e.leftDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}if(t.push(o),null!=e.rightDelim){const r=new T.MathNode("mo",[new T.TextNode(e.rightDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}o=se(t)}return"auto"!==e.scriptLevel&&(o=new T.MathNode("mstyle",[o]),o.setAttribute("displaystyle",String("display"===e.scriptLevel)),o.setAttribute("scriptlevel",Vt[e.scriptLevel])),o};c({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=r[1];let o=!1,a=null,l=null,i="auto";switch(t){case"\\dfrac":case"\\frac":case"\\tfrac":o=!0;break;case"\\\\atopfrac":o=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":a="(",l=")";break;case"\\\\bracefrac":a="\\{",l="\\}";break;case"\\\\brackfrac":a="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(t){case"\\dfrac":case"\\dbinom":i="display";break;case"\\tfrac":case"\\tbinom":i="text"}return{type:"genfrac",mode:e.mode,continued:!1,numer:n,denom:s,hasBarLine:o,leftDelim:a,rightDelim:l,scriptLevel:i,barSize:null}},mathmlBuilder:_t}),c({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=r[1];return{type:"genfrac",mode:e.mode,continued:!0,numer:n,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,scriptLevel:"display",barSize:null}}}),c({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler({parser:e,funcName:t,token:r}){let n;switch(t){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:r}}});const Wt=function(e){let t=null;return e.length>0&&(t=e,t="."===t?null:t),t};c({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler({parser:e},t){const r=t[4],n=t[5],s=m(t[0]),o="atom"===s.type&&"open"===s.family?Wt(s.text):null,a=m(t[1]),l="atom"===a.type&&"close"===a.family?Wt(a.text):null,i=Ie(t[2],"size");let c,d=null;i.isBlank?c=!0:(d=i.value,c=d.number>0);let p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){const e=Ie(u.body[0],"textord");p=Ht[Number(e.text)]}}else u=Ie(u,"textord"),p=Ht[Number(u.text)];return{type:"genfrac",mode:e.mode,numer:r,denom:n,continued:!1,hasBarLine:c,barSize:d,leftDelim:o,rightDelim:l,scriptLevel:p}},mathmlBuilder:_t}),c({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:({parser:e,funcName:t,token:r},n)=>({type:"infix",mode:e.mode,replaceWith:"\\\\abovefrac",barSize:Ie(n[0],"size").value,token:r})}),c({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ie(r[1],"infix").barSize),o=r[2],a=s.number>0;return{type:"genfrac",mode:e.mode,numer:n,denom:o,continued:!1,hasBarLine:a,barSize:s,leftDelim:null,rightDelim:null,scriptLevel:"auto"}},mathmlBuilder:_t}),c({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["hbox"],allowedInArgument:!0,allowedInText:!1},handler:({parser:e},t)=>({type:"hbox",mode:e.mode,body:p(t[0])}),mathmlBuilder(e,t){const r=t.withLevel(_e),n=ce(e.body,r);return ne(n)}});c({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>({type:"horizBrace",mode:e.mode,label:t,isOver:/^\\over/.test(t),base:r[0]}),mathmlBuilder:(e,t)=>{const r=B(e.label);return r.style["math-depth"]=0,new T.MathNode(e.isOver?"mover":"munder",[de(e.base,t),r])}}),c({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:({parser:t,token:r},n)=>{const s=n[1],o=Ie(n[0],"url").url;if(!t.settings.isTrusted({command:"\\href",url:o}))throw new e('Function "\\href" is not trusted',r);return{type:"href",mode:t.mode,href:o,body:p(s)}},mathmlBuilder:(e,t)=>{const r=new v("math",[ce(e.body,t)]);return new x(e.href,[],[r])}}),c({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:({parser:t,token:r},n)=>{const s=Ie(n[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:s}))throw new e('Function "\\url" is not trusted',r);const o=[];for(let e=0;e<s.length;e++){let t=s[e];"~"===t&&(t="\\textasciitilde"),o.push({type:"textord",mode:"text",text:t})}const a={type:"text",mode:t.mode,font:"\\texttt",body:o};return{type:"href",mode:t.mode,href:s,body:p(a)}}}),c({type:"html",names:["\\class","\\id","\\style","\\data"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:({parser:t,funcName:r,token:n},s)=>{const o=Ie(s[0],"raw").string,a=s[1];if(t.settings.strict)throw new e(`Function "${r}" is disabled in strict mode`,n);let l;const i={};switch(r){case"\\class":i.class=o,l={command:"\\class",class:o};break;case"\\id":i.id=o,l={command:"\\id",id:o};break;case"\\style":i.style=o,l={command:"\\style",style:o};break;case"\\data":{const t=o.split(",");for(let r=0;r<t.length;r++){const n=t[r].split("=");if(2!==n.length)throw new e("Error parsing key-value for \\data");i["data-"+n[0].trim()]=n[1].trim()}l={command:"\\data",attributes:i};break}default:throw new Error("Unrecognized html command")}if(!t.settings.isTrusted(l))throw new e(`Function "${r}" is not trusted`,n);return{type:"html",mode:t.mode,attributes:i,body:p(a)}},mathmlBuilder:(e,t)=>{const r=ce(e.body,t),n=[];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/)),r.classes=n;for(const t in e.attributes)"class"!==t&&Object.prototype.hasOwnProperty.call(e.attributes,t)&&r.setAttribute(t,e.attributes[t]);return r}});const Xt=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};{const r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new e("Invalid size: '"+t+"' in \\includegraphics");const n={number:+(r[1]+r[2]),unit:r[3]};if(!Te(n))throw new e("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n}};c({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:({parser:t,token:r},n,s)=>{let o={number:0,unit:"em"},a={number:.9,unit:"em"},l={number:0,unit:"em"},i="";if(s[0]){const t=Ie(s[0],"raw").string.split(",");for(let r=0;r<t.length;r++){const n=t[r].split("=");if(2===n.length){const t=n[1].trim();switch(n[0].trim()){case"alt":i=t;break;case"width":o=Xt(t);break;case"height":a=Xt(t);break;case"totalheight":l=Xt(t);break;default:throw new e("Invalid key: '"+n[0]+"' in \\includegraphics.")}}}}const c=Ie(n[0],"url").url;if(""===i&&(i=c,i=i.replace(/^.*[\\/]/,""),i=i.substring(0,i.lastIndexOf("."))),!t.settings.isTrusted({command:"\\includegraphics",url:c}))throw new e('Function "\\includegraphics" is not trusted',r);return{type:"includegraphics",mode:t.mode,alt:i,width:o,height:a,totalheight:l,src:c}},mathmlBuilder:(e,t)=>{const r=qe(e.height,t),n={number:0,unit:"em"};e.totalheight.number>0&&e.totalheight.unit===r.unit&&e.totalheight.number>r.number&&(n.number=e.totalheight.number-r.number,n.unit=r.unit);let s=0;e.width.number>0&&(s=qe(e.width,t));const o={height:r.number+n.number+"em"};s.number>0&&(o.width=s.number+s.unit),n.number>0&&(o.verticalAlign=-n.number+n.unit);const a=new k(e.src,e.alt,o);return a.height=r,a.depth=n,new T.MathNode("mtext",[a])}}),c({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler({parser:t,funcName:r,token:n},s){const o=Ie(s[0],"size");if(t.settings.strict){const s="m"===r[1],a="mu"===o.value.unit;if(s){if(!a)throw new e(`LaTeX's ${r} supports only mu units, not ${o.value.unit} units`,n);if("math"!==t.mode)throw new e(`LaTeX's ${r} works only in math mode`,n)}else if(a)throw new e(`LaTeX's ${r} doesn't support mu units`,n)}return{type:"kern",mode:t.mode,dimension:o.value}},mathmlBuilder(e,t){const r=qe(e.dimension,t),n="em"===r.unit?Zt(r.number):"";if("text"===e.mode&&n.length>0){const e=new T.TextNode(n);return new T.MathNode("mtext",[e])}{const e=new T.MathNode("mspace");return e.setAttribute("width",r.number+r.unit),r.number<0&&(e.style.marginLeft=r.number+r.unit),e}}});const Zt=function(e){return e>=.05555&&e<=.05556?" ":e>=.1666&&e<=.1667?" ":e>=.2222&&e<=.2223?" ":e>=.2777&&e<=.2778?"  ":""},Yt=/[^A-Za-z_0-9-]/g;c({type:"label",names:["\\label"],props:{numArgs:1,argTypes:["raw"]},handler:({parser:e},t)=>({type:"label",mode:e.mode,string:t[0].string.replace(Yt,"")}),mathmlBuilder(e,t){const r=new T.MathNode("mrow",[],["tml-label"]);return e.string.length>0&&r.setLabel(e.string),r}});const Jt=["\\clap","\\llap","\\rlap"];c({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap","\\clap","\\llap","\\rlap"],props:{numArgs:1,allowedInText:!0},handler:({parser:t,funcName:r,token:n},s)=>{if(Jt.includes(r)){if(t.settings.strict&&"text"!==t.mode)throw new e(`{${r}} can be used only in text mode.\n Try \\math${r.slice(1)}`,n);r=r.slice(1)}else r=r.slice(5);const o=s[0];return{type:"lap",mode:t.mode,alignment:r,body:o}},mathmlBuilder:(e,t)=>{let r;if("llap"===e.alignment){const n=ie(p(e.body),t),s=new T.MathNode("mphantom",n);r=new T.MathNode("mpadded",[s]),r.setAttribute("width","0px")}const n=de(e.body,t);let s;if("llap"===e.alignment?(n.style.position="absolute",n.style.right="0",n.style.bottom="0",s=new T.MathNode("mpadded",[r,n])):s=new T.MathNode("mpadded",[n]),"rlap"===e.alignment)e.body.body.length>0&&"genfrac"===e.body.body[0].type&&s.setAttribute("lspace","0.16667em");else{const t="llap"===e.alignment?"-1":"-0.5";s.setAttribute("lspace",t+"width"),"llap"===e.alignment?s.style.position="relative":(s.style.display="flex",s.style.justifyContent="center")}return s.setAttribute("width","0px"),s}}),c({type:"ordgroup",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler({funcName:e,parser:t},r){const n=t.mode;t.switchMode("math");const s="\\("===e?"\\)":"$",o=t.parseExpression(!1,s);return t.expect(s),t.switchMode(n),{type:"ordgroup",mode:t.mode,body:o}}}),c({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,r){throw new e(`Mismatched ${t.funcName}`,r)}});c({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:({parser:e},t)=>({type:"mathchoice",mode:e.mode,display:p(t[0]),text:p(t[1]),script:p(t[2]),scriptscript:p(t[3])}),mathmlBuilder:(e,t)=>{const r=((e,t)=>{switch(t.level){case Ve:return e.display;case _e:return e.text;case We:return e.script;case Xe:return e.scriptscript;default:return e.text}})(e,t);return ce(r,t)}});const Kt=["text","textord","mathord","atom"];function Qt(e,t){let r;const n=ie(e.body,t);if("minner"===e.mclass)r=new T.MathNode("mpadded",n);else if("mord"===e.mclass)e.isCharacterBox||"mathord"===n[0].type?(r=n[0],r.type="mi",1===r.children.length&&r.children[0].text&&"∇"===r.children[0].text&&r.setAttribute("mathvariant","normal")):r=new T.MathNode("mi",n);else{r=new T.MathNode("mrow",n),e.mustPromote?(r=n[0],r.type="mo",e.isCharacterBox&&e.body[0].text&&/[A-Za-z]/.test(e.body[0].text)&&r.setAttribute("mathvariant","italic")):r=new T.MathNode("mrow",n);const s=t.level<2;"mrow"===r.type?s&&("mbin"===e.mclass?(r.children.unshift(Oe(.2222)),r.children.push(Oe(.2222))):"mrel"===e.mclass?(r.children.unshift(Oe(.2778)),r.children.push(Oe(.2778))):"mpunct"===e.mclass?r.children.push(Oe(.1667)):"minner"===e.mclass&&(r.children.unshift(Oe(.0556)),r.children.push(Oe(.0556)))):"mbin"===e.mclass?(r.attributes.lspace=s?"0.2222em":"0",r.attributes.rspace=s?"0.2222em":"0"):"mrel"===e.mclass?(r.attributes.lspace=s?"0.2778em":"0",r.attributes.rspace=s?"0.2778em":"0"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace=s?"0.1667em":"0"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&s&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em"),"mopen"!==e.mclass&&"mclose"!==e.mclass&&(delete r.attributes.stretchy,delete r.attributes.form)}return r}c({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler({parser:e,funcName:t},r){const n=r[0],s=o.isCharacterBox(n);let a=!0;const l={type:"mathord",text:"",mode:e.mode},i=n.body?n.body:[n];for(const t of i){if(!Kt.includes(t.type)){a=!1;break}$[e.mode][t.text]?l.text+=$[e.mode][t.text].replace:t.text?l.text+=t.text:t.body&&t.body.map((e=>{l.text+=e.text}))}return a&&"\\mathord"===t&&"mathord"===l.type&&l.text.length>1?l:{type:"mclass",mode:e.mode,mclass:"m"+t.slice(5),body:p(a?l:n),isCharacterBox:s,mustPromote:a}},mathmlBuilder:Qt});const er=e=>{const t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};c({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:({parser:e},t)=>({type:"mclass",mode:e.mode,mclass:er(t[0]),body:p(t[1]),isCharacterBox:o.isCharacterBox(t[1])})}),c({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler({parser:e,funcName:t},r){const n=r[1],s=r[0],o={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,stack:!0,suppressBaseShift:"\\stackrel"!==t,body:p(n)};return{type:"supsub",mode:s.mode,base:o,sup:"\\underset"===t?null:s,sub:"\\underset"===t?s:null}},mathmlBuilder:Qt});const tr=(e,t,r)=>{if(!e)return r;const n=de(e,t);return"mrow"===n.type&&0===n.children.length?r:n};c({type:"multiscript",names:["\\sideset","\\pres@cript"],props:{numArgs:3},handler({parser:t,funcName:r,token:n},s){if(0===s[2].body.length)throw new e(r+"cannot parse an empty base.");const o=s[2].body[0];if(t.settings.strict&&"\\sideset"===r&&!o.symbol)throw new e("The base of \\sideset must be a big operator. Try \\prescript.");if(s[0].body.length>0&&"supsub"!==s[0].body[0].type||s[1].body.length>0&&"supsub"!==s[1].body[0].type)throw new e("\\sideset can parse only subscripts and superscripts in its first two arguments",n);const a=s[0].body.length>0?s[0].body[0]:null,l=s[1].body.length>0?s[1].body[0]:null;return a||l?a?{type:"multiscript",mode:t.mode,isSideset:"\\sideset"===r,prescripts:a,postscripts:l,base:o}:{type:"styling",mode:t.mode,scriptLevel:"text",body:[{type:"supsub",mode:t.mode,base:o,sup:l.sup,sub:l.sub}]}:o},mathmlBuilder(e,t){const r=de(e.base,t),n=new T.MathNode("mprescripts"),s=new T.MathNode("none");let o=[];const a=tr(e.prescripts.sub,t,s),l=tr(e.prescripts.sup,t,s);if(e.isSideset&&(a.setAttribute("style","text-align: left;"),l.setAttribute("style","text-align: left;")),e.postscripts){o=[r,tr(e.postscripts.sub,t,s),tr(e.postscripts.sup,t,s),n,a,l]}else o=[r,n,a,l];return new T.MathNode("mmultiscripts",o)}}),c({type:"not",names:["\\not"],props:{numArgs:1,primitive:!0,allowedInText:!1},handler({parser:e},t){const r=o.isCharacterBox(t[0]);let n;if(r)n=p(t[0]),"\\"===n[0].text.charAt(0)&&(n[0].text=$.math[n[0].text].replace),n[0].text=n[0].text.slice(0,1)+"̸"+n[0].text.slice(1);else{n=[{type:"textord",mode:"math",text:"̸"},{type:"kern",mode:"math",dimension:{number:-.6,unit:"em"}},t[0]]}return{type:"not",mode:e.mode,body:n,isCharacterBox:r}},mathmlBuilder(e,t){if(e.isCharacterBox){return ie(e.body,t,!0)[0]}return ce(e.body,t)}});const rr=["textord","mathord","atom"],nr=["\\smallint"],sr=["textord","mathord","ordgroup","close","leftright","font"],or=e=>{e.attributes.lspace="0.1667em",e.attributes.rspace="0.1667em"},ar=(e,t)=>{let r;if(e.symbol)r=new v("mo",[te(e.name,e.mode)]),nr.includes(e.name)?r.setAttribute("largeop","false"):r.setAttribute("movablelimits","false"),e.fromMathOp&&or(r);else if(e.body)r=new v("mo",ie(e.body,t)),e.fromMathOp&&or(r);else if(r=new v("mi",[new A(e.name.slice(1))]),!e.parentIsSupSub){const t=[r,new v("mo",[te("⁡","text")])];if(e.needsLeadingSpace){const e=new v("mspace");e.setAttribute("width","0.1667em"),t.unshift(e)}if(!e.isFollowedByDelimiter){const e=new v("mspace");e.setAttribute("width","0.1667em"),t.push(e)}r=new v("mrow",t)}return r},lr={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨅":"\\bigsqcap","⨆":"\\bigsqcup","⨃":"\\bigcupdot","⨇":"\\bigdoublevee","⨈":"\\bigdoublewedge","⨉":"\\bigtimes"};c({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcupplus","\\bigcupdot","\\bigcap","\\bigcup","\\bigdoublevee","\\bigdoublewedge","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcap","\\bigsqcup","\\bigtimes","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨃","⨄","⨅","⨆","⨇","⨈","⨉"],props:{numArgs:0},handler:({parser:e,funcName:t},r)=>{let n=t;return 1===n.length&&(n=lr[n]),{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!0,stack:!1,name:n}},mathmlBuilder:ar}),c({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:({parser:e},t)=>{const r=t[0],n=r.body?r.body:[r],s=1===n.length&&rr.includes(n[0].type);return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:s,fromMathOp:!0,stack:!1,name:s?n[0].text:null,body:s?null:p(r)}},mathmlBuilder:ar});const ir={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint","∱":"\\intclockwise","∲":"\\varointclockwise","⨌":"\\iiiint","⨍":"\\intbar","⨎":"\\intBar","⨏":"\\fint","⨒":"\\rppolint","⨓":"\\scpolint","⨕":"\\pointint","⨖":"\\sqint","⨗":"\\intlarhk","⨘":"\\intx","⨙":"\\intcap","⨚":"\\intcup"};c({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\sgn","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler({parser:e,funcName:t}){const r=e.prevAtomType,n=e.gullet.future().text;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,stack:!1,isFollowedByDelimiter:Lt(n),needsLeadingSpace:r.length>0&&sr.includes(r),name:t}},mathmlBuilder:ar}),c({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler({parser:e,funcName:t}){const r=e.prevAtomType,n=e.gullet.future().text;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,stack:!1,isFollowedByDelimiter:Lt(n),needsLeadingSpace:r.length>0&&sr.includes(r),name:t}},mathmlBuilder:ar}),c({type:"op",names:["\\int","\\iint","\\iiint","\\iiiint","\\oint","\\oiint","\\oiiint","\\intclockwise","\\varointclockwise","\\intbar","\\intBar","\\fint","\\rppolint","\\scpolint","\\pointint","\\sqint","\\intlarhk","\\intx","\\intcap","\\intcup","∫","∬","∭","∮","∯","∰","∱","∲","⨌","⨍","⨎","⨏","⨒","⨓","⨕","⨖","⨗","⨘","⨙","⨚"],props:{numArgs:0},handler({parser:e,funcName:t}){let r=t;return 1===r.length&&(r=ir[r]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,stack:!1,name:r}},mathmlBuilder:ar});c({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=e.prevAtomType,o=e.gullet.future().text;return{type:"operatorname",mode:e.mode,body:p(n),alwaysHandleSupSub:"\\operatornamewithlimits"===t,limits:!1,parentIsSupSub:!1,isFollowedByDelimiter:Lt(o),needsLeadingSpace:s.length>0&&sr.includes(s)}},mathmlBuilder:(e,t)=>{let r,n=ie(e.body,t.withFont("mathrm")),s=!0;for(let e=0;e<n.length;e++){let t=n[e];if(t instanceof T.MathNode)switch(("mrow"===t.type||"mpadded"===t.type)&&1===t.children.length&&t.children[0]instanceof T.MathNode&&(t=t.children[0]),t.type){case"mi":case"mn":case"ms":case"mtext":break;case"mspace":if(t.attributes.width){const r=t.attributes.width.replace("em",""),o=Zt(Number(r));""===o?s=!1:n[e]=new T.MathNode("mtext",[new T.TextNode(o)])}break;case"mo":{const e=t.children[0];1===t.children.length&&e instanceof T.TextNode?e.text=e.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):s=!1;break}default:s=!1}else s=!1}if(s){const e=n.map((e=>e.toText())).join("");n=[new T.TextNode(e)]}else if(1===n.length&&["mover","munder"].includes(n[0].type)&&("mi"===n[0].children[0].type||"mtext"===n[0].children[0].type)){if(n[0].children[0].type="mi",e.parentIsSupSub)return new T.MathNode("mrow",n);{const e=new T.MathNode("mo",[te("⁡","text")]);return T.newDocumentFragment([n[0],e])}}if(s?(r=new T.MathNode("mi",n),1===n[0].text.length&&r.setAttribute("mathvariant","normal")):r=new T.MathNode("mrow",n),!e.parentIsSupSub){const t=[r,new T.MathNode("mo",[te("⁡","text")])];if(e.needsLeadingSpace){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),t.unshift(e)}if(!e.isFollowedByDelimiter){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),t.push(e)}return T.newDocumentFragment(t)}return r}}),Ye("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),d({type:"ordgroup",mathmlBuilder:(e,t)=>ce(e.body,t,e.semisimple)}),c({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"phantom",mode:e.mode,body:p(r)}},mathmlBuilder:(e,t)=>{const r=ie(e.body,t);return new T.MathNode("mphantom",r)}}),c({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"hphantom",mode:e.mode,body:r}},mathmlBuilder:(e,t)=>{const r=ie(p(e.body),t),n=new T.MathNode("mphantom",r),s=new T.MathNode("mpadded",[n]);return s.setAttribute("height","0px"),s.setAttribute("depth","0px"),s}}),c({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"vphantom",mode:e.mode,body:r}},mathmlBuilder:(e,t)=>{const r=ie(p(e.body),t),n=new T.MathNode("mphantom",r),s=new T.MathNode("mpadded",[n]);return s.setAttribute("width","0px"),s}}),c({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>({type:"pmb",mode:e.mode,body:p(t[0])}),mathmlBuilder(e,t){const r=ie(e.body,t),n=N(r);return n.setAttribute("style","font-weight:bold"),n}});const cr=(e,t)=>{const r=t.withLevel(_e),n=new T.MathNode("mpadded",[de(e.body,r)]),s=qe(e.dy,t);return n.setAttribute("voffset",s.number+s.unit),s.number>0?n.style.padding=s.number+s.unit+" 0 0 0":n.style.padding="0 0 "+Math.abs(s.number)+s.unit+" 0",n};c({type:"raise",names:["\\raise","\\lower"],props:{numArgs:2,argTypes:["size","primitive"],primitive:!0},handler({parser:e,funcName:t},r){const n=Ie(r[0],"size").value;"\\lower"===t&&(n.number*=-1);const s=r[1];return{type:"raise",mode:e.mode,dy:n,body:s}},mathmlBuilder:cr}),c({type:"raise",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler({parser:e,funcName:t},r){const n=Ie(r[0],"size").value,s=r[1];return{type:"raise",mode:e.mode,dy:n,body:s}},mathmlBuilder:cr}),c({type:"ref",names:["\\ref","\\eqref"],props:{numArgs:1,argTypes:["raw"]},handler:({parser:e,funcName:t},r)=>({type:"ref",mode:e.mode,funcName:t,string:r[0].string.replace(Yt,"")}),mathmlBuilder(e,t){const r="\\ref"===e.funcName?["tml-ref"]:["tml-ref","tml-eqref"];return new x("#"+e.string,r,null)}}),c({type:"reflect",names:["\\reflectbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:({parser:e},t)=>({type:"reflect",mode:e.mode,body:t[0]}),mathmlBuilder(e,t){const r=de(e.body,t);return r.style.transform="scaleX(-1)",r}}),c({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler:({parser:e})=>({type:"internal",mode:e.mode})}),c({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler({parser:e},t,r){const n=r[0],s=Ie(t[0],"size"),o=Ie(t[1],"size");return{type:"rule",mode:e.mode,shift:n&&Ie(n,"size").value,width:s.value,height:o.value}},mathmlBuilder(e,t){const r=qe(e.width,t),n=qe(e.height,t),s=e.shift?qe(e.shift,t):{number:0,unit:"em"},o=t.color&&t.getColor()||"black",a=new T.MathNode("mspace");if(r.number>0&&n.number>0&&a.setAttribute("mathbackground",o),a.setAttribute("width",r.number+r.unit),a.setAttribute("height",n.number+n.unit),0===s.number)return a;const l=new T.MathNode("mpadded",[a]);return s.number>=0?l.setAttribute("height","+"+s.number+s.unit):(l.setAttribute("height",s.number+s.unit),l.setAttribute("depth","+"+-s.number+s.unit)),l.setAttribute("voffset",s.number+s.unit),l}});const dr={"\\tiny":.5,"\\sixptsize":.6,"\\Tiny":.6,"\\scriptsize":.7,"\\footnotesize":.8,"\\small":.9,"\\normalsize":1,"\\large":1.2,"\\Large":1.44,"\\LARGE":1.728,"\\huge":2.074,"\\Huge":2.488};c({type:"sizing",names:["\\tiny","\\sixptsize","\\Tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],props:{numArgs:0,allowedInText:!0},handler:({breakOnTokenText:e,funcName:t,parser:r},n)=>{r.settings.strict&&"math"===r.mode&&console.log(`Temml strict-mode warning: Command ${t} is invalid in math mode.`);const s=r.parseExpression(!1,e,!0);return{type:"sizing",mode:r.mode,funcName:t,body:s}},mathmlBuilder:(e,t)=>{const r=t.withFontSize(dr[e.funcName]),n=ie(e.body,r),s=N(n),o=(dr[e.funcName]/t.fontSize).toFixed(4);return s.setAttribute("mathsize",o+"em"),s}}),c({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:({parser:e},t,r)=>{let n=!1,s=!1;const o=r[0]&&Ie(r[0],"ordgroup");if(o){let e="";for(let t=0;t<o.body.length;++t){if(e=o.body[t].text,"t"===e)n=!0;else{if("b"!==e){n=!1,s=!1;break}s=!0}}}else n=!0,s=!0;const a=t[0];return{type:"smash",mode:e.mode,body:a,smashHeight:n,smashDepth:s}},mathmlBuilder:(e,t)=>{const r=new T.MathNode("mpadded",[de(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),c({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler({parser:e},t,r){const n=r[0],s=t[0];return{type:"sqrt",mode:e.mode,body:s,index:n}},mathmlBuilder(e,t){const{body:r,index:n}=e;return n?new T.MathNode("mroot",[de(r,t),de(n,t.incrementLevel())]):new T.MathNode("msqrt",[de(r,t)])}});const mr={display:0,text:1,script:2,scriptscript:3},pr={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]};c({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({breakOnTokenText:e,funcName:t,parser:r},n){const s=r.parseExpression(!0,e,!0),o=t.slice(1,t.length-5);return{type:"styling",mode:r.mode,scriptLevel:o,body:s}},mathmlBuilder(e,t){const r=t.withLevel(mr[e.scriptLevel]),n=ie(e.body,r),s=N(n),o=pr[e.scriptLevel];return s.setAttribute("scriptlevel",o[0]),s.setAttribute("displaystyle",o[1]),s}});const ur=/^m(over|under|underover)$/;d({type:"supsub",mathmlBuilder(e,t){let r,n,s=!1,o=!1,a=!1,l=!1;e.base&&"horizBrace"===e.base.type&&(n=!!e.sup,n===e.base.isOver&&(s=!0,r=e.base.isOver)),!e.base||e.base.stack||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0,o=!e.base.symbol,a=o&&!e.isFollowedByDelimiter,l=e.base.needsLeadingSpace);const i=e.base&&e.base.stack?[de(e.base.body[0],t)]:[de(e.base,t)],c=t.inSubOrSup();if(e.sub){const r=de(e.sub,c);3===t.level&&r.setAttribute("scriptlevel","2"),i.push(r)}if(e.sup){const r=de(e.sup,c);3===t.level&&r.setAttribute("scriptlevel","2");const n="mrow"===r.type?r.children[0]:r;n&&"mo"===n.type&&n.classes.includes("tml-prime")&&e.base&&e.base.text&&"fF".indexOf(e.base.text)>-1&&n.classes.push("prime-pad"),i.push(r)}let d;if(s)d=r?"mover":"munder";else if(e.sub)if(e.sup){const r=e.base;d=r&&("op"===r.type&&r.limits||"multiscript"===r.type)&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(t.level===Ve||r.limits)?"munderover":"msubsup"}else{const r=e.base;d=r&&"op"===r.type&&r.limits&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.level===Ve)?"munder":"msub"}else{const r=e.base;d=r&&"op"===r.type&&r.limits&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.level===Ve)?"mover":"msup"}let m=new T.MathNode(d,i);if(o){const e=new T.MathNode("mo",[te("⁡","text")]);if(l){const t=new T.MathNode("mspace");t.setAttribute("width","0.1667em"),m=T.newDocumentFragment([t,m,e])}else m=T.newDocumentFragment([m,e]);if(a){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),m.children.push(e)}}else ur.test(d)&&(m=new T.MathNode("mrow",[m]));return m}});const hr=["\\shortmid","\\nshortmid","\\shortparallel","\\nshortparallel","\\smallsetminus"],gr=["\\Rsh","\\Lsh","\\restriction"];d({type:"atom",mathmlBuilder(e,t){const r=new T.MathNode("mo",[te(e.text,e.mode)]);if("punct"===e.family)r.setAttribute("separator","true");else if("open"===e.family||"close"===e.family)"open"===e.family?(r.setAttribute("form","prefix"),r.setAttribute("stretchy","false")):"close"===e.family&&(r.setAttribute("form","postfix"),r.setAttribute("stretchy","false"));else if("\\mid"===e.text)r.setAttribute("lspace","0.22em"),r.setAttribute("rspace","0.22em"),r.setAttribute("stretchy","false");else if("rel"===e.family&&(e=>{if(1===e.length){const t=e.codePointAt(0);return 8591<t&&t<8704}return e.indexOf("arrow")>-1||e.indexOf("harpoon")>-1||gr.includes(e)})(e.text))r.setAttribute("stretchy","false");else if(hr.includes(e.text))r.setAttribute("mathsize","70%");else if(":"===e.text)r.attributes.lspace="0.2222em",r.attributes.rspace="0.2222em";else if(e.needsSpacing)return"bin"===e.family?new T.MathNode("mrow",[Oe(.222),r,Oe(.222)]):new T.MathNode("mrow",[Oe(.2778),r,Oe(.2778)]);return r}});const fr={mathbf:"bold",mathrm:"normal",textit:"italic",mathit:"italic",mathnormal:"italic",mathbb:"double-struck",mathcal:"script",mathfrak:"fraktur",mathscr:"script",mathsf:"sans-serif",mathtt:"monospace"},br=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsc"===t.fontFamily)return"normal";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"sans-serif-bold":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";const r=t.font;if(!r||"mathnormal"===r)return null;const n=e.mode;switch(r){case"mathit":case"greekItalic":return"italic";case"mathrm":{const t=e.text.codePointAt(0);return 939<t&&t<975?"italic":"normal"}case"up@greek":return"normal";case"boldsymbol":case"mathboldsymbol":return"bold-italic";case"mathbf":return"bold";case"mathbb":return"double-struck";case"mathfrak":return"fraktur";case"mathscr":case"mathcal":return"script";case"mathsf":return"sans-serif";case"mathsfit":return"sans-serif-italic";case"mathtt":return"monospace"}let s=e.text;return $[n][s]&&$[n][s].replace&&(s=$[n][s].replace),Object.prototype.hasOwnProperty.call(fr,r)?fr[r]:null},yr=Object.freeze({B:8426,E:8427,F:8427,H:8387,I:8391,L:8390,M:8422,R:8393,e:8394,g:8355,o:8389}),wr=Object.freeze({C:8426,H:8388,I:8392,R:8394,Z:8398}),xr=Object.freeze({C:8383,H:8389,N:8391,P:8393,Q:8393,R:8395,Z:8394}),kr=Object.freeze({"ϵ":119527,"ϑ":119564,"ϰ":119534,"φ":119577,"ϱ":119535,"ϖ":119563}),vr=Object.freeze({"ϵ":119643,"ϑ":119680,"ϰ":119650,"φ":119693,"ϱ":119651,"ϖ":119679}),Ar=Object.freeze({"ϵ":119701,"ϑ":119738,"ϰ":119708,"φ":119751,"ϱ":119709,"ϖ":119737}),Nr=Object.freeze({"ϵ":119759,"ϑ":119796,"ϰ":119766,"φ":119809,"ϱ":119767,"ϖ":119795}),Tr=Object.freeze({upperCaseLatin:{normal:e=>0,bold:e=>119743,italic:e=>119795,"bold-italic":e=>119847,script:e=>yr[e]||119899,"script-bold":e=>119951,fraktur:e=>wr[e]||120003,"fraktur-bold":e=>120107,"double-struck":e=>xr[e]||120055,"sans-serif":e=>120159,"sans-serif-bold":e=>120211,"sans-serif-italic":e=>120263,"sans-serif-bold-italic":e=>120380,monospace:e=>120367},lowerCaseLatin:{normal:e=>0,bold:e=>119737,italic:e=>"h"===e?8358:119789,"bold-italic":e=>119841,script:e=>yr[e]||119893,"script-bold":e=>119945,fraktur:e=>119997,"fraktur-bold":e=>120101,"double-struck":e=>120049,"sans-serif":e=>120153,"sans-serif-bold":e=>120205,"sans-serif-italic":e=>120257,"sans-serif-bold-italic":e=>120309,monospace:e=>120361},upperCaseGreek:{normal:e=>0,bold:e=>119575,italic:e=>119633,"bold-italic":e=>119575,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>119749,"sans-serif-bold":e=>119749,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>119807,monospace:e=>0},lowerCaseGreek:{normal:e=>0,bold:e=>119569,italic:e=>119627,"bold-italic":e=>"ϕ"===e?119678:119685,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>119743,"sans-serif-bold":e=>119743,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>119801,monospace:e=>0},varGreek:{normal:e=>0,bold:e=>kr[e]||-51,italic:e=>0,"bold-italic":e=>vr[e]||58,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>Ar[e]||116,"sans-serif-bold":e=>Ar[e]||116,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>Nr[e]||174,monospace:e=>0},numeral:{normal:e=>0,bold:e=>120734,italic:e=>0,"bold-italic":e=>0,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>120744,"sans-serif":e=>120754,"sans-serif-bold":e=>120764,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>0,monospace:e=>120774}}),Sr=(e,t)=>{const r=e.codePointAt(0),n=64<r&&r<91?"upperCaseLatin":96<r&&r<123?"lowerCaseLatin":912<r&&r<938?"upperCaseGreek":944<r&&r<970||"ϕ"===e?"lowerCaseGreek":120545<r&&r<120572||kr[e]?"varGreek":47<r&&r<58?"numeral":"other";return"other"===n?e:String.fromCodePoint(r+Tr[n][t](e))},qr=Object.freeze({a:"ᴀ",b:"ʙ",c:"ᴄ",d:"ᴅ",e:"ᴇ",f:"ꜰ",g:"ɢ",h:"ʜ",i:"ɪ",j:"ᴊ",k:"ᴋ",l:"ʟ",m:"ᴍ",n:"ɴ",o:"ᴏ",p:"ᴘ",q:"ǫ",r:"ʀ",s:"s",t:"ᴛ",u:"ᴜ",v:"ᴠ",w:"ᴡ",x:"x",y:"ʏ",z:"ᴢ"}),Or=/^\d(?:[\d,.]*\d)?$/,Mr=/[A-Ba-z]/,Br=new Set(["\\prime","\\dprime","\\trprime","\\qprime","\\backprime","\\backdprime","\\backtrprime"]);d({type:"mathord",mathmlBuilder(e,t){const r=te(e.text,e.mode,t),n=r.text.codePointAt(0),s=912<n&&n<938?"normal":"italic",o=br(e,t)||s;if("script"===o)return r.text=Sr(r.text,o),new T.MathNode("mi",[r],[t.font]);"italic"!==o&&(r.text=Sr(r.text,o));let a=new T.MathNode("mi",[r]);return"normal"===o&&(a.setAttribute("mathvariant","normal"),1===r.text.length&&(a=new T.MathNode("mpadded",[a]),a.setAttribute("lspace","0"))),a}}),d({type:"textord",mathmlBuilder(e,t){let r=e.text;const n=r.codePointAt(0);"textsc"===t.fontFamily&&96<n&&n<123&&(r=qr[r]);const s=te(r,e.mode,t),o=br(e,t)||"normal";let a;if(Or.test(e.text)){const t="text"===e.mode?"mtext":"mn";if("italic"===o||"bold-italic"===o)return((e,t,r)=>{const n=new T.MathNode(r,[e]),s=new T.MathNode("mstyle",[n]);return s.style["font-style"]="italic",s.style["font-family"]="Cambria, 'Times New Roman', serif","bold-italic"===t&&(s.style["font-weight"]="bold"),s})(s,o,t);"normal"!==o&&(s.text=s.text.split("").map((e=>Sr(e,o))).join("")),a=new T.MathNode(t,[s])}else if("text"===e.mode)"normal"!==o&&(s.text=Sr(s.text,o)),a=new T.MathNode("mtext",[s]);else if(Br.has(e.text))a=new T.MathNode("mo",[s]),a.classes.push("tml-prime");else{const e=s.text;"italic"!==o&&(s.text=Sr(s.text,o)),a=new T.MathNode("mi",[s]),s.text===e&&Mr.test(e)&&a.setAttribute("mathvariant","italic")}return a}});const Cr={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},zr={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};d({type:"spacing",mathmlBuilder(t,r){let n;if(Object.prototype.hasOwnProperty.call(zr,t.text))n=new T.MathNode("mtext",[new T.TextNode(" ")]);else{if(!Object.prototype.hasOwnProperty.call(Cr,t.text))throw new e(`Unknown type of space "${t.text}"`);n=new T.MathNode("mo"),"\\nobreak"===t.text&&n.setAttribute("linebreak","nobreak")}return n}}),d({type:"tag"});const Er={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm","\\textsc":"textsc"},$r={"\\textbf":"textbf","\\textmd":"textmd"},Ir={"\\textit":"textit","\\textup":"textup"};c({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textsc","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"text",mode:e.mode,body:p(n),font:t}},mathmlBuilder(e,t){const r=((e,t)=>{const r=e.font;return r?Er[r]?t.withTextFontFamily(Er[r]):$r[r]?t.withTextFontWeight($r[r]):"\\emph"===r?"textit"===t.fontShape?t.withTextFontShape("textup"):t.withTextFontShape("textit"):t.withTextFontShape(Ir[r]):t})(e,t),n=ce(e.body,r);return ne(n)}}),c({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:({parser:e},t)=>({type:"vcenter",mode:e.mode,body:t[0]}),mathmlBuilder(e,t){const r=new T.MathNode("mtd",[de(e.body,t)]);r.style.padding="0";const n=new T.MathNode("mtr",[r]);return new T.MathNode("mtable",[n])}}),c({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,r,n){throw new e("\\verb ended by end of line instead of matching delimiter")},mathmlBuilder(e,t){const r=new T.TextNode(Lr(e)),n=new T.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});const Lr=e=>e.body.replace(/ /g,e.star?"␣":" "),Fr=l,Dr="[ \r\n\t]",Gr=`(\\\\[a-zA-Z@]+)${Dr}*`,jr="[̀-ͯ]",Pr=new RegExp(`${jr}+$`),Rr=`(${Dr}+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-‧‪-퟿豈-￿]${jr}*|[\ud800-\udbff][\udc00-\udfff]${jr}*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|${Gr}|\\\\[^\ud800-\udfff])`;class Ur{constructor(e,t){this.input=e,this.settings=t,this.tokenRegex=new RegExp(Rr,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){const t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new He("EOF",new Ue(this,r,r));const n=this.tokenRegex.exec(t);if(null===n||n.index!==r)throw new e(`Unexpected character: '${t[r]}'`,new He(t[r],new Ue(this,r,r+1)));const s=n[6]||n[3]||(n[2]?"\\ ":" ");if(14===this.catcodes[s]){const r=t.indexOf("\n",this.tokenRegex.lastIndex);if(-1===r){if(this.tokenRegex.lastIndex=t.length,this.settings.strict)throw new e("% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode")}else this.tokenRegex.lastIndex=r+1;return this.lex()}return new He(s,new Ue(this,r,this.tokenRegex.lastIndex))}}class Hr{constructor(e={},t={}){this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new e("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");const t=this.undefStack.pop();for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(void 0===t[e]?delete this.current[e]:this.current[e]=t[e])}has(e){return Object.prototype.hasOwnProperty.call(this.current,e)||Object.prototype.hasOwnProperty.call(this.builtins,e)}get(e){return Object.prototype.hasOwnProperty.call(this.current,e)?this.current[e]:this.builtins[e]}set(e,t,r=!1){if(r){for(let t=0;t<this.undefStack.length;t++)delete this.undefStack[t][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{const t=this.undefStack[this.undefStack.length-1];t&&!Object.prototype.hasOwnProperty.call(t,e)&&(t[e]=this.current[e])}this.current[e]=t}}const Vr={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class _r{constructor(e,t,r){this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Hr(Je,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new Ur(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){let t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:n,end:r}=this.consumeArg(["]"]))}else({tokens:n,start:t,end:r}=this.consumeArg());return this.pushToken(new He("EOF",r.loc)),this.pushTokens(n),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(t){const r=[],n=t&&t.length>0;n||this.consumeSpaces();const s=this.future();let o,a=0,l=0;do{if(o=this.popToken(),r.push(o),"{"===o.text)++a;else if("}"===o.text){if(--a,-1===a)throw new e("Extra }",o)}else if("EOF"===o.text)throw new e("Unexpected end of input in a macro argument, expected '"+(t&&n?t[l]:"}")+"'",o);if(t&&n)if((0===a||1===a&&"{"===t[l])&&o.text===t[l]){if(++l,l===t.length){r.splice(-l,l);break}}else l=0}while(0!==a||n);return"{"===s.text&&"}"===r[r.length-1].text&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:s,end:o}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new e("The length of delimiters doesn't match the number of args!");const n=r[0];for(let t=0;t<n.length;t++){const r=this.popToken();if(n[t]!==r.text)throw new e("Use of the macro doesn't match its definition",r)}}const n=[];for(let e=0;e<t;e++)n.push(this.consumeArg(r&&r[e+1]).tokens);return n}expandOnce(t){const r=this.popToken(),n=r.text,s=r.noexpand?null:this._getExpansion(n);if(null==s||t&&s.unexpandable){if(t&&null==s&&"\\"===n[0]&&!this.isDefined(n))throw new e("Undefined control sequence: "+n);return this.pushToken(r),!1}if(this.expansionCount++,this.expansionCount>this.settings.maxExpand)throw new e("Too many expansions: infinite loop or need to increase maxExpand setting");let o=s.tokens;const a=this.consumeArgs(s.numArgs,s.delimiters);if(s.numArgs){o=o.slice();for(let t=o.length-1;t>=0;--t){let r=o[t];if("#"===r.text){if(0===t)throw new e("Incomplete placeholder at end of macro body",r);if(r=o[--t],"#"===r.text)o.splice(t+1,1);else{if(!/^[1-9]$/.test(r.text))throw new e("Not a valid argument number",r);o.splice(t,2,...a[+r.text-1])}}}}return this.pushTokens(o),o.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){const e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new He(e)]):void 0}expandTokens(e){const t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){const e=this.stack.pop();e.treatAsRelax&&(e.noexpand=!1,e.treatAsRelax=!1),t.push(e)}return t}expandMacroAsText(e){const t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){const t=this.macros.get(e);if(null==t)return t;if(1===e.length){const t=this.lexer.catcodes[e];if(null!=t&&13!==t)return}const r="function"==typeof t?t(this):t;if("string"==typeof r){let e=0;if(-1!==r.indexOf("#")){const t=r.replace(/##/g,"");for(;-1!==t.indexOf("#"+(e+1));)++e}const t=new Ur(r,this.settings),n=[];let s=t.lex();for(;"EOF"!==s.text;)n.push(s),s=t.lex();n.reverse();return{tokens:n,numArgs:e}}return r}isDefined(e){return this.macros.has(e)||Object.prototype.hasOwnProperty.call(Fr,e)||Object.prototype.hasOwnProperty.call($.math,e)||Object.prototype.hasOwnProperty.call($.text,e)||Object.prototype.hasOwnProperty.call(Vr,e)}isExpandable(e){const t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Object.prototype.hasOwnProperty.call(Fr,e)&&!Fr[e].primitive}}const Wr=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Xr=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g","ʰ":"h","ⁱ":"i","ʲ":"j","ᵏ":"k","ˡ":"l","ᵐ":"m","ⁿ":"n","ᵒ":"o","ᵖ":"p","ʳ":"r","ˢ":"s","ᵗ":"t","ᵘ":"u","ᵛ":"v","ʷ":"w","ˣ":"x","ʸ":"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),Zr=Object.freeze({"𝒜":"A","ℬ":"B","𝒞":"C","𝒟":"D","ℰ":"E","ℱ":"F","𝒢":"G","ℋ":"H","ℐ":"I","𝒥":"J","𝒦":"K","ℒ":"L","ℳ":"M","𝒩":"N","𝒪":"O","𝒫":"P","𝒬":"Q","ℛ":"R","𝒮":"S","𝒯":"T","𝒰":"U","𝒱":"V","𝒲":"W","𝒳":"X","𝒴":"Y","𝒵":"Z"});var Yr={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},Jr={"á":"á","à":"à","ä":"ä","ǟ":"ǟ","ã":"ã","ā":"ā","ă":"ă","ắ":"ắ","ằ":"ằ","ẵ":"ẵ","ǎ":"ǎ","â":"â","ấ":"ấ","ầ":"ầ","ẫ":"ẫ","ȧ":"ȧ","ǡ":"ǡ","å":"å","ǻ":"ǻ","ḃ":"ḃ","ć":"ć","č":"č","ĉ":"ĉ","ċ":"ċ","ď":"ď","ḋ":"ḋ","é":"é","è":"è","ë":"ë","ẽ":"ẽ","ē":"ē","ḗ":"ḗ","ḕ":"ḕ","ĕ":"ĕ","ě":"ě","ê":"ê","ế":"ế","ề":"ề","ễ":"ễ","ė":"ė","ḟ":"ḟ","ǵ":"ǵ","ḡ":"ḡ","ğ":"ğ","ǧ":"ǧ","ĝ":"ĝ","ġ":"ġ","ḧ":"ḧ","ȟ":"ȟ","ĥ":"ĥ","ḣ":"ḣ","í":"í","ì":"ì","ï":"ï","ḯ":"ḯ","ĩ":"ĩ","ī":"ī","ĭ":"ĭ","ǐ":"ǐ","î":"î","ǰ":"ǰ","ĵ":"ĵ","ḱ":"ḱ","ǩ":"ǩ","ĺ":"ĺ","ľ":"ľ","ḿ":"ḿ","ṁ":"ṁ","ń":"ń","ǹ":"ǹ","ñ":"ñ","ň":"ň","ṅ":"ṅ","ó":"ó","ò":"ò","ö":"ö","ȫ":"ȫ","õ":"õ","ṍ":"ṍ","ṏ":"ṏ","ȭ":"ȭ","ō":"ō","ṓ":"ṓ","ṑ":"ṑ","ŏ":"ŏ","ǒ":"ǒ","ô":"ô","ố":"ố","ồ":"ồ","ỗ":"ỗ","ȯ":"ȯ","ȱ":"ȱ","ő":"ő","ṕ":"ṕ","ṗ":"ṗ","ŕ":"ŕ","ř":"ř","ṙ":"ṙ","ś":"ś","ṥ":"ṥ","š":"š","ṧ":"ṧ","ŝ":"ŝ","ṡ":"ṡ","ẗ":"ẗ","ť":"ť","ṫ":"ṫ","ú":"ú","ù":"ù","ü":"ü","ǘ":"ǘ","ǜ":"ǜ","ǖ":"ǖ","ǚ":"ǚ","ũ":"ũ","ṹ":"ṹ","ū":"ū","ṻ":"ṻ","ŭ":"ŭ","ǔ":"ǔ","û":"û","ů":"ů","ű":"ű","ṽ":"ṽ","ẃ":"ẃ","ẁ":"ẁ","ẅ":"ẅ","ŵ":"ŵ","ẇ":"ẇ","ẘ":"ẘ","ẍ":"ẍ","ẋ":"ẋ","ý":"ý","ỳ":"ỳ","ÿ":"ÿ","ỹ":"ỹ","ȳ":"ȳ","ŷ":"ŷ","ẏ":"ẏ","ẙ":"ẙ","ź":"ź","ž":"ž","ẑ":"ẑ","ż":"ż","Á":"Á","À":"À","Ä":"Ä","Ǟ":"Ǟ","Ã":"Ã","Ā":"Ā","Ă":"Ă","Ắ":"Ắ","Ằ":"Ằ","Ẵ":"Ẵ","Ǎ":"Ǎ","Â":"Â","Ấ":"Ấ","Ầ":"Ầ","Ẫ":"Ẫ","Ȧ":"Ȧ","Ǡ":"Ǡ","Å":"Å","Ǻ":"Ǻ","Ḃ":"Ḃ","Ć":"Ć","Č":"Č","Ĉ":"Ĉ","Ċ":"Ċ","Ď":"Ď","Ḋ":"Ḋ","É":"É","È":"È","Ë":"Ë","Ẽ":"Ẽ","Ē":"Ē","Ḗ":"Ḗ","Ḕ":"Ḕ","Ĕ":"Ĕ","Ě":"Ě","Ê":"Ê","Ế":"Ế","Ề":"Ề","Ễ":"Ễ","Ė":"Ė","Ḟ":"Ḟ","Ǵ":"Ǵ","Ḡ":"Ḡ","Ğ":"Ğ","Ǧ":"Ǧ","Ĝ":"Ĝ","Ġ":"Ġ","Ḧ":"Ḧ","Ȟ":"Ȟ","Ĥ":"Ĥ","Ḣ":"Ḣ","Í":"Í","Ì":"Ì","Ï":"Ï","Ḯ":"Ḯ","Ĩ":"Ĩ","Ī":"Ī","Ĭ":"Ĭ","Ǐ":"Ǐ","Î":"Î","İ":"İ","Ĵ":"Ĵ","Ḱ":"Ḱ","Ǩ":"Ǩ","Ĺ":"Ĺ","Ľ":"Ľ","Ḿ":"Ḿ","Ṁ":"Ṁ","Ń":"Ń","Ǹ":"Ǹ","Ñ":"Ñ","Ň":"Ň","Ṅ":"Ṅ","Ó":"Ó","Ò":"Ò","Ö":"Ö","Ȫ":"Ȫ","Õ":"Õ","Ṍ":"Ṍ","Ṏ":"Ṏ","Ȭ":"Ȭ","Ō":"Ō","Ṓ":"Ṓ","Ṑ":"Ṑ","Ŏ":"Ŏ","Ǒ":"Ǒ","Ô":"Ô","Ố":"Ố","Ồ":"Ồ","Ỗ":"Ỗ","Ȯ":"Ȯ","Ȱ":"Ȱ","Ő":"Ő","Ṕ":"Ṕ","Ṗ":"Ṗ","Ŕ":"Ŕ","Ř":"Ř","Ṙ":"Ṙ","Ś":"Ś","Ṥ":"Ṥ","Š":"Š","Ṧ":"Ṧ","Ŝ":"Ŝ","Ṡ":"Ṡ","Ť":"Ť","Ṫ":"Ṫ","Ú":"Ú","Ù":"Ù","Ü":"Ü","Ǘ":"Ǘ","Ǜ":"Ǜ","Ǖ":"Ǖ","Ǚ":"Ǚ","Ũ":"Ũ","Ṹ":"Ṹ","Ū":"Ū","Ṻ":"Ṻ","Ŭ":"Ŭ","Ǔ":"Ǔ","Û":"Û","Ů":"Ů","Ű":"Ű","Ṽ":"Ṽ","Ẃ":"Ẃ","Ẁ":"Ẁ","Ẅ":"Ẅ","Ŵ":"Ŵ","Ẇ":"Ẇ","Ẍ":"Ẍ","Ẋ":"Ẋ","Ý":"Ý","Ỳ":"Ỳ","Ÿ":"Ÿ","Ỹ":"Ỹ","Ȳ":"Ȳ","Ŷ":"Ŷ","Ẏ":"Ẏ","Ź":"Ź","Ž":"Ž","Ẑ":"Ẑ","Ż":"Ż","ά":"ά","ὰ":"ὰ","ᾱ":"ᾱ","ᾰ":"ᾰ","έ":"έ","ὲ":"ὲ","ή":"ή","ὴ":"ὴ","ί":"ί","ὶ":"ὶ","ϊ":"ϊ","ΐ":"ΐ","ῒ":"ῒ","ῑ":"ῑ","ῐ":"ῐ","ό":"ό","ὸ":"ὸ","ύ":"ύ","ὺ":"ὺ","ϋ":"ϋ","ΰ":"ΰ","ῢ":"ῢ","ῡ":"ῡ","ῠ":"ῠ","ώ":"ώ","ὼ":"ὼ","Ύ":"Ύ","Ὺ":"Ὺ","Ϋ":"Ϋ","Ῡ":"Ῡ","Ῠ":"Ῠ","Ώ":"Ώ","Ὼ":"Ὼ"};const Kr=["bin","op","open","punct","rel"],Qr=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/,en=/^ *\\text/;class tn{constructor(e,t,r=!1){this.mode="math",this.gullet=new _r(e,t,this.mode),this.settings=t,this.isPreamble=r,this.leftrightDepth=0,this.prevAtomType=""}expect(t,r=!0){if(this.fetch().text!==t)throw new e(`Expected '${t}', got '${this.fetch().text}'`,this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");const e=this.parseExpression(!1);if(this.expect("EOF"),this.isPreamble){const e=Object.create(null);return Object.entries(this.gullet.macros.current).forEach((([t,r])=>{e[t]=r})),this.gullet.endGroup(),e}const t=this.gullet.macros.get("\\df@tag");return this.gullet.endGroup(),t&&(this.gullet.macros.current["\\df@tag"]=t),e}static get endOfExpression(){return["}","\\endgroup","\\end","\\right","\\endtoggle","&"]}subparse(e){const t=this.nextToken;this.consume(),this.gullet.pushToken(new He("}")),this.gullet.pushTokens(e);const r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t,r){const n=[];for(this.prevAtomType="";;){"math"===this.mode&&this.consumeSpaces();const s=this.fetch();if(-1!==tn.endOfExpression.indexOf(s.text))break;if(t&&s.text===t)break;if(r&&"\\middle"===s.text)break;if(e&&Fr[s.text]&&Fr[s.text].infix)break;const o=this.parseAtom(t);if(!o)break;"internal"!==o.type&&(n.push(o),this.prevAtomType="atom"===o.type?o.family:o.type)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){let r,n=-1;for(let s=0;s<t.length;s++)if("infix"===t[s].type){if(-1!==n)throw new e("only one infix operator per group",t[s].token);n=s,r=t[s].replaceWith}if(-1!==n&&r){let e,s;const o=t.slice(0,n),a=t.slice(n+1);let l;return e=1===o.length&&"ordgroup"===o[0].type?o[0]:{type:"ordgroup",mode:this.mode,body:o},s=1===a.length&&"ordgroup"===a[0].type?a[0]:{type:"ordgroup",mode:this.mode,body:a},l="\\\\abovefrac"===r?this.callFunction(r,[e,t[n],s],[]):this.callFunction(r,[e,s],[]),[l]}return t}handleSupSubscript(t){const r=this.fetch(),n=r.text;this.consume(),this.consumeSpaces();const s=this.parseGroup(t);if(!s)throw new e("Expected group after '"+n+"'",r);return s}formatUnsupportedCmd(e){const t=[];for(let r=0;r<e.length;r++)t.push({type:"textord",mode:"text",text:e[r]});const r={type:"text",mode:this.mode,body:t};return{type:"color",mode:this.mode,color:this.settings.errorColor,body:[r]}}parseAtom(t){const r=this.parseGroup("atom",t);if("text"===this.mode)return r;let n,s;for(;;){this.consumeSpaces();const t=this.fetch();if("\\limits"===t.text||"\\nolimits"===t.text){if(r&&"op"===r.type){const e="\\limits"===t.text;r.limits=e,r.alwaysHandleSupSub=!0}else{if(!r||"operatorname"!==r.type)throw new e("Limit controls must follow a math operator",t);r.alwaysHandleSupSub&&(r.limits="\\limits"===t.text)}this.consume()}else if("^"===t.text){if(n)throw new e("Double superscript",t);n=this.handleSupSubscript("superscript")}else if("_"===t.text){if(s)throw new e("Double subscript",t);s=this.handleSupSubscript("subscript")}else if("'"===t.text){if(n)throw new e("Double superscript",t);const r={type:"textord",mode:this.mode,text:"\\prime"},s=[r];for(this.consume();"'"===this.fetch().text;)s.push(r),this.consume();"^"===this.fetch().text&&s.push(this.handleSupSubscript("superscript")),n={type:"ordgroup",mode:this.mode,body:s}}else{if(!Xr[t.text])break;{const e=Wr.test(t.text),r=[];for(r.push(new He(Xr[t.text])),this.consume();;){const t=this.fetch().text;if(!Xr[t])break;if(Wr.test(t)!==e)break;r.unshift(new He(Xr[t])),this.consume()}const o=this.subparse(r);e?s={type:"ordgroup",mode:"math",body:o}:n={type:"ordgroup",mode:"math",body:o}}}}if(n||s){if(r&&"multiscript"===r.type&&!r.postscripts)return r.postscripts={sup:n,sub:s},r;{const e=!r||"op"!==r.type&&"operatorname"!==r.type?void 0:Lt(this.nextToken.text);return{type:"supsub",mode:this.mode,base:r,sup:n,sub:s,isFollowedByDelimiter:e}}}return r}parseFunction(t,r){const n=this.fetch(),s=n.text,o=Fr[s];if(!o)return null;if(this.consume(),r&&"atom"!==r&&!o.allowedInArgument)throw new e("Got function '"+s+"' with no arguments"+(r?" as "+r:""),n);if("text"===this.mode&&!o.allowedInText)throw new e("Can't use function '"+s+"' in text mode",n);if("math"===this.mode&&!1===o.allowedInMath)throw new e("Can't use function '"+s+"' in math mode",n);const a=this.prevAtomType,{args:l,optArgs:i}=this.parseArguments(s,o);return this.prevAtomType=a,this.callFunction(s,l,i,n,t)}callFunction(t,r,n,s,o){const a={funcName:t,parser:this,token:s,breakOnTokenText:o},l=Fr[t];if(l&&l.handler)return l.handler(a,r,n);throw new e(`No function handler for ${t}`)}parseArguments(t,r){const n=r.numArgs+r.numOptionalArgs;if(0===n)return{args:[],optArgs:[]};const s=[],o=[];for(let a=0;a<n;a++){let n=r.argTypes&&r.argTypes[a];const l=a<r.numOptionalArgs;(r.primitive&&null==n||"sqrt"===r.type&&1===a&&null==o[0])&&(n="primitive");const i=this.parseGroupOfType(`argument to '${t}'`,n,l);if(l)o.push(i);else{if(null==i)throw new e("Null argument, please report this as a bug");s.push(i)}}return{args:s,optArgs:o}}parseGroupOfType(t,r,n){switch(r){case"size":return this.parseSizeGroup(n);case"url":return this.parseUrlGroup(n);case"math":case"text":return this.parseArgumentGroup(n,r);case"hbox":{const e=this.parseArgumentGroup(n,"text");return null!=e?{type:"styling",mode:e.mode,body:[e],scriptLevel:"text"}:null}case"raw":{const e=this.parseStringGroup("raw",n);return null!=e?{type:"raw",mode:"text",string:e.text}:null}case"primitive":{if(n)throw new e("A primitive argument cannot be optional");const r=this.parseGroup(t);if(null==r)throw new e("Expected group as "+t,this.fetch());return r}case"original":case null:case void 0:return this.parseArgumentGroup(n);default:throw new e("Unknown group type as "+t,this.fetch())}}consumeSpaces(){for(;;){const e=this.fetch().text;if(" "!==e&&" "!==e&&"︎"!==e)break;this.consume()}}parseStringGroup(e,t){const r=this.gullet.scanArgument(t);if(null==r)return null;let n,s="";for(;"EOF"!==(n=this.fetch()).text;)s+=n.text,this.consume();return this.consume(),r.text=s,r}parseRegexGroup(t,r){const n=this.fetch();let s,o=n,a="";for(;"EOF"!==(s=this.fetch()).text&&t.test(a+s.text);)o=s,a+=o.text,this.consume();if(""===a)throw new e("Invalid "+r+": '"+n.text+"'",n);return n.range(o,a)}parseSizeGroup(t){let r,n=!1;if(this.gullet.consumeSpaces(),r=t||"{"===this.gullet.future().text?this.parseStringGroup("size",t):this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"),!r)return null;t||0!==r.text.length||(r.text="0pt",n=!0);const s=Qr.exec(r.text);if(!s)throw new e("Invalid size: '"+r.text+"'",r);const o={number:+(s[1]+s[2]),unit:s[3]};if(!Te(o))throw new e("Invalid unit: '"+o.unit+"'",r);return{type:"size",mode:this.mode,value:o,isBlank:n}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);const t=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),null==t)return null;let r=t.text.replace(/\\([#$%&~_^{}])/g,"$1");return r=t.text.replace(/{\u2044}/g,"/"),{type:"url",mode:this.mode,url:r}}parseArgumentGroup(e,t){const r=this.gullet.scanArgument(e);if(null==r)return null;const n=this.mode;t&&this.switchMode(t),this.gullet.beginGroup();const s=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();const o={type:"ordgroup",mode:this.mode,loc:r.loc,body:s};return t&&this.switchMode(n),o}parseGroup(e,t){const r=this.fetch(),n=r.text;let s;if("{"===n||"\\begingroup"===n||"\\toggle"===n){this.consume();const e="{"===n?"}":"\\begingroup"===n?"\\endgroup":"\\endtoggle";this.gullet.beginGroup();const t=this.parseExpression(!1,e),o=this.fetch();this.expect(e),this.gullet.endGroup(),s={type:"\\endtoggle"===o.text?"toggle":"ordgroup",mode:this.mode,loc:Ue.range(r,o),body:t,semisimple:"\\begingroup"===n||void 0}}else s=this.parseFunction(t,e)||this.parseSymbol(),null!=s||"\\"!==n[0]||Object.prototype.hasOwnProperty.call(Vr,n)||(s=this.formatUnsupportedCmd(n),this.consume());return s}formLigatures(e){let t=e.length-1;for(let r=0;r<t;++r){const n=e[r],s=n.text;"-"===s&&"-"===e[r+1].text&&(r+1<t&&"-"===e[r+2].text?(e.splice(r,3,{type:"textord",mode:"text",loc:Ue.range(n,e[r+2]),text:"---"}),t-=2):(e.splice(r,2,{type:"textord",mode:"text",loc:Ue.range(n,e[r+1]),text:"--"}),t-=1)),"'"!==s&&"`"!==s||e[r+1].text!==s||(e.splice(r,2,{type:"textord",mode:"text",loc:Ue.range(n,e[r+1]),text:s+s}),t-=1)}}parseSymbol(){const t=this.fetch();let r=t.text;if(/^\\verb[^a-zA-Z]/.test(r)){this.consume();let t=r.slice(5);const n="*"===t.charAt(0);if(n&&(t=t.slice(1)),t.length<2||t.charAt(0)!==t.slice(-1))throw new e("\\verb assertion failed --\n                    please report what input caused this bug");return t=t.slice(1,-1),{type:"verb",mode:"text",body:t,star:n}}if(Object.prototype.hasOwnProperty.call(Jr,r[0])&&"math"===this.mode&&!$[this.mode][r[0]]){if(this.settings.strict&&"math"===this.mode)throw new e(`Accented Unicode text character "${r[0]}" used in math mode`,t);r=Jr[r[0]]+r.slice(1)}const n="math"===this.mode?Pr.exec(r):null;let s;if(n&&(r=r.substring(0,n.index),"i"===r?r="ı":"j"===r&&(r="ȷ")),$[this.mode][r]){let e=$[this.mode][r].group;"bin"===e&&Kr.includes(this.prevAtomType)&&(e="open");const n=Ue.range(t);let o;if(Object.prototype.hasOwnProperty.call(z,e)){const t=e;o={type:"atom",mode:this.mode,family:t,loc:n,text:r},"rel"!==t&&"bin"!==t||"text"!==this.prevAtomType||en.test(n.lexer.input.slice(n.end))&&(o.needsSpacing=!0)}else{if(Zr[r]){this.consume();const e=this.fetch().text.charCodeAt(0),t=65025===e?"mathscr":"mathcal";return 65024!==e&&65025!==e||this.consume(),{type:"font",mode:"math",font:t,body:{type:"mathord",mode:"math",loc:n,text:Zr[r]}}}o={type:e,mode:this.mode,loc:n,text:r}}s=o}else{if(!(r.charCodeAt(0)>=128||Pr.exec(r)))return null;if(this.settings.strict&&"math"===this.mode)throw new e(`Unicode text character "${r[0]}" used in math mode`,t);s={type:"textord",mode:"text",loc:Ue.range(t),text:r}}if(this.consume(),n)for(let r=0;r<n[0].length;r++){const o=n[0][r];if(!Yr[o])throw new e(`Unknown accent ' ${o}'`,t);const a=Yr[o][this.mode]||Yr[o].text;if(!a)throw new e(`Accent ${o} unsupported in ${this.mode} mode`,t);s={type:"accent",mode:this.mode,loc:Ue.range(t),label:a,isStretchy:!1,base:s}}return s}}const rn=function(t,r){if(!("string"==typeof t||t instanceof String))throw new TypeError("Temml can only parse string typed expression");const n=new tn(t,r);delete n.gullet.macros.current["\\df@tag"];let s=n.parse();if(!(s.length>0&&s[0].type&&"array"===s[0].type&&s[0].addEqnNum)&&n.gullet.macros.get("\\df@tag")){if(!r.displayMode)throw new e("\\tag works only in display mode");n.gullet.feed("\\df@tag"),s=[{type:"tag",mode:"text",body:s,tag:n.parse()}]}return s},nn=[2,2,3,3];class sn{constructor(e){this.level=e.level,this.color=e.color,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontSize=e.fontSize||1,this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.maxSize=e.maxSize}extend(e){const t={level:this.level,color:this.color,font:this.font,fontFamily:this.fontFamily,fontSize:this.fontSize,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return new sn(t)}withLevel(e){return this.extend({level:e})}incrementLevel(){return this.extend({level:Math.min(this.level+1,3)})}inSubOrSup(){return this.extend({level:nn[this.level]})}withColor(e){return this.extend({color:e})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withFontSize(e){return this.extend({fontSize:e})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}getColor(){return this.color}}function on(e){const t={};let r=0;const n=document.getElementsByClassName("tml-eqn");for(let e of n)for(r+=1,e.setAttribute("id","tml-eqn-"+String(r));"mtable"!==e.tagName;){if(e.getElementsByClassName("tml-label").length>0){const n=e.attributes.id.value;t[n]=String(r);break}e=e.parentElement}const s=document.getElementsByClassName("tml-tageqn");for(const e of s){if(e.getElementsByClassName("tml-label").length>0){const r=e.getElementsByClassName("tml-tag");if(r.length>0){const n=e.attributes.id.value;t[n]=r[0].textContent}}}[...e.getElementsByClassName("tml-ref")].forEach((e=>{const r=e.getAttribute("href");let n=t[r.slice(1)];-1===e.className.indexOf("tml-eqref")?(n=n.replace(/^\(/,""),n=n.replace(/\)$/,"")):("("!==n.charAt(0)&&(n="("+n),")"!==n.slice(-1)&&(n+=")"));const s=document.createElementNS("http://www.w3.org/1998/Math/MathML","mtext");s.appendChild(document.createTextNode(n));const o=document.createElementNS("http://www.w3.org/1998/Math/MathML","math");o.appendChild(s),e.textContent="",e.appendChild(o)}))}const an=function(e,t,r){let n=r,s=0;const o=e.length;for(;n<t.length;){const r=t[n];if(s<=0&&t.slice(n,n+o)===e)return n;"\\"===r?n++:"{"===r?s++:"}"===r&&s--,n++}return-1},ln=/^\\(?:begin|(?:eq)?ref){/,cn=[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{equation*}",right:"\\end{equation*}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{align*}",right:"\\end{align*}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{alignat*}",right:"\\end{alignat*}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{gather*}",right:"\\end{gather*}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\ref{",right:"}",display:!1},{left:"\\eqref{",right:"}",display:!1},{left:"\\[",right:"\\]",display:!0}],dn={$:[{left:"$$",right:"$$",display:!0},{left:"$`",right:"`$",display:!1},{left:"$",right:"$",display:!1}],"(":[{left:"\\[",right:"\\]",display:!0},{left:"\\(",right:"\\)",display:!1}]},mn=[{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{equation*}",right:"\\end{equation*}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{align*}",right:"\\end{align*}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{alignat*}",right:"\\end{alignat*}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{gather*}",right:"\\end{gather*}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\ref{",right:"}",display:!1},{left:"\\eqref{",right:"}",display:!1}],pn=function(t,r){const n=function(e,t){let r;const n=[],s=new RegExp("("+t.map((e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;r=e.search(s),-1!==r;){r>0&&(n.push({type:"text",data:e.slice(0,r)}),e=e.slice(r));const s=t.findIndex((t=>e.startsWith(t.left)));if(r=an(t[s].right,e,t[s].left.length),-1===r)break;const o=e.slice(0,r+t[s].right.length),a=ln.test(o)?o:e.slice(t[s].left.length,r);n.push({type:"math",data:a,rawData:o,display:t[s].display}),e=e.slice(r+t[s].right.length)}return""!==e&&n.push({type:"text",data:e}),n}(t,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;const s=document.createDocumentFragment();for(let t=0;t<n.length;t++)if("text"===n[t].type)s.appendChild(document.createTextNode(n[t].data));else{const o=document.createElement("span");let a=n[t].data;r.displayMode=n[t].display;try{r.preProcess&&(a=r.preProcess(a)),temml.render(a,o,r)}catch(o){if(!(o instanceof e))throw o;r.errorCallback("Temml auto-render: Failed to parse `"+n[t].data+"` with ",o),s.appendChild(document.createTextNode(n[t].rawData));continue}s.appendChild(o)}return s},un=function(e,t){for(let r=0;r<e.childNodes.length;r++){const n=e.childNodes[r];if(3===n.nodeType){const s=pn(n.textContent,t);s&&(r+=s.childNodes.length-1,e.replaceChild(s,n))}else if(1===n.nodeType){const e=" "+n.className+" ";-1===t.ignoredTags.indexOf(n.nodeName.toLowerCase())&&t.ignoredClasses.every((t=>-1===e.indexOf(" "+t+" ")))&&un(n,t)}}};let hn=function(e,t,r={}){t.textContent="";const n="math"===t.tagName.toLowerCase();n&&(r.wrap="none");const s=gn(e,r);n||s.children.length>1?(t.textContent="",s.children.forEach((e=>{t.appendChild(e.toNode())}))):t.appendChild(s.toNode())};"undefined"!=typeof document&&"CSS1Compat"!==document.compatMode&&("undefined"!=typeof console&&console.warn("Warning: Temml doesn't work in quirks mode. Make sure your website has a suitable doctype."),hn=function(){throw new e("Temml doesn't work in quirks mode.")});const gn=function(t,r){const n=new a(r);try{const e=rn(t,n);return he(e,t,new sn({level:n.displayMode?Ve:_e,maxSize:n.maxSize}),n)}catch(r){return function(t,r,n){if(n.throwOnError||!(t instanceof e))throw t;const s=new y(["temml-error"],[new w(r+"\n\n"+t.toString())]);return s.style.color=n.errorColor,s.style.whiteSpace="pre-line",s}(r,t,n)}};return{version:"0.11.04",render:hn,renderToString:function(e,t){return gn(e,t).toMarkup()},renderMathInElement:function(e,t){if(!e)throw new Error("No element provided to render");const r={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=t[e]);r.fences?r.delimiters=(e=>{if("$"===e||"("===e)return dn[e];if("$+"===e||"(+"===e)return dn[e.slice(0,1)].concat(mn);return"ams"===e?mn:"all"===e?dn["("].concat(dn.$).concat(mn):cn})(r.fences):r.delimiters=r.delimiters||cn,r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},un(e,r),on(e)},postProcess:on,ParseError:e,definePreamble:function(e,t){const r=new a(t);if(r.macros={},!("string"==typeof e||e instanceof String))throw new TypeError("Temml can only parse string typed expression");const n=new tn(e,r,!0);delete n.gullet.macros.current["\\df@tag"];return n.parse()},__parse:function(e,t){const r=new a(t);return rn(e,r)},__renderToMathMLTree:gn,__defineSymbol:I,__defineMacro:Ye}}();
\ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
deleted file mode 100644 (file)
index 695b1be..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-  <meta charset="UTF-8">
-  <title>Alexander Goussas | Programming & Friends {title}</title>
-  <meta name="viewport" content="width=device-width,initial-scale=1">
-  <meta name"description" content="{title}">
-  <link rel="stylesheet" href="styles.css">
-  <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
-  <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
-</head>
-<body>
-  <header>
-    <nav>
-      <ul>
-        <li class="nav-item" style="background-color: yellow; color: black;">
-          <a href="/">home</a>
-        </li>
-        <li class="nav-item">
-          <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
-        </li>
-        <li class="nav-item" style="background-color: purple;">
-          <a href="https://github.com/aloussase" target="_blank">github</a>
-        </li>
-        <li class="nav-item" style="background-color: blue;">
-          <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
-        </li>
-      </ul>
-    </nav>
-  </header>
-  <img id="logo" src="./logo.png" />
-  <img id="hornet" src="./hornet.png" />
-  <div class="">
-    <h1>{title}</h1>
-    <div>
-      <span>Last updated: {date}</span>
-    </div>
-    {body}
-  </div>
-</body>
-</html>
diff --git a/zine.ziggy b/zine.ziggy
new file mode 100644 (file)
index 0000000..ea44b7a
--- /dev/null
@@ -0,0 +1,12 @@
+Site {
+    .title = "Alexander Goussas",
+    .host_url = "https://frustrated-functor.dev",
+    .content_dir_path = "content",
+    .layouts_dir_path = "layouts",
+    .assets_dir_path = "assets",
+    .static_assets = [
+        "Temml.woff2",
+        "hornet.png",
+        "logo.png"
+    ],
+}