on master help sign in
build: use foundation-design-system for all styling, markdown
commitf4d1c3c4452752e338f12333250d59716af3bc6b authorMatilde Park <matilde.park@urbit.org> dateWed 15 Jun 2022, 23:50 (4 years ago) parentabf1b49
39 files changed+710−4188
components/BasicPage.js+2−2 components/GrantProgramOverview.js+2−2 components/Markdown.js−285 components/content/Button.js−12 components/content/Callout.js−12 components/content/Tab.js−14 components/content/Tabs.js−29 components/gateway/Description.js+2−2 components/schema/Heading.markdoc.js−37 components/schema/footnoteItem.markdoc.js−22 components/schema/footnoteRef.markdoc.js−14 components/schema/image.markdoc.js−16 components/schema/link.markdoc.js−33 components/schema/superscript.markdoc.js−14 package-lock.json+654−1553 package.json+2−13 pages/[slug].js+2−2 pages/_app.js+3−3 pages/applications/[[...application]].js+2−2 pages/blog/[slug].js+3−3 pages/community/[[...slug]].js+3−3 pages/docs/[[...slug]].js+3−3 pages/events/[slug].js+3−3 pages/getting-started/[[...slug]].js+3−3 pages/grants/[slug].js+3−3 pages/grants/apprenticeships.js+2−2 pages/grants/bounties.js+2−2 pages/grants/proposals.js+2−2 pages/groups/[[...group]].js+2−2 pages/ids/[id].js+2−2 pages/media/[slug].js+3−3 pages/understanding-urbit/[[...slug]].js+3−3 pages/updates/[slug].js+3−3 pages/using/[[...slug]].js+3−3 patches/@markdoc+markdoc+0.1.2.patch−1409 styles/globals.css−223 styles/markdown.css−214 styles/prism.css−170 tailwind.config.js+1−65
components/BasicPage.js+2−2
@@ -7,7 +7,7 @@ import Header from "./Header";
77import Footer from "./Footer";
88import SingleColumn from "./SingleColumn";
99import Section from "./Section";
10−import Markdown from "./Markdown";
10+import Markdown from "foundation-design-system";
1111import classNames from "classnames";
1212import { TableOfContents } from "./TableOfContents";
1313
@@ -30,7 +30,7 @@ export default function BasicPage({ post, markdown, search, index = false }) {
3030 <Section narrow>
3131 <div className={classNames("flex", { sidebar: index })}>
3232 <div className={classNames("markdown", { "max-w-prose": index })}>
33− <Markdown content={JSON.parse(markdown)} />
33+ <Markdown.render content={JSON.parse(markdown)} />
3434 </div>
3535 {index && <TableOfContents />}
3636 </div>
components/GrantProgramOverview.js+2−2
@@ -10,7 +10,7 @@ import Footer from "./Footer";
1010import SingleColumn from "./SingleColumn";
1111import Section from "./Section";
1212import { DateTime } from "luxon";
13−import Markdown from "./Markdown";
13+import Markdown from "foundation-design-system";
1414
1515export default function GrantProgramOverview({
1616 post,
@@ -46,7 +46,7 @@ export default function GrantProgramOverview({
4646 </Link>
4747 </Section>
4848 <Section narrow short className="markdown">
49− <Markdown content={JSON.parse(markdown)} />
49+ <Markdown.render content={JSON.parse(markdown)} />
5050 </Section>
5151 </SingleColumn>
5252 <Footer />
components/Markdown.jsdeleted−285
@@ -1,285 +0,0 @@
1−import React from "react";
2−import Link from "next/link";
3−import Markdoc, { Ast, Tag } from "@markdoc/markdoc";
4−import { heading } from "./schema/Heading.markdoc";
5−import { footnoteRef } from "./schema/footnoteRef.markdoc";
6−import { footnoteItem } from "./schema/footnoteItem.markdoc";
7−import { link } from "./schema/link.markdoc";
8−import { image } from "./schema/image.markdoc";
9−import { sup } from "./schema/superscript.markdoc";
10−import Tabs from "./content/Tabs";
11−import Tab from "./content/Tab";
12−import Button from "./content/Button";
13−import Callout from "./content/Callout";
14−import Highlight, { defaultProps } from "prism-react-renderer";
15−import parse from "html-react-parser";
16−import Prism from "prism-react-renderer/prism";
17−(typeof global !== "undefined" ? global : window).Prism = Prism;
18−require("prismjs/components/prism-hoon");
19−
20−export function Fence({ children, language }) {
21− return (
22− <Highlight
23− {...defaultProps}
24− key={language}
25− language={language}
26− code={children}
27− theme={undefined}
28− >
29− {({ className, style, tokens, getLineProps, getTokenProps }) => (
30− <pre className={className} style={style}>
31− {tokens.slice(0, -1).map((line, i) => (
32− <div {...getLineProps({ line, key: i })}>
33− {line.map((token, key) => (
34− <span {...getTokenProps({ token, key })} />
35− ))}
36− </div>
37− ))}
38− </pre>
39− )}
40− </Highlight>
41− );
42−}
43−
44−const fence = {
45− render: "Fence",
46− attributes: {
47− language: {
48− type: String,
49− description:
50− "The programming language of the code block. Place it after the backticks.",
51− },
52− },
53−};
54−
55−const tab = {
56− render: "Tab",
57− attributes: {
58− label: {
59− type: String,
60− },
61− },
62−};
63−
64−const tabs = {
65− render: "Tabs",
66− attributes: {},
67− transform(node, config) {
68− const labels = node
69− .transformChildren(config)
70− .filter((child) => child && child.name === "Tab")
71− .map((tab) => (typeof tab === "object" ? tab.attributes.label : null));
72−
73− return new Tag(this.render, { labels }, node.transformChildren(config));
74− },
75−};
76−
77−const button = {
78− render: "Button",
79− attributes: {
80− label: {
81− type: String,
82− },
83− link: {
84− type: String,
85− },
86− color: {
87− type: String,
88− },
89− },
90−};
91−
92−const callout = {
93− render: "Callout",
94− attributes: {
95− title: {
96− type: String,
97− },
98− },
99−};
100−
101−const customFence = {
102− render: "CustomFence",
103− attributes: {},
104−};
105−
106−const html = {
107− render: "RenderHtml",
108− attributes: {
109− content: {
110− type: String,
111− },
112− },
113− transform(node) {
114− return node.attributes.content
115− ? new Tag("RenderHtml", { content: node.attributes.content }, [
116− node.inline,
117− ])
118− : null;
119− },
120−};
121−
122−const RenderHtml = ({ content }) => {
123− return parse(content);
124−};
125−
126−const superscript = ({ children }) => <sup>{children}</sup>;
127−
128−const CustomFence = ({ children }) => <pre>{children}</pre>;
129−
130−const NextLink = ({ href, target, children }) => {
131− return (
132− <Link href={href} passHref>
133− <a target={target}>{children}</a>
134− </Link>
135− );
136−};
137−
138−export function MarkdownParse({ post }) {
139− const tokeniser = new Markdoc.Tokenizer({ html: true, linkify: true });
140− const tokens = tokeniser.tokenize(post.content);
141− const ast = Markdoc.parse(tokens);
142− const finalAst = footnoteParse(ast);
143− return Markdoc.transform(finalAst, {
144− nodes: {
145− fence,
146− heading,
147− image,
148− link,
149− footnoteItem,
150− footnoteRef,
151− html,
152− sup,
153− },
154− tags: {
155− tabs,
156− tab,
157− button,
158− callout,
159− customFence,
160− RenderHtml,
161− superscript,
162− NextLink,
163− },
164− });
165−}
166−
167−export default function Markdown({ content }) {
168− return Markdoc.renderers.react(content, React, {
169− components: {
170− Fence,
171− Tabs,
172− Tab,
173− Button,
174− Callout,
175− CustomFence,
176− RenderHtml,
177− NextLink,
178− },
179− });
180−}
181−
182−const footnoteParse = (partialAst) => {
183− const endNotePattern = /\[\^(\d+)\]:\s/m;
184− const inlineFnPattern = /\[\^(\d+)\](?!:)/gm;
185−
186− function* getFootnoteItemNodes(nodes) {
187− let results = [];
188− let itemsProcessed = 0;
189− for (const n of nodes) {
190− itemsProcessed += 1;
191− if (n.type !== "softbreak") results.push(n);
192− if (n.type === "softbreak" || itemsProcessed === nodes.length) {
193− yield results;
194− results = [];
195− }
196− }
197− }
198−
199− function findFootnoteContainerNode(ast) {
200− const generator = ast.walk();
201− let container;
202− let match = false;
203− for (const node of generator) {
204− if (
205− node.attributes.content &&
206− endNotePattern.test(node.attributes.content)
207− ) {
208− match = true;
209− generator.return();
210− }
211− if (node.type === "inline") container = node;
212− }
213− return match ? container : undefined;
214− }
215−
216− function processFootnotes(ast) {
217− // Get a refrence to the node containing endNotes; if not present, early return
218− const fnContainerNode = findFootnoteContainerNode(ast);
219− if (!fnContainerNode) return;
220− // We have footnotes, so create a new list node which will contain the list of endNotes
221− const fnList = new Ast.Node("list", {
222− ordered: true,
223− class: "footnotes",
224− });
225− // Get the children nodes for each footnote item
226− const fnItems = getFootnoteItemNodes(fnContainerNode.children);
227− for (const fn of fnItems) {
228− const token = endNotePattern.exec(fn[0].attributes.content);
229− if (token) {
230− // Remove the markdown footnote syntax (e.g. [^1]) from the string
231− fn[0].attributes.content = fn[0].attributes.content.replace(
232− token[0],
233− ""
234− );
235− // Create a new footnote item and append to the fnList
236− const id = token[1];
237− const fnItem = new Ast.Node(
238− "footnoteItem",
239− {
240− id: `fn${id}`,
241− href: `#fnref${id}`,
242− },
243− fn
244− );
245− fnList.push(fnItem);
246− }
247− }
248− ast.children.pop(); // remove the last paragraph in the doc being replaced by the fnList
249− ast.push(fnList);
250− }
251−
252− function processFootnoteRefs(ast) {
253− let parent = ast;
254− for (const node of ast.walk()) {
255− if (node.attributes.content) {
256− // Check if there's a footnote ref token
257− const token = inlineFnPattern.exec(node.attributes.content);
258− if (token) {
259− // Break the string where the foonote ref is, assign first part of string to the current node content
260− const [prevText, nextText] = node.attributes.content.split(token[0]);
261− node.attributes.content = prevText;
262−
263− // Create a footnote node and insert it in the tree
264− const id = token[1];
265− const fn = new Ast.Node("footnoteRef", {
266− id: `fnref${id}`,
267− href: `#fn${id}`,
268− label: `${id}`,
269− });
270− parent.push(fn);
271−
272− // Create a text node for the text which follows after the footnote and insert it in the tree
273− const next = new Ast.Node("text", { content: nextText });
274− parent.push(next);
275− }
276− }
277− // If the node is of inline type, update parent
278− if (node.type == "inline") parent = node;
279− }
280− }
281−
282− processFootnoteRefs(partialAst);
283− processFootnotes(partialAst);
284− return partialAst;
285−};
components/content/Button.jsdeleted−12
@@ -1,12 +0,0 @@
1−import React from "react";
2−import Link from "next/link";
3−
4−const Button = ({ label, link, color }) => {
5− return (
6− <Link passHref href={link}>
7− <a className={"button-lg max-w-fit " + color}>{label}</a>
8− </Link>
9− );
10−};
11−
12−export default Button;
components/content/Callout.jsdeleted−12
@@ -1,12 +0,0 @@
1−import React from "react";
2−
3−const Callout = ({ title, children }) => {
4− return (
5− <div className="bg-wall-100 rounded-xl display p-7 flex flex-col space-y-4">
6− {title && <h2>{title}</h2>}
7− {children}
8− </div>
9− );
10−};
11−
12−export default Callout;
components/content/Tab.jsdeleted−14
@@ -1,14 +0,0 @@
1−import React from "react";
2−import { TabContext } from "./Tabs";
3−
4−const Tab = ({ label, children }) => {
5− const currentTab = React.useContext(TabContext);
6−
7− if (label !== currentTab) {
8− return null;
9− }
10−
11− return children;
12−};
13−
14−export default Tab;
components/content/Tabs.jsdeleted−29
@@ -1,29 +0,0 @@
1−import React from "react";
2−
3−export const TabContext = React.createContext();
4−
5−const Tabs = ({ labels, children }) => {
6− const [currentTab, setCurrentTab] = React.useState(labels[0]);
7−
8− return (
9− <TabContext.Provider value={currentTab}>
10− <ul className="flex items-center display cursor-pointer space-x-4">
11− {labels.map((label) => (
12− <li
13− className={
14− "block bg-wall-100 tab rounded-xl " +
15− (currentTab === label ? "font-semibold" : "")
16− }
17− key={label}
18− onClick={() => setCurrentTab(label)}
19− >
20− {label}
21− </li>
22− ))}
23− </ul>
24− {children}
25− </TabContext.Provider>
26− );
27−};
28−
29−export default Tabs;
components/gateway/Description.js+2−2
@@ -1,4 +1,4 @@
1−import Markdown from "../Markdown";
1+import Markdown from "foundation-design-system";
22
33const Description = ({ description, fallback, markdown }) => {
44 return (
@@ -7,7 +7,7 @@ const Description = ({ description, fallback, markdown }) => {
77 <p className="font-bold text-wall-400">Description</p>
88 {markdown ? (
99 <div className="markdown">
10− <Markdown content={JSON.parse(markdown)} />
10+ <Markdown.render content={JSON.parse(markdown)} />
1111 </div>
1212 ) : (
1313 <p>{description}</p>
components/schema/Heading.markdoc.jsdeleted−37
@@ -1,37 +0,0 @@
1−import { Tag } from "@markdoc/markdoc";
2−
3−function generateID(children, attributes) {
4− if (attributes.id && typeof attributes.id === "string") {
5− return attributes.id;
6− }
7−
8− const bottomChildren = children
9− .map((child) => (child.children ? child.children : child))
10− .flat();
11− return bottomChildren
12− .filter((child) => typeof child === "string")
13− .join(" ")
14− .replace(/[=?!><:;,+#^|$&~"*@\.%/]/g, "")
15− .replace(/\s+/g, "-")
16− .toLowerCase();
17−}
18−
19−export const heading = {
20− children: ["inline"],
21− attributes: {
22− id: { type: String },
23− level: { type: Number, required: true, default: 1 },
24− },
25− transform(node, config) {
26− const attributes = node.transformAttributes(config);
27− const children = node.transformChildren(config);
28−
29− const id = generateID(children, attributes);
30−
31− return new Tag(
32− `h${node.attributes["level"]}`,
33− { ...attributes, id },
34− children
35− );
36− },
37−};
components/schema/footnoteItem.markdoc.jsdeleted−22
@@ -1,22 +0,0 @@
1−import { Ast, Config, Node, Tag } from "@markdoc/markdoc";
2−
3−export const footnoteItem = {
4− attributes: {
5− id: { type: String, render: true, required: true },
6− href: { type: String, render: false, required: true },
7− },
8− transform(node, config) {
9− node.attributes.class = `footnote-item`;
10− const anchor = new Ast.Node(
11− "link",
12− { class: "footnote-anchor", href: node.attributes.href },
13− [new Ast.Node("text", { content: "↩" })]
14− );
15− node.push(anchor);
16− return new Tag(
17− "li",
18− node.transformAttributes(config),
19− node.transformChildren(config)
20− );
21− },
22−};
components/schema/footnoteRef.markdoc.jsdeleted−14
@@ -1,14 +0,0 @@
1−import { Config, Node, Tag } from "@markdoc/markdoc";
2−
3−export const footnoteRef = {
4− attributes: {
5− id: { type: String, render: true, required: true },
6− href: { type: String, render: true, required: true },
7− label: { type: String, render: false, required: true },
8− },
9− transform(node, config) {
10− const attributes = node.transformAttributes(config);
11− const link = new Tag("a", attributes, [`${node.attributes.label}`]);
12− return new Tag(`sup`, { class: "footnote-ref" }, [link]);
13− },
14−};
components/schema/image.markdoc.jsdeleted−16
@@ -1,16 +0,0 @@
1−import { Tag } from "@markdoc/markdoc";
2−
3−export const image = {
4− render: "span",
5− attributes: {
6− src: { type: String, required: true },
7− alt: { type: String },
8− title: { type: String },
9− },
10− transform(node, config) {
11− const attributes = node.transformAttributes(config);
12− const children = node.transformChildren(config);
13− const imageTag = new Tag("img", attributes, children);
14− return new Tag("span", { id: "figure" }, [imageTag]);
15− },
16−};
components/schema/link.markdoc.jsdeleted−33
@@ -1,33 +0,0 @@
1−import { Tag } from "@markdoc/markdoc";
2−
3−function checkIfExternal(attributes) {
4− const href = attributes.href;
5− if (
6− href.includes("https://urbit.org") ||
7− href.startsWith("/") ||
8− href.startsWith("#") ||
9− href.startsWith("?")
10− ) {
11− return "_self";
12− } else {
13− return "_blank";
14− }
15−}
16−
17−export const link = {
18− render: "NextLink",
19− children: ["strong", "em", "s", "code", "text", "tag"],
20− attributes: {
21− href: { type: String, required: true },
22− title: { type: String },
23− target: { type: String },
24− },
25− transform(node, config) {
26− const attributes = node.transformAttributes(config);
27− const children = node.transformChildren(config);
28−
29− const target = checkIfExternal(attributes);
30−
31− return new Tag("NextLink", { ...attributes, target }, children);
32− },
33−};
components/schema/superscript.markdoc.jsdeleted−14
@@ -1,14 +0,0 @@
1−import { Tag } from "@markdoc/markdoc";
2−
3−export const sup = {
4− render: "superscript",
5− children: ["strong", "em", "s", "code", "text", "tag"],
6− attributes: {},
7− transform(node, config) {
8− return new Tag(
9− `sup`,
10− node.transformAttributes(config),
11− node.transformChildren(config)
12− );
13− },
14−};
package-lock.json+654−1553
@@ -7,10 +7,8 @@
77 "": {
88 "name": "urbit.org-2",
99 "version": "0.1.0",
10− "hasInstallScript": true,
1110 "dependencies": {
1211 "@iarna/toml": "^2.2.5",
13− "@markdoc/markdoc": "^0.1.2",
1412 "@socialgouv/matomo-next": "^1.3.0",
1513 "@tailwindcss/aspect-ratio": "^0.4.0",
1614 "@tlon/sigil-js": "^1.4.5",
@@ -20,39 +18,47 @@
2018 "deepmerge": "^4.2.2",
2119 "downshift": "^6.1.5",
2220 "feed": "^4.2.2",
23− "fuzzy-search": "^3.2.1",
21+ "foundation-design-system": "github:urbit/foundation-design-system",
2422 "gray-matter": "^4.0.3",
25− "html-entities": "^2.3.2",
26− "html-react-parser": "^1.4.14",
2723 "lodash.debounce": "^4.0.8",
2824 "lodash.omit": "^4.5.0",
2925 "luxon": "^2.0.2",
3026 "next": "^12.1.5",
31− "patch-package": "^6.4.7",
3227 "path-browserify": "^1.0.1",
33− "prism-react-renderer": "^1.3.3",
34− "prismjs": "^1.25.0",
3528 "process": "^0.11.10",
3629 "react": "^17.0.0",
3730 "react-dom": "^17.0.0",
3831 "react-hotkeys": "^2.0.0",
3932 "react-swipeable": "^6.2.1",
4033 "react-use-localstorage": "^3.5.3",
41− "rehype-raw": "^6.1.0",
42− "rehype-stringify": "^9.0.2",
4334 "stream-browserify": "^3.0.0",
44− "unified": "^9.2.1",
4535 "urbit-ob": "^5.0.1"
4636 },
4737 "devDependencies": {
4838 "autoprefixer": "^10.4.4",
49− "next-transpile-modules": "^9.0.0",
5039 "postcss": "^8.4.12",
5140 "prettier": "^2.3.1",
5241 "pretty-quick": "^3.1.0",
5342 "tailwindcss": "^3.0.24"
5443 }
5544 },
45+ "node_modules/@babel/polyfill": {
46+ "version": "7.12.1",
47+ "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
48+ "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
49+ "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.",
50+ "dependencies": {
51+ "core-js": "^2.6.5",
52+ "regenerator-runtime": "^0.13.4"
53+ }
54+ },
55+ "node_modules/@babel/polyfill/node_modules/core-js": {
56+ "version": "2.6.12",
57+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
58+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
59+ "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
60+ "hasInstallScript": true
61+ },
5662 "node_modules/@babel/runtime": {
5763 "version": "7.18.3",
5864 "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz",
@@ -323,46 +329,18 @@
323329 "react": "^16 || ^17"
324330 }
325331 },
326− "node_modules/@types/hast": {
327− "version": "2.3.4",
328− "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
329− "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
330− "dependencies": {
331− "@types/unist": "*"
332− }
333− },
334332 "node_modules/@types/minimatch": {
335333 "version": "3.0.5",
336334 "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
337335 "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
338336 "dev": true
339337 },
340− "node_modules/@types/parse5": {
341− "version": "6.0.3",
342− "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
343− "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
344− },
345− "node_modules/@types/unist": {
346− "version": "2.0.6",
347− "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
348− "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
349− },
350338 "node_modules/@yarnpkg/lockfile": {
351339 "version": "1.1.0",
352340 "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
353341 "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="
354342 },
355− "node_modules/acorn-node": {
356− "version": "1.8.2",
357− "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
358− "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
359− "dependencies": {
360− "acorn": "^7.0.0",
361− "acorn-walk": "^7.0.0",
362− "xtend": "^4.0.2"
363− }
364− },
365− "node_modules/acorn-node/node_modules/acorn": {
343+ "node_modules/acorn": {
366344 "version": "7.4.1",
367345 "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
368346 "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
@@ -373,6 +351,16 @@
373351 "node": ">=0.4.0"
374352 }
375353 },
354+ "node_modules/acorn-node": {
355+ "version": "1.8.2",
356+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
357+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
358+ "dependencies": {
359+ "acorn": "^7.0.0",
360+ "acorn-walk": "^7.0.0",
361+ "xtend": "^4.0.2"
362+ }
363+ },
376364 "node_modules/acorn-walk": {
377365 "version": "7.2.0",
378366 "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
@@ -382,18 +370,14 @@
382370 }
383371 },
384372 "node_modules/ansi-styles": {
385− "version": "4.3.0",
386− "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
387− "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
388− "dev": true,
373+ "version": "3.2.1",
374+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
375+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
389376 "dependencies": {
390− "color-convert": "^2.0.1"
377+ "color-convert": "^1.9.0"
391378 },
392379 "engines": {
393− "node": ">=8"
394− },
395− "funding": {
396− "url": "https://github.com/chalk/ansi-styles?sponsor=1"
380+ "node": ">=4"
397381 }
398382 },
399383 "node_modules/anymatch": {
@@ -409,9 +393,9 @@
409393 }
410394 },
411395 "node_modules/arg": {
412− "version": "5.0.1",
413− "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
414− "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA=="
396+ "version": "5.0.2",
397+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
398+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
415399 },
416400 "node_modules/argparse": {
417401 "version": "1.0.10",
@@ -452,7 +436,6 @@
452436 "version": "10.4.7",
453437 "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz",
454438 "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==",
455− "dev": true,
456439 "funding": [
457440 {
458441 "type": "opencollective",
@@ -489,15 +472,6 @@
489472 "follow-redirects": "^1.14.8"
490473 }
491474 },
492− "node_modules/bail": {
493− "version": "1.0.5",
494− "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
495− "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
496− "funding": {
497− "type": "github",
498− "url": "https://github.com/sponsors/wooorm"
499− }
500− },
501475 "node_modules/balanced-match": {
502476 "version": "1.0.2",
503477 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -556,10 +530,9 @@
556530 }
557531 },
558532 "node_modules/browserslist": {
559− "version": "4.20.3",
560− "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
561− "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
562− "dev": true,
533+ "version": "4.20.4",
534+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz",
535+ "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==",
563536 "funding": [
564537 {
565538 "type": "opencollective",
@@ -571,10 +544,10 @@
571544 }
572545 ],
573546 "dependencies": {
574− "caniuse-lite": "^1.0.30001332",
575− "electron-to-chromium": "^1.4.118",
547+ "caniuse-lite": "^1.0.30001349",
548+ "electron-to-chromium": "^1.4.147",
576549 "escalade": "^3.1.1",
577− "node-releases": "^2.0.3",
550+ "node-releases": "^2.0.5",
578551 "picocolors": "^1.0.0"
579552 },
580553 "bin": {
@@ -616,9 +589,9 @@
616589 }
617590 },
618591 "node_modules/caniuse-lite": {
619− "version": "1.0.30001344",
620− "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz",
621− "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==",
592+ "version": "1.0.30001355",
593+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001355.tgz",
594+ "integrity": "sha512-Sd6pjJHF27LzCB7pT7qs+kuX2ndurzCzkpJl6Qct7LPSZ9jn0bkOA8mdgMgmqnQAWLVOOGjLpc+66V57eLtb1g==",
622595 "funding": [
623596 {
624597 "type": "opencollective",
@@ -630,44 +603,17 @@
630603 }
631604 ]
632605 },
633− "node_modules/ccount": {
634− "version": "2.0.1",
635− "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
636− "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
637− "funding": {
638− "type": "github",
639− "url": "https://github.com/sponsors/wooorm"
640− }
641− },
642606 "node_modules/chalk": {
643− "version": "3.0.0",
644− "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
645− "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
646− "dev": true,
607+ "version": "2.4.2",
608+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
609+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
647610 "dependencies": {
648− "ansi-styles": "^4.1.0",
649− "supports-color": "^7.1.0"
611+ "ansi-styles": "^3.2.1",
612+ "escape-string-regexp": "^1.0.5",
613+ "supports-color": "^5.3.0"
650614 },
651615 "engines": {
652− "node": ">=8"
653− }
654− },
655− "node_modules/character-entities-html4": {
656− "version": "2.1.0",
657− "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
658− "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
659− "funding": {
660− "type": "github",
661− "url": "https://github.com/sponsors/wooorm"
662− }
663− },
664− "node_modules/character-entities-legacy": {
665− "version": "3.0.0",
666− "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
667− "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
668− "funding": {
669− "type": "github",
670− "url": "https://github.com/sponsors/wooorm"
616+ "node": ">=4"
671617 }
672618 },
673619 "node_modules/chokidar": {
@@ -718,30 +664,17 @@
718664 "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
719665 },
720666 "node_modules/color-convert": {
721− "version": "2.0.1",
722− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
723− "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
724− "dev": true,
667+ "version": "1.9.3",
668+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
669+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
725670 "dependencies": {
726− "color-name": "~1.1.4"
727− },
728− "engines": {
729− "node": ">=7.0.0"
671+ "color-name": "1.1.3"
730672 }
731673 },
732674 "node_modules/color-name": {
733− "version": "1.1.4",
734− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
735− "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
736− },
737− "node_modules/comma-separated-tokens": {
738− "version": "2.0.2",
739− "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
740− "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
741− "funding": {
742− "type": "github",
743− "url": "https://github.com/sponsors/wooorm"
744− }
675+ "version": "1.1.3",
676+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
677+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
745678 },
746679 "node_modules/compute-scroll-into-view": {
747680 "version": "1.0.17",
@@ -753,18 +686,29 @@
753686 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
754687 "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
755688 },
689+ "node_modules/core-js": {
690+ "version": "3.23.1",
691+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.1.tgz",
692+ "integrity": "sha512-wfMYHWi1WQjpgZNC9kAlN4ut04TM9fUTdi7CqIoTVM7yaiOUQTklOzfb+oWH3r9edQcT3F887swuVmxrV+CC8w==",
693+ "hasInstallScript": true,
694+ "funding": {
695+ "type": "opencollective",
696+ "url": "https://opencollective.com/core-js"
697+ }
698+ },
756699 "node_modules/cross-spawn": {
757− "version": "7.0.3",
758− "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
759− "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
760− "dev": true,
700+ "version": "6.0.5",
701+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
702+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
761703 "dependencies": {
762− "path-key": "^3.1.0",
763− "shebang-command": "^2.0.0",
764− "which": "^2.0.1"
704+ "nice-try": "^1.0.4",
705+ "path-key": "^2.0.1",
706+ "semver": "^5.5.0",
707+ "shebang-command": "^1.2.0",
708+ "which": "^1.2.9"
765709 },
766710 "engines": {
767− "node": ">= 8"
711+ "node": ">=4.8"
768712 }
769713 },
770714 "node_modules/cssesc": {
@@ -790,11 +734,6 @@
790734 "node": ">=0.10.0"
791735 }
792736 },
793− "node_modules/deep-rename-keys/node_modules/is-buffer": {
794− "version": "1.1.6",
795− "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
796− "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
797− },
798737 "node_modules/deep-rename-keys/node_modules/kind-of": {
799738 "version": "3.2.2",
800739 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -920,10 +859,9 @@
920859 }
921860 },
922861 "node_modules/electron-to-chromium": {
923− "version": "1.4.143",
924− "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.143.tgz",
925− "integrity": "sha512-2hIgvu0+pDfXIqmVmV5X6iwMjQ2KxDsWKwM+oI1fABEOy/Dqmll0QJRmIQ3rm+XaoUa/qKrmy5h7LSTFQ6Ldzg==",
926− "dev": true
862+ "version": "1.4.158",
863+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.158.tgz",
864+ "integrity": "sha512-gppO3/+Y6sP432HtvwvuU8S+YYYLH4PmAYvQwqUtt9HDOmEsBwQfLnK9T8+1NIKwAS1BEygIjTaATC4H5EzvxQ=="
927865 },
928866 "node_modules/end-of-stream": {
929867 "version": "1.4.4",
@@ -934,19 +872,6 @@
934872 "once": "^1.4.0"
935873 }
936874 },
937− "node_modules/enhanced-resolve": {
938− "version": "5.9.3",
939− "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
940− "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
941− "dev": true,
942− "dependencies": {
943− "graceful-fs": "^4.2.4",
944− "tapable": "^2.2.0"
945− },
946− "engines": {
947− "node": ">=10.13.0"
948− }
949− },
950875 "node_modules/entities": {
951876 "version": "3.0.1",
952877 "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
@@ -962,7 +887,6 @@
962887 "version": "3.1.1",
963888 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
964889 "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
965− "dev": true,
966890 "engines": {
967891 "node": ">=6"
968892 }
@@ -1015,10 +939,64 @@
1015939 "url": "https://github.com/sindresorhus/execa?sponsor=1"
1016940 }
1017941 },
1018− "node_modules/extend": {
1019− "version": "3.0.2",
1020− "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1021− "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
942+ "node_modules/execa/node_modules/cross-spawn": {
943+ "version": "7.0.3",
944+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
945+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
946+ "dev": true,
947+ "dependencies": {
948+ "path-key": "^3.1.0",
949+ "shebang-command": "^2.0.0",
950+ "which": "^2.0.1"
951+ },
952+ "engines": {
953+ "node": ">= 8"
954+ }
955+ },
956+ "node_modules/execa/node_modules/path-key": {
957+ "version": "3.1.1",
958+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
959+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
960+ "dev": true,
961+ "engines": {
962+ "node": ">=8"
963+ }
964+ },
965+ "node_modules/execa/node_modules/shebang-command": {
966+ "version": "2.0.0",
967+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
968+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
969+ "dev": true,
970+ "dependencies": {
971+ "shebang-regex": "^3.0.0"
972+ },
973+ "engines": {
974+ "node": ">=8"
975+ }
976+ },
977+ "node_modules/execa/node_modules/shebang-regex": {
978+ "version": "3.0.0",
979+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
980+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
981+ "dev": true,
982+ "engines": {
983+ "node": ">=8"
984+ }
985+ },
986+ "node_modules/execa/node_modules/which": {
987+ "version": "2.0.2",
988+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
989+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
990+ "dev": true,
991+ "dependencies": {
992+ "isexe": "^2.0.0"
993+ },
994+ "bin": {
995+ "node-which": "bin/node-which"
996+ },
997+ "engines": {
998+ "node": ">= 8"
999+ }
10221000 },
10231001 "node_modules/extend-shallow": {
10241002 "version": "2.0.1",
@@ -1127,11 +1105,32 @@
11271105 }
11281106 }
11291107 },
1108+ "node_modules/foundation-design-system": {
1109+ "version": "0.0.0",
1110+ "resolved": "git+ssh://git@github.com/urbit/foundation-design-system.git#ba69c83265b7cca109217fa6a2b2539a57087f4a",
1111+ "license": "MIT",
1112+ "dependencies": {
1113+ "@babel/polyfill": "^7.12.1",
1114+ "@markdoc/markdoc": "^0.1.2",
1115+ "core-js": "^3.23.1",
1116+ "html-react-parser": "^1.4.14",
1117+ "markdoc": "^0.1.3",
1118+ "patch-package": "^6.4.7",
1119+ "prism-react-renderer": "^1.3.3",
1120+ "prismjs": "^1.28.0"
1121+ },
1122+ "peerDependencies": {
1123+ "@tailwindcss/aspect-ratio": "^0.4.0",
1124+ "autoprefixer": "^10.4.7",
1125+ "next": "^12.1.6",
1126+ "postcss": "^8.4.14",
1127+ "tailwindcss": "^3.1.3"
1128+ }
1129+ },
11301130 "node_modules/fraction.js": {
11311131 "version": "4.2.0",
11321132 "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
11331133 "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
1134− "dev": true,
11351134 "engines": {
11361135 "node": "*"
11371136 },
@@ -1176,11 +1175,6 @@
11761175 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
11771176 "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
11781177 },
1179− "node_modules/fuzzy-search": {
1180− "version": "3.2.1",
1181− "resolved": "https://registry.npmjs.org/fuzzy-search/-/fuzzy-search-3.2.1.tgz",
1182− "integrity": "sha512-vAcPiyomt1ioKAsAL2uxSABHJ4Ju/e4UeDM+g1OlR0vV4YhLGMNsdLNvZTpEDY4JCSt0E4hASCNM5t2ETtsbyg=="
1183− },
11841178 "node_modules/get-stream": {
11851179 "version": "5.2.0",
11861180 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
@@ -1265,12 +1259,11 @@
12651259 }
12661260 },
12671261 "node_modules/has-flag": {
1268− "version": "4.0.0",
1269− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1270− "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1271− "dev": true,
1262+ "version": "3.0.0",
1263+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1264+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
12721265 "engines": {
1273− "node": ">=8"
1266+ "node": ">=4"
12741267 }
12751268 },
12761269 "node_modules/has-value": {
@@ -1305,201 +1298,40 @@
13051298 "node": ">=0.10.0"
13061299 }
13071300 },
1308− "node_modules/hast-to-hyperscript": {
1309− "version": "10.0.1",
1310− "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz",
1311− "integrity": "sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==",
1301+ "node_modules/html-dom-parser": {
1302+ "version": "1.2.0",
1303+ "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz",
1304+ "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==",
13121305 "dependencies": {
1313− "@types/unist": "^2.0.0",
1314− "comma-separated-tokens": "^2.0.0",
1315− "property-information": "^6.0.0",
1316− "space-separated-tokens": "^2.0.0",
1317− "style-to-object": "^0.3.0",
1318− "unist-util-is": "^5.0.0",
1319− "web-namespaces": "^2.0.0"
1320− },
1321− "funding": {
1322− "type": "opencollective",
1323− "url": "https://opencollective.com/unified"
1306+ "domhandler": "4.3.1",
1307+ "htmlparser2": "7.2.0"
13241308 }
13251309 },
1326− "node_modules/hast-util-from-parse5": {
1327− "version": "7.1.0",
1328− "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz",
1329− "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==",
1310+ "node_modules/html-react-parser": {
1311+ "version": "1.4.14",
1312+ "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.14.tgz",
1313+ "integrity": "sha512-pxhNWGie8Y+DGDpSh8cTa0k3g8PsDcwlfolA+XxYo1AGDeB6e2rdlyv4ptU9bOTiZ2i3fID+6kyqs86MN0FYZQ==",
13301314 "dependencies": {
1331− "@types/hast": "^2.0.0",
1332− "@types/parse5": "^6.0.0",
1333− "@types/unist": "^2.0.0",
1334− "hastscript": "^7.0.0",
1335− "property-information": "^6.0.0",
1336− "vfile": "^5.0.0",
1337− "vfile-location": "^4.0.0",
1338− "web-namespaces": "^2.0.0"
1315+ "domhandler": "4.3.1",
1316+ "html-dom-parser": "1.2.0",
1317+ "react-property": "2.0.0",
1318+ "style-to-js": "1.1.1"
13391319 },
1340− "funding": {
1341− "type": "opencollective",
1342− "url": "https://opencollective.com/unified"
1320+ "peerDependencies": {
1321+ "react": "0.14 || 15 || 16 || 17 || 18"
13431322 }
13441323 },
1345− "node_modules/hast-util-is-element": {
1346− "version": "2.1.2",
1347− "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
1348− "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
1349− "dependencies": {
1350− "@types/hast": "^2.0.0",
1351− "@types/unist": "^2.0.0"
1352− },
1353− "funding": {
1354− "type": "opencollective",
1355− "url": "https://opencollective.com/unified"
1356− }
1357− },
1358− "node_modules/hast-util-parse-selector": {
1359− "version": "3.1.0",
1360− "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
1361− "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
1362− "dependencies": {
1363− "@types/hast": "^2.0.0"
1364− },
1365− "funding": {
1366− "type": "opencollective",
1367− "url": "https://opencollective.com/unified"
1368− }
1369− },
1370− "node_modules/hast-util-raw": {
1371− "version": "7.2.1",
1372− "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.1.tgz",
1373− "integrity": "sha512-wgtppqXVdXzkDXDFclLLdAyVUJSKMYYi6LWIAbA8oFqEdwksYIcPGM3RkKV1Dfn5GElvxhaOCs0jmCOMayxd3A==",
1374− "dependencies": {
1375− "@types/hast": "^2.0.0",
1376− "@types/parse5": "^6.0.0",
1377− "hast-util-from-parse5": "^7.0.0",
1378− "hast-util-to-parse5": "^7.0.0",
1379− "html-void-elements": "^2.0.0",
1380− "parse5": "^6.0.0",
1381− "unist-util-position": "^4.0.0",
1382− "unist-util-visit": "^4.0.0",
1383− "vfile": "^5.0.0",
1384− "web-namespaces": "^2.0.0",
1385− "zwitch": "^2.0.0"
1386− },
1387− "funding": {
1388− "type": "opencollective",
1389− "url": "https://opencollective.com/unified"
1390− }
1391− },
1392− "node_modules/hast-util-to-html": {
1393− "version": "8.0.3",
1394− "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
1395− "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
1396− "dependencies": {
1397− "@types/hast": "^2.0.0",
1398− "ccount": "^2.0.0",
1399− "comma-separated-tokens": "^2.0.0",
1400− "hast-util-is-element": "^2.0.0",
1401− "hast-util-whitespace": "^2.0.0",
1402− "html-void-elements": "^2.0.0",
1403− "property-information": "^6.0.0",
1404− "space-separated-tokens": "^2.0.0",
1405− "stringify-entities": "^4.0.2",
1406− "unist-util-is": "^5.0.0"
1407− },
1408− "funding": {
1409− "type": "opencollective",
1410− "url": "https://opencollective.com/unified"
1411− }
1412− },
1413− "node_modules/hast-util-to-parse5": {
1414− "version": "7.0.0",
1415− "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.0.0.tgz",
1416− "integrity": "sha512-YHiS6aTaZ3N0Q3nxaY/Tj98D6kM8QX5Q8xqgg8G45zR7PvWnPGPP0vcKCgb/moIydEJ/QWczVrX0JODCVeoV7A==",
1417− "dependencies": {
1418− "@types/hast": "^2.0.0",
1419− "@types/parse5": "^6.0.0",
1420− "hast-to-hyperscript": "^10.0.0",
1421− "property-information": "^6.0.0",
1422− "web-namespaces": "^2.0.0",
1423− "zwitch": "^2.0.0"
1424− },
1425− "funding": {
1426− "type": "opencollective",
1427− "url": "https://opencollective.com/unified"
1428− }
1429− },
1430− "node_modules/hast-util-whitespace": {
1431− "version": "2.0.0",
1432− "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
1433− "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==",
1434− "funding": {
1435− "type": "opencollective",
1436− "url": "https://opencollective.com/unified"
1437− }
1438− },
1439− "node_modules/hastscript": {
1440− "version": "7.0.2",
1441− "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz",
1442− "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==",
1443− "dependencies": {
1444− "@types/hast": "^2.0.0",
1445− "comma-separated-tokens": "^2.0.0",
1446− "hast-util-parse-selector": "^3.0.0",
1447− "property-information": "^6.0.0",
1448− "space-separated-tokens": "^2.0.0"
1449− },
1450− "funding": {
1451− "type": "opencollective",
1452− "url": "https://opencollective.com/unified"
1453− }
1454− },
1455− "node_modules/html-dom-parser": {
1456− "version": "1.2.0",
1457− "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz",
1458− "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==",
1459− "dependencies": {
1460− "domhandler": "4.3.1",
1461− "htmlparser2": "7.2.0"
1462− }
1463− },
1464− "node_modules/html-entities": {
1465− "version": "2.3.3",
1466− "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
1467− "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
1468− },
1469− "node_modules/html-react-parser": {
1470− "version": "1.4.14",
1471− "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.14.tgz",
1472− "integrity": "sha512-pxhNWGie8Y+DGDpSh8cTa0k3g8PsDcwlfolA+XxYo1AGDeB6e2rdlyv4ptU9bOTiZ2i3fID+6kyqs86MN0FYZQ==",
1473− "dependencies": {
1474− "domhandler": "4.3.1",
1475− "html-dom-parser": "1.2.0",
1476− "react-property": "2.0.0",
1477− "style-to-js": "1.1.1"
1478− },
1479− "peerDependencies": {
1480− "react": "0.14 || 15 || 16 || 17 || 18"
1481− }
1482− },
1483− "node_modules/html-void-elements": {
1484− "version": "2.0.1",
1485− "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
1486− "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
1487− "funding": {
1488− "type": "github",
1489− "url": "https://github.com/sponsors/wooorm"
1490− }
1491− },
1492− "node_modules/htmlparser2": {
1493− "version": "7.2.0",
1494− "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
1495− "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
1496− "funding": [
1497− "https://github.com/fb55/htmlparser2?sponsor=1",
1498− {
1499− "type": "github",
1500− "url": "https://github.com/sponsors/fb55"
1501− }
1502− ],
1324+ "node_modules/htmlparser2": {
1325+ "version": "7.2.0",
1326+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
1327+ "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
1328+ "funding": [
1329+ "https://github.com/fb55/htmlparser2?sponsor=1",
1330+ {
1331+ "type": "github",
1332+ "url": "https://github.com/sponsors/fb55"
1333+ }
1334+ ],
15031335 "dependencies": {
15041336 "domelementtype": "^2.0.1",
15051337 "domhandler": "^4.2.2",
@@ -1583,26 +1415,9 @@
15831415 }
15841416 },
15851417 "node_modules/is-buffer": {
1586− "version": "2.0.5",
1587− "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
1588− "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
1589− "funding": [
1590− {
1591− "type": "github",
1592− "url": "https://github.com/sponsors/feross"
1593− },
1594− {
1595− "type": "patreon",
1596− "url": "https://www.patreon.com/feross"
1597− },
1598− {
1599− "type": "consulting",
1600− "url": "https://feross.org/support"
1601− }
1602− ],
1603− "engines": {
1604− "node": ">=4"
1605− }
1418+ "version": "1.1.6",
1419+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
1420+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
16061421 },
16071422 "node_modules/is-ci": {
16081423 "version": "2.0.0",
@@ -1675,14 +1490,6 @@
16751490 "node": ">=0.12.0"
16761491 }
16771492 },
1678− "node_modules/is-plain-obj": {
1679− "version": "2.1.0",
1680− "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
1681− "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
1682− "engines": {
1683− "node": ">=8"
1684− }
1685− },
16861493 "node_modules/is-plain-object": {
16871494 "version": "2.0.4",
16881495 "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -1835,6 +1642,20 @@
18351642 "node": ">=12"
18361643 }
18371644 },
1645+ "node_modules/markdoc": {
1646+ "version": "0.1.3",
1647+ "resolved": "https://registry.npmjs.org/markdoc/-/markdoc-0.1.3.tgz",
1648+ "integrity": "sha512-4X9A4dcNv1EPcrKIAtpd+jgcn8J7x+qUaUEeDnu/InnZ02jBlOzjlOPTbNxDjh/POHxHFZckBbOiFhQ7V8mXiw==",
1649+ "dependencies": {
1650+ "node-markdown": ">=0.1.0"
1651+ },
1652+ "bin": {
1653+ "markdoc": "bin.js"
1654+ },
1655+ "engines": {
1656+ "node": "*"
1657+ }
1658+ },
18381659 "node_modules/merge-stream": {
18391660 "version": "2.0.0",
18401661 "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -1971,16 +1792,6 @@
19711792 }
19721793 }
19731794 },
1974− "node_modules/next-transpile-modules": {
1975− "version": "9.0.0",
1976− "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-9.0.0.tgz",
1977− "integrity": "sha512-VCNFOazIAnXn1hvgYYSTYMnoWgKgwlYh4lm1pKbSfiB3kj5ZYLcKVhfh3jkPOg1cnd9DP+pte9yCUocdPEUBTQ==",
1978− "dev": true,
1979− "dependencies": {
1980− "enhanced-resolve": "^5.7.0",
1981− "escalade": "^3.1.1"
1982− }
1983− },
19841795 "node_modules/next/node_modules/postcss": {
19851796 "version": "8.4.5",
19861797 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
@@ -2003,11 +1814,19 @@
20031814 "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
20041815 "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
20051816 },
1817+ "node_modules/node-markdown": {
1818+ "version": "0.1.1",
1819+ "resolved": "https://registry.npmjs.org/node-markdown/-/node-markdown-0.1.1.tgz",
1820+ "integrity": "sha512-1BN+BEA0IVhZWgjryNjzVSUbTxwbSFvdoAsOBk6ih6fDkdFBhMNoFgfD1r5ysrBsCD8JbO0ceSk9ml9ty4EdTA==",
1821+ "deprecated": "highlight is deprecated in favor of \"highliht.js\"",
1822+ "engines": {
1823+ "node": "*"
1824+ }
1825+ },
20061826 "node_modules/node-releases": {
20071827 "version": "2.0.5",
20081828 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
2009− "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
2010− "dev": true
1829+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
20111830 },
20121831 "node_modules/normalize-path": {
20131832 "version": "3.0.0",
@@ -2021,7 +1840,6 @@
20211840 "version": "0.1.2",
20221841 "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
20231842 "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
2024− "dev": true,
20251843 "engines": {
20261844 "node": ">=0.10.0"
20271845 }
@@ -2038,6 +1856,15 @@
20381856 "node": ">=8"
20391857 }
20401858 },
1859+ "node_modules/npm-run-path/node_modules/path-key": {
1860+ "version": "3.1.1",
1861+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1862+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1863+ "dev": true,
1864+ "engines": {
1865+ "node": ">=8"
1866+ }
1867+ },
20411868 "node_modules/object-assign": {
20421869 "version": "4.1.1",
20431870 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -2148,11 +1975,6 @@
21481975 "node": ">=6"
21491976 }
21501977 },
2151− "node_modules/parse5": {
2152− "version": "6.0.1",
2153− "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
2154− "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
2155− },
21561978 "node_modules/patch-package": {
21571979 "version": "6.4.7",
21581980 "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz",
@@ -2179,115 +2001,6 @@
21792001 "npm": ">5"
21802002 }
21812003 },
2182− "node_modules/patch-package/node_modules/ansi-styles": {
2183− "version": "3.2.1",
2184− "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
2185− "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
2186− "dependencies": {
2187− "color-convert": "^1.9.0"
2188− },
2189− "engines": {
2190− "node": ">=4"
2191− }
2192− },
2193− "node_modules/patch-package/node_modules/chalk": {
2194− "version": "2.4.2",
2195− "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
2196− "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
2197− "dependencies": {
2198− "ansi-styles": "^3.2.1",
2199− "escape-string-regexp": "^1.0.5",
2200− "supports-color": "^5.3.0"
2201− },
2202− "engines": {
2203− "node": ">=4"
2204− }
2205− },
2206− "node_modules/patch-package/node_modules/color-convert": {
2207− "version": "1.9.3",
2208− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2209− "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2210− "dependencies": {
2211− "color-name": "1.1.3"
2212− }
2213− },
2214− "node_modules/patch-package/node_modules/color-name": {
2215− "version": "1.1.3",
2216− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2217− "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
2218− },
2219− "node_modules/patch-package/node_modules/cross-spawn": {
2220− "version": "6.0.5",
2221− "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
2222− "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
2223− "dependencies": {
2224− "nice-try": "^1.0.4",
2225− "path-key": "^2.0.1",
2226− "semver": "^5.5.0",
2227− "shebang-command": "^1.2.0",
2228− "which": "^1.2.9"
2229− },
2230− "engines": {
2231− "node": ">=4.8"
2232− }
2233− },
2234− "node_modules/patch-package/node_modules/has-flag": {
2235− "version": "3.0.0",
2236− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
2237− "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
2238− "engines": {
2239− "node": ">=4"
2240− }
2241− },
2242− "node_modules/patch-package/node_modules/path-key": {
2243− "version": "2.0.1",
2244− "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
2245− "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
2246− "engines": {
2247− "node": ">=4"
2248− }
2249− },
2250− "node_modules/patch-package/node_modules/shebang-command": {
2251− "version": "1.2.0",
2252− "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
2253− "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
2254− "dependencies": {
2255− "shebang-regex": "^1.0.0"
2256− },
2257− "engines": {
2258− "node": ">=0.10.0"
2259− }
2260− },
2261− "node_modules/patch-package/node_modules/shebang-regex": {
2262− "version": "1.0.0",
2263− "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
2264− "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
2265− "engines": {
2266− "node": ">=0.10.0"
2267− }
2268− },
2269− "node_modules/patch-package/node_modules/supports-color": {
2270− "version": "5.5.0",
2271− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2272− "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2273− "dependencies": {
2274− "has-flag": "^3.0.0"
2275− },
2276− "engines": {
2277− "node": ">=4"
2278− }
2279− },
2280− "node_modules/patch-package/node_modules/which": {
2281− "version": "1.3.1",
2282− "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
2283− "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
2284− "dependencies": {
2285− "isexe": "^2.0.0"
2286− },
2287− "bin": {
2288− "which": "bin/which"
2289− }
2290− },
22912004 "node_modules/path-browserify": {
22922005 "version": "1.0.1",
22932006 "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
@@ -2311,12 +2024,11 @@
23112024 }
23122025 },
23132026 "node_modules/path-key": {
2314− "version": "3.1.1",
2315− "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2316− "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2317− "dev": true,
2027+ "version": "2.0.1",
2028+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
2029+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
23182030 "engines": {
2319− "node": ">=8"
2031+ "node": ">=4"
23202032 }
23212033 },
23222034 "node_modules/path-parse": {
@@ -2340,6 +2052,14 @@
23402052 "url": "https://github.com/sponsors/jonschlinkert"
23412053 }
23422054 },
2055+ "node_modules/pify": {
2056+ "version": "2.3.0",
2057+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2058+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
2059+ "engines": {
2060+ "node": ">=0.10.0"
2061+ }
2062+ },
23432063 "node_modules/postcss": {
23442064 "version": "8.4.14",
23452065 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
@@ -2363,6 +2083,22 @@
23632083 "node": "^10 || ^12 || >=14"
23642084 }
23652085 },
2086+ "node_modules/postcss-import": {
2087+ "version": "14.1.0",
2088+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
2089+ "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
2090+ "dependencies": {
2091+ "postcss-value-parser": "^4.0.0",
2092+ "read-cache": "^1.0.0",
2093+ "resolve": "^1.1.7"
2094+ },
2095+ "engines": {
2096+ "node": ">=10.0.0"
2097+ },
2098+ "peerDependencies": {
2099+ "postcss": "^8.0.0"
2100+ }
2101+ },
23662102 "node_modules/postcss-js": {
23672103 "version": "4.0.0",
23682104 "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
@@ -2445,9 +2181,9 @@
24452181 "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
24462182 },
24472183 "node_modules/prettier": {
2448− "version": "2.6.2",
2449− "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
2450− "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
2184+ "version": "2.7.1",
2185+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
2186+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
24512187 "dev": true,
24522188 "bin": {
24532189 "prettier": "bin-prettier.js"
@@ -2482,17 +2218,84 @@
24822218 "prettier": ">=2.0.0"
24832219 }
24842220 },
2485− "node_modules/prism-react-renderer": {
2486− "version": "1.3.3",
2487− "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz",
2488− "integrity": "sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ==",
2489− "peerDependencies": {
2490− "react": ">=0.14.9"
2491− }
2492− },
2493− "node_modules/prismjs": {
2494− "version": "1.28.0",
2495− "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz",
2221+ "node_modules/pretty-quick/node_modules/ansi-styles": {
2222+ "version": "4.3.0",
2223+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2224+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2225+ "dev": true,
2226+ "dependencies": {
2227+ "color-convert": "^2.0.1"
2228+ },
2229+ "engines": {
2230+ "node": ">=8"
2231+ },
2232+ "funding": {
2233+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2234+ }
2235+ },
2236+ "node_modules/pretty-quick/node_modules/chalk": {
2237+ "version": "3.0.0",
2238+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
2239+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
2240+ "dev": true,
2241+ "dependencies": {
2242+ "ansi-styles": "^4.1.0",
2243+ "supports-color": "^7.1.0"
2244+ },
2245+ "engines": {
2246+ "node": ">=8"
2247+ }
2248+ },
2249+ "node_modules/pretty-quick/node_modules/color-convert": {
2250+ "version": "2.0.1",
2251+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
2252+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
2253+ "dev": true,
2254+ "dependencies": {
2255+ "color-name": "~1.1.4"
2256+ },
2257+ "engines": {
2258+ "node": ">=7.0.0"
2259+ }
2260+ },
2261+ "node_modules/pretty-quick/node_modules/color-name": {
2262+ "version": "1.1.4",
2263+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2264+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2265+ "dev": true
2266+ },
2267+ "node_modules/pretty-quick/node_modules/has-flag": {
2268+ "version": "4.0.0",
2269+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2270+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2271+ "dev": true,
2272+ "engines": {
2273+ "node": ">=8"
2274+ }
2275+ },
2276+ "node_modules/pretty-quick/node_modules/supports-color": {
2277+ "version": "7.2.0",
2278+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2279+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2280+ "dev": true,
2281+ "dependencies": {
2282+ "has-flag": "^4.0.0"
2283+ },
2284+ "engines": {
2285+ "node": ">=8"
2286+ }
2287+ },
2288+ "node_modules/prism-react-renderer": {
2289+ "version": "1.3.3",
2290+ "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz",
2291+ "integrity": "sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ==",
2292+ "peerDependencies": {
2293+ "react": ">=0.14.9"
2294+ }
2295+ },
2296+ "node_modules/prismjs": {
2297+ "version": "1.28.0",
2298+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz",
24962299 "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==",
24972300 "engines": {
24982301 "node": ">=6"
@@ -2501,7 +2304,7 @@
25012304 "node_modules/process": {
25022305 "version": "0.11.10",
25032306 "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
2504− "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
2307+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
25052308 "engines": {
25062309 "node": ">= 0.6.0"
25072310 }
@@ -2521,15 +2324,6 @@
25212324 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
25222325 "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
25232326 },
2524− "node_modules/property-information": {
2525− "version": "6.1.1",
2526− "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz",
2527− "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==",
2528− "funding": {
2529− "type": "github",
2530− "url": "https://github.com/sponsors/wooorm"
2531− }
2532− },
25332327 "node_modules/pump": {
25342328 "version": "3.0.0",
25352329 "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -2632,6 +2426,14 @@
26322426 "react": ">=16.8.1"
26332427 }
26342428 },
2429+ "node_modules/read-cache": {
2430+ "version": "1.0.0",
2431+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2432+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
2433+ "dependencies": {
2434+ "pify": "^2.3.0"
2435+ }
2436+ },
26352437 "node_modules/readable-stream": {
26362438 "version": "3.6.0",
26372439 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -2661,128 +2463,6 @@
26612463 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
26622464 "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
26632465 },
2664− "node_modules/rehype-raw": {
2665− "version": "6.1.1",
2666− "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz",
2667− "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==",
2668− "dependencies": {
2669− "@types/hast": "^2.0.0",
2670− "hast-util-raw": "^7.2.0",
2671− "unified": "^10.0.0"
2672− },
2673− "funding": {
2674− "type": "opencollective",
2675− "url": "https://opencollective.com/unified"
2676− }
2677− },
2678− "node_modules/rehype-raw/node_modules/bail": {
2679− "version": "2.0.2",
2680− "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
2681− "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
2682− "funding": {
2683− "type": "github",
2684− "url": "https://github.com/sponsors/wooorm"
2685− }
2686− },
2687− "node_modules/rehype-raw/node_modules/is-plain-obj": {
2688− "version": "4.0.0",
2689− "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
2690− "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
2691− "engines": {
2692− "node": ">=12"
2693− },
2694− "funding": {
2695− "url": "https://github.com/sponsors/sindresorhus"
2696− }
2697− },
2698− "node_modules/rehype-raw/node_modules/trough": {
2699− "version": "2.1.0",
2700− "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
2701− "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
2702− "funding": {
2703− "type": "github",
2704− "url": "https://github.com/sponsors/wooorm"
2705− }
2706− },
2707− "node_modules/rehype-raw/node_modules/unified": {
2708− "version": "10.1.2",
2709− "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
2710− "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
2711− "dependencies": {
2712− "@types/unist": "^2.0.0",
2713− "bail": "^2.0.0",
2714− "extend": "^3.0.0",
2715− "is-buffer": "^2.0.0",
2716− "is-plain-obj": "^4.0.0",
2717− "trough": "^2.0.0",
2718− "vfile": "^5.0.0"
2719− },
2720− "funding": {
2721− "type": "opencollective",
2722− "url": "https://opencollective.com/unified"
2723− }
2724− },
2725− "node_modules/rehype-stringify": {
2726− "version": "9.0.3",
2727− "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
2728− "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
2729− "dependencies": {
2730− "@types/hast": "^2.0.0",
2731− "hast-util-to-html": "^8.0.0",
2732− "unified": "^10.0.0"
2733− },
2734− "funding": {
2735− "type": "opencollective",
2736− "url": "https://opencollective.com/unified"
2737− }
2738− },
2739− "node_modules/rehype-stringify/node_modules/bail": {
2740− "version": "2.0.2",
2741− "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
2742− "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
2743− "funding": {
2744− "type": "github",
2745− "url": "https://github.com/sponsors/wooorm"
2746− }
2747− },
2748− "node_modules/rehype-stringify/node_modules/is-plain-obj": {
2749− "version": "4.0.0",
2750− "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
2751− "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
2752− "engines": {
2753− "node": ">=12"
2754− },
2755− "funding": {
2756− "url": "https://github.com/sponsors/sindresorhus"
2757− }
2758− },
2759− "node_modules/rehype-stringify/node_modules/trough": {
2760− "version": "2.1.0",
2761− "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
2762− "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
2763− "funding": {
2764− "type": "github",
2765− "url": "https://github.com/sponsors/wooorm"
2766− }
2767− },
2768− "node_modules/rehype-stringify/node_modules/unified": {
2769− "version": "10.1.2",
2770− "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
2771− "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
2772− "dependencies": {
2773− "@types/unist": "^2.0.0",
2774− "bail": "^2.0.0",
2775− "extend": "^3.0.0",
2776− "is-buffer": "^2.0.0",
2777− "is-plain-obj": "^4.0.0",
2778− "trough": "^2.0.0",
2779− "vfile": "^5.0.0"
2780− },
2781− "funding": {
2782− "type": "opencollective",
2783− "url": "https://opencollective.com/unified"
2784− }
2785− },
27862466 "node_modules/rename-keys": {
27872467 "version": "1.2.0",
27882468 "resolved": "https://registry.npmjs.org/rename-keys/-/rename-keys-1.2.0.tgz",
@@ -2903,24 +2583,22 @@
29032583 }
29042584 },
29052585 "node_modules/shebang-command": {
2906− "version": "2.0.0",
2907− "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2908− "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2909− "dev": true,
2586+ "version": "1.2.0",
2587+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
2588+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
29102589 "dependencies": {
2911− "shebang-regex": "^3.0.0"
2590+ "shebang-regex": "^1.0.0"
29122591 },
29132592 "engines": {
2914− "node": ">=8"
2593+ "node": ">=0.10.0"
29152594 }
29162595 },
29172596 "node_modules/shebang-regex": {
2918− "version": "3.0.0",
2919− "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2920− "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2921− "dev": true,
2597+ "version": "1.0.0",
2598+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
2599+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
29222600 "engines": {
2923− "node": ">=8"
2601+ "node": ">=0.10.0"
29242602 }
29252603 },
29262604 "node_modules/signal-exit": {
@@ -2945,19 +2623,10 @@
29452623 "node": ">=0.10.0"
29462624 }
29472625 },
2948− "node_modules/space-separated-tokens": {
2949− "version": "2.0.1",
2950− "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
2951− "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
2952− "funding": {
2953− "type": "github",
2954− "url": "https://github.com/sponsors/wooorm"
2955− }
2956− },
29572626 "node_modules/sprintf-js": {
29582627 "version": "1.0.3",
29592628 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2960− "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
2629+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
29612630 },
29622631 "node_modules/stream-browserify": {
29632632 "version": "3.0.0",
@@ -2976,23 +2645,10 @@
29762645 "safe-buffer": "~5.2.0"
29772646 }
29782647 },
2979− "node_modules/stringify-entities": {
2980− "version": "4.0.2",
2981− "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz",
2982− "integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==",
2983− "dependencies": {
2984− "character-entities-html4": "^2.0.0",
2985− "character-entities-legacy": "^3.0.0"
2986− },
2987− "funding": {
2988− "type": "github",
2989− "url": "https://github.com/sponsors/wooorm"
2990− }
2991− },
29922648 "node_modules/strip-bom-string": {
29932649 "version": "1.0.0",
29942650 "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
2995− "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
2651+ "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
29962652 "engines": {
29972653 "node": ">=0.10.0"
29982654 }
@@ -3042,15 +2698,14 @@
30422698 }
30432699 },
30442700 "node_modules/supports-color": {
3045− "version": "7.2.0",
3046− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
3047− "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
3048− "dev": true,
2701+ "version": "5.5.0",
2702+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2703+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
30492704 "dependencies": {
3050− "has-flag": "^4.0.0"
2705+ "has-flag": "^3.0.0"
30512706 },
30522707 "engines": {
3053− "node": ">=8"
2708+ "node": ">=4"
30542709 }
30552710 },
30562711 "node_modules/supports-preserve-symlinks-flag": {
@@ -3075,14 +2730,14 @@
30752730 }
30762731 },
30772732 "node_modules/tailwindcss": {
3078− "version": "3.0.24",
3079− "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz",
3080− "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==",
2733+ "version": "3.1.3",
2734+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.3.tgz",
2735+ "integrity": "sha512-PRJNYdSIthrb8hjmAyymEyEN8Yo61TMXpzyFUpxULeeyRn3Y3gpvuw6FlRTKrJvK7thSGKRnhT36VovVx4WeMA==",
30812736 "dependencies": {
3082− "arg": "^5.0.1",
2737+ "arg": "^5.0.2",
30832738 "chokidar": "^3.5.3",
30842739 "color-name": "^1.1.4",
3085− "detective": "^5.2.0",
2740+ "detective": "^5.2.1",
30862741 "didyoumean": "^1.2.2",
30872742 "dlv": "^1.1.3",
30882743 "fast-glob": "^3.2.11",
@@ -3092,7 +2747,8 @@
30922747 "normalize-path": "^3.0.0",
30932748 "object-hash": "^3.0.0",
30942749 "picocolors": "^1.0.0",
3095− "postcss": "^8.4.12",
2750+ "postcss": "^8.4.14",
2751+ "postcss-import": "^14.1.0",
30962752 "postcss-js": "^4.0.0",
30972753 "postcss-load-config": "^3.1.4",
30982754 "postcss-nested": "5.0.6",
@@ -3112,14 +2768,10 @@
31122768 "postcss": "^8.0.9"
31132769 }
31142770 },
3115− "node_modules/tapable": {
3116− "version": "2.2.1",
3117− "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
3118− "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
3119− "dev": true,
3120− "engines": {
3121− "node": ">=6"
3122− }
2771+ "node_modules/tailwindcss/node_modules/color-name": {
2772+ "version": "1.1.4",
2773+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2774+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
31232775 },
31242776 "node_modules/tmp": {
31252777 "version": "0.0.33",
@@ -3148,137 +2800,11 @@
31482800 "resolved": "https://registry.npmjs.org/transformation-matrix/-/transformation-matrix-2.1.1.tgz",
31492801 "integrity": "sha512-74MoNHhwLVuzwaPDcAecFjSkOA9vwWqyOdkeB0Be8Jc/IWSS5SNZKapFllqzkTliqZptkvqX5CZnVeDvfhN8cw=="
31502802 },
3151− "node_modules/trough": {
3152− "version": "1.0.5",
3153− "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
3154− "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
3155− "funding": {
3156− "type": "github",
3157− "url": "https://github.com/sponsors/wooorm"
3158− }
3159− },
31602803 "node_modules/tslib": {
31612804 "version": "2.4.0",
31622805 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
31632806 "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
31642807 },
3165− "node_modules/unified": {
3166− "version": "9.2.2",
3167− "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
3168− "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
3169− "dependencies": {
3170− "bail": "^1.0.0",
3171− "extend": "^3.0.0",
3172− "is-buffer": "^2.0.0",
3173− "is-plain-obj": "^2.0.0",
3174− "trough": "^1.0.0",
3175− "vfile": "^4.0.0"
3176− },
3177− "funding": {
3178− "type": "opencollective",
3179− "url": "https://opencollective.com/unified"
3180− }
3181− },
3182− "node_modules/unified/node_modules/unist-util-stringify-position": {
3183− "version": "2.0.3",
3184− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
3185− "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
3186− "dependencies": {
3187− "@types/unist": "^2.0.2"
3188− },
3189− "funding": {
3190− "type": "opencollective",
3191− "url": "https://opencollective.com/unified"
3192− }
3193− },
3194− "node_modules/unified/node_modules/vfile": {
3195− "version": "4.2.1",
3196− "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
3197− "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
3198− "dependencies": {
3199− "@types/unist": "^2.0.0",
3200− "is-buffer": "^2.0.0",
3201− "unist-util-stringify-position": "^2.0.0",
3202− "vfile-message": "^2.0.0"
3203− },
3204− "funding": {
3205− "type": "opencollective",
3206− "url": "https://opencollective.com/unified"
3207− }
3208− },
3209− "node_modules/unified/node_modules/vfile-message": {
3210− "version": "2.0.4",
3211− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
3212− "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
3213− "dependencies": {
3214− "@types/unist": "^2.0.0",
3215− "unist-util-stringify-position": "^2.0.0"
3216− },
3217− "funding": {
3218− "type": "opencollective",
3219− "url": "https://opencollective.com/unified"
3220− }
3221− },
3222− "node_modules/unist-util-is": {
3223− "version": "5.1.1",
3224− "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
3225− "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
3226− "funding": {
3227− "type": "opencollective",
3228− "url": "https://opencollective.com/unified"
3229− }
3230− },
3231− "node_modules/unist-util-position": {
3232− "version": "4.0.3",
3233− "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz",
3234− "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==",
3235− "dependencies": {
3236− "@types/unist": "^2.0.0"
3237− },
3238− "funding": {
3239− "type": "opencollective",
3240− "url": "https://opencollective.com/unified"
3241− }
3242− },
3243− "node_modules/unist-util-stringify-position": {
3244− "version": "3.0.2",
3245− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
3246− "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
3247− "dependencies": {
3248− "@types/unist": "^2.0.0"
3249− },
3250− "funding": {
3251− "type": "opencollective",
3252− "url": "https://opencollective.com/unified"
3253− }
3254− },
3255− "node_modules/unist-util-visit": {
3256− "version": "4.1.0",
3257− "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
3258− "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
3259− "dependencies": {
3260− "@types/unist": "^2.0.0",
3261− "unist-util-is": "^5.0.0",
3262− "unist-util-visit-parents": "^5.0.0"
3263− },
3264− "funding": {
3265− "type": "opencollective",
3266− "url": "https://opencollective.com/unified"
3267− }
3268− },
3269− "node_modules/unist-util-visit-parents": {
3270− "version": "5.1.0",
3271− "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz",
3272− "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==",
3273− "dependencies": {
3274− "@types/unist": "^2.0.0",
3275− "unist-util-is": "^5.0.0"
3276− },
3277− "funding": {
3278− "type": "opencollective",
3279− "url": "https://opencollective.com/unified"
3280− }
3281− },
32822808 "node_modules/universalify": {
32832809 "version": "0.1.2",
32842810 "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -3290,7 +2816,7 @@
32902816 "node_modules/unset-value": {
32912817 "version": "0.1.2",
32922818 "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz",
3293− "integrity": "sha1-UGgQuGfyfCpabpsEgzYx9t5Y0xA=",
2819+ "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==",
32942820 "dependencies": {
32952821 "has-value": "^0.3.1",
32962822 "isobject": "^3.0.0"
@@ -3312,77 +2838,23 @@
33122838 "node_modules/util-deprecate": {
33132839 "version": "1.0.2",
33142840 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3315− "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
3316− },
3317− "node_modules/vfile": {
3318− "version": "5.3.2",
3319− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz",
3320− "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==",
3321− "dependencies": {
3322− "@types/unist": "^2.0.0",
3323− "is-buffer": "^2.0.0",
3324− "unist-util-stringify-position": "^3.0.0",
3325− "vfile-message": "^3.0.0"
3326− },
3327− "funding": {
3328− "type": "opencollective",
3329− "url": "https://opencollective.com/unified"
3330− }
3331− },
3332− "node_modules/vfile-location": {
3333− "version": "4.0.1",
3334− "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz",
3335− "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==",
3336− "dependencies": {
3337− "@types/unist": "^2.0.0",
3338− "vfile": "^5.0.0"
3339− },
3340− "funding": {
3341− "type": "opencollective",
3342− "url": "https://opencollective.com/unified"
3343− }
3344− },
3345− "node_modules/vfile-message": {
3346− "version": "3.1.2",
3347− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz",
3348− "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==",
3349− "dependencies": {
3350− "@types/unist": "^2.0.0",
3351− "unist-util-stringify-position": "^3.0.0"
3352− },
3353− "funding": {
3354− "type": "opencollective",
3355− "url": "https://opencollective.com/unified"
3356− }
3357− },
3358− "node_modules/web-namespaces": {
3359− "version": "2.0.1",
3360− "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
3361− "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
3362− "funding": {
3363− "type": "github",
3364− "url": "https://github.com/sponsors/wooorm"
3365− }
2841+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
33662842 },
33672843 "node_modules/which": {
3368− "version": "2.0.2",
3369− "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3370− "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3371− "dev": true,
2844+ "version": "1.3.1",
2845+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
2846+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
33722847 "dependencies": {
33732848 "isexe": "^2.0.0"
33742849 },
33752850 "bin": {
3376− "node-which": "bin/node-which"
3377− },
3378− "engines": {
3379− "node": ">= 8"
2851+ "which": "bin/which"
33802852 }
33812853 },
33822854 "node_modules/wrappy": {
33832855 "version": "1.0.2",
33842856 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3385− "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
2857+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
33862858 },
33872859 "node_modules/xml-js": {
33882860 "version": "1.6.11",
@@ -3398,7 +2870,7 @@
33982870 "node_modules/xml-lexer": {
33992871 "version": "0.2.2",
34002872 "resolved": "https://registry.npmjs.org/xml-lexer/-/xml-lexer-0.2.2.tgz",
3401− "integrity": "sha1-UYGTpKozTVj8fSSLVJB5uJkH4EY=",
2873+ "integrity": "sha512-G0i98epIwiUEiKmMcavmVdhtymW+pCAohMRgybyIME9ygfVu8QheIi+YoQh3ngiThsT0SQzJT4R0sKDEv8Ou0w==",
34022874 "dependencies": {
34032875 "eventemitter3": "^2.0.0"
34042876 }
@@ -3406,7 +2878,7 @@
34062878 "node_modules/xml-reader": {
34072879 "version": "2.4.3",
34082880 "resolved": "https://registry.npmjs.org/xml-reader/-/xml-reader-2.4.3.tgz",
3409− "integrity": "sha1-n4EMr3xCWlqvuEixxFEDyecddTA=",
2881+ "integrity": "sha512-xWldrIxjeAMAu6+HSf9t50ot1uL5M+BtOidRCWHXIeewvSeIpscWCsp4Zxjk8kHHhdqFBrfK8U0EJeCcnyQ/gA==",
34102882 "dependencies": {
34112883 "eventemitter3": "^2.0.0",
34122884 "xml-lexer": "^0.2.2"
@@ -3427,18 +2899,25 @@
34272899 "engines": {
34282900 "node": ">= 6"
34292901 }
3430− },
3431− "node_modules/zwitch": {
3432− "version": "2.0.2",
3433− "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz",
3434− "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==",
3435− "funding": {
3436− "type": "github",
3437− "url": "https://github.com/sponsors/wooorm"
3438− }
34392902 }
34402903 },
34412904 "dependencies": {
2905+ "@babel/polyfill": {
2906+ "version": "7.12.1",
2907+ "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
2908+ "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
2909+ "requires": {
2910+ "core-js": "^2.6.5",
2911+ "regenerator-runtime": "^0.13.4"
2912+ },
2913+ "dependencies": {
2914+ "core-js": {
2915+ "version": "2.6.12",
2916+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
2917+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
2918+ }
2919+ }
2920+ },
34422921 "@babel/runtime": {
34432922 "version": "7.18.3",
34442923 "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz",
@@ -3579,35 +3058,22 @@
35793058 "transformation-matrix": "2.1.1"
35803059 }
35813060 },
3582− "@types/hast": {
3583− "version": "2.3.4",
3584− "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
3585− "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
3586− "requires": {
3587− "@types/unist": "*"
3588− }
3589− },
35903061 "@types/minimatch": {
35913062 "version": "3.0.5",
35923063 "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
35933064 "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
35943065 "dev": true
35953066 },
3596− "@types/parse5": {
3597− "version": "6.0.3",
3598− "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
3599− "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
3600− },
3601− "@types/unist": {
3602− "version": "2.0.6",
3603− "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
3604− "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
3605− },
36063067 "@yarnpkg/lockfile": {
36073068 "version": "1.1.0",
36083069 "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
36093070 "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="
36103071 },
3072+ "acorn": {
3073+ "version": "7.4.1",
3074+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
3075+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
3076+ },
36113077 "acorn-node": {
36123078 "version": "1.8.2",
36133079 "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
@@ -3616,13 +3082,6 @@
36163082 "acorn": "^7.0.0",
36173083 "acorn-walk": "^7.0.0",
36183084 "xtend": "^4.0.2"
3619− },
3620− "dependencies": {
3621− "acorn": {
3622− "version": "7.4.1",
3623− "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
3624− "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
3625− }
36263085 }
36273086 },
36283087 "acorn-walk": {
@@ -3631,12 +3090,11 @@
36313090 "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
36323091 },
36333092 "ansi-styles": {
3634− "version": "4.3.0",
3635− "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
3636− "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
3637− "dev": true,
3093+ "version": "3.2.1",
3094+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
3095+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
36383096 "requires": {
3639− "color-convert": "^2.0.1"
3097+ "color-convert": "^1.9.0"
36403098 }
36413099 },
36423100 "anymatch": {
@@ -3649,9 +3107,9 @@
36493107 }
36503108 },
36513109 "arg": {
3652− "version": "5.0.1",
3653− "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
3654− "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA=="
3110+ "version": "5.0.2",
3111+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
3112+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
36553113 },
36563114 "argparse": {
36573115 "version": "1.0.10",
@@ -3683,7 +3141,6 @@
36833141 "version": "10.4.7",
36843142 "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz",
36853143 "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==",
3686− "dev": true,
36873144 "requires": {
36883145 "browserslist": "^4.20.3",
36893146 "caniuse-lite": "^1.0.30001335",
@@ -3701,11 +3158,6 @@
37013158 "follow-redirects": "^1.14.8"
37023159 }
37033160 },
3704− "bail": {
3705− "version": "1.0.5",
3706− "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
3707− "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ=="
3708− },
37093161 "balanced-match": {
37103162 "version": "1.0.2",
37113163 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -3744,15 +3196,14 @@
37443196 }
37453197 },
37463198 "browserslist": {
3747− "version": "4.20.3",
3748− "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
3749− "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
3750− "dev": true,
3199+ "version": "4.20.4",
3200+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz",
3201+ "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==",
37513202 "requires": {
3752− "caniuse-lite": "^1.0.30001332",
3753− "electron-to-chromium": "^1.4.118",
3203+ "caniuse-lite": "^1.0.30001349",
3204+ "electron-to-chromium": "^1.4.147",
37543205 "escalade": "^3.1.1",
3755− "node-releases": "^2.0.3",
3206+ "node-releases": "^2.0.5",
37563207 "picocolors": "^1.0.0"
37573208 }
37583209 },
@@ -3771,35 +3222,20 @@
37713222 "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
37723223 },
37733224 "caniuse-lite": {
3774− "version": "1.0.30001344",
3775− "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz",
3776− "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g=="
3777− },
3778− "ccount": {
3779− "version": "2.0.1",
3780− "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
3781− "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
3225+ "version": "1.0.30001355",
3226+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001355.tgz",
3227+ "integrity": "sha512-Sd6pjJHF27LzCB7pT7qs+kuX2ndurzCzkpJl6Qct7LPSZ9jn0bkOA8mdgMgmqnQAWLVOOGjLpc+66V57eLtb1g=="
37823228 },
37833229 "chalk": {
3784− "version": "3.0.0",
3785− "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
3786− "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
3787− "dev": true,
3230+ "version": "2.4.2",
3231+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
3232+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
37883233 "requires": {
3789− "ansi-styles": "^4.1.0",
3790− "supports-color": "^7.1.0"
3234+ "ansi-styles": "^3.2.1",
3235+ "escape-string-regexp": "^1.0.5",
3236+ "supports-color": "^5.3.0"
37913237 }
37923238 },
3793− "character-entities-html4": {
3794− "version": "2.1.0",
3795− "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
3796− "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="
3797− },
3798− "character-entities-legacy": {
3799− "version": "3.0.0",
3800− "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
3801− "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="
3802− },
38033239 "chokidar": {
38043240 "version": "3.5.3",
38053241 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -3836,23 +3272,17 @@
38363272 "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
38373273 },
38383274 "color-convert": {
3839− "version": "2.0.1",
3840− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
3841− "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
3842− "dev": true,
3275+ "version": "1.9.3",
3276+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
3277+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
38433278 "requires": {
3844− "color-name": "~1.1.4"
3279+ "color-name": "1.1.3"
38453280 }
38463281 },
38473282 "color-name": {
3848− "version": "1.1.4",
3849− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
3850− "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
3851− },
3852− "comma-separated-tokens": {
3853− "version": "2.0.2",
3854− "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
3855− "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
3283+ "version": "1.1.3",
3284+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
3285+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
38563286 },
38573287 "compute-scroll-into-view": {
38583288 "version": "1.0.17",
@@ -3864,15 +3294,21 @@
38643294 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
38653295 "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
38663296 },
3297+ "core-js": {
3298+ "version": "3.23.1",
3299+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.1.tgz",
3300+ "integrity": "sha512-wfMYHWi1WQjpgZNC9kAlN4ut04TM9fUTdi7CqIoTVM7yaiOUQTklOzfb+oWH3r9edQcT3F887swuVmxrV+CC8w=="
3301+ },
38673302 "cross-spawn": {
3868− "version": "7.0.3",
3869− "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
3870− "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
3871− "dev": true,
3303+ "version": "6.0.5",
3304+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
3305+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
38723306 "requires": {
3873− "path-key": "^3.1.0",
3874− "shebang-command": "^2.0.0",
3875− "which": "^2.0.1"
3307+ "nice-try": "^1.0.4",
3308+ "path-key": "^2.0.1",
3309+ "semver": "^5.5.0",
3310+ "shebang-command": "^1.2.0",
3311+ "which": "^1.2.9"
38763312 }
38773313 },
38783314 "cssesc": {
@@ -3889,11 +3325,6 @@
38893325 "rename-keys": "^1.1.2"
38903326 },
38913327 "dependencies": {
3892− "is-buffer": {
3893− "version": "1.1.6",
3894− "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
3895− "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
3896− },
38973328 "kind-of": {
38983329 "version": "3.2.2",
38993330 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -3987,10 +3418,9 @@
39873418 }
39883419 },
39893420 "electron-to-chromium": {
3990− "version": "1.4.143",
3991− "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.143.tgz",
3992− "integrity": "sha512-2hIgvu0+pDfXIqmVmV5X6iwMjQ2KxDsWKwM+oI1fABEOy/Dqmll0QJRmIQ3rm+XaoUa/qKrmy5h7LSTFQ6Ldzg==",
3993− "dev": true
3421+ "version": "1.4.158",
3422+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.158.tgz",
3423+ "integrity": "sha512-gppO3/+Y6sP432HtvwvuU8S+YYYLH4PmAYvQwqUtt9HDOmEsBwQfLnK9T8+1NIKwAS1BEygIjTaATC4H5EzvxQ=="
39943424 },
39953425 "end-of-stream": {
39963426 "version": "1.4.4",
@@ -4001,16 +3431,6 @@
40013431 "once": "^1.4.0"
40023432 }
40033433 },
4004− "enhanced-resolve": {
4005− "version": "5.9.3",
4006− "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
4007− "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
4008− "dev": true,
4009− "requires": {
4010− "graceful-fs": "^4.2.4",
4011− "tapable": "^2.2.0"
4012− }
4013− },
40143434 "entities": {
40153435 "version": "3.0.1",
40163436 "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
@@ -4019,8 +3439,7 @@
40193439 "escalade": {
40203440 "version": "3.1.1",
40213441 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
4022− "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
4023− "dev": true
3442+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
40243443 },
40253444 "escape-string-regexp": {
40263445 "version": "1.0.5",
@@ -4052,13 +3471,51 @@
40523471 "onetime": "^5.1.0",
40533472 "signal-exit": "^3.0.2",
40543473 "strip-final-newline": "^2.0.0"
3474+ },
3475+ "dependencies": {
3476+ "cross-spawn": {
3477+ "version": "7.0.3",
3478+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
3479+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
3480+ "dev": true,
3481+ "requires": {
3482+ "path-key": "^3.1.0",
3483+ "shebang-command": "^2.0.0",
3484+ "which": "^2.0.1"
3485+ }
3486+ },
3487+ "path-key": {
3488+ "version": "3.1.1",
3489+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
3490+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
3491+ "dev": true
3492+ },
3493+ "shebang-command": {
3494+ "version": "2.0.0",
3495+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
3496+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
3497+ "dev": true,
3498+ "requires": {
3499+ "shebang-regex": "^3.0.0"
3500+ }
3501+ },
3502+ "shebang-regex": {
3503+ "version": "3.0.0",
3504+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
3505+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
3506+ "dev": true
3507+ },
3508+ "which": {
3509+ "version": "2.0.2",
3510+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3511+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3512+ "dev": true,
3513+ "requires": {
3514+ "isexe": "^2.0.0"
3515+ }
3516+ }
40553517 }
40563518 },
4057− "extend": {
4058− "version": "3.0.2",
4059− "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
4060− "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
4061− },
40623519 "extend-shallow": {
40633520 "version": "2.0.1",
40643521 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
@@ -4136,11 +3593,24 @@
41363593 "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
41373594 "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA=="
41383595 },
3596+ "foundation-design-system": {
3597+ "version": "git+ssh://git@github.com/urbit/foundation-design-system.git#ba69c83265b7cca109217fa6a2b2539a57087f4a",
3598+ "from": "foundation-design-system@github:urbit/foundation-design-system",
3599+ "requires": {
3600+ "@babel/polyfill": "^7.12.1",
3601+ "@markdoc/markdoc": "^0.1.2",
3602+ "core-js": "^3.23.1",
3603+ "html-react-parser": "^1.4.14",
3604+ "markdoc": "^0.1.3",
3605+ "patch-package": "^6.4.7",
3606+ "prism-react-renderer": "^1.3.3",
3607+ "prismjs": "^1.28.0"
3608+ }
3609+ },
41393610 "fraction.js": {
41403611 "version": "4.2.0",
4141− "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
4142− "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
4143− "dev": true
3612+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
3613+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
41443614 },
41453615 "fs-extra": {
41463616 "version": "7.0.1",
@@ -4168,11 +3638,6 @@
41683638 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
41693639 "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
41703640 },
4171− "fuzzy-search": {
4172− "version": "3.2.1",
4173− "resolved": "https://registry.npmjs.org/fuzzy-search/-/fuzzy-search-3.2.1.tgz",
4174− "integrity": "sha512-vAcPiyomt1ioKAsAL2uxSABHJ4Ju/e4UeDM+g1OlR0vV4YhLGMNsdLNvZTpEDY4JCSt0E4hASCNM5t2ETtsbyg=="
4175− },
41763641 "get-stream": {
41773642 "version": "5.2.0",
41783643 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
@@ -4233,10 +3698,9 @@
42333698 }
42343699 },
42353700 "has-flag": {
4236− "version": "4.0.0",
4237− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
4238− "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
4239− "dev": true
3701+ "version": "3.0.0",
3702+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
3703+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
42403704 },
42413705 "has-value": {
42423706 "version": "0.3.1",
@@ -4263,117 +3727,6 @@
42633727 "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
42643728 "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ=="
42653729 },
4266− "hast-to-hyperscript": {
4267− "version": "10.0.1",
4268− "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz",
4269− "integrity": "sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==",
4270− "requires": {
4271− "@types/unist": "^2.0.0",
4272− "comma-separated-tokens": "^2.0.0",
4273− "property-information": "^6.0.0",
4274− "space-separated-tokens": "^2.0.0",
4275− "style-to-object": "^0.3.0",
4276− "unist-util-is": "^5.0.0",
4277− "web-namespaces": "^2.0.0"
4278− }
4279− },
4280− "hast-util-from-parse5": {
4281− "version": "7.1.0",
4282− "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz",
4283− "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==",
4284− "requires": {
4285− "@types/hast": "^2.0.0",
4286− "@types/parse5": "^6.0.0",
4287− "@types/unist": "^2.0.0",
4288− "hastscript": "^7.0.0",
4289− "property-information": "^6.0.0",
4290− "vfile": "^5.0.0",
4291− "vfile-location": "^4.0.0",
4292− "web-namespaces": "^2.0.0"
4293− }
4294− },
4295− "hast-util-is-element": {
4296− "version": "2.1.2",
4297− "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
4298− "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
4299− "requires": {
4300− "@types/hast": "^2.0.0",
4301− "@types/unist": "^2.0.0"
4302− }
4303− },
4304− "hast-util-parse-selector": {
4305− "version": "3.1.0",
4306− "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
4307− "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
4308− "requires": {
4309− "@types/hast": "^2.0.0"
4310− }
4311− },
4312− "hast-util-raw": {
4313− "version": "7.2.1",
4314− "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.1.tgz",
4315− "integrity": "sha512-wgtppqXVdXzkDXDFclLLdAyVUJSKMYYi6LWIAbA8oFqEdwksYIcPGM3RkKV1Dfn5GElvxhaOCs0jmCOMayxd3A==",
4316− "requires": {
4317− "@types/hast": "^2.0.0",
4318− "@types/parse5": "^6.0.0",
4319− "hast-util-from-parse5": "^7.0.0",
4320− "hast-util-to-parse5": "^7.0.0",
4321− "html-void-elements": "^2.0.0",
4322− "parse5": "^6.0.0",
4323− "unist-util-position": "^4.0.0",
4324− "unist-util-visit": "^4.0.0",
4325− "vfile": "^5.0.0",
4326− "web-namespaces": "^2.0.0",
4327− "zwitch": "^2.0.0"
4328− }
4329− },
4330− "hast-util-to-html": {
4331− "version": "8.0.3",
4332− "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
4333− "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
4334− "requires": {
4335− "@types/hast": "^2.0.0",
4336− "ccount": "^2.0.0",
4337− "comma-separated-tokens": "^2.0.0",
4338− "hast-util-is-element": "^2.0.0",
4339− "hast-util-whitespace": "^2.0.0",
4340− "html-void-elements": "^2.0.0",
4341− "property-information": "^6.0.0",
4342− "space-separated-tokens": "^2.0.0",
4343− "stringify-entities": "^4.0.2",
4344− "unist-util-is": "^5.0.0"
4345− }
4346− },
4347− "hast-util-to-parse5": {
4348− "version": "7.0.0",
4349− "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.0.0.tgz",
4350− "integrity": "sha512-YHiS6aTaZ3N0Q3nxaY/Tj98D6kM8QX5Q8xqgg8G45zR7PvWnPGPP0vcKCgb/moIydEJ/QWczVrX0JODCVeoV7A==",
4351− "requires": {
4352− "@types/hast": "^2.0.0",
4353− "@types/parse5": "^6.0.0",
4354− "hast-to-hyperscript": "^10.0.0",
4355− "property-information": "^6.0.0",
4356− "web-namespaces": "^2.0.0",
4357− "zwitch": "^2.0.0"
4358− }
4359− },
4360− "hast-util-whitespace": {
4361− "version": "2.0.0",
4362− "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
4363− "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg=="
4364− },
4365− "hastscript": {
4366− "version": "7.0.2",
4367− "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz",
4368− "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==",
4369− "requires": {
4370− "@types/hast": "^2.0.0",
4371− "comma-separated-tokens": "^2.0.0",
4372− "hast-util-parse-selector": "^3.0.0",
4373− "property-information": "^6.0.0",
4374− "space-separated-tokens": "^2.0.0"
4375− }
4376− },
43773730 "html-dom-parser": {
43783731 "version": "1.2.0",
43793732 "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz",
@@ -4383,11 +3736,6 @@
43833736 "htmlparser2": "7.2.0"
43843737 }
43853738 },
4386− "html-entities": {
4387− "version": "2.3.3",
4388− "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
4389− "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
4390− },
43913739 "html-react-parser": {
43923740 "version": "1.4.14",
43933741 "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.14.tgz",
@@ -4399,11 +3747,6 @@
43993747 "style-to-js": "1.1.1"
44003748 }
44013749 },
4402− "html-void-elements": {
4403− "version": "2.0.1",
4404− "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
4405− "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
4406− },
44073750 "htmlparser2": {
44083751 "version": "7.2.0",
44093752 "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
@@ -4468,9 +3811,9 @@
44683811 }
44693812 },
44703813 "is-buffer": {
4471− "version": "2.0.5",
4472− "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
4473− "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
3814+ "version": "1.1.6",
3815+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
3816+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
44743817 },
44753818 "is-ci": {
44763819 "version": "2.0.0",
@@ -4516,11 +3859,6 @@
45163859 "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
45173860 "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
45183861 },
4519− "is-plain-obj": {
4520− "version": "2.1.0",
4521− "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
4522− "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
4523− },
45243862 "is-plain-object": {
45253863 "version": "2.0.4",
45263864 "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -4640,6 +3978,14 @@
46403978 "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.4.0.tgz",
46413979 "integrity": "sha512-w+NAwWOUL5hO0SgwOHsMBAmZ15SoknmQXhSO0hIbJCAmPKSsGeK8MlmhYh2w6Iib38IxN2M+/ooXWLbeis7GuA=="
46423980 },
3981+ "markdoc": {
3982+ "version": "0.1.3",
3983+ "resolved": "https://registry.npmjs.org/markdoc/-/markdoc-0.1.3.tgz",
3984+ "integrity": "sha512-4X9A4dcNv1EPcrKIAtpd+jgcn8J7x+qUaUEeDnu/InnZ02jBlOzjlOPTbNxDjh/POHxHFZckBbOiFhQ7V8mXiw==",
3985+ "requires": {
3986+ "node-markdown": ">=0.1.0"
3987+ }
3988+ },
46433989 "merge-stream": {
46443990 "version": "2.0.0",
46453991 "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -4738,26 +4084,20 @@
47384084 }
47394085 }
47404086 },
4741− "next-transpile-modules": {
4742− "version": "9.0.0",
4743− "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-9.0.0.tgz",
4744− "integrity": "sha512-VCNFOazIAnXn1hvgYYSTYMnoWgKgwlYh4lm1pKbSfiB3kj5ZYLcKVhfh3jkPOg1cnd9DP+pte9yCUocdPEUBTQ==",
4745− "dev": true,
4746− "requires": {
4747− "enhanced-resolve": "^5.7.0",
4748− "escalade": "^3.1.1"
4749− }
4750− },
47514087 "nice-try": {
47524088 "version": "1.0.5",
47534089 "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
47544090 "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
47554091 },
4092+ "node-markdown": {
4093+ "version": "0.1.1",
4094+ "resolved": "https://registry.npmjs.org/node-markdown/-/node-markdown-0.1.1.tgz",
4095+ "integrity": "sha512-1BN+BEA0IVhZWgjryNjzVSUbTxwbSFvdoAsOBk6ih6fDkdFBhMNoFgfD1r5ysrBsCD8JbO0ceSk9ml9ty4EdTA=="
4096+ },
47564097 "node-releases": {
47574098 "version": "2.0.5",
47584099 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
4759− "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
4760− "dev": true
4100+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
47614101 },
47624102 "normalize-path": {
47634103 "version": "3.0.0",
@@ -4767,8 +4107,7 @@
47674107 "normalize-range": {
47684108 "version": "0.1.2",
47694109 "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
4770− "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
4771− "dev": true
4110+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
47724111 },
47734112 "npm-run-path": {
47744113 "version": "4.0.1",
@@ -4777,6 +4116,14 @@
47774116 "dev": true,
47784117 "requires": {
47794118 "path-key": "^3.0.0"
4119+ },
4120+ "dependencies": {
4121+ "path-key": {
4122+ "version": "3.1.1",
4123+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
4124+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
4125+ "dev": true
4126+ }
47804127 }
47814128 },
47824129 "object-assign": {
@@ -4853,11 +4200,6 @@
48534200 "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
48544201 "dev": true
48554202 },
4856− "parse5": {
4857− "version": "6.0.1",
4858− "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
4859− "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
4860− },
48614203 "patch-package": {
48624204 "version": "6.4.7",
48634205 "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz",
@@ -4876,90 +4218,6 @@
48764218 "semver": "^5.6.0",
48774219 "slash": "^2.0.0",
48784220 "tmp": "^0.0.33"
4879− },
4880− "dependencies": {
4881− "ansi-styles": {
4882− "version": "3.2.1",
4883− "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
4884− "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
4885− "requires": {
4886− "color-convert": "^1.9.0"
4887− }
4888− },
4889− "chalk": {
4890− "version": "2.4.2",
4891− "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
4892− "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
4893− "requires": {
4894− "ansi-styles": "^3.2.1",
4895− "escape-string-regexp": "^1.0.5",
4896− "supports-color": "^5.3.0"
4897− }
4898− },
4899− "color-convert": {
4900− "version": "1.9.3",
4901− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
4902− "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
4903− "requires": {
4904− "color-name": "1.1.3"
4905− }
4906− },
4907− "color-name": {
4908− "version": "1.1.3",
4909− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
4910− "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
4911− },
4912− "cross-spawn": {
4913− "version": "6.0.5",
4914− "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
4915− "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
4916− "requires": {
4917− "nice-try": "^1.0.4",
4918− "path-key": "^2.0.1",
4919− "semver": "^5.5.0",
4920− "shebang-command": "^1.2.0",
4921− "which": "^1.2.9"
4922− }
4923− },
4924− "has-flag": {
4925− "version": "3.0.0",
4926− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
4927− "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
4928− },
4929− "path-key": {
4930− "version": "2.0.1",
4931− "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
4932− "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="
4933− },
4934− "shebang-command": {
4935− "version": "1.2.0",
4936− "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
4937− "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
4938− "requires": {
4939− "shebang-regex": "^1.0.0"
4940− }
4941− },
4942− "shebang-regex": {
4943− "version": "1.0.0",
4944− "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
4945− "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
4946− },
4947− "supports-color": {
4948− "version": "5.5.0",
4949− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
4950− "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
4951− "requires": {
4952− "has-flag": "^3.0.0"
4953− }
4954− },
4955− "which": {
4956− "version": "1.3.1",
4957− "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
4958− "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
4959− "requires": {
4960− "isexe": "^2.0.0"
4961− }
4962− }
49634221 }
49644222 },
49654223 "path-browserify": {
@@ -4979,10 +4237,9 @@
49794237 "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
49804238 },
49814239 "path-key": {
4982− "version": "3.1.1",
4983− "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
4984− "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
4985− "dev": true
4240+ "version": "2.0.1",
4241+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
4242+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="
49864243 },
49874244 "path-parse": {
49884245 "version": "1.0.7",
@@ -4999,6 +4256,11 @@
49994256 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
50004257 "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
50014258 },
4259+ "pify": {
4260+ "version": "2.3.0",
4261+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
4262+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
4263+ },
50024264 "postcss": {
50034265 "version": "8.4.14",
50044266 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
@@ -5009,6 +4271,16 @@
50094271 "source-map-js": "^1.0.2"
50104272 }
50114273 },
4274+ "postcss-import": {
4275+ "version": "14.1.0",
4276+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
4277+ "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
4278+ "requires": {
4279+ "postcss-value-parser": "^4.0.0",
4280+ "read-cache": "^1.0.0",
4281+ "resolve": "^1.1.7"
4282+ }
4283+ },
50124284 "postcss-js": {
50134285 "version": "4.0.0",
50144286 "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
@@ -5049,9 +4321,9 @@
50494321 "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
50504322 },
50514323 "prettier": {
5052− "version": "2.6.2",
5053− "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
5054− "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
4324+ "version": "2.7.1",
4325+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
4326+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
50554327 "dev": true
50564328 },
50574329 "pretty-quick": {
@@ -5066,6 +4338,57 @@
50664338 "ignore": "^5.1.4",
50674339 "mri": "^1.1.5",
50684340 "multimatch": "^4.0.0"
4341+ },
4342+ "dependencies": {
4343+ "ansi-styles": {
4344+ "version": "4.3.0",
4345+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
4346+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
4347+ "dev": true,
4348+ "requires": {
4349+ "color-convert": "^2.0.1"
4350+ }
4351+ },
4352+ "chalk": {
4353+ "version": "3.0.0",
4354+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
4355+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
4356+ "dev": true,
4357+ "requires": {
4358+ "ansi-styles": "^4.1.0",
4359+ "supports-color": "^7.1.0"
4360+ }
4361+ },
4362+ "color-convert": {
4363+ "version": "2.0.1",
4364+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
4365+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
4366+ "dev": true,
4367+ "requires": {
4368+ "color-name": "~1.1.4"
4369+ }
4370+ },
4371+ "color-name": {
4372+ "version": "1.1.4",
4373+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
4374+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
4375+ "dev": true
4376+ },
4377+ "has-flag": {
4378+ "version": "4.0.0",
4379+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
4380+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
4381+ "dev": true
4382+ },
4383+ "supports-color": {
4384+ "version": "7.2.0",
4385+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
4386+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
4387+ "dev": true,
4388+ "requires": {
4389+ "has-flag": "^4.0.0"
4390+ }
4391+ }
50694392 }
50704393 },
50714394 "prism-react-renderer": {
@@ -5082,7 +4405,7 @@
50824405 "process": {
50834406 "version": "0.11.10",
50844407 "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
5085− "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
4408+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
50864409 },
50874410 "prop-types": {
50884411 "version": "15.8.1",
@@ -5101,11 +4424,6 @@
51014424 }
51024425 }
51034426 },
5104− "property-information": {
5105− "version": "6.1.1",
5106− "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz",
5107− "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w=="
5108− },
51094427 "pump": {
51104428 "version": "3.0.0",
51114429 "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -5175,6 +4493,14 @@
51754493 "integrity": "sha512-1oNvJmo72G4v5P9ytJZZTb6ywD3UzWBiainTtfbNlb+U08hc+SOD5HqgiLTKUF0MxGcIR9JSnZGmBttNLXaQYA==",
51764494 "requires": {}
51774495 },
4496+ "read-cache": {
4497+ "version": "1.0.0",
4498+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
4499+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
4500+ "requires": {
4501+ "pify": "^2.3.0"
4502+ }
4503+ },
51784504 "readable-stream": {
51794505 "version": "3.6.0",
51804506 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -5198,88 +4524,6 @@
51984524 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
51994525 "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
52004526 },
5201− "rehype-raw": {
5202− "version": "6.1.1",
5203− "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz",
5204− "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==",
5205− "requires": {
5206− "@types/hast": "^2.0.0",
5207− "hast-util-raw": "^7.2.0",
5208− "unified": "^10.0.0"
5209− },
5210− "dependencies": {
5211− "bail": {
5212− "version": "2.0.2",
5213− "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
5214− "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
5215− },
5216− "is-plain-obj": {
5217− "version": "4.0.0",
5218− "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
5219− "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
5220− },
5221− "trough": {
5222− "version": "2.1.0",
5223− "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
5224− "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
5225− },
5226− "unified": {
5227− "version": "10.1.2",
5228− "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
5229− "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
5230− "requires": {
5231− "@types/unist": "^2.0.0",
5232− "bail": "^2.0.0",
5233− "extend": "^3.0.0",
5234− "is-buffer": "^2.0.0",
5235− "is-plain-obj": "^4.0.0",
5236− "trough": "^2.0.0",
5237− "vfile": "^5.0.0"
5238− }
5239− }
5240− }
5241− },
5242− "rehype-stringify": {
5243− "version": "9.0.3",
5244− "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
5245− "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
5246− "requires": {
5247− "@types/hast": "^2.0.0",
5248− "hast-util-to-html": "^8.0.0",
5249− "unified": "^10.0.0"
5250− },
5251− "dependencies": {
5252− "bail": {
5253− "version": "2.0.2",
5254− "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
5255− "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
5256− },
5257− "is-plain-obj": {
5258− "version": "4.0.0",
5259− "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
5260− "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
5261− },
5262− "trough": {
5263− "version": "2.1.0",
5264− "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
5265− "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
5266− },
5267− "unified": {
5268− "version": "10.1.2",
5269− "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
5270− "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
5271− "requires": {
5272− "@types/unist": "^2.0.0",
5273− "bail": "^2.0.0",
5274− "extend": "^3.0.0",
5275− "is-buffer": "^2.0.0",
5276− "is-plain-obj": "^4.0.0",
5277− "trough": "^2.0.0",
5278− "vfile": "^5.0.0"
5279− }
5280− }
5281− }
5282− },
52834527 "rename-keys": {
52844528 "version": "1.2.0",
52854529 "resolved": "https://registry.npmjs.org/rename-keys/-/rename-keys-1.2.0.tgz",
@@ -5350,19 +4594,17 @@
53504594 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
53514595 },
53524596 "shebang-command": {
5353− "version": "2.0.0",
5354− "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
5355− "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
5356− "dev": true,
4597+ "version": "1.2.0",
4598+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
4599+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
53574600 "requires": {
5358− "shebang-regex": "^3.0.0"
4601+ "shebang-regex": "^1.0.0"
53594602 }
53604603 },
53614604 "shebang-regex": {
5362− "version": "3.0.0",
5363− "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
5364− "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
5365− "dev": true
4605+ "version": "1.0.0",
4606+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
4607+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="
53664608 },
53674609 "signal-exit": {
53684610 "version": "3.0.7",
@@ -5380,15 +4622,10 @@
53804622 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
53814623 "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
53824624 },
5383− "space-separated-tokens": {
5384− "version": "2.0.1",
5385− "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
5386− "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
5387− },
53884625 "sprintf-js": {
53894626 "version": "1.0.3",
53904627 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
5391− "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
4628+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
53924629 },
53934630 "stream-browserify": {
53944631 "version": "3.0.0",
@@ -5407,19 +4644,10 @@
54074644 "safe-buffer": "~5.2.0"
54084645 }
54094646 },
5410− "stringify-entities": {
5411− "version": "4.0.2",
5412− "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz",
5413− "integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==",
5414− "requires": {
5415− "character-entities-html4": "^2.0.0",
5416− "character-entities-legacy": "^3.0.0"
5417− }
5418− },
54194647 "strip-bom-string": {
54204648 "version": "1.0.0",
54214649 "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
5422− "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI="
4650+ "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="
54234651 },
54244652 "strip-final-newline": {
54254653 "version": "2.0.0",
@@ -5450,12 +4678,11 @@
54504678 "requires": {}
54514679 },
54524680 "supports-color": {
5453− "version": "7.2.0",
5454− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
5455− "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
5456− "dev": true,
4681+ "version": "5.5.0",
4682+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
4683+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
54574684 "requires": {
5458− "has-flag": "^4.0.0"
4685+ "has-flag": "^3.0.0"
54594686 }
54604687 },
54614688 "supports-preserve-symlinks-flag": {
@@ -5474,14 +4701,14 @@
54744701 }
54754702 },
54764703 "tailwindcss": {
5477− "version": "3.0.24",
5478− "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz",
5479− "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==",
4704+ "version": "3.1.3",
4705+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.3.tgz",
4706+ "integrity": "sha512-PRJNYdSIthrb8hjmAyymEyEN8Yo61TMXpzyFUpxULeeyRn3Y3gpvuw6FlRTKrJvK7thSGKRnhT36VovVx4WeMA==",
54804707 "requires": {
5481− "arg": "^5.0.1",
4708+ "arg": "^5.0.2",
54824709 "chokidar": "^3.5.3",
54834710 "color-name": "^1.1.4",
5484− "detective": "^5.2.0",
4711+ "detective": "^5.2.1",
54854712 "didyoumean": "^1.2.2",
54864713 "dlv": "^1.1.3",
54874714 "fast-glob": "^3.2.11",
@@ -5491,7 +4718,8 @@
54914718 "normalize-path": "^3.0.0",
54924719 "object-hash": "^3.0.0",
54934720 "picocolors": "^1.0.0",
5494− "postcss": "^8.4.12",
4721+ "postcss": "^8.4.14",
4722+ "postcss-import": "^14.1.0",
54954723 "postcss-js": "^4.0.0",
54964724 "postcss-load-config": "^3.1.4",
54974725 "postcss-nested": "5.0.6",
@@ -5499,14 +4727,15 @@
54994727 "postcss-value-parser": "^4.2.0",
55004728 "quick-lru": "^5.1.1",
55014729 "resolve": "^1.22.0"
4730+ },
4731+ "dependencies": {
4732+ "color-name": {
4733+ "version": "1.1.4",
4734+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
4735+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
4736+ }
55024737 }
55034738 },
5504− "tapable": {
5505− "version": "2.2.1",
5506− "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
5507− "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
5508− "dev": true
5509− },
55104739 "tmp": {
55114740 "version": "0.0.33",
55124741 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -5528,99 +4757,11 @@
55284757 "resolved": "https://registry.npmjs.org/transformation-matrix/-/transformation-matrix-2.1.1.tgz",
55294758 "integrity": "sha512-74MoNHhwLVuzwaPDcAecFjSkOA9vwWqyOdkeB0Be8Jc/IWSS5SNZKapFllqzkTliqZptkvqX5CZnVeDvfhN8cw=="
55304759 },
5531− "trough": {
5532− "version": "1.0.5",
5533− "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
5534− "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA=="
5535− },
55364760 "tslib": {
55374761 "version": "2.4.0",
55384762 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
55394763 "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
55404764 },
5541− "unified": {
5542− "version": "9.2.2",
5543− "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
5544− "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
5545− "requires": {
5546− "bail": "^1.0.0",
5547− "extend": "^3.0.0",
5548− "is-buffer": "^2.0.0",
5549− "is-plain-obj": "^2.0.0",
5550− "trough": "^1.0.0",
5551− "vfile": "^4.0.0"
5552− },
5553− "dependencies": {
5554− "unist-util-stringify-position": {
5555− "version": "2.0.3",
5556− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
5557− "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
5558− "requires": {
5559− "@types/unist": "^2.0.2"
5560− }
5561− },
5562− "vfile": {
5563− "version": "4.2.1",
5564− "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
5565− "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
5566− "requires": {
5567− "@types/unist": "^2.0.0",
5568− "is-buffer": "^2.0.0",
5569− "unist-util-stringify-position": "^2.0.0",
5570− "vfile-message": "^2.0.0"
5571− }
5572− },
5573− "vfile-message": {
5574− "version": "2.0.4",
5575− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
5576− "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
5577− "requires": {
5578− "@types/unist": "^2.0.0",
5579− "unist-util-stringify-position": "^2.0.0"
5580− }
5581− }
5582− }
5583− },
5584− "unist-util-is": {
5585− "version": "5.1.1",
5586− "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
5587− "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
5588− },
5589− "unist-util-position": {
5590− "version": "4.0.3",
5591− "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz",
5592− "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==",
5593− "requires": {
5594− "@types/unist": "^2.0.0"
5595− }
5596− },
5597− "unist-util-stringify-position": {
5598− "version": "3.0.2",
5599− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
5600− "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
5601− "requires": {
5602− "@types/unist": "^2.0.0"
5603− }
5604− },
5605− "unist-util-visit": {
5606− "version": "4.1.0",
5607− "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
5608− "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
5609− "requires": {
5610− "@types/unist": "^2.0.0",
5611− "unist-util-is": "^5.0.0",
5612− "unist-util-visit-parents": "^5.0.0"
5613− }
5614− },
5615− "unist-util-visit-parents": {
5616− "version": "5.1.0",
5617− "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz",
5618− "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==",
5619− "requires": {
5620− "@types/unist": "^2.0.0",
5621− "unist-util-is": "^5.0.0"
5622− }
5623− },
56244765 "universalify": {
56254766 "version": "0.1.2",
56264767 "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -5629,7 +4770,7 @@
56294770 "unset-value": {
56304771 "version": "0.1.2",
56314772 "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz",
5632− "integrity": "sha1-UGgQuGfyfCpabpsEgzYx9t5Y0xA=",
4773+ "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==",
56334774 "requires": {
56344775 "has-value": "^0.3.1",
56354776 "isobject": "^3.0.0"
@@ -5648,47 +4789,12 @@
56484789 "util-deprecate": {
56494790 "version": "1.0.2",
56504791 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
5651− "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
5652− },
5653− "vfile": {
5654− "version": "5.3.2",
5655− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz",
5656− "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==",
5657− "requires": {
5658− "@types/unist": "^2.0.0",
5659− "is-buffer": "^2.0.0",
5660− "unist-util-stringify-position": "^3.0.0",
5661− "vfile-message": "^3.0.0"
5662− }
5663− },
5664− "vfile-location": {
5665− "version": "4.0.1",
5666− "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz",
5667− "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==",
5668− "requires": {
5669− "@types/unist": "^2.0.0",
5670− "vfile": "^5.0.0"
5671− }
5672− },
5673− "vfile-message": {
5674− "version": "3.1.2",
5675− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz",
5676− "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==",
5677− "requires": {
5678− "@types/unist": "^2.0.0",
5679− "unist-util-stringify-position": "^3.0.0"
5680− }
5681− },
5682− "web-namespaces": {
5683− "version": "2.0.1",
5684− "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
5685− "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="
4792+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
56864793 },
56874794 "which": {
5688− "version": "2.0.2",
5689− "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
5690− "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
5691− "dev": true,
4795+ "version": "1.3.1",
4796+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
4797+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
56924798 "requires": {
56934799 "isexe": "^2.0.0"
56944800 }
@@ -5696,7 +4802,7 @@
56964802 "wrappy": {
56974803 "version": "1.0.2",
56984804 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5699− "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
4805+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
57004806 },
57014807 "xml-js": {
57024808 "version": "1.6.11",
@@ -5709,7 +4815,7 @@
57094815 "xml-lexer": {
57104816 "version": "0.2.2",
57114817 "resolved": "https://registry.npmjs.org/xml-lexer/-/xml-lexer-0.2.2.tgz",
5712− "integrity": "sha1-UYGTpKozTVj8fSSLVJB5uJkH4EY=",
4818+ "integrity": "sha512-G0i98epIwiUEiKmMcavmVdhtymW+pCAohMRgybyIME9ygfVu8QheIi+YoQh3ngiThsT0SQzJT4R0sKDEv8Ou0w==",
57134819 "requires": {
57144820 "eventemitter3": "^2.0.0"
57154821 }
@@ -5717,7 +4823,7 @@
57174823 "xml-reader": {
57184824 "version": "2.4.3",
57194825 "resolved": "https://registry.npmjs.org/xml-reader/-/xml-reader-2.4.3.tgz",
5720− "integrity": "sha1-n4EMr3xCWlqvuEixxFEDyecddTA=",
4826+ "integrity": "sha512-xWldrIxjeAMAu6+HSf9t50ot1uL5M+BtOidRCWHXIeewvSeIpscWCsp4Zxjk8kHHhdqFBrfK8U0EJeCcnyQ/gA==",
57214827 "requires": {
57224828 "eventemitter3": "^2.0.0",
57234829 "xml-lexer": "^0.2.2"
@@ -5732,11 +4838,6 @@
57324838 "version": "1.10.2",
57334839 "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
57344840 "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
5735− },
5736− "zwitch": {
5737− "version": "2.0.2",
5738− "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz",
5739− "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA=="
57404841 }
57414842 }
57424843}
package.json+2−13
@@ -14,12 +14,10 @@
1414 "understanding-urbit-tree": "node lib/buildPageTree understanding-urbit weight",
1515 "using-tree": "node lib/buildPageTree using weight",
1616 "cache-posts": "node lib/cache.js",
17− "rss": "node lib/rss.js",
18− "postinstall": "patch-package"
17+ "rss": "node lib/rss.js"
1918 },
2019 "dependencies": {
2120 "@iarna/toml": "^2.2.5",
22− "@markdoc/markdoc": "^0.1.2",
2321 "@socialgouv/matomo-next": "^1.3.0",
2422 "@tailwindcss/aspect-ratio": "^0.4.0",
2523 "@tlon/sigil-js": "^1.4.5",
@@ -29,33 +27,24 @@
2927 "deepmerge": "^4.2.2",
3028 "downshift": "^6.1.5",
3129 "feed": "^4.2.2",
32− "fuzzy-search": "^3.2.1",
30+ "foundation-design-system": "github:urbit/foundation-design-system",
3331 "gray-matter": "^4.0.3",
34− "html-entities": "^2.3.2",
35− "html-react-parser": "^1.4.14",
3632 "lodash.debounce": "^4.0.8",
3733 "lodash.omit": "^4.5.0",
3834 "luxon": "^2.0.2",
3935 "next": "^12.1.5",
40− "patch-package": "^6.4.7",
4136 "path-browserify": "^1.0.1",
42− "prism-react-renderer": "^1.3.3",
43− "prismjs": "^1.25.0",
4437 "process": "^0.11.10",
4538 "react": "^17.0.0",
4639 "react-dom": "^17.0.0",
4740 "react-hotkeys": "^2.0.0",
4841 "react-swipeable": "^6.2.1",
4942 "react-use-localstorage": "^3.5.3",
50− "rehype-raw": "^6.1.0",
51− "rehype-stringify": "^9.0.2",
5243 "stream-browserify": "^3.0.0",
53− "unified": "^9.2.1",
5444 "urbit-ob": "^5.0.1"
5545 },
5646 "devDependencies": {
5747 "autoprefixer": "^10.4.4",
58− "next-transpile-modules": "^9.0.0",
5948 "postcss": "^8.4.12",
6049 "prettier": "^2.3.1",
6150 "pretty-quick": "^3.1.0",
pages/[slug].js+2−2
@@ -1,7 +1,7 @@
11import { getPostBySlug } from "../lib/lib";
22import BasicPage from "../components/BasicPage";
33import { getPostSlugs } from "../lib/lib";
4−import { MarkdownParse } from "../components/Markdown";
4+import Markdown from "foundation-design-system";
55
66export default function Post({ post, markdown, search, index }) {
77 return (
@@ -22,7 +22,7 @@ export async function getStaticProps({ params }) {
2222 index = null;
2323 }
2424
25− const markdown = JSON.stringify(MarkdownParse({ post }));
25+ const markdown = JSON.stringify(Markdown.parse({ post }));
2626 return {
2727 props: { post, markdown, index },
2828 };
pages/_app.js+3−3
@@ -2,9 +2,9 @@ import { useState, useEffect } from "react";
22import { configure, GlobalHotKeys } from "react-hotkeys";
33import { init } from "@socialgouv/matomo-next";
44import Search from "../components/Search";
5−import "../styles/globals.css";
6−import "../styles/markdown.css";
7−import "../styles/prism.css";
5+import "foundation-design-system/styles/globals.css";
6+import "foundation-design-system/styles/markdown.css";
7+import "foundation-design-system/styles/prism.css";
88
99const MATOMO_URL = process?.env?.NEXT_PUBLIC_MATOMO_URL || "";
1010const MATOMO_SITE_ID = process?.env?.NEXT_PUBLIC_MATOMO_SITE_ID || "";
pages/applications/[[...application]].js+2−2
@@ -7,7 +7,7 @@ import Container from "../../components/Container";
77import SingleColumn from "../../components/SingleColumn";
88import Section from "../../components/Section";
99import ob from "urbit-ob";
10−import { MarkdownParse } from "../../components/Markdown";
10+import Markdown from "foundation-design-system";
1111import GatewayHeader from "../../components/gateway/GatewayHeader";
1212import Gateway404 from "../../components/gateway/Gateway404";
1313import MetadataBlock from "../../components/gateway/MetadataBlock";
@@ -148,7 +148,7 @@ export const getServerSideProps = async ({ params, res }) => {
148148
149149 const markdown =
150150 content !== ""
151− ? JSON.stringify(MarkdownParse({ post: { content } }))
151+ ? JSON.stringify(Markdown.parse({ post: { content } }))
152152 : null;
153153
154154 if (!data.title) {
pages/blog/[slug].js+3−3
@@ -19,7 +19,7 @@ import Section from "../../components/Section";
1919import Contact from "../../components/Contact";
2020import PostPreview from "../../components/PostPreview";
2121import TwoUp from "../../components/TwoUp";
22−import Markdown, { MarkdownParse } from "../../components/Markdown";
22+import Markdown from "foundation-design-system";
2323
2424export default function Post({
2525 post,
@@ -59,7 +59,7 @@ export default function Post({
5959 <div className="text-wall-500 type-sub">{formatDate(date)}</div>
6060 </Section>
6161 <Section short narrow className="markdown">
62− <Markdown content={JSON.parse(markdown)} />
62+ <Markdown.render content={JSON.parse(markdown)} />
6363 </Section>
6464 <Section narrow>
6565 <Contact />
@@ -102,7 +102,7 @@ export async function getStaticProps({ params }) {
102102 "blog"
103103 );
104104
105− const markdown = JSON.stringify(MarkdownParse({ post }));
105+ const markdown = JSON.stringify(Markdown.parse({ post }));
106106 return {
107107 props: { post, markdown, nextPost, previousPost },
108108 };
pages/community/[[...slug]].js+3−3
@@ -5,7 +5,7 @@ import classnames from "classnames";
55import { join } from "path";
66import { getPage } from "../../lib/lib";
77import Meta from "../../components/Meta";
8−import Markdown, { MarkdownParse } from "../../components/Markdown";
8+import Markdown from "foundation-design-system";
99import ContentArea from "../../components/ContentArea";
1010import Sidebar from "../../components/Sidebar";
1111import communityTree from "../../cache/community.json";
@@ -77,7 +77,7 @@ export default function UsingLayout({ posts, data, markdown, params, search }) {
7777 params={params}
7878 >
7979 <div className="markdown">
80− <Markdown content={JSON.parse(markdown)} />
80+ <Markdown.render content={JSON.parse(markdown)} />
8181 </div>
8282 </ContentArea>
8383 </div>
@@ -92,7 +92,7 @@ export async function getStaticProps({ params }) {
9292 join(process.cwd(), "content/community", params.slug?.join("/") || "/")
9393 );
9494
95− const markdown = JSON.stringify(MarkdownParse({ post: { content } }));
95+ const markdown = JSON.stringify(Markdown.parse({ post: { content } }));
9696
9797 return { props: { posts, data, markdown, params } };
9898}
pages/docs/[[...slug]].js+3−3
@@ -7,7 +7,7 @@ import { join } from "path";
77import { getPreviousPost, getNextPost, getPage } from "../../lib/lib";
88import Meta from "../../components/Meta";
99import Pagination from "../../components/Pagination";
10−import Markdown, { MarkdownParse } from "../../components/Markdown";
10+import Markdown from "foundation-design-system";
1111import ContentArea from "../../components/ContentArea";
1212import Sidebar from "../../components/Sidebar";
1313import docsPageTree from "../../cache/docs.json";
@@ -144,7 +144,7 @@ export default function DocsLayout({
144144 params={params}
145145 >
146146 <div className="markdown technical">
147− <Markdown content={JSON.parse(markdown)} />
147+ <Markdown.render content={JSON.parse(markdown)} />
148148 </div>
149149 <div className="flex justify-between mt-16">
150150 {previousPost === null ? (
@@ -208,7 +208,7 @@ export async function getStaticProps({ params }) {
208208 "weight"
209209 ) || null;
210210
211− const markdown = JSON.stringify(MarkdownParse({ post: { content } }));
211+ const markdown = JSON.stringify(Markdown.parse({ post: { content } }));
212212 return { props: { posts, data, markdown, previousPost, nextPost, params } };
213213}
214214
pages/events/[slug].js+3−3
@@ -10,7 +10,7 @@ import {
1010import Head from "next/head";
1111import Meta from "../../components/Meta";
1212import Container from "../../components/Container";
13−import Markdown, { MarkdownParse } from "../../components/Markdown";
13+import Markdown from "foundation-design-system";
1414import Header from "../../components/Header";
1515import Footer from "../../components/Footer";
1616import SingleColumn from "../../components/SingleColumn";
@@ -116,7 +116,7 @@ export default function Event({
116116 ) : null}
117117
118118 <Section short narrow className="markdown">
119− <Markdown content={JSON.parse(markdown)} />
119+ <Markdown.render content={JSON.parse(markdown)} />
120120 </Section>
121121 <Section narrow>
122122 <Contact />
@@ -153,7 +153,7 @@ export async function getStaticProps({ params }) {
153153
154154 const event = getPostBySlug(params.slug, eventKeys, "events");
155155
156− const markdown = JSON.stringify(MarkdownParse({ post: event }));
156+ const markdown = JSON.stringify(Markdown.parse({ post: event }));
157157
158158 return {
159159 props: { event, markdown, nextEvent, previousEvent },
pages/getting-started/[[...slug]].js+3−3
@@ -5,7 +5,7 @@ import { useRouter } from "next/router";
55import classnames from "classnames";
66import { join } from "path";
77import { getPage } from "../../lib/lib";
8−import Markdown, { MarkdownParse } from "../../components/Markdown";
8+import Markdown from "foundation-design-system";
99import ContentArea from "../../components/ContentArea";
1010import Sidebar from "../../components/Sidebar";
1111import GettingStartedTree from "../../cache/getting-started.json";
@@ -86,7 +86,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
8686 disableToC
8787 >
8888 <div className="markdown">
89− <Markdown content={JSON.parse(markdown)} />
89+ <Markdown.render content={JSON.parse(markdown)} />
9090 </div>
9191 {!params?.slug && <LaunchCards />}
9292 </ContentArea>
@@ -290,7 +290,7 @@ export async function getStaticProps({ params }) {
290290 )
291291 );
292292
293− const markdown = JSON.stringify(MarkdownParse({ post: { content } }));
293+ const markdown = JSON.stringify(Markdown.parse({ post: { content } }));
294294
295295 return { props: { posts, data, markdown, params } };
296296}
pages/grants/[slug].js+3−3
@@ -6,7 +6,7 @@ import Meta from "../../components/Meta";
66import classnames from "classnames";
77import ErrorPage from "../404";
88import Container from "../../components/Container";
9−import Markdown, { MarkdownParse } from "../../components/Markdown";
9+import Markdown from "foundation-design-system";
1010import Header from "../../components/Header";
1111import Footer from "../../components/Footer";
1212import SingleColumn from "../../components/SingleColumn";
@@ -102,7 +102,7 @@ export default function Grant({ post, markdown, search }) {
102102 </div>
103103 </Section>
104104 <Section narrow className="markdown">
105− <Markdown content={JSON.parse(markdown)} />
105+ <Markdown.render content={JSON.parse(markdown)} />
106106 </Section>
107107 {canApply && (
108108 <a
@@ -127,7 +127,7 @@ export async function getStaticProps({ params }) {
127127 "grants"
128128 );
129129
130− const markdown = JSON.stringify(MarkdownParse({ post }));
130+ const markdown = JSON.stringify(Markdown.parse({ post }));
131131 return {
132132 props: { post, markdown },
133133 };
pages/grants/apprenticeships.js+2−2
@@ -1,6 +1,6 @@
11import { getPostBySlug } from "../../lib/lib";
22import GrantProgramOverview from "../../components/GrantProgramOverview";
3−import { MarkdownParse } from "../../components/Markdown";
3+import Markdown from "foundation-design-system";
44
55export default function Post({ post, markdown, search }) {
66 return (
@@ -22,7 +22,7 @@ export async function getStaticProps() {
2222 "/"
2323 );
2424
25− const markdown = JSON.stringify(MarkdownParse({ post }));
25+ const markdown = JSON.stringify(Markdown.parse({ post }));
2626
2727 return {
2828 props: { post, markdown },
pages/grants/bounties.js+2−2
@@ -1,6 +1,6 @@
11import { getPostBySlug } from "../../lib/lib";
22import GrantProgramOverview from "../../components/GrantProgramOverview";
3−import { MarkdownParse } from "../../components/Markdown";
3+import Markdown from "foundation-design-system";
44
55export default function Post({ post, markdown, search }) {
66 return (
@@ -21,7 +21,7 @@ export async function getStaticProps() {
2121 ["title", "date", "slug", "content"],
2222 "/"
2323 );
24− const markdown = JSON.stringify(MarkdownParse({ post }));
24+ const markdown = JSON.stringify(Markdown.parse({ post }));
2525
2626 return {
2727 props: { post, markdown },
pages/grants/proposals.js+2−2
@@ -1,6 +1,6 @@
11import { getPostBySlug } from "../../lib/lib";
22import GrantProgramOverview from "../../components/GrantProgramOverview";
3−import { MarkdownParse } from "../../components/Markdown";
3+import Markdown from "foundation-design-system";
44
55export default function Post({ post, markdown, search }) {
66 return (
@@ -22,7 +22,7 @@ export async function getStaticProps() {
2222 "/"
2323 );
2424
25− const markdown = JSON.stringify(MarkdownParse({ post }));
25+ const markdown = JSON.stringify(Markdown.parse({ post }));
2626
2727 return {
2828 props: { post, markdown },
pages/groups/[[...group]].js+2−2
@@ -7,7 +7,7 @@ import Container from "../../components/Container";
77import SingleColumn from "../../components/SingleColumn";
88import Section from "../../components/Section";
99import ob from "urbit-ob";
10−import { MarkdownParse } from "../../components/Markdown";
10+import Markdown from "foundation-design-system";
1111import GatewayHeader from "../../components/gateway/GatewayHeader";
1212import Gateway404 from "../../components/gateway/Gateway404";
1313import MetadataBlock from "../../components/gateway/MetadataBlock";
@@ -135,7 +135,7 @@ export const getServerSideProps = async ({ params, res }) => {
135135
136136 const markdown =
137137 content !== ""
138− ? JSON.stringify(MarkdownParse({ post: { content } }))
138+ ? JSON.stringify(Markdown.parse({ post: { content } }))
139139 : null;
140140
141141 if (!data.title) {
pages/ids/[id].js+2−2
@@ -13,7 +13,7 @@ import MetadataBlock from "../../components/gateway/MetadataBlock";
1313import MetadataLink from "../../components/gateway/MetadataLink";
1414import Description from "../../components/gateway/Description";
1515import axios from "axios";
16−import { MarkdownParse } from "../../components/Markdown";
16+import Markdown from "foundation-design-system";
1717
1818const IdPage = ({ data, markdown, applications, groups, network, params }) => {
1919 let { id } = params;
@@ -209,7 +209,7 @@ export const getServerSideProps = async ({ params, res }) => {
209209
210210 const markdown =
211211 content !== ""
212− ? JSON.stringify(MarkdownParse({ post: { content } }))
212+ ? JSON.stringify(Markdown.parse({ post: { content } }))
213213 : null;
214214
215215 const applications = getAllPosts(
pages/media/[slug].js+3−3
@@ -10,7 +10,7 @@ import Link from "next/link";
1010import Meta from "../../components/Meta";
1111import ErrorPage from "../404";
1212import Container from "../../components/Container";
13−import Markdown, { MarkdownParse } from "../../components/Markdown";
13+import Markdown from "foundation-design-system";
1414import Header from "../../components/Header";
1515import Footer from "../../components/Footer";
1616import SingleColumn from "../../components/SingleColumn";
@@ -71,7 +71,7 @@ export default function MediaPage({ post, markdown, search }) {
7171 ) : null}
7272 </Section>
7373 <Section narrow className="markdown">
74− <Markdown content={JSON.parse(markdown)} />
74+ <Markdown.render content={JSON.parse(markdown)} />
7575 </Section>
7676 <Section narrow>
7777 <Contact />
@@ -90,7 +90,7 @@ export async function getStaticProps({ params }) {
9090 "media"
9191 );
9292
93− const markdown = JSON.stringify(MarkdownParse({ post }));
93+ const markdown = JSON.stringify(Markdown.parse({ post }));
9494
9595 return {
9696 props: { post, markdown },
pages/understanding-urbit/[[...slug]].js+3−3
@@ -5,7 +5,7 @@ import { useRouter } from "next/router";
55import classnames from "classnames";
66import { join } from "path";
77import { getPage, getPreviousPost, getNextPost } from "../../lib/lib";
8−import Markdown, { MarkdownParse } from "../../components/Markdown";
8+import Markdown from "foundation-design-system";
99import ContentArea from "../../components/ContentArea";
1010import Sidebar from "../../components/Sidebar";
1111import Pagination from "../../components/Pagination";
@@ -104,7 +104,7 @@ export default function UnderstandingLayout({
104104 disableToC
105105 >
106106 <div className="markdown">
107− <Markdown content={JSON.parse(markdown)} />
107+ <Markdown.render content={JSON.parse(markdown)} />
108108 </div>
109109 <div className="flex justify-between mt-16">
110110 {previousPost === null ? (
@@ -152,7 +152,7 @@ export async function getStaticProps({ params }) {
152152 params.slug?.join("/") || "/"
153153 )
154154 );
155− const markdown = JSON.stringify(MarkdownParse({ post: { content } }));
155+ const markdown = JSON.stringify(Markdown.parse({ post: { content } }));
156156
157157 const previousPost =
158158 getPreviousPost(
pages/updates/[slug].js+3−3
@@ -11,7 +11,7 @@ import Head from "next/head";
1111import Meta from "../../components/Meta";
1212import ErrorPage from "../404";
1313import Container from "../../components/Container";
14−import Markdown, { MarkdownParse } from "../../components/Markdown";
14+import Markdown from "foundation-design-system";
1515import Header from "../../components/Header";
1616import Footer from "../../components/Footer";
1717import SingleColumn from "../../components/SingleColumn";
@@ -51,7 +51,7 @@ export default function Post({ post, markdown, search }) {
5151 </div>
5252 </Section>
5353 <Section narrow className="markdown">
54− <Markdown content={JSON.parse(markdown)} />
54+ <Markdown.render content={JSON.parse(markdown)} />
5555 </Section>
5656 <Section narrow>
5757 <Contact />
@@ -105,7 +105,7 @@ export async function getStaticProps({ params }) {
105105 ["title", "slug", "date", "description", "content", "author", "ship"],
106106 "updates"
107107 );
108− const markdown = JSON.stringify(MarkdownParse({ post }));
108+ const markdown = JSON.stringify(Markdown.parse({ post }));
109109
110110 return {
111111 props: { post, markdown, nextPost, previousPost },
pages/using/[[...slug]].js+3−3
@@ -6,7 +6,7 @@ import { useState } from "react";
66import classnames from "classnames";
77import { join } from "path";
88import { getPage } from "../../lib/lib";
9−import Markdown, { MarkdownParse } from "../../components/Markdown";
9+import Markdown from "foundation-design-system";
1010import ContentArea from "../../components/ContentArea";
1111import Sidebar from "../../components/Sidebar";
1212import UsingTree from "../../cache/using.json";
@@ -115,7 +115,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
115115 params={params}
116116 >
117117 <div className="markdown">
118− <Markdown content={JSON.parse(markdown)} />
118+ <Markdown.render content={JSON.parse(markdown)} />
119119 </div>
120120 </ContentArea>
121121 </div>
@@ -130,7 +130,7 @@ export async function getStaticProps({ params }) {
130130 join(process.cwd(), "content/using", params.slug?.join("/") || "/")
131131 );
132132
133− const markdown = JSON.stringify(MarkdownParse({ post: { content } }));
133+ const markdown = JSON.stringify(Markdown.parse({ post: { content } }));
134134
135135 return { props: { posts, data, markdown, params } };
136136}
patches/@markdoc+markdoc+0.1.2.patchdeleted−1409
@@ -1,1409 +0,0 @@
1−diff --git a/node_modules/@markdoc/markdoc/build.js b/node_modules/@markdoc/markdoc/build.js
2−new file mode 100644
3−index 0000000..74d5c16
4−--- /dev/null
5−+++ b/node_modules/@markdoc/markdoc/build.js
6−@@ -0,0 +1,16 @@
7−+#!/usr/bin/env node
8−+const { buildSync } = require('esbuild');
9−+
10−+const shared = {
11−+ bundle: true,
12−+ entryPoints: ['index.ts'],
13−+ outdir: 'dist',
14−+ sourcemap: 'external',
15−+ external: [],
16−+ format: 'esm',
17−+ watch: process.argv.includes('--watch'),
18−+};
19−+
20−+buildSync({ ...shared, format: 'cjs' });
21−+buildSync({ ...shared, outExtension: { '.js': '.mjs' } });
22−+buildSync({ ...shared, entryPoints: ['src/renderers/react/react.ts'] });
23−\ No newline at end of file
24−diff --git a/node_modules/@markdoc/markdoc/dist/index.d.ts b/node_modules/@markdoc/markdoc/dist/index.d.ts
25−index 42060c7..0afef25 100644
26−--- a/node_modules/@markdoc/markdoc/dist/index.d.ts
27−+++ b/node_modules/@markdoc/markdoc/dist/index.d.ts
28−@@ -11,6 +11,7 @@ import transformer from './src/transformer';
29− import validator from './src/validator';
30− import { parseTags } from './src/utils';
31− import transforms from './src/transforms/index';
32−+import Raw from '@markdoc/markdoc/src/ast/raw';
33− import type Token from 'markdown-it/lib/token';
34− import type { Config, RenderableTreeNode, ValidateError } from './src/types';
35− export * from './src/types';
36−@@ -82,15 +83,15 @@ declare const _default: {
37− debug: import("./src/types").ConfigFunction;
38− };
39− renderers: {
40−- html: typeof import("./src/renderers/html").default;
41−- react: typeof import("./src/renderers/react/react").default;
42−- reactStatic: typeof import("./src/renderers/react/static").default;
43−+ html: typeof import("@markdoc/markdoc/src/renderers/html").default;
44−+ react: typeof import("@markdoc/markdoc/src/renderers/react/react").default;
45−+ reactStatic: typeof import("@markdoc/markdoc/src/renderers/react/static").default;
46− };
47−- transforms: typeof import("./src/transforms/table").default[];
48−+ transforms: typeof import("@markdoc/markdoc/src/transforms/table").default[];
49− Ast: {
50− fromJSON: (text: string) => Node | Node[];
51− isAst(value?: any): value is import("./src/types").AstType;
52−- isFunction(value?: any): value is import("./src/ast/function").default;
53−+ isFunction(value?: any): value is import("@markdoc/markdoc/src/ast/function").default;
54− getAstValues(value: any): Generator<import("./src/types").AstType, void, unknown>;
55− resolve(value: any, config?: Readonly<Partial<{
56− nodes: Partial<Record<import("./src/types").NodeType, import("./src/types").Schema<Readonly<Partial<any>>, string>>>;
57−@@ -102,11 +103,12 @@ declare const _default: {
58− validateFunctions?: boolean | undefined;
59− } | undefined;
60− }>>): any;
61−- Function: typeof import("./src/ast/function").default;
62−+ Function: typeof import("@markdoc/markdoc/src/ast/function").default;
63− Node: typeof Node;
64−- Variable: typeof import("./src/ast/variable").default;
65−+ Variable: typeof import("@markdoc/markdoc/src/ast/variable").default;
66− };
67− Tag: typeof Tag;
68−+ Raw: typeof Raw;
69− Tokenizer: typeof Tokenizer;
70− parseTags: typeof parseTags;
71− transformer: import("./src/transformer").Transformer;
72−@@ -118,5 +120,5 @@ declare const _default: {
73− truthy: typeof truthy;
74− };
75− export default _default;
76−-export { nodes, tags, functions, transforms, renderers, Ast, Tag, Tokenizer, parseTags, transformer, validator, truthy, };
77−+export { nodes, tags, functions, transforms, renderers, Ast, Tag, Raw, Tokenizer, parseTags, transformer, validator, truthy, };
78− //# sourceMappingURL=index.d.ts.map
79−\ No newline at end of file
80−diff --git a/node_modules/@markdoc/markdoc/dist/index.d.ts.map b/node_modules/@markdoc/markdoc/dist/index.d.ts.map
81−index 7ebe6ac..35df68d 100644
82−--- a/node_modules/@markdoc/markdoc/dist/index.d.ts.map
83−+++ b/node_modules/@markdoc/markdoc/dist/index.d.ts.map
84−@@ -1 +1 @@
85−-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAEhD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7E,cAAc,aAAa,CAAC;AAsB5B,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,CAAC,GACR,IAAI,CAAC;AACR,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,IAAI,EAAE,EACf,MAAM,EAAE,CAAC,GACR,IAAI,EAAE,CAAC;AAWV,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjD,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,CAAC,GACT,kBAAkB,CAAC;AACtB,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjD,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,CAAC,GACT,kBAAkB,EAAE,CAAC;AAaxB,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAChD,OAAO,EAAE,IAAI,EACb,OAAO,CAAC,EAAE,CAAC,GACV,aAAa,EAAE,CAYjB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACxC,UAAU,KAAK,EACf,GAAG,QAAQ,EAAE,GAAG,EAAE;;;;;;EAGnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAiBE;AAEF,OAAO,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,UAAU,EACV,SAAS,EACT,GAAG,EACH,GAAG,EACH,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,MAAM,GACP,CAAC"}
86−\ No newline at end of file
87−+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,GAAG,MAAM,8BAA8B,CAAC;AAE/C,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7E,cAAc,aAAa,CAAC;AAsB5B,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,CAAC,GACR,IAAI,CAAC;AACR,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,IAAI,EAAE,EACf,MAAM,EAAE,CAAC,GACR,IAAI,EAAE,CAAC;AAWV,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjD,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,CAAC,GACT,kBAAkB,CAAC;AACtB,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjD,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,CAAC,GACT,kBAAkB,EAAE,CAAC;AAaxB,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAChD,OAAO,EAAE,IAAI,EACb,OAAO,CAAC,EAAE,CAAC,GACV,aAAa,EAAE,CAYjB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACxC,UAAU,KAAK,EACf,GAAG,QAAQ,EAAE,GAAG,EAAE;;;;;;EAGnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAkBE;AAEF,OAAO,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,UAAU,EACV,SAAS,EACT,GAAG,EACH,GAAG,EACH,GAAG,EACH,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,MAAM,GACP,CAAC"}
88−\ No newline at end of file
89−diff --git a/node_modules/@markdoc/markdoc/dist/index.js b/node_modules/@markdoc/markdoc/dist/index.js
90−index 27f4068..b7c7f3f 100644
91−--- a/node_modules/@markdoc/markdoc/dist/index.js
92−+++ b/node_modules/@markdoc/markdoc/dist/index.js
93−@@ -6590,6 +6590,57 @@ var require_tag = __commonJS({
94− }
95− });
96−
97−+// node_modules/markdown-it-sup/index.js
98−+var require_markdown_it_sup = __commonJS({
99−+ "node_modules/markdown-it-sup/index.js"(exports, module2) {
100−+ "use strict";
101−+ var UNESCAPE_RE = /\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;
102−+ function superscript(state, silent) {
103−+ var found, content, token, max = state.posMax, start = state.pos;
104−+ if (state.src.charCodeAt(start) !== 94) {
105−+ return false;
106−+ }
107−+ if (silent) {
108−+ return false;
109−+ }
110−+ if (start + 2 >= max) {
111−+ return false;
112−+ }
113−+ state.pos = start + 1;
114−+ while (state.pos < max) {
115−+ if (state.src.charCodeAt(state.pos) === 94) {
116−+ found = true;
117−+ break;
118−+ }
119−+ state.md.inline.skipToken(state);
120−+ }
121−+ if (!found || start + 1 === state.pos) {
122−+ state.pos = start;
123−+ return false;
124−+ }
125−+ content = state.src.slice(start + 1, state.pos);
126−+ if (content.match(/(^|[^\\])(\\\\)*\s/)) {
127−+ state.pos = start;
128−+ return false;
129−+ }
130−+ state.posMax = state.pos;
131−+ state.pos = start + 1;
132−+ token = state.push("sup_open", "sup", 1);
133−+ token.markup = "^";
134−+ token = state.push("text", "", 0);
135−+ token.content = content.replace(UNESCAPE_RE, "$1");
136−+ token = state.push("sup_close", "sup", -1);
137−+ token.markup = "^";
138−+ state.pos = state.posMax + 1;
139−+ state.posMax = max;
140−+ return true;
141−+ }
142−+ module2.exports = function sup_plugin(md) {
143−+ md.inline.ruler.after("emphasis", "sup", superscript);
144−+ };
145−+ }
146−+});
147−+
148− // node_modules/markdown-it/index.js
149− var require_markdown_it = __commonJS({
150− "node_modules/markdown-it/index.js"(exports, module2) {
151−@@ -6601,6 +6652,7 @@ var require_markdown_it = __commonJS({
152− // index.ts
153− __export(exports, {
154− Ast: () => ast_default,
155−+ Raw: () => Raw,
156− Tag: () => Tag,
157− Tokenizer: () => Tokenizer,
158− createElement: () => createElement,
159−@@ -6926,6 +6978,7 @@ var Tokenizer = class {
160− this.parser = new import_lib.default(config);
161− this.parser.use(plugin, "annotations", {});
162− this.parser.use(plugin2, "frontmatter", {});
163−+ this.parser.use(require_markdown_it_sup());
164− this.parser.disable("lheading");
165− }
166− tokenize(content) {
167−@@ -7127,7 +7180,9 @@ var mappings = {
168− bullet_list: "list",
169− code_inline: "code",
170− list_item: "item",
171−- variable: "text"
172−+ variable: "text",
173−+ html_block: "html",
174−+ html_inline: "html"
175− };
176− function annotate(node, attributes) {
177− for (const { name, value, type } of attributes)
178−@@ -7155,6 +7210,7 @@ function handleAttrs(token, type) {
179− }
180− case "text":
181− case "code":
182−+ case "html":
183− return { content: (token.meta || {}).variable || token.content };
184− case "fence": {
185− const [language] = token.info.split(" ", 1);
186−@@ -7265,6 +7321,7 @@ __export(schema_exports, {
187− hardbreak: () => hardbreak,
188− heading: () => heading,
189− hr: () => hr,
190−+ html: () => html,
191− image: () => image,
192− inline: () => inline2,
193− item: () => item,
194−@@ -7282,6 +7339,17 @@ __export(schema_exports, {
195− thead: () => thead,
196− tr: () => tr
197− });
198−+
199−+// src/ast/raw.ts
200−+var Raw = class {
201−+ constructor(content, inline3) {
202−+ this.$$mdtype = "Raw";
203−+ this.content = content;
204−+ this.inline = inline3;
205−+ }
206−+};
207−+
208−+// src/schema.ts
209− var document = {
210− render: "article",
211− children: [
212−@@ -7475,6 +7543,14 @@ var softbreak = {
213− return " ";
214− }
215− };
216−+var html = {
217−+ attributes: {
218−+ content: { type: String, required: true }
219−+ },
220−+ transform(node) {
221−+ return node.attributes.content ? new Raw(node.attributes.content, node.inline) : null;
222−+ }
223−+};
224− var error = {};
225−
226− // src/tags/conditional.ts
227−@@ -7617,6 +7693,8 @@ function render(node) {
228− return node.map(render).join("");
229− if (node === null || typeof node !== "object")
230− return "";
231−+ if (node.$$mdtype === "Raw")
232−+ return node.content;
233− const { name, attributes, children = [] } = node;
234− if (!name)
235− return render(children);
236−@@ -7638,26 +7716,28 @@ function tagName(name, components) {
237− }
238−
239− // src/renderers/react/react.ts
240−-function dynamic(node, React, { components = {} } = {}) {
241−- function deepRender2(value) {
242−+function dynamic(node, React, { components = {} } = {}, raw) {
243−+ function deepRender(value) {
244− if (value == null || typeof value !== "object")
245− return value;
246− if (Array.isArray(value))
247−- return value.map((item2) => deepRender2(item2));
248−- if (value.$$mdtype === "Tag")
249−- return render3(value);
250−+ return value.map((item2) => deepRender(item2));
251−+ if (["Tag", "Raw"].includes(value.$$mdtype))
252−+ return render2(value);
253− if (typeof value !== "object")
254− return value;
255− const output = {};
256− for (const [k, v] of Object.entries(value))
257−- output[k] = deepRender2(v);
258−+ output[k] = deepRender(v);
259− return output;
260− }
261−- function render3(node2) {
262−+ function render2(node2) {
263− if (Array.isArray(node2))
264−- return React.createElement(React.Fragment, null, ...node2.map(render3));
265−+ return React.createElement(React.Fragment, null, ...node2.map(render2));
266− if (node2 === null || typeof node2 !== "object")
267− return node2;
268−+ if (node2.$$mdtype === "Raw")
269−+ return raw?.(node2.content, node2.inline);
270− const {
271− name,
272− attributes: { class: className, ...attrs } = {},
273−@@ -7665,45 +7745,47 @@ function dynamic(node, React, { components = {} } = {}) {
274− } = node2;
275− if (className)
276− attrs.className = className;
277−- return React.createElement(tagName(name, components), Object.keys(attrs).length == 0 ? null : deepRender2(attrs), ...children.map(render3));
278−+ return React.createElement(tagName(name, components), Object.keys(attrs).length == 0 ? null : deepRender(attrs), ...children.map(render2));
279− }
280−- return render3(node);
281−+ return render2(node);
282− }
283−
284− // src/renderers/react/static.ts
285−-function renderArray(children) {
286−- return children.map(render2).join(", ");
287−-}
288−-function deepRender(value) {
289−- if (value == null || typeof value !== "object")
290−- return JSON.stringify(value);
291−- if (Array.isArray(value))
292−- return `[${value.map((item2) => deepRender(item2)).join(", ")}]`;
293−- if (value.$$mdtype === "Tag")
294−- return render2(value);
295−- if (typeof value !== "object")
296−- return JSON.stringify(value);
297−- const object = Object.entries(value).map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(": ")).join(", ");
298−- return `{${object}}`;
299−-}
300−-function render2(node) {
301−- if (Array.isArray(node))
302−- return `React.createElement(React.Fragment, null, ${renderArray(node)})`;
303−- if (node === null || typeof node !== "object")
304−- return JSON.stringify(node);
305−- const {
306−- name,
307−- attributes: { class: className, ...attrs } = {},
308−- children = []
309−- } = node;
310−- if (className)
311−- attrs.className = className;
312−- return `React.createElement(
313−+function reactStatic(node, raw) {
314−+ function renderArray(children) {
315−+ return children.map(render2).join(", ");
316−+ }
317−+ function deepRender(value) {
318−+ if (value == null || typeof value !== "object")
319−+ return JSON.stringify(value);
320−+ if (Array.isArray(value))
321−+ return `[${value.map((item2) => deepRender(item2)).join(", ")}]`;
322−+ if (["Tag", "Raw"].includes(value.$$mdtype))
323−+ return render2(value);
324−+ if (typeof value !== "object")
325−+ return JSON.stringify(value);
326−+ const object = Object.entries(value).map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(": ")).join(", ");
327−+ return `{${object}}`;
328−+ }
329−+ function render2(node2) {
330−+ if (Array.isArray(node2))
331−+ return `React.createElement(React.Fragment, null, ${renderArray(node2)})`;
332−+ if (node2 === null || typeof node2 !== "object")
333−+ return JSON.stringify(node2);
334−+ if (node2.$$mdtype === "Raw")
335−+ return raw?.(node2.content, node2.inline) ?? "";
336−+ const {
337−+ name,
338−+ attributes: { class: className, ...attrs } = {},
339−+ children = []
340−+ } = node2;
341−+ if (className)
342−+ attrs.className = className;
343−+ return `React.createElement(
344− tagName(${JSON.stringify(name)}, components),
345− ${Object.keys(attrs).length == 0 ? "null" : deepRender(attrs)},
346− ${renderArray(children)})`;
347−-}
348−-function reactStatic(node) {
349−+ }
350− return `
351− (({components = {}} = {}) => {
352− ${tagName}
353−@@ -7951,6 +8033,7 @@ var markdoc_default = {
354− transforms: transforms_default,
355− Ast: ast_default,
356− Tag,
357−+ Raw,
358− Tokenizer,
359− parseTags,
360− transformer: transformer_default,
361−diff --git a/node_modules/@markdoc/markdoc/dist/index.js.map b/node_modules/@markdoc/markdoc/dist/index.js.map
362−index 58a23c6..c6a3ab4 100644
363−--- a/node_modules/@markdoc/markdoc/dist/index.js.map
364−+++ b/node_modules/@markdoc/markdoc/dist/index.js.map
365−@@ -1,7 +1,7 @@
366− {
367− "version": 3,
368−- "sources": ["../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../src/grammar/tag.js", "../node_modules/markdown-it/index.js", "../index.ts", "../src/tokenizer/index.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/base.ts", "../src/ast/function.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/ast/tag.ts", "../src/schema-types/class.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/tags/conditional.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/index.ts", "../src/functions/index.ts", "../src/renderers/html.ts", "../src/renderers/react/shared.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/validator.ts"],
369−- "sourcesContent": ["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n if (state.md.options.allowIndentation) { return false; }\n\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (!state.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n", "'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n state.pos += match[0].length;\n return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n [ 'text_collapse', require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n var text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\n '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n return tail.match(self.re.no_http)[0].length;\n }\n return 0;\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n return 0;\n }\n }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n var slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [ list ];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n })\n .reverse();\n\n compile(this);\n return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function (expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n\n class: function (expectation) {\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + '-' + classEscape(part[1])\n : classEscape(part);\n });\n\n return '[' + (expectation.inverted ? '^' : '') + escapedParts + ']';\n },\n\n any: function () {\n return 'any character';\n },\n\n end: function () {\n return 'end of input';\n },\n\n other: function (expectation) {\n return expectation.description;\n },\n\n not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\n },\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + ' or ' + descriptions[1];\n\n default:\n return (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\n\n var peg$c0 = '/';\n var peg$c1 = '.';\n var peg$c2 = '#';\n var peg$c3 = '=';\n var peg$c4 = '(';\n var peg$c5 = ')';\n var peg$c6 = ',';\n var peg$c7 = '[';\n var peg$c8 = ']';\n var peg$c9 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if ('startRule' in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: 'literal', text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\n }\n\n function peg$anyExpectation() {\n return { type: 'any' };\n }\n\n function peg$endExpectation() {\n return { type: 'end' };\n }\n\n function peg$otherExpectation(description) {\n return { type: 'other', description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column,\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import Tokenizer from './src/tokenizer';\nimport parser from './src/parser';\nimport Node from './src/ast/node';\nimport Tag from './src/ast/tag';\nimport Ast from './src/ast/index';\nimport * as nodes from './src/schema';\nimport tags from './src/tags/index';\nimport { truthy } from './src/tags/conditional';\nimport functions from './src/functions/index';\nimport renderers from './src/renderers/index';\nimport transformer from './src/transformer';\nimport validator from './src/validator';\nimport { parseTags } from './src/utils';\nimport transforms from './src/transforms/index';\n\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(content: string | Token[], file?: string): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, file);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n content: Node,\n options?: C\n): ValidateError[] {\n const config = mergeConfig(options);\n\n const output = [];\n for (const node of [content, ...content.walk()]) {\n const { type, lines, location } = node;\n const errors = validator(node, config);\n\n for (const error of errors) output.push({ type, lines, location, error });\n }\n\n return output;\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport default {\n nodes,\n tags,\n functions,\n renderers,\n transforms,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n parse,\n transform,\n validate,\n createElement,\n truthy,\n};\n\nexport {\n nodes,\n tags,\n functions,\n transforms,\n renderers,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n};\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & { allowIndentation?: boolean } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.disable('lheading');\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos) || 0;\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = content.split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type { RenderableTreeNode } from '../types';\n\nexport default class Tag {\n readonly $$mdtype = 'Tag' as const;\n\n name: string;\n attributes: Record<string, any>;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div',\n attributes = {},\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute 'class' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import Tag from './ast/tag';\nimport { Class } from './schema-types/class';\nimport type {\n Config,\n Node,\n NodeType,\n Schema,\n RenderableTreeNode,\n RenderableTreeNodes,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: String, render: true },\n};\n\nexport interface Transformer {\n findSchema(node: Node, config: Config): Schema | undefined;\n node(node: Node, config: Config): RenderableTreeNodes;\n attributes(node: Node, config: Config): Record<string, any>;\n children(node: Node, config: Config): RenderableTreeNode[];\n}\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n return node.children.flatMap((child) => this.node(child, config));\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n Location,\n Config,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: string;\n tag?: string;\n\n inline = false;\n location?: Location;\n\n constructor(\n type = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of this.children) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): RenderableTreeNodes {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from '../ast/index';\n\nimport type { Node } from '../types';\n\nfunction convertToRow(node: Node, cellType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag == 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\n\nimport type { AttributeValue } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const { name, value, type } of attributes)\n if (type === 'attribute') node.attributes[name] = value;\n else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list':\n return { ordered: token.type.startsWith('ordered') };\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return { alt: token.content, src: attrs.src };\n }\n case 'text':\n case 'code':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === ''\n ? { content: token.content }\n : { content: token.content, language };\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n parent.push(node);\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], file?: string) {\n const doc = new Node('document');\n const nodes = [doc];\n\n for (const token of tokens) handleToken(token, nodes, file);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './ast/tag';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n colspan: { type: Number },\n rowspan: { type: Number },\n align: { type: String },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform(_node, _config) {\n return ' ';\n },\n};\n\nexport const error = {};\n", "import type { Node, Schema, Value } from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition))\n return children.flatMap((child) => child.transform(config));\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { Node, Config, Schema } from '../types';\n\nexport const partial: Schema = {\n selfClosing: true,\n attributes: {\n file: { type: String, render: false, required: true },\n variables: { type: Object, render: false },\n },\n\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\n\nexport default {\n if: tagIf,\n else: tagElse,\n partial,\n table,\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import MarkdownIt from 'markdown-it';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string') return escapeHtml(node);\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object') return '';\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {}\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import { tagName } from './shared';\nimport type { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nfunction renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n}\n\nfunction deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n}\n\nfunction render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object') return JSON.stringify(node);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n}\n\nexport default function reactStatic(node: RenderableTreeNodes): string {\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter '${key}'`,\n });\n\n return errors;\n}\n\nexport default function validate(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag '${node.tag}'`\n : `Undefined node '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `Tag '${node.tag}' should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n if (schema.validate) errors.push(...schema.validate(node, config));\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else continue;\n }\n\n value = value as string;\n if (key === 'id' && value.match(/^[0-9]/))\n errors.push({\n id: 'attribute-value-invalid',\n level: 'error',\n message: 'The ID attribute must not start with a number',\n });\n\n if (type) {\n const valid = validateType(type, value, config);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${JSON.stringify(\n matches\n )}`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}`,\n });\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n return errors;\n}\n"],
370−- "mappings": "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",
371−+ "sources": ["../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../src/grammar/tag.js", "../node_modules/markdown-it-sup/index.js", "../node_modules/markdown-it/index.js", "../index.ts", "../src/tokenizer/index.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/base.ts", "../src/ast/function.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/ast/tag.ts", "../src/schema-types/class.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/ast/raw.ts", "../src/tags/conditional.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/index.ts", "../src/functions/index.ts", "../src/renderers/html.ts", "../src/renderers/react/shared.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/validator.ts"],
372−+ "sourcesContent": ["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n if (state.md.options.allowIndentation) { return false; }\n\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (!state.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n", "'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n state.pos += match[0].length;\n return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n [ 'text_collapse', require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n var text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\n '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n return tail.match(self.re.no_http)[0].length;\n }\n return 0;\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n return 0;\n }\n }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n var slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [ list ];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n })\n .reverse();\n\n compile(this);\n return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function (expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n\n class: function (expectation) {\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + '-' + classEscape(part[1])\n : classEscape(part);\n });\n\n return '[' + (expectation.inverted ? '^' : '') + escapedParts + ']';\n },\n\n any: function () {\n return 'any character';\n },\n\n end: function () {\n return 'end of input';\n },\n\n other: function (expectation) {\n return expectation.description;\n },\n\n not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\n },\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + ' or ' + descriptions[1];\n\n default:\n return (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\n\n var peg$c0 = '/';\n var peg$c1 = '.';\n var peg$c2 = '#';\n var peg$c3 = '=';\n var peg$c4 = '(';\n var peg$c5 = ')';\n var peg$c6 = ',';\n var peg$c7 = '[';\n var peg$c8 = ']';\n var peg$c9 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if ('startRule' in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: 'literal', text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\n }\n\n function peg$anyExpectation() {\n return { type: 'any' };\n }\n\n function peg$endExpectation() {\n return { type: 'end' };\n }\n\n function peg$otherExpectation(description) {\n return { type: 'other', description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column,\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n", "// Process ^superscript^\n\n'use strict';\n\n// same as UNESCAPE_MD_RE plus a space\nvar UNESCAPE_RE = /\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\nfunction superscript(state, silent) {\n var found,\n content,\n token,\n max = state.posMax,\n start = state.pos;\n\n if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }\n if (silent) { return false; } // don't run any pairs in validation mode\n if (start + 2 >= max) { return false; }\n\n state.pos = start + 1;\n\n while (state.pos < max) {\n if (state.src.charCodeAt(state.pos) === 0x5E/* ^ */) {\n found = true;\n break;\n }\n\n state.md.inline.skipToken(state);\n }\n\n if (!found || start + 1 === state.pos) {\n state.pos = start;\n return false;\n }\n\n content = state.src.slice(start + 1, state.pos);\n\n // don't allow unescaped spaces/newlines inside\n if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n state.pos = start;\n return false;\n }\n\n // found!\n state.posMax = state.pos;\n state.pos = start + 1;\n\n // Earlier we checked !silent, but this implementation does not need it\n token = state.push('sup_open', 'sup', 1);\n token.markup = '^';\n\n token = state.push('text', '', 0);\n token.content = content.replace(UNESCAPE_RE, '$1');\n\n token = state.push('sup_close', 'sup', -1);\n token.markup = '^';\n\n state.pos = state.posMax + 1;\n state.posMax = max;\n return true;\n}\n\n\nmodule.exports = function sup_plugin(md) {\n md.inline.ruler.after('emphasis', 'sup', superscript);\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import Tokenizer from './src/tokenizer';\nimport parser from './src/parser';\nimport Node from './src/ast/node';\nimport Tag from './src/ast/tag';\nimport Ast from './src/ast/index';\nimport * as nodes from './src/schema';\nimport tags from './src/tags/index';\nimport { truthy } from './src/tags/conditional';\nimport functions from './src/functions/index';\nimport renderers from './src/renderers/index';\nimport transformer from './src/transformer';\nimport validator from './src/validator';\nimport { parseTags } from './src/utils';\nimport transforms from './src/transforms/index';\nimport Raw from '@markdoc/markdoc/src/ast/raw';\n\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(content: string | Token[], file?: string): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, file);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n content: Node,\n options?: C\n): ValidateError[] {\n const config = mergeConfig(options);\n\n const output = [];\n for (const node of [content, ...content.walk()]) {\n const { type, lines, location } = node;\n const errors = validator(node, config);\n\n for (const error of errors) output.push({ type, lines, location, error });\n }\n\n return output;\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport default {\n nodes,\n tags,\n functions,\n renderers,\n transforms,\n Ast,\n Tag,\n Raw,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n parse,\n transform,\n validate,\n createElement,\n truthy,\n};\n\nexport {\n nodes,\n tags,\n functions,\n transforms,\n renderers,\n Ast,\n Tag,\n Raw,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n};\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & { allowIndentation?: boolean } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.use(require('markdown-it-sup'))\n this.parser.disable('lheading');\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos) || 0;\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = content.split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type { RenderableTreeNode } from '../types';\n\nexport default class Tag {\n readonly $$mdtype = 'Tag' as const;\n\n name: string;\n attributes: Record<string, any>;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div',\n attributes = {},\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute 'class' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import Tag from './ast/tag';\nimport { Class } from './schema-types/class';\nimport type {\n Config,\n Node,\n NodeType,\n Schema,\n RenderableTreeNode,\n RenderableTreeNodes,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: String, render: true },\n};\n\nexport interface Transformer {\n findSchema(node: Node, config: Config): Schema | undefined;\n node(node: Node, config: Config): RenderableTreeNodes;\n attributes(node: Node, config: Config): Record<string, any>;\n children(node: Node, config: Config): RenderableTreeNode[];\n}\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n return node.children.flatMap((child) => this.node(child, config));\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n Location,\n Config,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: string;\n tag?: string;\n\n inline = false;\n location?: Location;\n\n constructor(\n type = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of this.children) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): RenderableTreeNodes {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from '../ast/index';\n\nimport type { Node } from '../types';\n\nfunction convertToRow(node: Node, cellType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag == 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\n\nimport type { AttributeValue } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n html_block: 'html',\n html_inline: 'html',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const { name, value, type } of attributes)\n if (type === 'attribute') node.attributes[name] = value;\n else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list':\n return { ordered: token.type.startsWith('ordered') };\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return { alt: token.content, src: attrs.src };\n }\n case 'text':\n case 'code':\n case 'html':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === ''\n ? { content: token.content }\n : { content: token.content, language };\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n parent.push(node);\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], file?: string) {\n const doc = new Node('document');\n const nodes = [doc];\n\n for (const token of tokens) handleToken(token, nodes, file);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './ast/tag';\nimport Raw from './ast/raw';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n colspan: { type: Number },\n rowspan: { type: Number },\n align: { type: String },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform(_node, _config) {\n return ' ';\n },\n};\n\nexport const html: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n\n transform(node) {\n return node.attributes.content\n ? new Raw(node.attributes.content, node.inline)\n : null;\n },\n};\n\nexport const error = {};\n", "export default class Raw {\n readonly $$mdtype = 'Raw' as const;\n \n content: string;\n inline: boolean;\n \n constructor(content: string, inline: boolean) {\n this.content = content;\n this.inline = inline;\n }\n }", "import type { Node, Schema, Value } from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition))\n return children.flatMap((child) => child.transform(config));\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { Node, Config, Schema } from '../types';\n\nexport const partial: Schema = {\n selfClosing: true,\n attributes: {\n file: { type: String, render: false, required: true },\n variables: { type: Object, render: false },\n },\n\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\n\nexport default {\n if: tagIf,\n else: tagElse,\n partial,\n table,\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import MarkdownIt from 'markdown-it';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string') return escapeHtml(node);\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object') return '';\n\n if (node.$$mdtype === 'Raw') return node.content;\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {},\n raw?: (content: string, inline: boolean) => ReactNode\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import { tagName } from './shared';\nimport type { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nexport default function reactStatic(\n node: RenderableTreeNodes,\n raw?: (content: string, inline: boolean) => string\n): string {\n function renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n }\n\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object')\n return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n }\n\n function render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object') return JSON.stringify(node);\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline) ?? '';\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n }\n\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter '${key}'`,\n });\n\n return errors;\n}\n\nexport default function validate(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag '${node.tag}'`\n : `Undefined node '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `Tag '${node.tag}' should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n if (schema.validate) errors.push(...schema.validate(node, config));\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else continue;\n }\n\n value = value as string;\n if (key === 'id' && value.match(/^[0-9]/))\n errors.push({\n id: 'attribute-value-invalid',\n level: 'error',\n message: 'The ID attribute must not start with a number',\n });\n\n if (type) {\n const valid = validateType(type, value, config);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${JSON.stringify(\n matches\n )}`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}`,\n });\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n return errors;\n}\n"],
373−+ "mappings": "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",
374− "names": []
375− }
376−diff --git a/node_modules/@markdoc/markdoc/dist/index.mjs b/node_modules/@markdoc/markdoc/dist/index.mjs
377−index b9e074b..4b37345 100644
378−--- a/node_modules/@markdoc/markdoc/dist/index.mjs
379−+++ b/node_modules/@markdoc/markdoc/dist/index.mjs
380−@@ -6590,6 +6590,57 @@ var require_tag = __commonJS({
381− }
382− });
383−
384−+// node_modules/markdown-it-sup/index.js
385−+var require_markdown_it_sup = __commonJS({
386−+ "node_modules/markdown-it-sup/index.js"(exports, module) {
387−+ "use strict";
388−+ var UNESCAPE_RE = /\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;
389−+ function superscript(state, silent) {
390−+ var found, content, token, max = state.posMax, start = state.pos;
391−+ if (state.src.charCodeAt(start) !== 94) {
392−+ return false;
393−+ }
394−+ if (silent) {
395−+ return false;
396−+ }
397−+ if (start + 2 >= max) {
398−+ return false;
399−+ }
400−+ state.pos = start + 1;
401−+ while (state.pos < max) {
402−+ if (state.src.charCodeAt(state.pos) === 94) {
403−+ found = true;
404−+ break;
405−+ }
406−+ state.md.inline.skipToken(state);
407−+ }
408−+ if (!found || start + 1 === state.pos) {
409−+ state.pos = start;
410−+ return false;
411−+ }
412−+ content = state.src.slice(start + 1, state.pos);
413−+ if (content.match(/(^|[^\\])(\\\\)*\s/)) {
414−+ state.pos = start;
415−+ return false;
416−+ }
417−+ state.posMax = state.pos;
418−+ state.pos = start + 1;
419−+ token = state.push("sup_open", "sup", 1);
420−+ token.markup = "^";
421−+ token = state.push("text", "", 0);
422−+ token.content = content.replace(UNESCAPE_RE, "$1");
423−+ token = state.push("sup_close", "sup", -1);
424−+ token.markup = "^";
425−+ state.pos = state.posMax + 1;
426−+ state.posMax = max;
427−+ return true;
428−+ }
429−+ module.exports = function sup_plugin(md) {
430−+ md.inline.ruler.after("emphasis", "sup", superscript);
431−+ };
432−+ }
433−+});
434−+
435− // node_modules/markdown-it/index.js
436− var require_markdown_it = __commonJS({
437− "node_modules/markdown-it/index.js"(exports, module) {
438−@@ -6904,6 +6955,7 @@ var Tokenizer = class {
439− this.parser = new import_lib.default(config);
440− this.parser.use(plugin, "annotations", {});
441− this.parser.use(plugin2, "frontmatter", {});
442−+ this.parser.use(require_markdown_it_sup());
443− this.parser.disable("lheading");
444− }
445− tokenize(content) {
446−@@ -7105,7 +7157,9 @@ var mappings = {
447− bullet_list: "list",
448− code_inline: "code",
449− list_item: "item",
450−- variable: "text"
451−+ variable: "text",
452−+ html_block: "html",
453−+ html_inline: "html"
454− };
455− function annotate(node, attributes) {
456− for (const { name, value, type } of attributes)
457−@@ -7133,6 +7187,7 @@ function handleAttrs(token, type) {
458− }
459− case "text":
460− case "code":
461−+ case "html":
462− return { content: (token.meta || {}).variable || token.content };
463− case "fence": {
464− const [language] = token.info.split(" ", 1);
465−@@ -7243,6 +7298,7 @@ __export(schema_exports, {
466− hardbreak: () => hardbreak,
467− heading: () => heading,
468− hr: () => hr,
469−+ html: () => html,
470− image: () => image,
471− inline: () => inline2,
472− item: () => item,
473−@@ -7260,6 +7316,17 @@ __export(schema_exports, {
474− thead: () => thead,
475− tr: () => tr
476− });
477−+
478−+// src/ast/raw.ts
479−+var Raw = class {
480−+ constructor(content, inline3) {
481−+ this.$$mdtype = "Raw";
482−+ this.content = content;
483−+ this.inline = inline3;
484−+ }
485−+};
486−+
487−+// src/schema.ts
488− var document = {
489− render: "article",
490− children: [
491−@@ -7453,6 +7520,14 @@ var softbreak = {
492− return " ";
493− }
494− };
495−+var html = {
496−+ attributes: {
497−+ content: { type: String, required: true }
498−+ },
499−+ transform(node) {
500−+ return node.attributes.content ? new Raw(node.attributes.content, node.inline) : null;
501−+ }
502−+};
503− var error = {};
504−
505− // src/tags/conditional.ts
506−@@ -7595,6 +7670,8 @@ function render(node) {
507− return node.map(render).join("");
508− if (node === null || typeof node !== "object")
509− return "";
510−+ if (node.$$mdtype === "Raw")
511−+ return node.content;
512− const { name, attributes, children = [] } = node;
513− if (!name)
514− return render(children);
515−@@ -7616,26 +7693,28 @@ function tagName(name, components) {
516− }
517−
518− // src/renderers/react/react.ts
519−-function dynamic(node, React, { components = {} } = {}) {
520−- function deepRender2(value) {
521−+function dynamic(node, React, { components = {} } = {}, raw) {
522−+ function deepRender(value) {
523− if (value == null || typeof value !== "object")
524− return value;
525− if (Array.isArray(value))
526−- return value.map((item2) => deepRender2(item2));
527−- if (value.$$mdtype === "Tag")
528−- return render3(value);
529−+ return value.map((item2) => deepRender(item2));
530−+ if (["Tag", "Raw"].includes(value.$$mdtype))
531−+ return render2(value);
532− if (typeof value !== "object")
533− return value;
534− const output = {};
535− for (const [k, v] of Object.entries(value))
536−- output[k] = deepRender2(v);
537−+ output[k] = deepRender(v);
538− return output;
539− }
540−- function render3(node2) {
541−+ function render2(node2) {
542− if (Array.isArray(node2))
543−- return React.createElement(React.Fragment, null, ...node2.map(render3));
544−+ return React.createElement(React.Fragment, null, ...node2.map(render2));
545− if (node2 === null || typeof node2 !== "object")
546− return node2;
547−+ if (node2.$$mdtype === "Raw")
548−+ return raw?.(node2.content, node2.inline);
549− const {
550− name,
551− attributes: { class: className, ...attrs } = {},
552−@@ -7643,45 +7722,47 @@ function dynamic(node, React, { components = {} } = {}) {
553− } = node2;
554− if (className)
555− attrs.className = className;
556−- return React.createElement(tagName(name, components), Object.keys(attrs).length == 0 ? null : deepRender2(attrs), ...children.map(render3));
557−+ return React.createElement(tagName(name, components), Object.keys(attrs).length == 0 ? null : deepRender(attrs), ...children.map(render2));
558− }
559−- return render3(node);
560−+ return render2(node);
561− }
562−
563− // src/renderers/react/static.ts
564−-function renderArray(children) {
565−- return children.map(render2).join(", ");
566−-}
567−-function deepRender(value) {
568−- if (value == null || typeof value !== "object")
569−- return JSON.stringify(value);
570−- if (Array.isArray(value))
571−- return `[${value.map((item2) => deepRender(item2)).join(", ")}]`;
572−- if (value.$$mdtype === "Tag")
573−- return render2(value);
574−- if (typeof value !== "object")
575−- return JSON.stringify(value);
576−- const object = Object.entries(value).map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(": ")).join(", ");
577−- return `{${object}}`;
578−-}
579−-function render2(node) {
580−- if (Array.isArray(node))
581−- return `React.createElement(React.Fragment, null, ${renderArray(node)})`;
582−- if (node === null || typeof node !== "object")
583−- return JSON.stringify(node);
584−- const {
585−- name,
586−- attributes: { class: className, ...attrs } = {},
587−- children = []
588−- } = node;
589−- if (className)
590−- attrs.className = className;
591−- return `React.createElement(
592−+function reactStatic(node, raw) {
593−+ function renderArray(children) {
594−+ return children.map(render2).join(", ");
595−+ }
596−+ function deepRender(value) {
597−+ if (value == null || typeof value !== "object")
598−+ return JSON.stringify(value);
599−+ if (Array.isArray(value))
600−+ return `[${value.map((item2) => deepRender(item2)).join(", ")}]`;
601−+ if (["Tag", "Raw"].includes(value.$$mdtype))
602−+ return render2(value);
603−+ if (typeof value !== "object")
604−+ return JSON.stringify(value);
605−+ const object = Object.entries(value).map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(": ")).join(", ");
606−+ return `{${object}}`;
607−+ }
608−+ function render2(node2) {
609−+ if (Array.isArray(node2))
610−+ return `React.createElement(React.Fragment, null, ${renderArray(node2)})`;
611−+ if (node2 === null || typeof node2 !== "object")
612−+ return JSON.stringify(node2);
613−+ if (node2.$$mdtype === "Raw")
614−+ return raw?.(node2.content, node2.inline) ?? "";
615−+ const {
616−+ name,
617−+ attributes: { class: className, ...attrs } = {},
618−+ children = []
619−+ } = node2;
620−+ if (className)
621−+ attrs.className = className;
622−+ return `React.createElement(
623− tagName(${JSON.stringify(name)}, components),
624− ${Object.keys(attrs).length == 0 ? "null" : deepRender(attrs)},
625− ${renderArray(children)})`;
626−-}
627−-function reactStatic(node) {
628−+ }
629− return `
630− (({components = {}} = {}) => {
631− ${tagName}
632−@@ -7929,6 +8010,7 @@ var markdoc_default = {
633− transforms: transforms_default,
634− Ast: ast_default,
635− Tag,
636−+ Raw,
637− Tokenizer,
638− parseTags,
639− transformer: transformer_default,
640−@@ -7941,6 +8023,7 @@ var markdoc_default = {
641− };
642− export {
643− ast_default as Ast,
644−+ Raw,
645− Tag,
646− Tokenizer,
647− createElement,
648−diff --git a/node_modules/@markdoc/markdoc/dist/index.mjs.map b/node_modules/@markdoc/markdoc/dist/index.mjs.map
649−index c8e26b7..1fe6693 100644
650−--- a/node_modules/@markdoc/markdoc/dist/index.mjs.map
651−+++ b/node_modules/@markdoc/markdoc/dist/index.mjs.map
652−@@ -1,7 +1,7 @@
653− {
654− "version": 3,
655−- "sources": ["../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../src/grammar/tag.js", "../node_modules/markdown-it/index.js", "../src/tokenizer/index.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/base.ts", "../src/ast/function.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/ast/tag.ts", "../src/schema-types/class.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/tags/conditional.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/index.ts", "../src/functions/index.ts", "../src/renderers/html.ts", "../src/renderers/react/shared.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/validator.ts", "../index.ts"],
656−- "sourcesContent": ["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n if (state.md.options.allowIndentation) { return false; }\n\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (!state.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n", "'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n state.pos += match[0].length;\n return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n [ 'text_collapse', require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n var text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\n '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n return tail.match(self.re.no_http)[0].length;\n }\n return 0;\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n return 0;\n }\n }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n var slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [ list ];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n })\n .reverse();\n\n compile(this);\n return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function (expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n\n class: function (expectation) {\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + '-' + classEscape(part[1])\n : classEscape(part);\n });\n\n return '[' + (expectation.inverted ? '^' : '') + escapedParts + ']';\n },\n\n any: function () {\n return 'any character';\n },\n\n end: function () {\n return 'end of input';\n },\n\n other: function (expectation) {\n return expectation.description;\n },\n\n not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\n },\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + ' or ' + descriptions[1];\n\n default:\n return (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\n\n var peg$c0 = '/';\n var peg$c1 = '.';\n var peg$c2 = '#';\n var peg$c3 = '=';\n var peg$c4 = '(';\n var peg$c5 = ')';\n var peg$c6 = ',';\n var peg$c7 = '[';\n var peg$c8 = ']';\n var peg$c9 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if ('startRule' in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: 'literal', text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\n }\n\n function peg$anyExpectation() {\n return { type: 'any' };\n }\n\n function peg$endExpectation() {\n return { type: 'end' };\n }\n\n function peg$otherExpectation(description) {\n return { type: 'other', description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column,\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & { allowIndentation?: boolean } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.disable('lheading');\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos) || 0;\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = content.split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type { RenderableTreeNode } from '../types';\n\nexport default class Tag {\n readonly $$mdtype = 'Tag' as const;\n\n name: string;\n attributes: Record<string, any>;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div',\n attributes = {},\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute 'class' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import Tag from './ast/tag';\nimport { Class } from './schema-types/class';\nimport type {\n Config,\n Node,\n NodeType,\n Schema,\n RenderableTreeNode,\n RenderableTreeNodes,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: String, render: true },\n};\n\nexport interface Transformer {\n findSchema(node: Node, config: Config): Schema | undefined;\n node(node: Node, config: Config): RenderableTreeNodes;\n attributes(node: Node, config: Config): Record<string, any>;\n children(node: Node, config: Config): RenderableTreeNode[];\n}\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n return node.children.flatMap((child) => this.node(child, config));\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n Location,\n Config,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: string;\n tag?: string;\n\n inline = false;\n location?: Location;\n\n constructor(\n type = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of this.children) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): RenderableTreeNodes {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from '../ast/index';\n\nimport type { Node } from '../types';\n\nfunction convertToRow(node: Node, cellType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag == 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\n\nimport type { AttributeValue } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const { name, value, type } of attributes)\n if (type === 'attribute') node.attributes[name] = value;\n else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list':\n return { ordered: token.type.startsWith('ordered') };\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return { alt: token.content, src: attrs.src };\n }\n case 'text':\n case 'code':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === ''\n ? { content: token.content }\n : { content: token.content, language };\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n parent.push(node);\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], file?: string) {\n const doc = new Node('document');\n const nodes = [doc];\n\n for (const token of tokens) handleToken(token, nodes, file);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './ast/tag';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n colspan: { type: Number },\n rowspan: { type: Number },\n align: { type: String },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform(_node, _config) {\n return ' ';\n },\n};\n\nexport const error = {};\n", "import type { Node, Schema, Value } from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition))\n return children.flatMap((child) => child.transform(config));\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { Node, Config, Schema } from '../types';\n\nexport const partial: Schema = {\n selfClosing: true,\n attributes: {\n file: { type: String, render: false, required: true },\n variables: { type: Object, render: false },\n },\n\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\n\nexport default {\n if: tagIf,\n else: tagElse,\n partial,\n table,\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import MarkdownIt from 'markdown-it';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string') return escapeHtml(node);\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object') return '';\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {}\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import { tagName } from './shared';\nimport type { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nfunction renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n}\n\nfunction deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n}\n\nfunction render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object') return JSON.stringify(node);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n}\n\nexport default function reactStatic(node: RenderableTreeNodes): string {\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter '${key}'`,\n });\n\n return errors;\n}\n\nexport default function validate(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag '${node.tag}'`\n : `Undefined node '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `Tag '${node.tag}' should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n if (schema.validate) errors.push(...schema.validate(node, config));\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else continue;\n }\n\n value = value as string;\n if (key === 'id' && value.match(/^[0-9]/))\n errors.push({\n id: 'attribute-value-invalid',\n level: 'error',\n message: 'The ID attribute must not start with a number',\n });\n\n if (type) {\n const valid = validateType(type, value, config);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${JSON.stringify(\n matches\n )}`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}`,\n });\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n return errors;\n}\n", "import Tokenizer from './src/tokenizer';\nimport parser from './src/parser';\nimport Node from './src/ast/node';\nimport Tag from './src/ast/tag';\nimport Ast from './src/ast/index';\nimport * as nodes from './src/schema';\nimport tags from './src/tags/index';\nimport { truthy } from './src/tags/conditional';\nimport functions from './src/functions/index';\nimport renderers from './src/renderers/index';\nimport transformer from './src/transformer';\nimport validator from './src/validator';\nimport { parseTags } from './src/utils';\nimport transforms from './src/transforms/index';\n\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(content: string | Token[], file?: string): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, file);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n content: Node,\n options?: C\n): ValidateError[] {\n const config = mergeConfig(options);\n\n const output = [];\n for (const node of [content, ...content.walk()]) {\n const { type, lines, location } = node;\n const errors = validator(node, config);\n\n for (const error of errors) output.push({ type, lines, location, error });\n }\n\n return output;\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport default {\n nodes,\n tags,\n functions,\n renderers,\n transforms,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n parse,\n transform,\n validate,\n createElement,\n truthy,\n};\n\nexport {\n nodes,\n tags,\n functions,\n transforms,\n renderers,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n};\n"],
657−- "mappings": "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",
658−+ "sources": ["../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../src/grammar/tag.js", "../node_modules/markdown-it-sup/index.js", "../node_modules/markdown-it/index.js", "../src/tokenizer/index.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/base.ts", "../src/ast/function.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/ast/tag.ts", "../src/schema-types/class.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/ast/raw.ts", "../src/tags/conditional.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/index.ts", "../src/functions/index.ts", "../src/renderers/html.ts", "../src/renderers/react/shared.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/validator.ts", "../index.ts"],
659−+ "sourcesContent": ["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n if (state.md.options.allowIndentation) { return false; }\n\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (!state.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n", "'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n state.pos += match[0].length;\n return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n [ 'text_collapse', require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n var text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\n '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n return tail.match(self.re.no_http)[0].length;\n }\n return 0;\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n return 0;\n }\n }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n var slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [ list ];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n })\n .reverse();\n\n compile(this);\n return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function (expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n\n class: function (expectation) {\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + '-' + classEscape(part[1])\n : classEscape(part);\n });\n\n return '[' + (expectation.inverted ? '^' : '') + escapedParts + ']';\n },\n\n any: function () {\n return 'any character';\n },\n\n end: function () {\n return 'end of input';\n },\n\n other: function (expectation) {\n return expectation.description;\n },\n\n not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\n },\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + ' or ' + descriptions[1];\n\n default:\n return (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\n\n var peg$c0 = '/';\n var peg$c1 = '.';\n var peg$c2 = '#';\n var peg$c3 = '=';\n var peg$c4 = '(';\n var peg$c5 = ')';\n var peg$c6 = ',';\n var peg$c7 = '[';\n var peg$c8 = ']';\n var peg$c9 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if ('startRule' in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: 'literal', text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\n }\n\n function peg$anyExpectation() {\n return { type: 'any' };\n }\n\n function peg$endExpectation() {\n return { type: 'end' };\n }\n\n function peg$otherExpectation(description) {\n return { type: 'other', description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column,\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n", "// Process ^superscript^\n\n'use strict';\n\n// same as UNESCAPE_MD_RE plus a space\nvar UNESCAPE_RE = /\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\nfunction superscript(state, silent) {\n var found,\n content,\n token,\n max = state.posMax,\n start = state.pos;\n\n if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }\n if (silent) { return false; } // don't run any pairs in validation mode\n if (start + 2 >= max) { return false; }\n\n state.pos = start + 1;\n\n while (state.pos < max) {\n if (state.src.charCodeAt(state.pos) === 0x5E/* ^ */) {\n found = true;\n break;\n }\n\n state.md.inline.skipToken(state);\n }\n\n if (!found || start + 1 === state.pos) {\n state.pos = start;\n return false;\n }\n\n content = state.src.slice(start + 1, state.pos);\n\n // don't allow unescaped spaces/newlines inside\n if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n state.pos = start;\n return false;\n }\n\n // found!\n state.posMax = state.pos;\n state.pos = start + 1;\n\n // Earlier we checked !silent, but this implementation does not need it\n token = state.push('sup_open', 'sup', 1);\n token.markup = '^';\n\n token = state.push('text', '', 0);\n token.content = content.replace(UNESCAPE_RE, '$1');\n\n token = state.push('sup_close', 'sup', -1);\n token.markup = '^';\n\n state.pos = state.posMax + 1;\n state.posMax = max;\n return true;\n}\n\n\nmodule.exports = function sup_plugin(md) {\n md.inline.ruler.after('emphasis', 'sup', superscript);\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & { allowIndentation?: boolean } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.use(require('markdown-it-sup'))\n this.parser.disable('lheading');\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos) || 0;\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = content.split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type { RenderableTreeNode } from '../types';\n\nexport default class Tag {\n readonly $$mdtype = 'Tag' as const;\n\n name: string;\n attributes: Record<string, any>;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div',\n attributes = {},\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute 'class' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import Tag from './ast/tag';\nimport { Class } from './schema-types/class';\nimport type {\n Config,\n Node,\n NodeType,\n Schema,\n RenderableTreeNode,\n RenderableTreeNodes,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: String, render: true },\n};\n\nexport interface Transformer {\n findSchema(node: Node, config: Config): Schema | undefined;\n node(node: Node, config: Config): RenderableTreeNodes;\n attributes(node: Node, config: Config): Record<string, any>;\n children(node: Node, config: Config): RenderableTreeNode[];\n}\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n return node.children.flatMap((child) => this.node(child, config));\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n Location,\n Config,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: string;\n tag?: string;\n\n inline = false;\n location?: Location;\n\n constructor(\n type = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of this.children) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): RenderableTreeNodes {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from '../ast/index';\n\nimport type { Node } from '../types';\n\nfunction convertToRow(node: Node, cellType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag == 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\n\nimport type { AttributeValue } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n html_block: 'html',\n html_inline: 'html',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const { name, value, type } of attributes)\n if (type === 'attribute') node.attributes[name] = value;\n else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list':\n return { ordered: token.type.startsWith('ordered') };\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return { alt: token.content, src: attrs.src };\n }\n case 'text':\n case 'code':\n case 'html':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === ''\n ? { content: token.content }\n : { content: token.content, language };\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n parent.push(node);\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], file?: string) {\n const doc = new Node('document');\n const nodes = [doc];\n\n for (const token of tokens) handleToken(token, nodes, file);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './ast/tag';\nimport Raw from './ast/raw';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n colspan: { type: Number },\n rowspan: { type: Number },\n align: { type: String },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform(_node, _config) {\n return ' ';\n },\n};\n\nexport const html: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n\n transform(node) {\n return node.attributes.content\n ? new Raw(node.attributes.content, node.inline)\n : null;\n },\n};\n\nexport const error = {};\n", "export default class Raw {\n readonly $$mdtype = 'Raw' as const;\n \n content: string;\n inline: boolean;\n \n constructor(content: string, inline: boolean) {\n this.content = content;\n this.inline = inline;\n }\n }", "import type { Node, Schema, Value } from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition))\n return children.flatMap((child) => child.transform(config));\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { Node, Config, Schema } from '../types';\n\nexport const partial: Schema = {\n selfClosing: true,\n attributes: {\n file: { type: String, render: false, required: true },\n variables: { type: Object, render: false },\n },\n\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\n\nexport default {\n if: tagIf,\n else: tagElse,\n partial,\n table,\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import MarkdownIt from 'markdown-it';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string') return escapeHtml(node);\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object') return '';\n\n if (node.$$mdtype === 'Raw') return node.content;\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {},\n raw?: (content: string, inline: boolean) => ReactNode\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import { tagName } from './shared';\nimport type { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nexport default function reactStatic(\n node: RenderableTreeNodes,\n raw?: (content: string, inline: boolean) => string\n): string {\n function renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n }\n\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object')\n return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n }\n\n function render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object') return JSON.stringify(node);\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline) ?? '';\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n }\n\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter '${key}'`,\n });\n\n return errors;\n}\n\nexport default function validate(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag '${node.tag}'`\n : `Undefined node '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `Tag '${node.tag}' should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n if (schema.validate) errors.push(...schema.validate(node, config));\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else continue;\n }\n\n value = value as string;\n if (key === 'id' && value.match(/^[0-9]/))\n errors.push({\n id: 'attribute-value-invalid',\n level: 'error',\n message: 'The ID attribute must not start with a number',\n });\n\n if (type) {\n const valid = validateType(type, value, config);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${JSON.stringify(\n matches\n )}`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}`,\n });\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n return errors;\n}\n", "import Tokenizer from './src/tokenizer';\nimport parser from './src/parser';\nimport Node from './src/ast/node';\nimport Tag from './src/ast/tag';\nimport Ast from './src/ast/index';\nimport * as nodes from './src/schema';\nimport tags from './src/tags/index';\nimport { truthy } from './src/tags/conditional';\nimport functions from './src/functions/index';\nimport renderers from './src/renderers/index';\nimport transformer from './src/transformer';\nimport validator from './src/validator';\nimport { parseTags } from './src/utils';\nimport transforms from './src/transforms/index';\nimport Raw from '@markdoc/markdoc/src/ast/raw';\n\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(content: string | Token[], file?: string): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, file);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n content: Node,\n options?: C\n): ValidateError[] {\n const config = mergeConfig(options);\n\n const output = [];\n for (const node of [content, ...content.walk()]) {\n const { type, lines, location } = node;\n const errors = validator(node, config);\n\n for (const error of errors) output.push({ type, lines, location, error });\n }\n\n return output;\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport default {\n nodes,\n tags,\n functions,\n renderers,\n transforms,\n Ast,\n Tag,\n Raw,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n parse,\n transform,\n validate,\n createElement,\n truthy,\n};\n\nexport {\n nodes,\n tags,\n functions,\n transforms,\n renderers,\n Ast,\n Tag,\n Raw,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n};\n"],
660−+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAEA;AAGA,WAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA;AAAA,WAAO,UAAQ;AAAA;AAAA;;;ACAf;AAAA;AACA;AAGA,QAAI,cAAc;AAMlB,4BAAwB,SAAS;AAC/B,UAAI,GAAG,IAAI,QAAQ,YAAY;AAC/B,UAAI,OAAO;AAAE,eAAO;AAAA;AAEpB,cAAQ,YAAY,WAAW;AAE/B,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,aAAK,OAAO,aAAa;AAEzB,YAAI,cAAc,KAAK,KAAK;AAE1B,gBAAM,KAAK;AAAA,eACN;AACL,gBAAM,KAAK,MAAO,OAAM,EAAE,SAAS,IAAI,eAAe,MAAM;AAAA;AAAA;AAIhE,WAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,cAAM,QAAQ,WAAW,MAAM,QAAQ;AAAA;AAGzC,aAAO;AAAA;AAWT,oBAAgB,QAAQ,SAAS,aAAa;AAC5C,UAAI,GAAG,GAAG,OAAM,UAAU,OACtB,SAAS;AAEb,UAAI,OAAO,YAAY,UAAU;AAE/B,sBAAe;AACf,kBAAU,OAAO;AAAA;AAGnB,UAAI,OAAO,gBAAgB,aAAa;AACtC,sBAAc;AAAA;AAGhB,cAAQ,eAAe;AAEvB,WAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;AACzC,gBAAO,OAAO,WAAW;AAEzB,YAAI,eAAe,UAAS,MAAgB,IAAI,IAAI,GAAG;AACrD,cAAI,iBAAiB,KAAK,OAAO,MAAM,IAAI,GAAG,IAAI,KAAK;AACrD,sBAAU,OAAO,MAAM,GAAG,IAAI;AAC9B,iBAAK;AACL;AAAA;AAAA;AAIJ,YAAI,QAAO,KAAK;AACd,oBAAU,MAAM;AAChB;AAAA;AAGF,YAAI,SAAQ,SAAU,SAAQ,OAAQ;AACpC,cAAI,SAAQ,SAAU,SAAQ,SAAU,IAAI,IAAI,GAAG;AACjD,uBAAW,OAAO,WAAW,IAAI;AACjC,gBAAI,YAAY,SAAU,YAAY,OAAQ;AAC5C,wBAAU,mBAAmB,OAAO,KAAK,OAAO,IAAI;AACpD;AACA;AAAA;AAAA;AAGJ,oBAAU;AACV;AAAA;AAGF,kBAAU,mBAAmB,OAAO;AAAA;AAGtC,aAAO;AAAA;AAGT,WAAO,eAAiB;AACxB,WAAO,iBAAiB;AAGxB,WAAO,UAAU;AAAA;AAAA;;;ACjGjB;AAAA;AACA;AAKA,QAAI,cAAc;AAElB,4BAAwB,SAAS;AAC/B,UAAI,GAAG,IAAI,QAAQ,YAAY;AAC/B,UAAI,OAAO;AAAE,eAAO;AAAA;AAEpB,cAAQ,YAAY,WAAW;AAE/B,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,aAAK,OAAO,aAAa;AACzB,cAAM,KAAK;AAAA;AAGb,WAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,aAAK,QAAQ,WAAW;AACxB,cAAM,MAAM,MAAO,OAAM,GAAG,SAAS,IAAI,eAAe,MAAM;AAAA;AAGhE,aAAO;AAAA;AAMT,oBAAgB,QAAQ,SAAS;AAC/B,UAAI;AAEJ,UAAI,OAAO,YAAY,UAAU;AAC/B,kBAAU,OAAO;AAAA;AAGnB,cAAQ,eAAe;AAEvB,aAAO,OAAO,QAAQ,qBAAqB,SAAS,KAAK;AACvD,YAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KACtB,SAAS;AAEb,aAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAI,GAAG,KAAK,GAAG;AACzC,eAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI;AAEvC,cAAI,KAAK,KAAM;AACb,sBAAU,MAAM;AAChB;AAAA;AAGF,cAAK,MAAK,SAAU,OAAS,IAAI,IAAI,GAAI;AAEvC,iBAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI;AAEvC,gBAAK,MAAK,SAAU,KAAM;AACxB,oBAAQ,MAAM,IAAK,OAAU,KAAK;AAElC,kBAAI,MAAM,KAAM;AACd,0BAAU;AAAA,qBACL;AACL,0BAAU,OAAO,aAAa;AAAA;AAGhC,mBAAK;AACL;AAAA;AAAA;AAIJ,cAAK,MAAK,SAAU,OAAS,IAAI,IAAI,GAAI;AAEvC,iBAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI;AACvC,iBAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI;AAEvC,gBAAK,MAAK,SAAU,OAAS,MAAK,SAAU,KAAM;AAChD,oBAAQ,MAAM,KAAM,QAAY,MAAM,IAAK,OAAU,KAAK;AAE1D,kBAAI,MAAM,QAAU,OAAO,SAAU,OAAO,OAAS;AACnD,0BAAU;AAAA,qBACL;AACL,0BAAU,OAAO,aAAa;AAAA;AAGhC,mBAAK;AACL;AAAA;AAAA;AAIJ,cAAK,MAAK,SAAU,OAAS,IAAI,IAAI,GAAI;AAEvC,iBAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI;AACvC,iBAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI;AACvC,iBAAK,SAAS,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK;AAEzC,gBAAK,MAAK,SAAU,OAAS,MAAK,SAAU,OAAS,MAAK,SAAU,KAAM;AACxE,oBAAQ,MAAM,KAAM,UAAc,MAAM,KAAM,SAAa,MAAM,IAAK,OAAU,KAAK;AAErF,kBAAI,MAAM,SAAW,MAAM,SAAU;AACnC,0BAAU;AAAA,qBACL;AACL,uBAAO;AACP,0BAAU,OAAO,aAAa,QAAU,QAAO,KAAK,QAAU,OAAM;AAAA;AAGtE,mBAAK;AACL;AAAA;AAAA;AAIJ,oBAAU;AAAA;AAGZ,eAAO;AAAA;AAAA;AAKX,WAAO,eAAiB;AACxB,WAAO,iBAAiB;AAGxB,WAAO,UAAU;AAAA;AAAA;;;ACzHjB;AAAA;AACA;AAGA,WAAO,UAAU,gBAAgB,KAAK;AACpC,UAAI,SAAS;AAEb,gBAAU,IAAI,YAAY;AAC1B,gBAAU,IAAI,UAAU,OAAO;AAC/B,gBAAU,IAAI,OAAO,IAAI,OAAO,MAAM;AAEtC,UAAI,IAAI,YAAY,IAAI,SAAS,QAAQ,SAAS,IAAI;AAEpD,kBAAU,MAAM,IAAI,WAAW;AAAA,aAC1B;AACL,kBAAU,IAAI,YAAY;AAAA;AAG5B,gBAAU,IAAI,OAAO,MAAM,IAAI,OAAO;AACtC,gBAAU,IAAI,YAAY;AAC1B,gBAAU,IAAI,UAAU;AACxB,gBAAU,IAAI,QAAQ;AAEtB,aAAO;AAAA;AAAA;AAAA;;;ACvBT;AAAA;AAqBA;AAwBA,mBAAe;AACb,WAAK,WAAW;AAChB,WAAK,UAAU;AACf,WAAK,OAAO;AACZ,WAAK,OAAO;AACZ,WAAK,WAAW;AAChB,WAAK,OAAO;AACZ,WAAK,SAAS;AACd,WAAK,WAAW;AAAA;AAOlB,QAAI,kBAAkB;AAAtB,QACI,cAAc;AADlB,QAII,oBAAoB;AAJxB,QAQI,SAAS,CAAE,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM;AARpD,QAWI,SAAS,CAAE,KAAK,KAAK,KAAK,MAAM,KAAK,KAAM,OAAO;AAXtD,QAcI,aAAa,CAAE,KAAO,OAAO;AAdjC,QAmBI,eAAe,CAAE,KAAK,KAAK,KAAK,KAAK,KAAM,OAAO;AAnBtD,QAoBI,kBAAkB,CAAE,KAAK,KAAK;AApBlC,QAqBI,iBAAiB;AArBrB,QAsBI,sBAAsB;AAtB1B,QAuBI,oBAAoB;AAvBxB,QA2BI,mBAAmB;AAAA,MACjB,cAAc;AAAA,MACd,eAAe;AAAA;AA7BrB,QAgCI,kBAAkB;AAAA,MAChB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA;AAIf,sBAAkB,KAAK,mBAAmB;AACxC,UAAI,OAAO,eAAe,KAAK;AAAE,eAAO;AAAA;AAExC,UAAI,IAAI,IAAI;AACZ,QAAE,MAAM,KAAK;AACb,aAAO;AAAA;AAGT,QAAI,UAAU,QAAQ,SAAS,KAAK,mBAAmB;AACrD,UAAI,GAAG,GAAG,YAAY,KAAK,SACvB,OAAO;AAIX,aAAO,KAAK;AAEZ,UAAI,CAAC,qBAAqB,IAAI,MAAM,KAAK,WAAW,GAAG;AAErD,YAAI,aAAa,kBAAkB,KAAK;AACxC,YAAI,YAAY;AACd,eAAK,WAAW,WAAW;AAC3B,cAAI,WAAW,IAAI;AACjB,iBAAK,SAAS,WAAW;AAAA;AAE3B,iBAAO;AAAA;AAAA;AAIX,UAAI,QAAQ,gBAAgB,KAAK;AACjC,UAAI,OAAO;AACT,gBAAQ,MAAM;AACd,qBAAa,MAAM;AACnB,aAAK,WAAW;AAChB,eAAO,KAAK,OAAO,MAAM;AAAA;AAO3B,UAAI,qBAAqB,SAAS,KAAK,MAAM,yBAAyB;AACpE,kBAAU,KAAK,OAAO,GAAG,OAAO;AAChC,YAAI,WAAW,CAAE,UAAS,iBAAiB,SAAS;AAClD,iBAAO,KAAK,OAAO;AACnB,eAAK,UAAU;AAAA;AAAA;AAInB,UAAI,CAAC,iBAAiB,UACjB,YAAY,SAAS,CAAC,gBAAgB,SAAU;AAkBnD,YAAI,UAAU;AACd,aAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC3C,gBAAM,KAAK,QAAQ,gBAAgB;AACnC,cAAI,QAAQ,MAAO,aAAY,MAAM,MAAM,UAAU;AACnD,sBAAU;AAAA;AAAA;AAMd,YAAI,MAAM;AACV,YAAI,YAAY,IAAI;AAElB,mBAAS,KAAK,YAAY;AAAA,eACrB;AAGL,mBAAS,KAAK,YAAY,KAAK;AAAA;AAKjC,YAAI,WAAW,IAAI;AACjB,iBAAO,KAAK,MAAM,GAAG;AACrB,iBAAO,KAAK,MAAM,SAAS;AAC3B,eAAK,OAAO;AAAA;AAId,kBAAU;AACV,aAAK,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AACxC,gBAAM,KAAK,QAAQ,aAAa;AAChC,cAAI,QAAQ,MAAO,aAAY,MAAM,MAAM,UAAU;AACnD,sBAAU;AAAA;AAAA;AAId,YAAI,YAAY,IAAI;AAClB,oBAAU,KAAK;AAAA;AAGjB,YAAI,KAAK,UAAU,OAAO,KAAK;AAAE;AAAA;AACjC,YAAI,OAAO,KAAK,MAAM,GAAG;AACzB,eAAO,KAAK,MAAM;AAGlB,aAAK,UAAU;AAIf,aAAK,WAAW,KAAK,YAAY;AAIjC,YAAI,eAAe,KAAK,SAAS,OAAO,OACpC,KAAK,SAAS,KAAK,SAAS,SAAS,OAAO;AAGhD,YAAI,CAAC,cAAc;AACjB,cAAI,YAAY,KAAK,SAAS,MAAM;AACpC,eAAK,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AAC5C,gBAAI,OAAO,UAAU;AACrB,gBAAI,CAAC,MAAM;AAAE;AAAA;AACb,gBAAI,CAAC,KAAK,MAAM,sBAAsB;AACpC,kBAAI,UAAU;AACd,uBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK;AAC3C,oBAAI,KAAK,WAAW,KAAK,KAAK;AAI5B,6BAAW;AAAA,uBACN;AACL,6BAAW,KAAK;AAAA;AAAA;AAIpB,kBAAI,CAAC,QAAQ,MAAM,sBAAsB;AACvC,oBAAI,aAAa,UAAU,MAAM,GAAG;AACpC,oBAAI,UAAU,UAAU,MAAM,IAAI;AAClC,oBAAI,MAAM,KAAK,MAAM;AACrB,oBAAI,KAAK;AACP,6BAAW,KAAK,IAAI;AACpB,0BAAQ,QAAQ,IAAI;AAAA;AAEtB,oBAAI,QAAQ,QAAQ;AAClB,yBAAO,QAAQ,KAAK,OAAO;AAAA;AAE7B,qBAAK,WAAW,WAAW,KAAK;AAChC;AAAA;AAAA;AAAA;AAAA;AAMR,YAAI,KAAK,SAAS,SAAS,gBAAgB;AACzC,eAAK,WAAW;AAAA;AAKlB,YAAI,cAAc;AAChB,eAAK,WAAW,KAAK,SAAS,OAAO,GAAG,KAAK,SAAS,SAAS;AAAA;AAAA;AAKnE,UAAI,OAAO,KAAK,QAAQ;AACxB,UAAI,SAAS,IAAI;AAEf,aAAK,OAAO,KAAK,OAAO;AACxB,eAAO,KAAK,MAAM,GAAG;AAAA;AAEvB,UAAI,KAAK,KAAK,QAAQ;AACtB,UAAI,OAAO,IAAI;AACb,aAAK,SAAS,KAAK,OAAO;AAC1B,eAAO,KAAK,MAAM,GAAG;AAAA;AAEvB,UAAI,MAAM;AAAE,aAAK,WAAW;AAAA;AAC5B,UAAI,gBAAgB,eAChB,KAAK,YAAY,CAAC,KAAK,UAAU;AACnC,aAAK,WAAW;AAAA;AAGlB,aAAO;AAAA;AAGT,QAAI,UAAU,YAAY,SAAS,MAAM;AACvC,UAAI,OAAO,YAAY,KAAK;AAC5B,UAAI,MAAM;AACR,eAAO,KAAK;AACZ,YAAI,SAAS,KAAK;AAChB,eAAK,OAAO,KAAK,OAAO;AAAA;AAE1B,eAAO,KAAK,OAAO,GAAG,KAAK,SAAS,KAAK;AAAA;AAE3C,UAAI,MAAM;AAAE,aAAK,WAAW;AAAA;AAAA;AAG9B,WAAO,UAAU;AAAA;AAAA;;;ACvTjB;AAAA;AAAA;AAGA,WAAO,QAAQ,SAAS;AACxB,WAAO,QAAQ,SAAS;AACxB,WAAO,QAAQ,SAAS;AACxB,WAAO,QAAQ,QAAS;AAAA;AAAA;;;ACNxB;AAAA;AAAA,WAAO,UAAQ;AAAA;AAAA;;;ACAf;AAAA;AAAA,WAAO,UAAQ;AAAA;AAAA;;;ACAf;AAAA;AAAA,WAAO,UAAQ;AAAA;AAAA;;;ACAf;AAAA;AAAA,WAAO,UAAQ;AAAA;AAAA;;;ACAf;AAAA;AAAA;AAEA,YAAQ,MAAM;AACd,YAAQ,KAAM;AACd,YAAQ,KAAM;AACd,YAAQ,IAAM;AACd,YAAQ,IAAM;AAAA;AAAA;;;ACNd;AAAA;AAEA;AAGA,oBAAgB,KAAK;AAAE,aAAO,OAAO,UAAU,SAAS,KAAK;AAAA;AAE7D,sBAAkB,KAAK;AAAE,aAAO,OAAO,SAAS;AAAA;AAEhD,QAAI,kBAAkB,OAAO,UAAU;AAEvC,iBAAa,QAAQ,KAAK;AACxB,aAAO,gBAAgB,KAAK,QAAQ;AAAA;AAKtC,oBAAgB,KAAkC;AAChD,UAAI,UAAU,MAAM,UAAU,MAAM,KAAK,WAAW;AAEpD,cAAQ,QAAQ,SAAU,QAAQ;AAChC,YAAI,CAAC,QAAQ;AAAE;AAAA;AAEf,YAAI,OAAO,WAAW,UAAU;AAC9B,gBAAM,IAAI,UAAU,SAAS;AAAA;AAG/B,eAAO,KAAK,QAAQ,QAAQ,SAAU,KAAK;AACzC,cAAI,OAAO,OAAO;AAAA;AAAA;AAItB,aAAO;AAAA;AAKT,4BAAwB,KAAK,KAAK,aAAa;AAC7C,aAAO,GAAG,OAAO,IAAI,MAAM,GAAG,MAAM,aAAa,IAAI,MAAM,MAAM;AAAA;AAKnE,+BAA2B,GAAG;AAG5B,UAAI,KAAK,SAAU,KAAK,OAAQ;AAAE,eAAO;AAAA;AAEzC,UAAI,KAAK,SAAU,KAAK,OAAQ;AAAE,eAAO;AAAA;AACzC,UAAK,KAAI,WAAY,SAAW,KAAI,WAAY,OAAQ;AAAE,eAAO;AAAA;AAEjE,UAAI,KAAK,KAAQ,KAAK,GAAM;AAAE,eAAO;AAAA;AACrC,UAAI,MAAM,IAAM;AAAE,eAAO;AAAA;AACzB,UAAI,KAAK,MAAQ,KAAK,IAAM;AAAE,eAAO;AAAA;AACrC,UAAI,KAAK,OAAQ,KAAK,KAAM;AAAE,eAAO;AAAA;AAErC,UAAI,IAAI,SAAU;AAAE,eAAO;AAAA;AAC3B,aAAO;AAAA;AAGT,2BAAuB,GAAG;AAExB,UAAI,IAAI,OAAQ;AACd,aAAK;AACL,YAAI,aAAa,QAAU,MAAK,KAC5B,aAAa,QAAU,KAAI;AAE/B,eAAO,OAAO,aAAa,YAAY;AAAA;AAEzC,aAAO,OAAO,aAAa;AAAA;AAI7B,QAAI,iBAAkB;AACtB,QAAI,YAAkB;AACtB,QAAI,kBAAkB,IAAI,OAAO,eAAe,SAAS,MAAM,UAAU,QAAQ;AAEjF,QAAI,yBAAyB;AAE7B,QAAI,WAAW;AAEf,kCAA8B,OAAO,MAAM;AACzC,UAAI,QAAO;AAEX,UAAI,IAAI,UAAU,OAAO;AACvB,eAAO,SAAS;AAAA;AAGlB,UAAI,KAAK,WAAW,OAAO,MAAe,uBAAuB,KAAK,OAAO;AAC3E,gBAAO,KAAK,GAAG,kBAAkB,MAC/B,SAAS,KAAK,MAAM,IAAI,MAAM,SAAS,KAAK,MAAM,IAAI;AAExD,YAAI,kBAAkB,QAAO;AAC3B,iBAAO,cAAc;AAAA;AAAA;AAIzB,aAAO;AAAA;AAST,wBAAoB,KAAK;AACvB,UAAI,IAAI,QAAQ,QAAQ,GAAG;AAAE,eAAO;AAAA;AACpC,aAAO,IAAI,QAAQ,gBAAgB;AAAA;AAGrC,yBAAqB,KAAK;AACxB,UAAI,IAAI,QAAQ,QAAQ,KAAK,IAAI,QAAQ,OAAO,GAAG;AAAE,eAAO;AAAA;AAE5D,aAAO,IAAI,QAAQ,iBAAiB,SAAU,OAAO,SAAS,QAAQ;AACpE,YAAI,SAAS;AAAE,iBAAO;AAAA;AACtB,eAAO,qBAAqB,OAAO;AAAA;AAAA;AAMvC,QAAI,sBAAsB;AAC1B,QAAI,yBAAyB;AAC7B,QAAI,oBAAoB;AAAA,MACtB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA;AAGP,+BAA2B,IAAI;AAC7B,aAAO,kBAAkB;AAAA;AAG3B,yBAAoB,KAAK;AACvB,UAAI,oBAAoB,KAAK,MAAM;AACjC,eAAO,IAAI,QAAQ,wBAAwB;AAAA;AAE7C,aAAO;AAAA;AAKT,QAAI,mBAAmB;AAEvB,sBAAkB,KAAK;AACrB,aAAO,IAAI,QAAQ,kBAAkB;AAAA;AAKvC,qBAAiB,OAAM;AACrB,cAAQ;AAAA,aACD;AAAA,aACA;AACH,iBAAO;AAAA;AAEX,aAAO;AAAA;AAIT,0BAAsB,OAAM;AAC1B,UAAI,SAAQ,QAAU,SAAQ,MAAQ;AAAE,eAAO;AAAA;AAC/C,cAAQ;AAAA,aACD;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAO;AAAA;AAEX,aAAO;AAAA;AAMT,QAAI,mBAAmB;AAGvB,yBAAqB,IAAI;AACvB,aAAO,iBAAiB,KAAK;AAAA;AAW/B,4BAAwB,IAAI;AAC1B,cAAQ;AAAA,aACD;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAO;AAAA;AAEP,iBAAO;AAAA;AAAA;AAMb,gCAA4B,KAAK;AAG/B,YAAM,IAAI,OAAO,QAAQ,QAAQ;AAQjC,UAAI,SAAI,kBAAkB,UAAK;AAC7B,cAAM,IAAI,QAAQ,MAAM;AAAA;AAmC1B,aAAO,IAAI,cAAc;AAAA;AAS3B,YAAQ,MAAsB;AAC9B,YAAQ,IAAI,QAAkB;AAC9B,YAAQ,IAAI,UAAkB;AAE9B,YAAQ,SAAsB;AAC9B,YAAQ,WAAsB;AAC9B,YAAQ,MAAsB;AAC9B,YAAQ,aAAsB;AAC9B,YAAQ,cAAsB;AAC9B,YAAQ,oBAAsB;AAC9B,YAAQ,gBAAsB;AAE9B,YAAQ,aAAsB;AAC9B,YAAQ,iBAAsB;AAC9B,YAAQ,UAAsB;AAC9B,YAAQ,eAAsB;AAC9B,YAAQ,iBAAsB;AAC9B,YAAQ,cAAsB;AAC9B,YAAQ,WAAsB;AAC9B,YAAQ,qBAAsB;AAAA;AAAA;;;AC5T9B;AAAA;AAKA;AAEA,WAAO,UAAU,wBAAwB,OAAO,OAAO,eAAe;AACpE,UAAI,OAAO,OAAO,QAAQ,SACtB,WAAW,IACX,MAAM,MAAM,QACZ,SAAS,MAAM;AAEnB,YAAM,MAAM,QAAQ;AACpB,cAAQ;AAER,aAAO,MAAM,MAAM,KAAK;AACtB,iBAAS,MAAM,IAAI,WAAW,MAAM;AACpC,YAAI,WAAW,IAAc;AAC3B;AACA,cAAI,UAAU,GAAG;AACf,oBAAQ;AACR;AAAA;AAAA;AAIJ,kBAAU,MAAM;AAChB,cAAM,GAAG,OAAO,UAAU;AAC1B,YAAI,WAAW,IAAc;AAC3B,cAAI,YAAY,MAAM,MAAM,GAAG;AAE7B;AAAA,qBACS,eAAe;AACxB,kBAAM,MAAM;AACZ,mBAAO;AAAA;AAAA;AAAA;AAKb,UAAI,OAAO;AACT,mBAAW,MAAM;AAAA;AAInB,YAAM,MAAM;AAEZ,aAAO;AAAA;AAAA;AAAA;;;AC9CT;AAAA;AAEA;AAGA,QAAI,cAAc,gBAA2B;AAG7C,WAAO,UAAU,8BAA8B,KAAK,KAAK,KAAK;AAC5D,UAAI,OAAM,OACN,QAAQ,GACR,QAAQ,KACR,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,OAAO;AAAA,QACP,KAAK;AAAA;AAGX,UAAI,IAAI,WAAW,SAAS,IAAc;AACxC;AACA,eAAO,MAAM,KAAK;AAChB,kBAAO,IAAI,WAAW;AACtB,cAAI,UAAS,IAAe;AAAE,mBAAO;AAAA;AACrC,cAAI,UAAS,IAAc;AAAE,mBAAO;AAAA;AACpC,cAAI,UAAS,IAAc;AACzB,mBAAO,MAAM,MAAM;AACnB,mBAAO,MAAM,YAAY,IAAI,MAAM,QAAQ,GAAG;AAC9C,mBAAO,KAAK;AACZ,mBAAO;AAAA;AAET,cAAI,UAAS,MAAgB,MAAM,IAAI,KAAK;AAC1C,mBAAO;AACP;AAAA;AAGF;AAAA;AAIF,eAAO;AAAA;AAKT,cAAQ;AACR,aAAO,MAAM,KAAK;AAChB,gBAAO,IAAI,WAAW;AAEtB,YAAI,UAAS,IAAM;AAAE;AAAA;AAGrB,YAAI,QAAO,MAAQ,UAAS,KAAM;AAAE;AAAA;AAEpC,YAAI,UAAS,MAAgB,MAAM,IAAI,KAAK;AAC1C,cAAI,IAAI,WAAW,MAAM,OAAO,IAAM;AAAE;AAAA;AACxC,iBAAO;AACP;AAAA;AAGF,YAAI,UAAS,IAAc;AACzB;AACA,cAAI,QAAQ,IAAI;AAAE,mBAAO;AAAA;AAAA;AAG3B,YAAI,UAAS,IAAc;AACzB,cAAI,UAAU,GAAG;AAAE;AAAA;AACnB;AAAA;AAGF;AAAA;AAGF,UAAI,UAAU,KAAK;AAAE,eAAO;AAAA;AAC5B,UAAI,UAAU,GAAG;AAAE,eAAO;AAAA;AAE1B,aAAO,MAAM,YAAY,IAAI,MAAM,OAAO;AAC1C,aAAO,QAAQ;AACf,aAAO,MAAM;AACb,aAAO,KAAK;AACZ,aAAO;AAAA;AAAA;AAAA;;;AChFT;AAAA;AAEA;AAGA,QAAI,cAAc,gBAA2B;AAG7C,WAAO,UAAU,wBAAwB,KAAK,KAAK,KAAK;AACtD,UAAI,OACA,QACA,QAAQ,GACR,QAAQ,KACR,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,OAAO;AAAA,QACP,KAAK;AAAA;AAGX,UAAI,OAAO,KAAK;AAAE,eAAO;AAAA;AAEzB,eAAS,IAAI,WAAW;AAExB,UAAI,WAAW,MAAgB,WAAW,MAAgB,WAAW,IAAc;AAAE,eAAO;AAAA;AAE5F;AAGA,UAAI,WAAW,IAAM;AAAE,iBAAS;AAAA;AAEhC,aAAO,MAAM,KAAK;AAChB,gBAAO,IAAI,WAAW;AACtB,YAAI,UAAS,QAAQ;AACnB,iBAAO,MAAM,MAAM;AACnB,iBAAO,QAAQ;AACf,iBAAO,MAAM,YAAY,IAAI,MAAM,QAAQ,GAAG;AAC9C,iBAAO,KAAK;AACZ,iBAAO;AAAA,mBACE,UAAS,MAAgB,WAAW,IAAc;AAC3D,iBAAO;AAAA,mBACE,UAAS,IAAM;AACxB;AAAA,mBACS,UAAS,MAAgB,MAAM,IAAI,KAAK;AACjD;AACA,cAAI,IAAI,WAAW,SAAS,IAAM;AAChC;AAAA;AAAA;AAIJ;AAAA;AAGF,aAAO;AAAA;AAAA;AAAA;;;ACrDT;AAAA;AACA;AAGA,YAAQ,iBAAuB;AAC/B,YAAQ,uBAAuB;AAC/B,YAAQ,iBAAuB;AAAA;AAAA;;;ACN/B;AAAA;AAOA;AAGA,QAAI,SAAkB,gBAA0B;AAChD,QAAI,cAAkB,gBAA0B;AAChD,QAAI,cAAkB,gBAA0B;AAKhD,QAAI,gBAAgB;AAGpB,kBAAc,cAAc,SAAU,QAAQ,KAAK,SAAS,KAAK,KAAK;AACpE,UAAI,QAAQ,OAAO;AAEnB,aAAQ,UAAU,IAAI,YAAY,SAAS,MACnC,YAAW,OAAO,KAAK,WACvB;AAAA;AAIV,kBAAc,aAAa,SAAU,QAAQ,KAAK,SAAS,KAAK,KAAK;AACnE,UAAI,QAAQ,OAAO;AAEnB,aAAQ,SAAS,IAAI,YAAY,SAAS,YAClC,YAAW,OAAO,KAAK,WACvB;AAAA;AAIV,kBAAc,QAAQ,SAAU,QAAQ,KAAK,SAAS,KAAK,KAAK;AAC9D,UAAI,QAAQ,OAAO,MACf,OAAO,MAAM,OAAO,YAAY,MAAM,MAAM,SAAS,IACrD,WAAW,IACX,YAAY,IACZ,aAAa,GAAG,KAAK,UAAU;AAEnC,UAAI,MAAM;AACR,cAAM,KAAK,MAAM;AACjB,mBAAW,IAAI;AACf,oBAAY,IAAI,MAAM,GAAG,KAAK;AAAA;AAGhC,UAAI,QAAQ,WAAW;AACrB,sBAAc,QAAQ,UAAU,MAAM,SAAS,UAAU,cAAc,YAAW,MAAM;AAAA,aACnF;AACL,sBAAc,YAAW,MAAM;AAAA;AAGjC,UAAI,YAAY,QAAQ,YAAY,GAAG;AACrC,eAAO,cAAc;AAAA;AAMvB,UAAI,MAAM;AACR,YAAW,MAAM,UAAU;AAC3B,mBAAW,MAAM,QAAQ,MAAM,MAAM,UAAU;AAE/C,YAAI,IAAI,GAAG;AACT,mBAAS,KAAK,CAAE,SAAS,QAAQ,aAAa;AAAA,eACzC;AACL,mBAAS,KAAK,SAAS,GAAG;AAC1B,mBAAS,GAAG,MAAM,MAAM,QAAQ,aAAa;AAAA;AAI/C,mBAAW;AAAA,UACT,OAAO;AAAA;AAGT,eAAQ,eAAe,IAAI,YAAY,YAAY,MAC3C,cACA;AAAA;AAIV,aAAQ,eAAe,IAAI,YAAY,SAAS,MACxC,cACA;AAAA;AAIV,kBAAc,QAAQ,SAAU,QAAQ,KAAK,SAAS,KAAK,KAAK;AAC9D,UAAI,QAAQ,OAAO;AAOnB,YAAM,MAAM,MAAM,UAAU,QAAQ,KAClC,IAAI,mBAAmB,MAAM,UAAU,SAAS;AAElD,aAAO,IAAI,YAAY,QAAQ,KAAK;AAAA;AAItC,kBAAc,YAAY,SAAU,QAAQ,KAAK,SAAoB;AACnE,aAAO,QAAQ,WAAW,aAAa;AAAA;AAEzC,kBAAc,YAAY,SAAU,QAAQ,KAAK,SAAoB;AACnE,aAAO,QAAQ,SAAU,QAAQ,WAAW,aAAa,WAAY;AAAA;AAIvE,kBAAc,OAAO,SAAU,QAAQ,KAAyB;AAC9D,aAAO,YAAW,OAAO,KAAK;AAAA;AAIhC,kBAAc,aAAa,SAAU,QAAQ,KAAyB;AACpE,aAAO,OAAO,KAAK;AAAA;AAErB,kBAAc,cAAc,SAAU,QAAQ,KAAyB;AACrE,aAAO,OAAO,KAAK;AAAA;AASrB,wBAAoB;AA8BlB,WAAK,QAAQ,OAAO,IAAI;AAAA;AAS1B,aAAS,UAAU,cAAc,qBAAqB,OAAO;AAC3D,UAAI,GAAG,GAAG;AAEV,UAAI,CAAC,MAAM,OAAO;AAAE,eAAO;AAAA;AAE3B,eAAS;AAET,WAAK,IAAI,GAAG,IAAI,MAAM,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC9C,kBAAU,MAAM,YAAW,MAAM,MAAM,GAAG,MAAM,OAAO,YAAW,MAAM,MAAM,GAAG,MAAM;AAAA;AAGzF,aAAO;AAAA;AAaT,aAAS,UAAU,cAAc,qBAAqB,QAAQ,KAAK,SAAS;AAC1E,UAAI,WACA,SAAS,IACT,SAAS,OACT,QAAQ,OAAO;AAGnB,UAAI,MAAM,QAAQ;AAChB,eAAO;AAAA;AAUT,UAAI,MAAM,SAAS,MAAM,YAAY,MAAM,OAAO,OAAO,MAAM,GAAG,QAAQ;AACxE,kBAAU;AAAA;AAIZ,gBAAW,OAAM,YAAY,KAAK,OAAO,OAAO,MAAM;AAGtD,gBAAU,KAAK,YAAY;AAG3B,UAAI,MAAM,YAAY,KAAK,QAAQ,UAAU;AAC3C,kBAAU;AAAA;AAIZ,UAAI,MAAM,OAAO;AACf,iBAAS;AAET,YAAI,MAAM,YAAY,GAAG;AACvB,cAAI,MAAM,IAAI,OAAO,QAAQ;AAC3B,wBAAY,OAAO,MAAM;AAEzB,gBAAI,UAAU,SAAS,YAAY,UAAU,QAAQ;AAGnD,uBAAS;AAAA,uBAEA,UAAU,YAAY,MAAM,UAAU,QAAQ,MAAM,KAAK;AAGlE,uBAAS;AAAA;AAAA;AAAA;AAAA;AAMjB,gBAAU,SAAS,QAAQ;AAE3B,aAAO;AAAA;AAYT,aAAS,UAAU,eAAe,SAAU,QAAQ,SAAS,KAAK;AAChE,UAAI,MACA,SAAS,IACT,QAAQ,KAAK;AAEjB,eAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AACjD,eAAO,OAAO,GAAG;AAEjB,YAAI,OAAO,MAAM,UAAU,aAAa;AACtC,oBAAU,MAAM,MAAM,QAAQ,GAAG,SAAS,KAAK;AAAA,eAC1C;AACL,oBAAU,KAAK,YAAY,QAAQ,GAAG;AAAA;AAAA;AAI1C,aAAO;AAAA;AAcT,aAAS,UAAU,qBAAqB,SAAU,QAAQ,SAAS,KAAK;AACtE,UAAI,SAAS;AAEb,eAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AACjD,YAAI,OAAO,GAAG,SAAS,QAAQ;AAC7B,oBAAU,OAAO,GAAG;AAAA,mBACX,OAAO,GAAG,SAAS,SAAS;AACrC,oBAAU,KAAK,mBAAmB,OAAO,GAAG,UAAU,SAAS;AAAA,mBACtD,OAAO,GAAG,SAAS,aAAa;AACzC,oBAAU;AAAA;AAAA;AAId,aAAO;AAAA;AAaT,aAAS,UAAU,SAAS,SAAU,QAAQ,SAAS,KAAK;AAC1D,UAAI,GAAG,KAAK,MACR,SAAS,IACT,QAAQ,KAAK;AAEjB,WAAK,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AAC7C,eAAO,OAAO,GAAG;AAEjB,YAAI,SAAS,UAAU;AACrB,oBAAU,KAAK,aAAa,OAAO,GAAG,UAAU,SAAS;AAAA,mBAChD,OAAO,MAAM,UAAU,aAAa;AAC7C,oBAAU,MAAM,OAAO,GAAG,MAAM,QAAQ,GAAG,SAAS,KAAK;AAAA,eACpD;AACL,oBAAU,KAAK,YAAY,QAAQ,GAAG,SAAS;AAAA;AAAA;AAInD,aAAO;AAAA;AAGT,WAAO,UAAU;AAAA;AAAA;;;ACpVjB;AAAA;AAiBA;AAMA,qBAAiB;AAUf,WAAK,YAAY;AAOjB,WAAK,YAAY;AAAA;AASnB,UAAM,UAAU,WAAW,SAAU,MAAM;AACzC,eAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC9C,YAAI,KAAK,UAAU,GAAG,SAAS,MAAM;AACnC,iBAAO;AAAA;AAAA;AAGX,aAAO;AAAA;AAMT,UAAM,UAAU,cAAc,WAAY;AACxC,UAAI,OAAO;AACX,UAAI,SAAS,CAAE;AAGf,WAAK,UAAU,QAAQ,SAAU,MAAM;AACrC,YAAI,CAAC,KAAK,SAAS;AAAE;AAAA;AAErB,aAAK,IAAI,QAAQ,SAAU,SAAS;AAClC,cAAI,OAAO,QAAQ,WAAW,GAAG;AAC/B,mBAAO,KAAK;AAAA;AAAA;AAAA;AAKlB,WAAK,YAAY;AAEjB,aAAO,QAAQ,SAAU,OAAO;AAC9B,aAAK,UAAU,SAAS;AACxB,aAAK,UAAU,QAAQ,SAAU,MAAM;AACrC,cAAI,CAAC,KAAK,SAAS;AAAE;AAAA;AAErB,cAAI,SAAS,KAAK,IAAI,QAAQ,SAAS,GAAG;AAAE;AAAA;AAE5C,eAAK,UAAU,OAAO,KAAK,KAAK;AAAA;AAAA;AAAA;AA+BtC,UAAM,UAAU,KAAK,SAAU,MAAM,IAAI,SAAS;AAChD,UAAI,QAAQ,KAAK,SAAS;AAC1B,UAAI,MAAM,WAAW;AAErB,UAAI,UAAU,IAAI;AAAE,cAAM,IAAI,MAAM,4BAA4B;AAAA;AAEhE,WAAK,UAAU,OAAO,KAAK;AAC3B,WAAK,UAAU,OAAO,MAAM,IAAI,OAAO;AACvC,WAAK,YAAY;AAAA;AA4BnB,UAAM,UAAU,SAAS,SAAU,YAAY,UAAU,IAAI,SAAS;AACpE,UAAI,QAAQ,KAAK,SAAS;AAC1B,UAAI,MAAM,WAAW;AAErB,UAAI,UAAU,IAAI;AAAE,cAAM,IAAI,MAAM,4BAA4B;AAAA;AAEhE,WAAK,UAAU,OAAO,OAAO,GAAG;AAAA,QAC9B,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,QACA,KAAK,IAAI,OAAO;AAAA;AAGlB,WAAK,YAAY;AAAA;AA4BnB,UAAM,UAAU,QAAQ,SAAU,WAAW,UAAU,IAAI,SAAS;AAClE,UAAI,QAAQ,KAAK,SAAS;AAC1B,UAAI,MAAM,WAAW;AAErB,UAAI,UAAU,IAAI;AAAE,cAAM,IAAI,MAAM,4BAA4B;AAAA;AAEhE,WAAK,UAAU,OAAO,QAAQ,GAAG,GAAG;AAAA,QAClC,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,QACA,KAAK,IAAI,OAAO;AAAA;AAGlB,WAAK,YAAY;AAAA;AA0BnB,UAAM,UAAU,OAAO,SAAU,UAAU,IAAI,SAAS;AACtD,UAAI,MAAM,WAAW;AAErB,WAAK,UAAU,KAAK;AAAA,QAClB,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,QACA,KAAK,IAAI,OAAO;AAAA;AAGlB,WAAK,YAAY;AAAA;AAgBnB,UAAM,UAAU,SAAS,SAAU,OAAM,eAAe;AACtD,UAAI,CAAC,MAAM,QAAQ,QAAO;AAAE,gBAAO,CAAE;AAAA;AAErC,UAAI,SAAS;AAGb,YAAK,QAAQ,SAAU,MAAM;AAC3B,YAAI,MAAM,KAAK,SAAS;AAExB,YAAI,MAAM,GAAG;AACX,cAAI,eAAe;AAAE;AAAA;AACrB,gBAAM,IAAI,MAAM,sCAAsC;AAAA;AAExD,aAAK,UAAU,KAAK,UAAU;AAC9B,eAAO,KAAK;AAAA,SACX;AAEH,WAAK,YAAY;AACjB,aAAO;AAAA;AAcT,UAAM,UAAU,aAAa,SAAU,OAAM,eAAe;AAC1D,UAAI,CAAC,MAAM,QAAQ,QAAO;AAAE,gBAAO,CAAE;AAAA;AAErC,WAAK,UAAU,QAAQ,SAAU,MAAM;AAAE,aAAK,UAAU;AAAA;AAExD,WAAK,OAAO,OAAM;AAAA;AAgBpB,UAAM,UAAU,UAAU,SAAU,OAAM,eAAe;AACvD,UAAI,CAAC,MAAM,QAAQ,QAAO;AAAE,gBAAO,CAAE;AAAA;AAErC,UAAI,SAAS;AAGb,YAAK,QAAQ,SAAU,MAAM;AAC3B,YAAI,MAAM,KAAK,SAAS;AAExB,YAAI,MAAM,GAAG;AACX,cAAI,eAAe;AAAE;AAAA;AACrB,gBAAM,IAAI,MAAM,sCAAsC;AAAA;AAExD,aAAK,UAAU,KAAK,UAAU;AAC9B,eAAO,KAAK;AAAA,SACX;AAEH,WAAK,YAAY;AACjB,aAAO;AAAA;AAaT,UAAM,UAAU,WAAW,SAAU,WAAW;AAC9C,UAAI,KAAK,cAAc,MAAM;AAC3B,aAAK;AAAA;AAIP,aAAO,KAAK,UAAU,cAAc;AAAA;AAGtC,WAAO,UAAU;AAAA;AAAA;;;AC/VjB;AAAA;AAEA;AAIA,QAAI,cAAe;AACnB,QAAI,UAAe;AAGnB,WAAO,UAAU,mBAAmB,OAAO;AACzC,UAAI;AAGJ,YAAM,MAAM,IAAI,QAAQ,aAAa;AAGrC,YAAM,IAAI,QAAQ,SAAS;AAE3B,YAAM,MAAM;AAAA;AAAA;AAAA;;;ACnBd;AAAA;AAAA;AAGA,WAAO,UAAU,gBAAe,OAAO;AACrC,UAAI;AAEJ,UAAI,MAAM,YAAY;AACpB,gBAAiB,IAAI,MAAM,MAAM,UAAU,IAAI;AAC/C,cAAM,UAAW,MAAM;AACvB,cAAM,MAAW,CAAE,GAAG;AACtB,cAAM,WAAW;AACjB,cAAM,OAAO,KAAK;AAAA,aACb;AACL,cAAM,GAAG,MAAM,MAAM,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;;;ACb/D;AAAA;AAAA;AAEA,WAAO,UAAU,iBAAgB,OAAO;AACtC,UAAI,SAAS,MAAM,QAAQ,KAAK,GAAG;AAGnC,WAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;AACzC,cAAM,OAAO;AACb,YAAI,IAAI,SAAS,UAAU;AACzB,gBAAM,GAAG,OAAO,MAAM,IAAI,SAAS,MAAM,IAAI,MAAM,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACTlE;AAAA;AAIA;AAGA,QAAI,iBAAiB,gBAA2B;AAGhD,wBAAoB,KAAK;AACvB,aAAO,YAAY,KAAK;AAAA;AAE1B,yBAAqB,KAAK;AACxB,aAAO,aAAa,KAAK;AAAA;AAI3B,WAAO,UAAU,iBAAiB,OAAO;AACvC,UAAI,GAAG,GAAG,GAAG,QAAQ,OAAO,cAAc,OAAO,IAAI,OAAM,KAAK,SAC5D,OAAO,eAAe,KAAK,SAAS,SACpC,cAAc,MAAM,QACpB;AAEJ,UAAI,CAAC,MAAM,GAAG,QAAQ,SAAS;AAAE;AAAA;AAEjC,WAAK,IAAI,GAAG,IAAI,YAAY,QAAQ,IAAI,GAAG,KAAK;AAC9C,YAAI,YAAY,GAAG,SAAS,YACxB,CAAC,MAAM,GAAG,QAAQ,QAAQ,YAAY,GAAG,UAAU;AACrD;AAAA;AAGF,iBAAS,YAAY,GAAG;AAExB,wBAAgB;AAIhB,aAAK,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AACvC,yBAAe,OAAO;AAGtB,cAAI,aAAa,SAAS,cAAc;AACtC;AACA,mBAAO,OAAO,GAAG,UAAU,aAAa,SAAS,OAAO,GAAG,SAAS,aAAa;AAC/E;AAAA;AAEF;AAAA;AAIF,cAAI,aAAa,SAAS,eAAe;AACvC,gBAAI,WAAW,aAAa,YAAY,gBAAgB,GAAG;AACzD;AAAA;AAEF,gBAAI,YAAY,aAAa,UAAU;AACrC;AAAA;AAAA;AAGJ,cAAI,gBAAgB,GAAG;AAAE;AAAA;AAEzB,cAAI,aAAa,SAAS,UAAU,MAAM,GAAG,QAAQ,KAAK,aAAa,UAAU;AAE/E,oBAAO,aAAa;AACpB,oBAAQ,MAAM,GAAG,QAAQ,MAAM;AAG/B,oBAAQ;AACR,oBAAQ,aAAa;AACrB,sBAAU;AAEV,iBAAK,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;AAEpC,oBAAM,MAAM,IAAI;AAChB,wBAAU,MAAM,GAAG,cAAc;AACjC,kBAAI,CAAC,MAAM,GAAG,aAAa,UAAU;AAAE;AAAA;AAEvC,wBAAU,MAAM,IAAI;AAMpB,kBAAI,CAAC,MAAM,IAAI,QAAQ;AACrB,0BAAU,MAAM,GAAG,kBAAkB,YAAY,SAAS,QAAQ,cAAc;AAAA,yBACvE,MAAM,IAAI,WAAW,aAAa,CAAC,YAAY,KAAK,UAAU;AACvE,0BAAU,MAAM,GAAG,kBAAkB,YAAY,SAAS,QAAQ,YAAY;AAAA,qBACzE;AACL,0BAAU,MAAM,GAAG,kBAAkB;AAAA;AAGvC,oBAAM,MAAM,IAAI;AAEhB,kBAAI,MAAM,SAAS;AACjB,wBAAgB,IAAI,MAAM,MAAM,QAAQ,IAAI;AAC5C,sBAAM,UAAU,MAAK,MAAM,SAAS;AACpC,sBAAM,QAAU;AAChB,sBAAM,KAAK;AAAA;AAGb,sBAAgB,IAAI,MAAM,MAAM,aAAa,KAAK;AAClD,oBAAM,QAAU,CAAE,CAAE,QAAQ;AAC5B,oBAAM,QAAU;AAChB,oBAAM,SAAU;AAChB,oBAAM,OAAU;AAChB,oBAAM,KAAK;AAEX,sBAAgB,IAAI,MAAM,MAAM,QAAQ,IAAI;AAC5C,oBAAM,UAAU;AAChB,oBAAM,QAAU;AAChB,oBAAM,KAAK;AAEX,sBAAgB,IAAI,MAAM,MAAM,cAAc,KAAK;AACnD,oBAAM,QAAU,EAAE;AAClB,oBAAM,SAAU;AAChB,oBAAM,OAAU;AAChB,oBAAM,KAAK;AAEX,wBAAU,MAAM,IAAI;AAAA;AAEtB,gBAAI,UAAU,MAAK,QAAQ;AACzB,sBAAgB,IAAI,MAAM,MAAM,QAAQ,IAAI;AAC5C,oBAAM,UAAU,MAAK,MAAM;AAC3B,oBAAM,QAAU;AAChB,oBAAM,KAAK;AAAA;AAIb,wBAAY,GAAG,WAAW,SAAS,eAAe,QAAQ,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AChIrE;AAAA;AAWA;AAMA,QAAI,UAAU;AAId,QAAI,sBAAsB;AAE1B,QAAI,iBAAiB;AACrB,QAAI,cAAc;AAAA,MAChB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA;AAGN,uBAAmB,OAAO,MAAM;AAC9B,aAAO,YAAY,KAAK;AAAA;AAG1B,4BAAwB,cAAc;AACpC,UAAI,GAAG,OAAO,kBAAkB;AAEhC,WAAK,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,gBAAQ,aAAa;AAErB,YAAI,MAAM,SAAS,UAAU,CAAC,iBAAiB;AAC7C,gBAAM,UAAU,MAAM,QAAQ,QAAQ,gBAAgB;AAAA;AAGxD,YAAI,MAAM,SAAS,eAAe,MAAM,SAAS,QAAQ;AACvD;AAAA;AAGF,YAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS,QAAQ;AACxD;AAAA;AAAA;AAAA;AAKN,0BAAsB,cAAc;AAClC,UAAI,GAAG,OAAO,kBAAkB;AAEhC,WAAK,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,gBAAQ,aAAa;AAErB,YAAI,MAAM,SAAS,UAAU,CAAC,iBAAiB;AAC7C,cAAI,QAAQ,KAAK,MAAM,UAAU;AAC/B,kBAAM,UAAU,MAAM,QACnB,QAAQ,QAAQ,QAGhB,QAAQ,WAAW,UAAK,QAAQ,YAAY,QAC5C,QAAQ,eAAe,UAAU,QAAQ,UAAU,KAEnD,QAAQ,2BAA2B,YAEnC,QAAQ,sBAAsB,YAC9B,QAAQ,8BAA8B;AAAA;AAAA;AAI7C,YAAI,MAAM,SAAS,eAAe,MAAM,SAAS,QAAQ;AACvD;AAAA;AAGF,YAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS,QAAQ;AACxD;AAAA;AAAA;AAAA;AAMN,WAAO,UAAU,iBAAiB,OAAO;AACvC,UAAI;AAEJ,UAAI,CAAC,MAAM,GAAG,QAAQ,aAAa;AAAE;AAAA;AAErC,WAAK,SAAS,MAAM,OAAO,SAAS,GAAG,UAAU,GAAG,UAAU;AAE5D,YAAI,MAAM,OAAO,QAAQ,SAAS,UAAU;AAAE;AAAA;AAE9C,YAAI,oBAAoB,KAAK,MAAM,OAAO,QAAQ,UAAU;AAC1D,yBAAe,MAAM,OAAO,QAAQ;AAAA;AAGtC,YAAI,QAAQ,KAAK,MAAM,OAAO,QAAQ,UAAU;AAC9C,uBAAa,MAAM,OAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACtGxC;AAAA;AAEA;AAGA,QAAI,eAAiB,gBAA2B;AAChD,QAAI,cAAiB,gBAA2B;AAChD,QAAI,iBAAiB,gBAA2B;AAEhD,QAAI,gBAAgB;AACpB,QAAI,WAAW;AACf,QAAI,aAAa;AAGjB,uBAAmB,KAAK,OAAO,IAAI;AACjC,aAAO,IAAI,OAAO,GAAG,SAAS,KAAK,IAAI,OAAO,QAAQ;AAAA;AAGxD,6BAAyB,QAAQ,OAAO;AACtC,UAAI,GAAG,OAAO,OAAM,GAAG,KAAK,KAAK,WAAW,OAAM,UAAU,UACxD,iBAAiB,iBAAiB,kBAAkB,kBACpD,SAAS,UAAU,GAAG,UAAU,OAAO,WAAW;AAEtD,cAAQ;AAER,WAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAClC,gBAAQ,OAAO;AAEf,oBAAY,OAAO,GAAG;AAEtB,aAAK,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AACtC,cAAI,MAAM,GAAG,SAAS,WAAW;AAAE;AAAA;AAAA;AAErC,cAAM,SAAS,IAAI;AAEnB,YAAI,MAAM,SAAS,QAAQ;AAAE;AAAA;AAE7B,gBAAO,MAAM;AACb,cAAM;AACN,cAAM,MAAK;AAGX;AACA,iBAAO,MAAM,KAAK;AAChB,qBAAS,YAAY;AACrB,gBAAI,SAAS,KAAK;AAClB,gBAAI,CAAC,GAAG;AAAE;AAAA;AAEV,sBAAU,WAAW;AACrB,kBAAM,EAAE,QAAQ;AAChB,uBAAY,EAAE,OAAO;AAKrB,uBAAW;AAEX,gBAAI,EAAE,QAAQ,KAAK,GAAG;AACpB,yBAAW,MAAK,WAAW,EAAE,QAAQ;AAAA,mBAChC;AACL,mBAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,oBAAI,OAAO,GAAG,SAAS,eAAe,OAAO,GAAG,SAAS;AAAa;AACtE,oBAAI,CAAC,OAAO,GAAG;AAAS;AAExB,2BAAW,OAAO,GAAG,QAAQ,WAAW,OAAO,GAAG,QAAQ,SAAS;AACnE;AAAA;AAAA;AAOJ,uBAAW;AAEX,gBAAI,MAAM,KAAK;AACb,yBAAW,MAAK,WAAW;AAAA,mBACtB;AACL,mBAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,oBAAI,OAAO,GAAG,SAAS,eAAe,OAAO,GAAG,SAAS;AAAa;AACtE,oBAAI,CAAC,OAAO,GAAG;AAAS;AAExB,2BAAW,OAAO,GAAG,QAAQ,WAAW;AACxC;AAAA;AAAA;AAIJ,8BAAkB,eAAe,aAAa,YAAY,OAAO,aAAa;AAC9E,8BAAkB,eAAe,aAAa,YAAY,OAAO,aAAa;AAE9E,+BAAmB,aAAa;AAChC,+BAAmB,aAAa;AAEhC,gBAAI,kBAAkB;AACpB,wBAAU;AAAA,uBACD,iBAAiB;AAC1B,kBAAI,CAAE,qBAAoB,kBAAkB;AAC1C,0BAAU;AAAA;AAAA;AAId,gBAAI,kBAAkB;AACpB,yBAAW;AAAA,uBACF,iBAAiB;AAC1B,kBAAI,CAAE,qBAAoB,kBAAkB;AAC1C,2BAAW;AAAA;AAAA;AAIf,gBAAI,aAAa,MAAgB,EAAE,OAAO,KAAK;AAC7C,kBAAI,YAAY,MAAgB,YAAY,IAAc;AAExD,2BAAW,UAAU;AAAA;AAAA;AAIzB,gBAAI,WAAW,UAAU;AAQvB,wBAAU;AACV,yBAAW;AAAA;AAGb,gBAAI,CAAC,WAAW,CAAC,UAAU;AAEzB,kBAAI,UAAU;AACZ,sBAAM,UAAU,UAAU,MAAM,SAAS,EAAE,OAAO;AAAA;AAEpD;AAAA;AAGF,gBAAI,UAAU;AAEZ,mBAAK,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AACtC,wBAAO,MAAM;AACb,oBAAI,MAAM,GAAG,QAAQ,WAAW;AAAE;AAAA;AAClC,oBAAI,MAAK,WAAW,YAAY,MAAM,GAAG,UAAU,WAAW;AAC5D,0BAAO,MAAM;AAEb,sBAAI,UAAU;AACZ,gCAAY,MAAM,GAAG,QAAQ,OAAO;AACpC,iCAAa,MAAM,GAAG,QAAQ,OAAO;AAAA,yBAChC;AACL,gCAAY,MAAM,GAAG,QAAQ,OAAO;AACpC,iCAAa,MAAM,GAAG,QAAQ,OAAO;AAAA;AAMvC,wBAAM,UAAU,UAAU,MAAM,SAAS,EAAE,OAAO;AAClD,yBAAO,MAAK,OAAO,UAAU,UAC3B,OAAO,MAAK,OAAO,SAAS,MAAK,KAAK;AAExC,yBAAO,WAAW,SAAS;AAC3B,sBAAI,MAAK,UAAU,GAAG;AAAE,2BAAO,UAAU,SAAS;AAAA;AAElD,0BAAO,MAAM;AACb,wBAAM,MAAK;AAEX,wBAAM,SAAS;AACf;AAAA;AAAA;AAAA;AAKN,gBAAI,SAAS;AACX,oBAAM,KAAK;AAAA,gBACT,OAAO;AAAA,gBACP,KAAK,EAAE;AAAA,gBACP,QAAQ;AAAA,gBACR,OAAO;AAAA;AAAA,uBAEA,YAAY,UAAU;AAC/B,oBAAM,UAAU,UAAU,MAAM,SAAS,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAO1D,WAAO,UAAU,qBAAqB,OAAO;AAE3C,UAAI;AAEJ,UAAI,CAAC,MAAM,GAAG,QAAQ,aAAa;AAAE;AAAA;AAErC,WAAK,SAAS,MAAM,OAAO,SAAS,GAAG,UAAU,GAAG,UAAU;AAE5D,YAAI,MAAM,OAAO,QAAQ,SAAS,YAC9B,CAAC,cAAc,KAAK,MAAM,OAAO,QAAQ,UAAU;AACrD;AAAA;AAGF,wBAAgB,MAAM,OAAO,QAAQ,UAAU;AAAA;AAAA;AAAA;AAAA;;;ACtMnD;AAAA;AAEA;AAYA,mBAAe,MAAM,KAAK,SAAS;AAMjC,WAAK,OAAW;AAOhB,WAAK,MAAW;AAOhB,WAAK,QAAW;AAOhB,WAAK,MAAW;AAWhB,WAAK,UAAW;AAOhB,WAAK,QAAW;AAOhB,WAAK,WAAW;AAQhB,WAAK,UAAW;AAOhB,WAAK,SAAW;AAWhB,WAAK,OAAW;AAOhB,WAAK,OAAW;AAQhB,WAAK,QAAW;AAQhB,WAAK,SAAW;AAAA;AASlB,UAAM,UAAU,YAAY,mBAAmB,MAAM;AACnD,UAAI,OAAO,GAAG;AAEd,UAAI,CAAC,KAAK,OAAO;AAAE,eAAO;AAAA;AAE1B,cAAQ,KAAK;AAEb,WAAK,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAC5C,YAAI,MAAM,GAAG,OAAO,MAAM;AAAE,iBAAO;AAAA;AAAA;AAErC,aAAO;AAAA;AAST,UAAM,UAAU,WAAW,kBAAkB,UAAU;AACrD,UAAI,KAAK,OAAO;AACd,aAAK,MAAM,KAAK;AAAA,aACX;AACL,aAAK,QAAQ,CAAE;AAAA;AAAA;AAUnB,UAAM,UAAU,UAAU,iBAAiB,MAAM,OAAO;AACtD,UAAI,MAAM,KAAK,UAAU,OACrB,WAAW,CAAE,MAAM;AAEvB,UAAI,MAAM,GAAG;AACX,aAAK,SAAS;AAAA,aACT;AACL,aAAK,MAAM,OAAO;AAAA;AAAA;AAUtB,UAAM,UAAU,UAAU,iBAAiB,MAAM;AAC/C,UAAI,MAAM,KAAK,UAAU,OAAO,QAAQ;AACxC,UAAI,OAAO,GAAG;AACZ,gBAAQ,KAAK,MAAM,KAAK;AAAA;AAE1B,aAAO;AAAA;AAUT,UAAM,UAAU,WAAW,kBAAkB,MAAM,OAAO;AACxD,UAAI,MAAM,KAAK,UAAU;AAEzB,UAAI,MAAM,GAAG;AACX,aAAK,SAAS,CAAE,MAAM;AAAA,aACjB;AACL,aAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM;AAAA;AAAA;AAKpD,WAAO,UAAU;AAAA;AAAA;;;ACxMjB;AAAA;AAEA;AAEA,QAAI,QAAQ;AAGZ,uBAAmB,KAAK,IAAI,KAAK;AAC/B,WAAK,MAAM;AACX,WAAK,MAAM;AACX,WAAK,SAAS;AACd,WAAK,aAAa;AAClB,WAAK,KAAK;AAAA;AAIZ,cAAU,UAAU,QAAQ;AAG5B,WAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA;AAMA;AAGA,QAAI,QAAS;AAGb,QAAI,SAAS;AAAA,MACX,CAAE,aAAkB;AAAA,MACpB,CAAE,SAAkB;AAAA,MACpB,CAAE,UAAkB;AAAA,MACpB,CAAE,WAAkB;AAAA,MACpB,CAAE,gBAAkB;AAAA,MACpB,CAAE,eAAkB;AAAA;AAOtB,oBAAgB;AAMd,WAAK,QAAQ,IAAI;AAEjB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,aAAK,MAAM,KAAK,OAAO,GAAG,IAAI,OAAO,GAAG;AAAA;AAAA;AAU5C,SAAK,UAAU,UAAU,SAAU,OAAO;AACxC,UAAI,GAAG,GAAG;AAEV,cAAQ,KAAK,MAAM,SAAS;AAE5B,WAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AACxC,cAAM,GAAG;AAAA;AAAA;AAIb,SAAK,UAAU,QAAQ;AAGvB,WAAO,UAAU;AAAA;AAAA;;;ACzDjB;AAAA;AAEA;AAEA,QAAI,UAAU,gBAA2B;AAGzC,sBAAiB,OAAO,MAAM;AAC5B,UAAI,MAAM,MAAM,OAAO,QAAQ,MAAM,OAAO,OACxC,MAAM,MAAM,OAAO;AAEvB,aAAO,MAAM,IAAI,OAAO,KAAK,MAAM;AAAA;AAGrC,0BAAsB,KAAK;AACzB,UAAI,SAAS,IACT,MAAM,GACN,MAAM,IAAI,QACV,IACA,YAAY,OACZ,UAAU,GACV,UAAU;AAEd,WAAM,IAAI,WAAW;AAErB,aAAO,MAAM,KAAK;AAChB,YAAI,OAAO,KAAa;AACtB,cAAI,CAAC,WAAW;AAEd,mBAAO,KAAK,UAAU,IAAI,UAAU,SAAS;AAC7C,sBAAU;AACV,sBAAU,MAAM;AAAA,iBACX;AAEL,uBAAW,IAAI,UAAU,SAAS,MAAM;AACxC,sBAAU;AAAA;AAAA;AAId,oBAAa,OAAO;AACpB;AAEA,aAAK,IAAI,WAAW;AAAA;AAGtB,aAAO,KAAK,UAAU,IAAI,UAAU;AAEpC,aAAO;AAAA;AAIT,WAAO,UAAU,gBAAe,OAAO,WAAW,SAAS,QAAQ;AACjE,UAAI,IAAI,UAAU,KAAK,GAAG,GAAG,UAAU,SAAS,aAAa,OACzD,QAAQ,GAAG,YAAY,YAAY,eAAe,WAClD,iBAAiB,SAAS;AAG9B,UAAI,YAAY,IAAI,SAAS;AAAE,eAAO;AAAA;AAEtC,iBAAW,YAAY;AAEvB,UAAI,MAAM,OAAO,YAAY,MAAM,WAAW;AAAE,eAAO;AAAA;AAGvD,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,YAAY,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAMlG,YAAM,MAAM,OAAO,YAAY,MAAM,OAAO;AAC5C,UAAI,OAAO,MAAM,OAAO,WAAW;AAAE,eAAO;AAAA;AAE5C,gBAAU,MAAM,IAAI,WAAW;AAC/B,UAAI,YAAY,OAAe,YAAY,MAAe,YAAY,IAAa;AAAE,eAAO;AAAA;AAE5F,UAAI,OAAO,MAAM,OAAO,WAAW;AAAE,eAAO;AAAA;AAE5C,iBAAW,MAAM,IAAI,WAAW;AAChC,UAAI,aAAa,OAAe,aAAa,MAAe,aAAa,MAAe,CAAC,QAAQ,WAAW;AAC1G,eAAO;AAAA;AAKT,UAAI,YAAY,MAAe,QAAQ,WAAW;AAAE,eAAO;AAAA;AAE3D,aAAO,MAAM,MAAM,OAAO,WAAW;AACnC,aAAK,MAAM,IAAI,WAAW;AAE1B,YAAI,OAAO,OAAe,OAAO,MAAe,OAAO,MAAe,CAAC,QAAQ,KAAK;AAAE,iBAAO;AAAA;AAE7F;AAAA;AAGF,iBAAW,SAAQ,OAAO,YAAY;AAEtC,gBAAU,SAAS,MAAM;AACzB,eAAS;AACT,WAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,YAAI,QAAQ,GAAG;AACf,YAAI,CAAC,GAAG;AAGN,cAAI,MAAM,KAAK,MAAM,QAAQ,SAAS,GAAG;AACvC;AAAA,iBACK;AACL,mBAAO;AAAA;AAAA;AAIX,YAAI,CAAC,WAAW,KAAK,IAAI;AAAE,iBAAO;AAAA;AAClC,YAAI,EAAE,WAAW,EAAE,SAAS,OAAO,IAAa;AAC9C,iBAAO,KAAK,EAAE,WAAW,OAAO,KAAc,WAAW;AAAA,mBAChD,EAAE,WAAW,OAAO,IAAa;AAC1C,iBAAO,KAAK;AAAA,eACP;AACL,iBAAO,KAAK;AAAA;AAAA;AAIhB,iBAAW,SAAQ,OAAO,WAAW;AACrC,UAAI,SAAS,QAAQ,SAAS,IAAI;AAAE,eAAO;AAAA;AAC3C,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AACnG,gBAAU,aAAa;AACvB,UAAI,QAAQ,UAAU,QAAQ,OAAO;AAAI,gBAAQ;AACjD,UAAI,QAAQ,UAAU,QAAQ,QAAQ,SAAS,OAAO;AAAI,gBAAQ;AAIlE,oBAAc,QAAQ;AACtB,UAAI,gBAAgB,KAAK,gBAAgB,OAAO,QAAQ;AAAE,eAAO;AAAA;AAEjE,UAAI,QAAQ;AAAE,eAAO;AAAA;AAErB,sBAAgB,MAAM;AACtB,YAAM,aAAa;AAInB,wBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS;AAEhD,cAAY,MAAM,KAAK,cAAc,SAAS;AAC9C,YAAM,MAAM,aAAa,CAAE,WAAW;AAEtC,cAAY,MAAM,KAAK,cAAc,SAAS;AAC9C,YAAM,MAAM,CAAE,WAAW,YAAY;AAErC,cAAY,MAAM,KAAK,WAAW,MAAM;AACxC,YAAM,MAAM,CAAE,WAAW,YAAY;AAErC,WAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,gBAAiB,MAAM,KAAK,WAAW,MAAM;AAC7C,YAAI,OAAO,IAAI;AACb,gBAAM,QAAS,CAAE,CAAE,SAAS,gBAAgB,OAAO;AAAA;AAGrD,gBAAiB,MAAM,KAAK,UAAU,IAAI;AAC1C,cAAM,UAAW,QAAQ,GAAG;AAC5B,cAAM,WAAW;AAEjB,gBAAiB,MAAM,KAAK,YAAY,MAAM;AAAA;AAGhD,cAAY,MAAM,KAAK,YAAY,MAAM;AACzC,cAAY,MAAM,KAAK,eAAe,SAAS;AAE/C,WAAK,WAAW,YAAY,GAAG,WAAW,SAAS,YAAY;AAC7D,YAAI,MAAM,OAAO,YAAY,MAAM,WAAW;AAAE;AAAA;AAEhD,oBAAY;AACZ,aAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AAClD,cAAI,gBAAgB,GAAG,OAAO,UAAU,SAAS,OAAO;AACtD,wBAAY;AACZ;AAAA;AAAA;AAIJ,YAAI,WAAW;AAAE;AAAA;AACjB,mBAAW,SAAQ,OAAO,UAAU;AACpC,YAAI,CAAC,UAAU;AAAE;AAAA;AACjB,YAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,YAAY,MAAM,aAAa,GAAG;AAAE;AAAA;AAC3F,kBAAU,aAAa;AACvB,YAAI,QAAQ,UAAU,QAAQ,OAAO;AAAI,kBAAQ;AACjD,YAAI,QAAQ,UAAU,QAAQ,QAAQ,SAAS,OAAO;AAAI,kBAAQ;AAElE,YAAI,aAAa,YAAY,GAAG;AAC9B,kBAAY,MAAM,KAAK,cAAc,SAAS;AAC9C,gBAAM,MAAM,aAAa,CAAE,YAAY,GAAG;AAAA;AAG5C,gBAAY,MAAM,KAAK,WAAW,MAAM;AACxC,cAAM,MAAM,CAAE,UAAU,WAAW;AAEnC,aAAK,IAAI,GAAG,IAAI,aAAa,KAAK;AAChC,kBAAiB,MAAM,KAAK,WAAW,MAAM;AAC7C,cAAI,OAAO,IAAI;AACb,kBAAM,QAAS,CAAE,CAAE,SAAS,gBAAgB,OAAO;AAAA;AAGrD,kBAAiB,MAAM,KAAK,UAAU,IAAI;AAC1C,gBAAM,UAAW,QAAQ,KAAK,QAAQ,GAAG,SAAS;AAClD,gBAAM,WAAW;AAEjB,kBAAiB,MAAM,KAAK,YAAY,MAAM;AAAA;AAEhD,gBAAQ,MAAM,KAAK,YAAY,MAAM;AAAA;AAGvC,UAAI,YAAY;AACd,gBAAQ,MAAM,KAAK,eAAe,SAAS;AAC3C,mBAAW,KAAK;AAAA;AAGlB,cAAQ,MAAM,KAAK,eAAe,SAAS;AAC3C,iBAAW,KAAK;AAEhB,YAAM,aAAa;AACnB,YAAM,OAAO;AACb,aAAO;AAAA;AAAA;AAAA;;;AC3NT;AAAA;AAEA;AAGA,WAAO,UAAU,eAAc,OAAO,WAAW,SAAqB;AACpE,UAAI,MAAM,GAAG,QAAQ,kBAAkB;AAAE,eAAO;AAAA;AAEhD,UAAI,UAAU,MAAM;AAEpB,UAAI,MAAM,OAAO,aAAa,MAAM,YAAY,GAAG;AAAE,eAAO;AAAA;AAE5D,aAAO,WAAW,YAAY;AAE9B,aAAO,WAAW,SAAS;AACzB,YAAI,MAAM,QAAQ,WAAW;AAC3B;AACA;AAAA;AAGF,YAAI,MAAM,OAAO,YAAY,MAAM,aAAa,GAAG;AACjD;AACA,iBAAO;AACP;AAAA;AAEF;AAAA;AAGF,YAAM,OAAO;AAEb,cAAgB,MAAM,KAAK,cAAc,QAAQ;AACjD,YAAM,UAAU,MAAM,SAAS,WAAW,MAAM,IAAI,MAAM,WAAW,SAAS;AAC9E,YAAM,MAAU,CAAE,WAAW,MAAM;AAEnC,aAAO;AAAA;AAAA;AAAA;;;AClCT;AAAA;AAEA;AAGA,WAAO,UAAU,gBAAe,OAAO,WAAW,SAAS,QAAQ;AACjE,UAAI,QAAQ,KAAK,QAAQ,UAAU,KAAK,OAAO,QAC3C,gBAAgB,OAChB,MAAM,MAAM,OAAO,aAAa,MAAM,OAAO,YAC7C,MAAM,MAAM,OAAO;AAGvB,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAEnG,UAAI,MAAM,IAAI,KAAK;AAAE,eAAO;AAAA;AAE5B,eAAS,MAAM,IAAI,WAAW;AAE9B,UAAI,WAAW,OAAe,WAAW,IAAc;AACrD,eAAO;AAAA;AAIT,YAAM;AACN,YAAM,MAAM,UAAU,KAAK;AAE3B,YAAM,MAAM;AAEZ,UAAI,MAAM,GAAG;AAAE,eAAO;AAAA;AAEtB,eAAS,MAAM,IAAI,MAAM,KAAK;AAC9B,eAAS,MAAM,IAAI,MAAM,KAAK;AAE9B,UAAI,WAAW,IAAc;AAC3B,YAAI,OAAO,QAAQ,OAAO,aAAa,YAAY,GAAG;AACpD,iBAAO;AAAA;AAAA;AAKX,UAAI,QAAQ;AAAE,eAAO;AAAA;AAGrB,iBAAW;AAEX,iBAAS;AACP;AACA,YAAI,YAAY,SAAS;AAGvB;AAAA;AAGF,cAAM,MAAM,MAAM,OAAO,YAAY,MAAM,OAAO;AAClD,cAAM,MAAM,OAAO;AAEnB,YAAI,MAAM,OAAO,MAAM,OAAO,YAAY,MAAM,WAAW;AAIzD;AAAA;AAGF,YAAI,MAAM,IAAI,WAAW,SAAS,QAAQ;AAAE;AAAA;AAE5C,YAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,YAAY,MAAM,aAAa,GAAG;AAEvF;AAAA;AAGF,cAAM,MAAM,UAAU,KAAK;AAG3B,YAAI,MAAM,MAAM,KAAK;AAAE;AAAA;AAGvB,cAAM,MAAM,WAAW;AAEvB,YAAI,MAAM,KAAK;AAAE;AAAA;AAEjB,wBAAgB;AAEhB;AAAA;AAIF,YAAM,MAAM,OAAO;AAEnB,YAAM,OAAO,WAAY,iBAAgB,IAAI;AAE7C,cAAgB,MAAM,KAAK,SAAS,QAAQ;AAC5C,YAAM,OAAU;AAChB,YAAM,UAAU,MAAM,SAAS,YAAY,GAAG,UAAU,KAAK;AAC7D,YAAM,SAAU;AAChB,YAAM,MAAU,CAAE,WAAW,MAAM;AAEnC,aAAO;AAAA;AAAA;AAAA;;;AChGT;AAAA;AAEA;AAEA,QAAI,UAAU,gBAA2B;AAGzC,WAAO,UAAU,qBAAoB,OAAO,WAAW,SAAS,QAAQ;AACtE,UAAI,WACA,IACA,GACA,SACA,GACA,eACA,OACA,UACA,QACA,WACA,YACA,WACA,eACA,WACA,WACA,kBACA,WACA,iBACA,OACA,aACA,aAAa,MAAM,SACnB,MAAM,MAAM,OAAO,aAAa,MAAM,OAAO,YAC7C,MAAM,MAAM,OAAO;AAGvB,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAGnG,UAAI,MAAM,IAAI,WAAW,WAAW,IAAa;AAAE,eAAO;AAAA;AAI1D,UAAI,QAAQ;AAAE,eAAO;AAAA;AAGrB,gBAAU,SAAS,MAAM,OAAO,aAAa;AAG7C,UAAI,MAAM,IAAI,WAAW,SAAS,IAAkB;AAGlD;AACA;AACA;AACA,oBAAY;AACZ,2BAAmB;AAAA,iBACV,MAAM,IAAI,WAAW,SAAS,GAAgB;AACvD,2BAAmB;AAEnB,YAAK,OAAM,QAAQ,aAAa,UAAU,MAAM,GAAG;AAGjD;AACA;AACA;AACA,sBAAY;AAAA,eACP;AAIL,sBAAY;AAAA;AAAA,aAET;AACL,2BAAmB;AAAA;AAGrB,kBAAY,CAAE,MAAM,OAAO;AAC3B,YAAM,OAAO,aAAa;AAE1B,aAAO,MAAM,KAAK;AAChB,aAAK,MAAM,IAAI,WAAW;AAE1B,YAAI,QAAQ,KAAK;AACf,cAAI,OAAO,GAAM;AACf,sBAAU,IAAK,UAAS,MAAM,QAAQ,aAAc,aAAY,IAAI,MAAM;AAAA,iBACrE;AACL;AAAA;AAAA,eAEG;AACL;AAAA;AAGF;AAAA;AAGF,mBAAa,CAAE,MAAM,QAAQ;AAC7B,YAAM,QAAQ,aAAa,MAAM,OAAO,aAAa,IAAK,oBAAmB,IAAI;AAEjF,sBAAgB,OAAO;AAEvB,kBAAY,CAAE,MAAM,OAAO;AAC3B,YAAM,OAAO,aAAa,SAAS;AAEnC,kBAAY,CAAE,MAAM,OAAO;AAC3B,YAAM,OAAO,aAAa,MAAM,MAAM,OAAO;AAE7C,wBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS;AAEhD,sBAAgB,MAAM;AACtB,YAAM,aAAa;AAoBnB,WAAK,WAAW,YAAY,GAAG,WAAW,SAAS,YAAY;AAS7D,sBAAc,MAAM,OAAO,YAAY,MAAM;AAE7C,cAAM,MAAM,OAAO,YAAY,MAAM,OAAO;AAC5C,cAAM,MAAM,OAAO;AAEnB,YAAI,OAAO,KAAK;AAEd;AAAA;AAGF,YAAI,MAAM,IAAI,WAAW,WAAW,MAAe,CAAC,aAAa;AAI/D,oBAAU,SAAS,MAAM,OAAO,YAAY;AAG5C,cAAI,MAAM,IAAI,WAAW,SAAS,IAAkB;AAGlD;AACA;AACA;AACA,wBAAY;AACZ,+BAAmB;AAAA,qBACV,MAAM,IAAI,WAAW,SAAS,GAAgB;AACvD,+BAAmB;AAEnB,gBAAK,OAAM,QAAQ,YAAY,UAAU,MAAM,GAAG;AAGhD;AACA;AACA;AACA,0BAAY;AAAA,mBACP;AAIL,0BAAY;AAAA;AAAA,iBAET;AACL,+BAAmB;AAAA;AAGrB,oBAAU,KAAK,MAAM,OAAO;AAC5B,gBAAM,OAAO,YAAY;AAEzB,iBAAO,MAAM,KAAK;AAChB,iBAAK,MAAM,IAAI,WAAW;AAE1B,gBAAI,QAAQ,KAAK;AACf,kBAAI,OAAO,GAAM;AACf,0BAAU,IAAK,UAAS,MAAM,QAAQ,YAAa,aAAY,IAAI,MAAM;AAAA,qBACpE;AACL;AAAA;AAAA,mBAEG;AACL;AAAA;AAGF;AAAA;AAGF,0BAAgB,OAAO;AAEvB,qBAAW,KAAK,MAAM,QAAQ;AAC9B,gBAAM,QAAQ,YAAY,MAAM,OAAO,YAAY,IAAK,oBAAmB,IAAI;AAE/E,oBAAU,KAAK,MAAM,OAAO;AAC5B,gBAAM,OAAO,YAAY,SAAS;AAElC,oBAAU,KAAK,MAAM,OAAO;AAC5B,gBAAM,OAAO,YAAY,MAAM,MAAM,OAAO;AAC5C;AAAA;AAIF,YAAI,eAAe;AAAE;AAAA;AAGrB,oBAAY;AACZ,aAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AAClD,cAAI,gBAAgB,GAAG,OAAO,UAAU,SAAS,OAAO;AACtD,wBAAY;AACZ;AAAA;AAAA;AAIJ,YAAI,WAAW;AAKb,gBAAM,UAAU;AAEhB,cAAI,MAAM,cAAc,GAAG;AAIzB,sBAAU,KAAK,MAAM,OAAO;AAC5B,uBAAW,KAAK,MAAM,QAAQ;AAC9B,sBAAU,KAAK,MAAM,OAAO;AAC5B,sBAAU,KAAK,MAAM,OAAO;AAC5B,kBAAM,OAAO,aAAa,MAAM;AAAA;AAGlC;AAAA;AAGF,kBAAU,KAAK,MAAM,OAAO;AAC5B,mBAAW,KAAK,MAAM,QAAQ;AAC9B,kBAAU,KAAK,MAAM,OAAO;AAC5B,kBAAU,KAAK,MAAM,OAAO;AAI5B,cAAM,OAAO,YAAY;AAAA;AAG3B,kBAAY,MAAM;AAClB,YAAM,YAAY;AAElB,cAAe,MAAM,KAAK,mBAAmB,cAAc;AAC3D,YAAM,SAAS;AACf,YAAM,MAAS,QAAQ,CAAE,WAAW;AAEpC,YAAM,GAAG,MAAM,SAAS,OAAO,WAAW;AAE1C,cAAe,MAAM,KAAK,oBAAoB,cAAc;AAC5D,YAAM,SAAS;AAEf,YAAM,UAAU;AAChB,YAAM,aAAa;AACnB,YAAM,KAAK,MAAM;AAIjB,WAAK,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACrC,cAAM,OAAO,IAAI,aAAa,UAAU;AACxC,cAAM,OAAO,IAAI,aAAa,UAAU;AACxC,cAAM,OAAO,IAAI,aAAa,UAAU;AACxC,cAAM,QAAQ,IAAI,aAAa,WAAW;AAAA;AAE5C,YAAM,YAAY;AAElB,aAAO;AAAA;AAAA;AAAA;;;AC1RT;AAAA;AAEA;AAEA,QAAI,UAAU,gBAA2B;AAGzC,WAAO,UAAU,aAAY,OAAO,WAAW,SAAS,QAAQ;AAC9D,UAAI,QAAQ,KAAK,IAAI,OACjB,MAAM,MAAM,OAAO,aAAa,MAAM,OAAO,YAC7C,MAAM,MAAM,OAAO;AAGvB,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAEnG,eAAS,MAAM,IAAI,WAAW;AAG9B,UAAI,WAAW,MACX,WAAW,MACX,WAAW,IAAa;AAC1B,eAAO;AAAA;AAKT,YAAM;AACN,aAAO,MAAM,KAAK;AAChB,aAAK,MAAM,IAAI,WAAW;AAC1B,YAAI,OAAO,UAAU,CAAC,QAAQ,KAAK;AAAE,iBAAO;AAAA;AAC5C,YAAI,OAAO,QAAQ;AAAE;AAAA;AAAA;AAGvB,UAAI,MAAM,GAAG;AAAE,eAAO;AAAA;AAEtB,UAAI,QAAQ;AAAE,eAAO;AAAA;AAErB,YAAM,OAAO,YAAY;AAEzB,cAAe,MAAM,KAAK,MAAM,MAAM;AACtC,YAAM,MAAS,CAAE,WAAW,MAAM;AAClC,YAAM,SAAS,MAAM,MAAM,GAAG,KAAK,OAAO,aAAa;AAEvD,aAAO;AAAA;AAAA;AAAA;;;AC3CT;AAAA;AAEA;AAEA,QAAI,UAAU,gBAA2B;AAKzC,kCAA8B,OAAO,WAAW;AAC9C,UAAI,QAAQ,KAAK,KAAK;AAEtB,YAAM,MAAM,OAAO,aAAa,MAAM,OAAO;AAC7C,YAAM,MAAM,OAAO;AAEnB,eAAS,MAAM,IAAI,WAAW;AAE9B,UAAI,WAAW,MACX,WAAW,MACX,WAAW,IAAa;AAC1B,eAAO;AAAA;AAGT,UAAI,MAAM,KAAK;AACb,aAAK,MAAM,IAAI,WAAW;AAE1B,YAAI,CAAC,QAAQ,KAAK;AAEhB,iBAAO;AAAA;AAAA;AAIX,aAAO;AAAA;AAKT,mCAA+B,OAAO,WAAW;AAC/C,UAAI,IACA,QAAQ,MAAM,OAAO,aAAa,MAAM,OAAO,YAC/C,MAAM,OACN,MAAM,MAAM,OAAO;AAGvB,UAAI,MAAM,KAAK,KAAK;AAAE,eAAO;AAAA;AAE7B,WAAK,MAAM,IAAI,WAAW;AAE1B,UAAI,KAAK,MAAe,KAAK,IAAa;AAAE,eAAO;AAAA;AAEnD,iBAAS;AAEP,YAAI,OAAO,KAAK;AAAE,iBAAO;AAAA;AAEzB,aAAK,MAAM,IAAI,WAAW;AAE1B,YAAI,MAAM,MAAe,MAAM,IAAa;AAI1C,cAAI,MAAM,SAAS,IAAI;AAAE,mBAAO;AAAA;AAEhC;AAAA;AAIF,YAAI,OAAO,MAAe,OAAO,IAAa;AAC5C;AAAA;AAGF,eAAO;AAAA;AAIT,UAAI,MAAM,KAAK;AACb,aAAK,MAAM,IAAI,WAAW;AAE1B,YAAI,CAAC,QAAQ,KAAK;AAEhB,iBAAO;AAAA;AAAA;AAGX,aAAO;AAAA;AAGT,iCAA6B,OAAO,KAAK;AACvC,UAAI,GAAG,GACH,QAAQ,MAAM,QAAQ;AAE1B,WAAK,IAAI,MAAM,GAAG,IAAI,MAAM,OAAO,SAAS,GAAG,IAAI,GAAG,KAAK;AACzD,YAAI,MAAM,OAAO,GAAG,UAAU,SAAS,MAAM,OAAO,GAAG,SAAS,kBAAkB;AAChF,gBAAM,OAAO,IAAI,GAAG,SAAS;AAC7B,gBAAM,OAAO,GAAG,SAAS;AACzB,eAAK;AAAA;AAAA;AAAA;AAMX,WAAO,UAAU,eAAc,OAAO,WAAW,SAAS,QAAQ;AAChE,UAAI,IACA,cACA,GACA,QACA,mBACA,SACA,WACA,WACA,GACA,WACA,YACA,gBACA,aACA,KACA,UACA,QACA,eACA,eACA,WACA,WACA,UACA,KACA,gBACA,cACA,OACA,WACA,iBACA,OACA,yBAAyB,OACzB,QAAQ;AAGb,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAQlG,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAClB,MAAM,cAAc,KACpB,MAAM,OAAO,aAAa,MAAM,cAAc,KAC9C,MAAM,OAAO,aAAa,MAAM,WAAW;AAC7C,eAAO;AAAA;AAKT,UAAI,UAAU,MAAM,eAAe,aAAa;AAM9C,YAAI,MAAM,OAAO,cAAc,MAAM,WAAW;AAC9C,mCAAyB;AAAA;AAAA;AAK7B,UAAK,kBAAiB,sBAAsB,OAAO,eAAe,GAAG;AACnE,oBAAY;AACZ,gBAAQ,MAAM,OAAO,aAAa,MAAM,OAAO;AAC/C,sBAAc,OAAO,MAAM,IAAI,MAAM,OAAO,iBAAiB;AAI7D,YAAI,0BAA0B,gBAAgB;AAAG,iBAAO;AAAA,iBAE9C,kBAAiB,qBAAqB,OAAO,eAAe,GAAG;AACzE,oBAAY;AAAA,aAEP;AACL,eAAO;AAAA;AAKT,UAAI,wBAAwB;AAC1B,YAAI,MAAM,WAAW,mBAAmB,MAAM,OAAO;AAAY,iBAAO;AAAA;AAI1E,uBAAiB,MAAM,IAAI,WAAW,iBAAiB;AAGvD,UAAI,QAAQ;AAAE,eAAO;AAAA;AAGrB,mBAAa,MAAM,OAAO;AAE1B,UAAI,WAAW;AACb,gBAAc,MAAM,KAAK,qBAAqB,MAAM;AACpD,YAAI,gBAAgB,GAAG;AACrB,gBAAM,QAAQ,CAAE,CAAE,SAAS;AAAA;AAAA,aAGxB;AACL,gBAAc,MAAM,KAAK,oBAAoB,MAAM;AAAA;AAGrD,YAAM,MAAS,YAAY,CAAE,WAAW;AACxC,YAAM,SAAS,OAAO,aAAa;AAMnC,iBAAW;AACX,qBAAe;AACf,wBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS;AAEhD,sBAAgB,MAAM;AACtB,YAAM,aAAa;AAEnB,aAAO,WAAW,SAAS;AACzB,cAAM;AACN,cAAM,MAAM,OAAO;AAEnB,kBAAU,SAAS,MAAM,OAAO,YAAY,iBAAkB,OAAM,OAAO,aAAa,MAAM,OAAO;AAErG,eAAO,MAAM,KAAK;AAChB,eAAK,MAAM,IAAI,WAAW;AAE1B,cAAI,OAAO,GAAM;AACf,sBAAU,IAAK,UAAS,MAAM,QAAQ,aAAa;AAAA,qBAC1C,OAAO,IAAM;AACtB;AAAA,iBACK;AACL;AAAA;AAGF;AAAA;AAGF,uBAAe;AAEf,YAAI,gBAAgB,KAAK;AAEvB,8BAAoB;AAAA,eACf;AACL,8BAAoB,SAAS;AAAA;AAK/B,YAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,oBAAoB,GAAG;AAAE,8BAAoB;AAAA;AAIvF,iBAAS,UAAU;AAGnB,gBAAe,MAAM,KAAK,kBAAkB,MAAM;AAClD,cAAM,SAAS,OAAO,aAAa;AACnC,cAAM,MAAS,YAAY,CAAE,WAAW;AACxC,YAAI,WAAW;AACb,gBAAM,OAAO,MAAM,IAAI,MAAM,OAAO,iBAAiB;AAAA;AAIvD,mBAAW,MAAM;AACjB,oBAAY,MAAM,OAAO;AACzB,oBAAY,MAAM,OAAO;AAMzB,wBAAgB,MAAM;AACtB,cAAM,aAAa,MAAM;AACzB,cAAM,YAAY;AAElB,cAAM,QAAQ;AACd,cAAM,OAAO,aAAa,eAAe,MAAM,OAAO;AACtD,cAAM,OAAO,aAAa;AAE1B,YAAI,gBAAgB,OAAO,MAAM,QAAQ,YAAY,IAAI;AAQvD,gBAAM,OAAO,KAAK,IAAI,MAAM,OAAO,GAAG;AAAA,eACjC;AACL,gBAAM,GAAG,MAAM,SAAS,OAAO,WAAW,SAAS;AAAA;AAIrD,YAAI,CAAC,MAAM,SAAS,cAAc;AAChC,kBAAQ;AAAA;AAIV,uBAAgB,MAAM,OAAO,YAAa,KAAK,MAAM,QAAQ,MAAM,OAAO;AAE1E,cAAM,YAAY,MAAM;AACxB,cAAM,aAAa;AACnB,cAAM,OAAO,aAAa;AAC1B,cAAM,OAAO,aAAa;AAC1B,cAAM,QAAQ;AAEd,gBAAe,MAAM,KAAK,mBAAmB,MAAM;AACnD,cAAM,SAAS,OAAO,aAAa;AAEnC,mBAAW,YAAY,MAAM;AAC7B,kBAAU,KAAK;AACf,uBAAe,MAAM,OAAO;AAE5B,YAAI,YAAY,SAAS;AAAE;AAAA;AAK3B,YAAI,MAAM,OAAO,YAAY,MAAM,WAAW;AAAE;AAAA;AAGhD,YAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE;AAAA;AAG5F,oBAAY;AACZ,aAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AAClD,cAAI,gBAAgB,GAAG,OAAO,UAAU,SAAS,OAAO;AACtD,wBAAY;AACZ;AAAA;AAAA;AAGJ,YAAI,WAAW;AAAE;AAAA;AAGjB,YAAI,WAAW;AACb,2BAAiB,sBAAsB,OAAO;AAC9C,cAAI,iBAAiB,GAAG;AAAE;AAAA;AAC1B,kBAAQ,MAAM,OAAO,YAAY,MAAM,OAAO;AAAA,eACzC;AACL,2BAAiB,qBAAqB,OAAO;AAC7C,cAAI,iBAAiB,GAAG;AAAE;AAAA;AAAA;AAG5B,YAAI,mBAAmB,MAAM,IAAI,WAAW,iBAAiB,IAAI;AAAE;AAAA;AAAA;AAIrE,UAAI,WAAW;AACb,gBAAQ,MAAM,KAAK,sBAAsB,MAAM;AAAA,aAC1C;AACL,gBAAQ,MAAM,KAAK,qBAAqB,MAAM;AAAA;AAEhD,YAAM,SAAS,OAAO,aAAa;AAEnC,gBAAU,KAAK;AACf,YAAM,OAAO;AAEb,YAAM,aAAa;AAGnB,UAAI,OAAO;AACT,4BAAoB,OAAO;AAAA;AAG7B,aAAO;AAAA;AAAA;AAAA;;;AC3WT;AAAA;AAAA;AAGA,QAAI,qBAAuB,gBAA2B;AACtD,QAAI,UAAuB,gBAA2B;AAGtD,WAAO,UAAU,mBAAmB,OAAO,WAAW,UAAU,QAAQ;AACtE,UAAI,IACA,YACA,eACA,SACA,MACA,GACA,GACA,OACA,UACA,eACA,KACA,OACA,KACA,WACA,iBACA,OACA,QAAQ,GACR,MAAM,MAAM,OAAO,aAAa,MAAM,OAAO,YAC7C,MAAM,MAAM,OAAO,YACnB,WAAW,YAAY;AAG3B,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAEnG,UAAI,MAAM,IAAI,WAAW,SAAS,IAAa;AAAE,eAAO;AAAA;AAIxD,aAAO,EAAE,MAAM,KAAK;AAClB,YAAI,MAAM,IAAI,WAAW,SAAS,MAC9B,MAAM,IAAI,WAAW,MAAM,OAAO,IAAa;AACjD,cAAI,MAAM,MAAM,KAAK;AAAE,mBAAO;AAAA;AAC9B,cAAI,MAAM,IAAI,WAAW,MAAM,OAAO,IAAa;AAAE,mBAAO;AAAA;AAC5D;AAAA;AAAA;AAIJ,gBAAU,MAAM;AAGhB,wBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS;AAEhD,sBAAgB,MAAM;AACtB,YAAM,aAAa;AAEnB,aAAO,WAAW,WAAW,CAAC,MAAM,QAAQ,WAAW,YAAY;AAGjE,YAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,YAAY,MAAM,YAAY,GAAG;AAAE;AAAA;AAG1F,YAAI,MAAM,OAAO,YAAY,GAAG;AAAE;AAAA;AAGlC,oBAAY;AACZ,aAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AAClD,cAAI,gBAAgB,GAAG,OAAO,UAAU,SAAS,OAAO;AACtD,wBAAY;AACZ;AAAA;AAAA;AAGJ,YAAI,WAAW;AAAE;AAAA;AAAA;AAGnB,YAAM,MAAM,SAAS,WAAW,UAAU,MAAM,WAAW,OAAO;AAClE,YAAM,IAAI;AAEV,WAAK,MAAM,GAAG,MAAM,KAAK,OAAO;AAC9B,aAAK,IAAI,WAAW;AACpB,YAAI,OAAO,IAAc;AACvB,iBAAO;AAAA,mBACE,OAAO,IAAc;AAC9B,qBAAW;AACX;AAAA,mBACS,OAAO,IAAe;AAC/B;AAAA,mBACS,OAAO,IAAc;AAC9B;AACA,cAAI,MAAM,OAAO,IAAI,WAAW,SAAS,IAAM;AAC7C;AAAA;AAAA;AAAA;AAKN,UAAI,WAAW,KAAK,IAAI,WAAW,WAAW,OAAO,IAAa;AAAE,eAAO;AAAA;AAI3E,WAAK,MAAM,WAAW,GAAG,MAAM,KAAK,OAAO;AACzC,aAAK,IAAI,WAAW;AACpB,YAAI,OAAO,IAAM;AACf;AAAA,mBACS,QAAQ,KAAK;AAAA,eAEjB;AACL;AAAA;AAAA;AAMJ,YAAM,MAAM,GAAG,QAAQ,qBAAqB,KAAK,KAAK;AACtD,UAAI,CAAC,IAAI,IAAI;AAAE,eAAO;AAAA;AAEtB,aAAO,MAAM,GAAG,cAAc,IAAI;AAClC,UAAI,CAAC,MAAM,GAAG,aAAa,OAAO;AAAE,eAAO;AAAA;AAE3C,YAAM,IAAI;AACV,eAAS,IAAI;AAGb,mBAAa;AACb,sBAAgB;AAIhB,cAAQ;AACR,aAAO,MAAM,KAAK,OAAO;AACvB,aAAK,IAAI,WAAW;AACpB,YAAI,OAAO,IAAM;AACf;AAAA,mBACS,QAAQ,KAAK;AAAA,eAEjB;AACL;AAAA;AAAA;AAMJ,YAAM,MAAM,GAAG,QAAQ,eAAe,KAAK,KAAK;AAChD,UAAI,MAAM,OAAO,UAAU,OAAO,IAAI,IAAI;AACxC,gBAAQ,IAAI;AACZ,cAAM,IAAI;AACV,iBAAS,IAAI;AAAA,aACR;AACL,gBAAQ;AACR,cAAM;AACN,gBAAQ;AAAA;AAIV,aAAO,MAAM,KAAK;AAChB,aAAK,IAAI,WAAW;AACpB,YAAI,CAAC,QAAQ,KAAK;AAAE;AAAA;AACpB;AAAA;AAGF,UAAI,MAAM,OAAO,IAAI,WAAW,SAAS,IAAM;AAC7C,YAAI,OAAO;AAGT,kBAAQ;AACR,gBAAM;AACN,kBAAQ;AACR,iBAAO,MAAM,KAAK;AAChB,iBAAK,IAAI,WAAW;AACpB,gBAAI,CAAC,QAAQ,KAAK;AAAE;AAAA;AACpB;AAAA;AAAA;AAAA;AAKN,UAAI,MAAM,OAAO,IAAI,WAAW,SAAS,IAAM;AAE7C,eAAO;AAAA;AAGT,cAAQ,mBAAmB,IAAI,MAAM,GAAG;AACxC,UAAI,CAAC,OAAO;AAEV,eAAO;AAAA;AAKT,UAAI,QAAQ;AAAE,eAAO;AAAA;AAErB,UAAI,OAAO,MAAM,IAAI,eAAe,aAAa;AAC/C,cAAM,IAAI,aAAa;AAAA;AAEzB,UAAI,OAAO,MAAM,IAAI,WAAW,WAAW,aAAa;AACtD,cAAM,IAAI,WAAW,SAAS,EAAE,OAAc;AAAA;AAGhD,YAAM,aAAa;AAEnB,YAAM,OAAO,YAAY,QAAQ;AACjC,aAAO;AAAA;AAAA;AAAA;;;ACpMT;AAAA;AAGA;AAGA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;;ACpEF;AAAA;AAEA;AAEA,QAAI,YAAgB;AAEpB,QAAI,WAAgB;AACpB,QAAI,gBAAgB;AACpB,QAAI,gBAAgB;AAEpB,QAAI,aAAc,QAAQ,WAAW,MAAM,gBAAgB,MAAM,gBAAgB;AAEjF,QAAI,YAAc,YAAY,YAAY,iBAAiB,aAAa;AAExE,QAAI,WAAc,6BAA6B,YAAY;AAE3D,QAAI,YAAc;AAClB,QAAI,UAAc;AAClB,QAAI,aAAc;AAClB,QAAI,cAAc;AAClB,QAAI,QAAc;AAElB,QAAI,cAAc,IAAI,OAAO,SAAS,WAAW,MAAM,YAAY,MAAM,UACjD,MAAM,aAAa,MAAM,cAAc,MAAM,QAAQ;AAC7E,QAAI,yBAAyB,IAAI,OAAO,SAAS,WAAW,MAAM,YAAY;AAE9E,WAAO,QAAQ,cAAc;AAC7B,WAAO,QAAQ,yBAAyB;AAAA;AAAA;;;AC3BxC;AAAA;AAEA;AAGA,QAAI,cAAc;AAClB,QAAI,yBAAyB,kBAA6B;AAK1D,QAAI,iBAAiB;AAAA,MACnB,CAAE,8CAA8C,oCAAoC;AAAA,MACpF,CAAE,SAAgB,OAAS;AAAA,MAC3B,CAAE,QAAgB,OAAS;AAAA,MAC3B,CAAE,YAAgB,KAAS;AAAA,MAC3B,CAAE,gBAAgB,SAAS;AAAA,MAC3B,CAAE,IAAI,OAAO,UAAU,YAAY,KAAK,OAAO,oBAAoB,MAAM,MAAM;AAAA,MAC/E,CAAE,IAAI,OAAO,uBAAuB,SAAS,UAAW,MAAM;AAAA;AAIhE,WAAO,UAAU,oBAAoB,OAAO,WAAW,SAAS,QAAQ;AACtE,UAAI,GAAG,UAAU,OAAO,UACpB,MAAM,MAAM,OAAO,aAAa,MAAM,OAAO,YAC7C,MAAM,MAAM,OAAO;AAGvB,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAEnG,UAAI,CAAC,MAAM,GAAG,QAAQ,MAAM;AAAE,eAAO;AAAA;AAErC,UAAI,MAAM,IAAI,WAAW,SAAS,IAAa;AAAE,eAAO;AAAA;AAExD,iBAAW,MAAM,IAAI,MAAM,KAAK;AAEhC,WAAK,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC1C,YAAI,eAAe,GAAG,GAAG,KAAK,WAAW;AAAE;AAAA;AAAA;AAG7C,UAAI,MAAM,eAAe,QAAQ;AAAE,eAAO;AAAA;AAE1C,UAAI,QAAQ;AAEV,eAAO,eAAe,GAAG;AAAA;AAG3B,iBAAW,YAAY;AAIvB,UAAI,CAAC,eAAe,GAAG,GAAG,KAAK,WAAW;AACxC,eAAO,WAAW,SAAS,YAAY;AACrC,cAAI,MAAM,OAAO,YAAY,MAAM,WAAW;AAAE;AAAA;AAEhD,gBAAM,MAAM,OAAO,YAAY,MAAM,OAAO;AAC5C,gBAAM,MAAM,OAAO;AACnB,qBAAW,MAAM,IAAI,MAAM,KAAK;AAEhC,cAAI,eAAe,GAAG,GAAG,KAAK,WAAW;AACvC,gBAAI,SAAS,WAAW,GAAG;AAAE;AAAA;AAC7B;AAAA;AAAA;AAAA;AAKN,YAAM,OAAO;AAEb,cAAgB,MAAM,KAAK,cAAc,IAAI;AAC7C,YAAM,MAAU,CAAE,WAAW;AAC7B,YAAM,UAAU,MAAM,SAAS,WAAW,UAAU,MAAM,WAAW;AAErE,aAAO;AAAA;AAAA;AAAA;;;ACxET;AAAA;AAEA;AAEA,QAAI,UAAU,gBAA2B;AAGzC,WAAO,UAAU,kBAAiB,OAAO,WAAW,SAAS,QAAQ;AACnE,UAAI,IAAI,OAAO,KAAK,OAChB,MAAM,MAAM,OAAO,aAAa,MAAM,OAAO,YAC7C,MAAM,MAAM,OAAO;AAGvB,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAEnG,WAAM,MAAM,IAAI,WAAW;AAE3B,UAAI,OAAO,MAAe,OAAO,KAAK;AAAE,eAAO;AAAA;AAG/C,cAAQ;AACR,WAAK,MAAM,IAAI,WAAW,EAAE;AAC5B,aAAO,OAAO,MAAe,MAAM,OAAO,SAAS,GAAG;AACpD;AACA,aAAK,MAAM,IAAI,WAAW,EAAE;AAAA;AAG9B,UAAI,QAAQ,KAAM,MAAM,OAAO,CAAC,QAAQ,KAAM;AAAE,eAAO;AAAA;AAEvD,UAAI,QAAQ;AAAE,eAAO;AAAA;AAIrB,YAAM,MAAM,eAAe,KAAK;AAChC,YAAM,MAAM,cAAc,KAAK,IAAM;AACrC,UAAI,MAAM,OAAO,QAAQ,MAAM,IAAI,WAAW,MAAM,KAAK;AACvD,cAAM;AAAA;AAGR,YAAM,OAAO,YAAY;AAEzB,cAAe,MAAM,KAAK,gBAAgB,MAAM,OAAO,QAAQ;AAC/D,YAAM,SAAS,WAAW,MAAM,GAAG;AACnC,YAAM,MAAS,CAAE,WAAW,MAAM;AAElC,cAAiB,MAAM,KAAK,UAAU,IAAI;AAC1C,YAAM,UAAW,MAAM,IAAI,MAAM,KAAK,KAAK;AAC3C,YAAM,MAAW,CAAE,WAAW,MAAM;AACpC,YAAM,WAAW;AAEjB,cAAe,MAAM,KAAK,iBAAiB,MAAM,OAAO,QAAQ;AAChE,YAAM,SAAS,WAAW,MAAM,GAAG;AAEnC,aAAO;AAAA;AAAA;AAAA;;;ACrDT;AAAA;AAEA;AAGA,WAAO,UAAU,kBAAkB,OAAO,WAAW,SAAqB;AACxE,UAAI,SAAS,WAAW,GAAG,GAAG,OAAO,KAAK,KAAK,OAAO,QAClD,WAAW,YAAY,GAAG,eAC1B,kBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS;AAGpD,UAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,aAAa,MAAM,aAAa,GAAG;AAAE,eAAO;AAAA;AAEnG,sBAAgB,MAAM;AACtB,YAAM,aAAa;AAGnB,aAAO,WAAW,WAAW,CAAC,MAAM,QAAQ,WAAW,YAAY;AAGjE,YAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,YAAY,MAAM,YAAY,GAAG;AAAE;AAAA;AAK1F,YAAI,MAAM,OAAO,aAAa,MAAM,WAAW;AAC7C,gBAAM,MAAM,OAAO,YAAY,MAAM,OAAO;AAC5C,gBAAM,MAAM,OAAO;AAEnB,cAAI,MAAM,KAAK;AACb,qBAAS,MAAM,IAAI,WAAW;AAE9B,gBAAI,WAAW,MAAe,WAAW,IAAa;AACpD,oBAAM,MAAM,UAAU,KAAK;AAC3B,oBAAM,MAAM,WAAW;AAEvB,kBAAI,OAAO,KAAK;AACd,wBAAS,WAAW,KAAc,IAAI;AACtC;AAAA;AAAA;AAAA;AAAA;AAOR,YAAI,MAAM,OAAO,YAAY,GAAG;AAAE;AAAA;AAGlC,oBAAY;AACZ,aAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AAClD,cAAI,gBAAgB,GAAG,OAAO,UAAU,SAAS,OAAO;AACtD,wBAAY;AACZ;AAAA;AAAA;AAGJ,YAAI,WAAW;AAAE;AAAA;AAAA;AAGnB,UAAI,CAAC,OAAO;AAEV,eAAO;AAAA;AAGT,gBAAU,MAAM,SAAS,WAAW,UAAU,MAAM,WAAW,OAAO;AAEtE,YAAM,OAAO,WAAW;AAExB,cAAiB,MAAM,KAAK,gBAAgB,MAAM,OAAO,QAAQ;AACjE,YAAM,SAAW,OAAO,aAAa;AACrC,YAAM,MAAW,CAAE,WAAW,MAAM;AAEpC,cAAiB,MAAM,KAAK,UAAU,IAAI;AAC1C,YAAM,UAAW;AACjB,YAAM,MAAW,CAAE,WAAW,MAAM,OAAO;AAC3C,YAAM,WAAW;AAEjB,cAAiB,MAAM,KAAK,iBAAiB,MAAM,OAAO,QAAQ;AAClE,YAAM,SAAW,OAAO,aAAa;AAErC,YAAM,aAAa;AAEnB,aAAO;AAAA;AAAA;AAAA;;;ACjFT;AAAA;AAEA;AAGA,WAAO,UAAU,oBAAmB,OAAO,WAAwB;AACjE,UAAI,SAAS,WAAW,GAAG,GAAG,OAAO,eACjC,WAAW,YAAY,GACvB,kBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS,cAChD,UAAU,MAAM;AAEpB,sBAAgB,MAAM;AACtB,YAAM,aAAa;AAGnB,aAAO,WAAW,WAAW,CAAC,MAAM,QAAQ,WAAW,YAAY;AAGjE,YAAI,CAAC,MAAM,GAAG,QAAQ,oBAAoB,MAAM,OAAO,YAAY,MAAM,YAAY,GAAG;AAAE;AAAA;AAG1F,YAAI,MAAM,OAAO,YAAY,GAAG;AAAE;AAAA;AAGlC,oBAAY;AACZ,aAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AAClD,cAAI,gBAAgB,GAAG,OAAO,UAAU,SAAS,OAAO;AACtD,wBAAY;AACZ;AAAA;AAAA;AAGJ,YAAI,WAAW;AAAE;AAAA;AAAA;AAGnB,gBAAU,MAAM,SAAS,WAAW,UAAU,MAAM,WAAW,OAAO;AAEtE,YAAM,OAAO;AAEb,cAAiB,MAAM,KAAK,kBAAkB,KAAK;AACnD,YAAM,MAAW,CAAE,WAAW,MAAM;AAEpC,cAAiB,MAAM,KAAK,UAAU,IAAI;AAC1C,YAAM,UAAW;AACjB,YAAM,MAAW,CAAE,WAAW,MAAM;AACpC,YAAM,WAAW;AAEjB,cAAiB,MAAM,KAAK,mBAAmB,KAAK;AAEpD,YAAM,aAAa;AAEnB,aAAO;AAAA;AAAA;AAAA;;;AClDT;AAAA;AAEA;AAEA,QAAI,QAAQ;AACZ,QAAI,UAAU,gBAA2B;AAGzC,wBAAoB,KAAK,IAAI,KAAK,QAAQ;AACxC,UAAI,IAAI,IAAG,OAAO,KAAK,KAAK,QAAQ,QAAQ;AAE5C,WAAK,MAAM;AAGX,WAAK,KAAS;AAEd,WAAK,MAAM;AAMX,WAAK,SAAS;AAEd,WAAK,SAAS;AACd,WAAK,SAAS;AACd,WAAK,SAAS;AACd,WAAK,SAAS;AAYd,WAAK,UAAU;AAGf,WAAK,YAAa;AAElB,WAAK,OAAa;AAClB,WAAK,UAAa;AAClB,WAAK,QAAa;AAClB,WAAK,WAAa;AAClB,WAAK,aAAa;AAIlB,WAAK,aAAa;AAElB,WAAK,QAAQ;AAGb,WAAK,SAAS;AAId,WAAI,KAAK;AACT,qBAAe;AAEf,WAAK,QAAQ,MAAM,SAAS,SAAS,GAAG,MAAM,GAAE,QAAQ,MAAM,KAAK,OAAO;AACxE,aAAK,GAAE,WAAW;AAElB,YAAI,CAAC,cAAc;AACjB,cAAI,QAAQ,KAAK;AACf;AAEA,gBAAI,OAAO,GAAM;AACf,wBAAU,IAAI,SAAS;AAAA,mBAClB;AACL;AAAA;AAEF;AAAA,iBACK;AACL,2BAAe;AAAA;AAAA;AAInB,YAAI,OAAO,MAAQ,QAAQ,MAAM,GAAG;AAClC,cAAI,OAAO,IAAM;AAAE;AAAA;AACnB,eAAK,OAAO,KAAK;AACjB,eAAK,OAAO,KAAK;AACjB,eAAK,OAAO,KAAK;AACjB,eAAK,OAAO,KAAK;AACjB,eAAK,QAAQ,KAAK;AAElB,yBAAe;AACf,mBAAS;AACT,mBAAS;AACT,kBAAQ,MAAM;AAAA;AAAA;AAKlB,WAAK,OAAO,KAAK,GAAE;AACnB,WAAK,OAAO,KAAK,GAAE;AACnB,WAAK,OAAO,KAAK;AACjB,WAAK,OAAO,KAAK;AACjB,WAAK,QAAQ,KAAK;AAElB,WAAK,UAAU,KAAK,OAAO,SAAS;AAAA;AAKtC,eAAW,UAAU,OAAO,SAAU,MAAM,KAAK,SAAS;AACxD,UAAI,QAAQ,IAAI,MAAM,MAAM,KAAK;AACjC,YAAM,QAAQ;AAEd,UAAI,UAAU;AAAG,aAAK;AACtB,YAAM,QAAQ,KAAK;AACnB,UAAI,UAAU;AAAG,aAAK;AAEtB,WAAK,OAAO,KAAK;AACjB,aAAO;AAAA;AAGT,eAAW,UAAU,UAAU,iBAAiB,MAAM;AACpD,aAAO,KAAK,OAAO,QAAQ,KAAK,OAAO,SAAS,KAAK,OAAO;AAAA;AAG9D,eAAW,UAAU,iBAAiB,wBAAwB,MAAM;AAClE,eAAS,MAAM,KAAK,SAAS,OAAO,KAAK,QAAQ;AAC/C,YAAI,KAAK,OAAO,QAAQ,KAAK,OAAO,QAAQ,KAAK,OAAO,OAAO;AAC7D;AAAA;AAAA;AAGJ,aAAO;AAAA;AAIT,eAAW,UAAU,aAAa,oBAAoB,KAAK;AACzD,UAAI;AAEJ,eAAS,MAAM,KAAK,IAAI,QAAQ,MAAM,KAAK,OAAO;AAChD,aAAK,KAAK,IAAI,WAAW;AACzB,YAAI,CAAC,QAAQ,KAAK;AAAE;AAAA;AAAA;AAEtB,aAAO;AAAA;AAIT,eAAW,UAAU,iBAAiB,wBAAwB,KAAK,KAAK;AACtE,UAAI,OAAO,KAAK;AAAE,eAAO;AAAA;AAEzB,aAAO,MAAM,KAAK;AAChB,YAAI,CAAC,QAAQ,KAAK,IAAI,WAAW,EAAE,OAAO;AAAE,iBAAO,MAAM;AAAA;AAAA;AAE3D,aAAO;AAAA;AAIT,eAAW,UAAU,YAAY,mBAAmB,KAAK,OAAM;AAC7D,eAAS,MAAM,KAAK,IAAI,QAAQ,MAAM,KAAK,OAAO;AAChD,YAAI,KAAK,IAAI,WAAW,SAAS,OAAM;AAAE;AAAA;AAAA;AAE3C,aAAO;AAAA;AAIT,eAAW,UAAU,gBAAgB,uBAAuB,KAAK,OAAM,KAAK;AAC1E,UAAI,OAAO,KAAK;AAAE,eAAO;AAAA;AAEzB,aAAO,MAAM,KAAK;AAChB,YAAI,UAAS,KAAK,IAAI,WAAW,EAAE,MAAM;AAAE,iBAAO,MAAM;AAAA;AAAA;AAE1D,aAAO;AAAA;AAIT,eAAW,UAAU,WAAW,kBAAkB,OAAO,KAAK,QAAQ,YAAY;AAChF,UAAI,GAAG,YAAY,IAAI,OAAO,MAAM,OAAO,WACvC,OAAO;AAEX,UAAI,SAAS,KAAK;AAChB,eAAO;AAAA;AAGT,cAAQ,IAAI,MAAM,MAAM;AAExB,WAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,KAAK;AACnC,qBAAa;AACb,oBAAY,QAAQ,KAAK,OAAO;AAEhC,YAAI,OAAO,IAAI,OAAO,YAAY;AAEhC,iBAAO,KAAK,OAAO,QAAQ;AAAA,eACtB;AACL,iBAAO,KAAK,OAAO;AAAA;AAGrB,eAAO,QAAQ,QAAQ,aAAa,QAAQ;AAC1C,eAAK,KAAK,IAAI,WAAW;AAEzB,cAAI,QAAQ,KAAK;AACf,gBAAI,OAAO,GAAM;AACf,4BAAc,IAAK,cAAa,KAAK,QAAQ,SAAS;AAAA,mBACjD;AACL;AAAA;AAAA,qBAEO,QAAQ,YAAY,KAAK,OAAO,OAAO;AAEhD;AAAA,iBACK;AACL;AAAA;AAGF;AAAA;AAGF,YAAI,aAAa,QAAQ;AAGvB,gBAAM,KAAK,IAAI,MAAM,aAAa,SAAS,GAAG,KAAK,OAAO,KAAK,IAAI,MAAM,OAAO;AAAA,eAC3E;AACL,gBAAM,KAAK,KAAK,IAAI,MAAM,OAAO;AAAA;AAAA;AAIrC,aAAO,MAAM,KAAK;AAAA;AAIpB,eAAW,UAAU,QAAQ;AAG7B,WAAO,UAAU;AAAA;AAAA;;;ACtOjB;AAAA;AAKA;AAGA,QAAI,QAAkB;AAGtB,QAAI,SAAS;AAAA,MAGX,CAAE,SAAc,iBAAqC,CAAE,aAAa;AAAA,MACpE,CAAE,QAAc;AAAA,MAChB,CAAE,SAAc,iBAAqC,CAAE,aAAa,aAAa,cAAc;AAAA,MAC/F,CAAE,cAAc,sBAAqC,CAAE,aAAa,aAAa,cAAc;AAAA,MAC/F,CAAE,MAAc,cAAqC,CAAE,aAAa,aAAa,cAAc;AAAA,MAC/F,CAAE,QAAc,gBAAqC,CAAE,aAAa,aAAa;AAAA,MACjF,CAAE,aAAc;AAAA,MAChB,CAAE,cAAc,sBAAqC,CAAE,aAAa,aAAa;AAAA,MACjF,CAAE,WAAc,mBAAqC,CAAE,aAAa,aAAa;AAAA,MACjF,CAAE,YAAc;AAAA,MAChB,CAAE,aAAc;AAAA;AAOlB,2BAAuB;AAMrB,WAAK,QAAQ,IAAI;AAEjB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,aAAK,MAAM,KAAK,OAAO,GAAG,IAAI,OAAO,GAAG,IAAI,EAAE,KAAM,QAAO,GAAG,MAAM,IAAI;AAAA;AAAA;AAO5E,gBAAY,UAAU,WAAW,SAAU,OAAO,WAAW,SAAS;AACpE,UAAI,IAAI,GACJ,QAAQ,KAAK,MAAM,SAAS,KAC5B,MAAM,MAAM,QACZ,OAAO,WACP,gBAAgB,OAChB,aAAa,MAAM,GAAG,QAAQ;AAElC,aAAO,OAAO,SAAS;AACrB,cAAM,OAAO,OAAO,MAAM,eAAe;AACzC,YAAI,QAAQ,SAAS;AAAE;AAAA;AAIvB,YAAI,MAAM,OAAO,QAAQ,MAAM,WAAW;AAAE;AAAA;AAI5C,YAAI,MAAM,SAAS,YAAY;AAC7B,gBAAM,OAAO;AACb;AAAA;AAUF,aAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,eAAK,MAAM,GAAG,OAAO,MAAM,SAAS;AACpC,cAAI,IAAI;AAAE;AAAA;AAAA;AAKZ,cAAM,QAAQ,CAAC;AAGf,YAAI,MAAM,QAAQ,MAAM,OAAO,IAAI;AACjC,0BAAgB;AAAA;AAGlB,eAAO,MAAM;AAEb,YAAI,OAAO,WAAW,MAAM,QAAQ,OAAO;AACzC,0BAAgB;AAChB;AACA,gBAAM,OAAO;AAAA;AAAA;AAAA;AAWnB,gBAAY,UAAU,QAAQ,SAAU,KAAK,IAAI,KAAK,WAAW;AAC/D,UAAI;AAEJ,UAAI,CAAC,KAAK;AAAE;AAAA;AAEZ,cAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK;AAErC,WAAK,SAAS,OAAO,MAAM,MAAM,MAAM;AAAA;AAIzC,gBAAY,UAAU,QAAQ;AAG9B,WAAO,UAAU;AAAA;AAAA;;;ACzHjB;AAAA;AAGA;AAUA,8BAA0B,IAAI;AAC5B,cAAQ;AAAA,aACD;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAO;AAAA;AAEP,iBAAO;AAAA;AAAA;AAIb,WAAO,UAAU,eAAc,OAAO,QAAQ;AAC5C,UAAI,MAAM,MAAM;AAEhB,aAAO,MAAM,MAAM,UAAU,CAAC,iBAAiB,MAAM,IAAI,WAAW,OAAO;AACzE;AAAA;AAGF,UAAI,QAAQ,MAAM,KAAK;AAAE,eAAO;AAAA;AAEhC,UAAI,CAAC,QAAQ;AAAE,cAAM,WAAW,MAAM,IAAI,MAAM,MAAM,KAAK;AAAA;AAE3D,YAAM,MAAM;AAEZ,aAAO;AAAA;AAAA;AAAA;;;ACzDT;AAAA;AAEA;AAEA,QAAI,UAAU,gBAA2B;AAGzC,WAAO,UAAU,iBAAiB,OAAO,QAAQ;AAC/C,UAAI,MAAM,KAAK,IAAI,MAAM,MAAM;AAE/B,UAAI,MAAM,IAAI,WAAW,SAAS,IAAc;AAAE,eAAO;AAAA;AAEzD,aAAO,MAAM,QAAQ,SAAS;AAC9B,YAAM,MAAM;AAMZ,UAAI,CAAC,QAAQ;AACX,YAAI,QAAQ,KAAK,MAAM,QAAQ,WAAW,UAAU,IAAM;AACxD,cAAI,QAAQ,KAAK,MAAM,QAAQ,WAAW,OAAO,OAAO,IAAM;AAE5D,iBAAK,OAAO;AACZ,mBAAO,MAAM,KAAK,MAAM,QAAQ,WAAW,KAAK,OAAO;AAAM;AAE7D,kBAAM,UAAU,MAAM,QAAQ,MAAM,GAAG;AACvC,kBAAM,KAAK,aAAa,MAAM;AAAA,iBACzB;AACL,kBAAM,UAAU,MAAM,QAAQ,MAAM,GAAG;AACvC,kBAAM,KAAK,aAAa,MAAM;AAAA;AAAA,eAG3B;AACL,gBAAM,KAAK,aAAa,MAAM;AAAA;AAAA;AAIlC;AAGA,aAAO,MAAM,OAAO,QAAQ,MAAM,IAAI,WAAW,OAAO;AAAE;AAAA;AAE1D,YAAM,MAAM;AACZ,aAAO;AAAA;AAAA;AAAA;;;AC5CT;AAAA;AAEA;AAEA,QAAI,UAAU,gBAA2B;AAEzC,QAAI,UAAU;AAEd,SAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAAE,cAAQ,KAAK;AAAA;AAApC;AAET,yCACG,MAAM,IAAI,QAAQ,SAAU,IAAI;AAAE,cAAQ,GAAG,WAAW,MAAM;AAAA;AAGjE,WAAO,UAAU,gBAAgB,OAAO,QAAQ;AAC9C,UAAI,IAAI,MAAM,MAAM,KAAK,MAAM,MAAM;AAErC,UAAI,MAAM,IAAI,WAAW,SAAS,IAAa;AAAE,eAAO;AAAA;AAExD;AAEA,UAAI,MAAM,KAAK;AACb,aAAK,MAAM,IAAI,WAAW;AAE1B,YAAI,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACjC,cAAI,CAAC,QAAQ;AAAE,kBAAM,WAAW,MAAM,IAAI;AAAA;AAC1C,gBAAM,OAAO;AACb,iBAAO;AAAA;AAGT,YAAI,OAAO,IAAM;AACf,cAAI,CAAC,QAAQ;AACX,kBAAM,KAAK,aAAa,MAAM;AAAA;AAGhC;AAEA,iBAAO,MAAM,KAAK;AAChB,iBAAK,MAAM,IAAI,WAAW;AAC1B,gBAAI,CAAC,QAAQ,KAAK;AAAE;AAAA;AACpB;AAAA;AAGF,gBAAM,MAAM;AACZ,iBAAO;AAAA;AAAA;AAIX,UAAI,CAAC,QAAQ;AAAE,cAAM,WAAW;AAAA;AAChC,YAAM;AACN,aAAO;AAAA;AAAA;AAAA;;;AClDT;AAAA;AAEA;AAGA,WAAO,UAAU,kBAAkB,OAAO,QAAQ;AAChD,UAAI,OAAO,KAAK,QAAQ,OAAO,YAAY,UAAU,cAAc,cAC/D,MAAM,MAAM,KACZ,KAAK,MAAM,IAAI,WAAW;AAE9B,UAAI,OAAO,IAAa;AAAE,eAAO;AAAA;AAEjC,cAAQ;AACR;AACA,YAAM,MAAM;AAGZ,aAAO,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS,IAAa;AAAE;AAAA;AAEjE,eAAS,MAAM,IAAI,MAAM,OAAO;AAChC,qBAAe,OAAO;AAEtB,UAAI,MAAM,oBAAqB,OAAM,UAAU,iBAAiB,MAAM,OAAO;AAC3E,YAAI,CAAC;AAAQ,gBAAM,WAAW;AAC9B,cAAM,OAAO;AACb,eAAO;AAAA;AAGT,mBAAa,WAAW;AAGxB,aAAQ,cAAa,MAAM,IAAI,QAAQ,KAAK,eAAe,IAAI;AAC7D,mBAAW,aAAa;AAGxB,eAAO,WAAW,OAAO,MAAM,IAAI,WAAW,cAAc,IAAa;AAAE;AAAA;AAE3E,uBAAe,WAAW;AAE1B,YAAI,iBAAiB,cAAc;AAEjC,cAAI,CAAC,QAAQ;AACX,oBAAY,MAAM,KAAK,eAAe,QAAQ;AAC9C,kBAAM,SAAU;AAChB,kBAAM,UAAU,MAAM,IAAI,MAAM,KAAK,YAClC,QAAQ,OAAO,KACf,QAAQ,YAAY;AAAA;AAEzB,gBAAM,MAAM;AACZ,iBAAO;AAAA;AAIT,cAAM,UAAU,gBAAgB;AAAA;AAIlC,YAAM,mBAAmB;AAEzB,UAAI,CAAC;AAAQ,cAAM,WAAW;AAC9B,YAAM,OAAO;AACb,aAAO;AAAA;AAAA;AAAA;;;AC7DT;AAAA;AAEA;AAKA,WAAO,QAAQ,WAAW,uBAAuB,OAAO,QAAQ;AAC9D,UAAI,GAAG,SAAS,OAAO,KAAK,IACxB,QAAQ,MAAM,KACd,SAAS,MAAM,IAAI,WAAW;AAElC,UAAI,QAAQ;AAAE,eAAO;AAAA;AAErB,UAAI,WAAW,KAAa;AAAE,eAAO;AAAA;AAErC,gBAAU,MAAM,WAAW,MAAM,KAAK;AACtC,YAAM,QAAQ;AACd,WAAK,OAAO,aAAa;AAEzB,UAAI,MAAM,GAAG;AAAE,eAAO;AAAA;AAEtB,UAAI,MAAM,GAAG;AACX,gBAAgB,MAAM,KAAK,QAAQ,IAAI;AACvC,cAAM,UAAU;AAChB;AAAA;AAGF,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC3B,gBAAgB,MAAM,KAAK,QAAQ,IAAI;AACvC,cAAM,UAAU,KAAK;AAErB,cAAM,WAAW,KAAK;AAAA,UACpB;AAAA,UACA,QAAQ;AAAA,UACR,OAAQ,MAAM,OAAO,SAAS;AAAA,UAC9B,KAAQ;AAAA,UACR,MAAQ,QAAQ;AAAA,UAChB,OAAQ,QAAQ;AAAA;AAAA;AAIpB,YAAM,OAAO,QAAQ;AAErB,aAAO;AAAA;AAIT,yBAAqB,OAAO,YAAY;AACtC,UAAI,GAAG,GACH,YACA,UACA,OACA,cAAc,IACd,MAAM,WAAW;AAErB,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,qBAAa,WAAW;AAExB,YAAI,WAAW,WAAW,KAAa;AACrC;AAAA;AAGF,YAAI,WAAW,QAAQ,IAAI;AACzB;AAAA;AAGF,mBAAW,WAAW,WAAW;AAEjC,gBAAgB,MAAM,OAAO,WAAW;AACxC,cAAM,OAAU;AAChB,cAAM,MAAU;AAChB,cAAM,UAAU;AAChB,cAAM,SAAU;AAChB,cAAM,UAAU;AAEhB,gBAAgB,MAAM,OAAO,SAAS;AACtC,cAAM,OAAU;AAChB,cAAM,MAAU;AAChB,cAAM,UAAU;AAChB,cAAM,SAAU;AAChB,cAAM,UAAU;AAEhB,YAAI,MAAM,OAAO,SAAS,QAAQ,GAAG,SAAS,UAC1C,MAAM,OAAO,SAAS,QAAQ,GAAG,YAAY,KAAK;AAEpD,sBAAY,KAAK,SAAS,QAAQ;AAAA;AAAA;AAUtC,aAAO,YAAY,QAAQ;AACzB,YAAI,YAAY;AAChB,YAAI,IAAI;AAER,eAAO,IAAI,MAAM,OAAO,UAAU,MAAM,OAAO,GAAG,SAAS,WAAW;AACpE;AAAA;AAGF;AAEA,YAAI,MAAM,GAAG;AACX,kBAAQ,MAAM,OAAO;AACrB,gBAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,gBAAM,OAAO,KAAK;AAAA;AAAA;AAAA;AAQxB,WAAO,QAAQ,cAAc,uBAAuB,OAAO;AACzD,UAAI,MACA,cAAc,MAAM,aACpB,MAAM,MAAM,YAAY;AAE5B,kBAAY,OAAO,MAAM;AAEzB,WAAK,OAAO,GAAG,OAAO,KAAK,QAAQ;AACjC,YAAI,YAAY,SAAS,YAAY,MAAM,YAAY;AACrD,sBAAY,OAAO,YAAY,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC9H3C;AAAA;AAEA;AAKA,WAAO,QAAQ,WAAW,kBAAkB,OAAO,QAAQ;AACzD,UAAI,GAAG,SAAS,OACZ,QAAQ,MAAM,KACd,SAAS,MAAM,IAAI,WAAW;AAElC,UAAI,QAAQ;AAAE,eAAO;AAAA;AAErB,UAAI,WAAW,MAAgB,WAAW,IAAc;AAAE,eAAO;AAAA;AAEjE,gBAAU,MAAM,WAAW,MAAM,KAAK,WAAW;AAEjD,WAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,gBAAgB,MAAM,KAAK,QAAQ,IAAI;AACvC,cAAM,UAAU,OAAO,aAAa;AAEpC,cAAM,WAAW,KAAK;AAAA,UAGpB;AAAA,UAIA,QAAQ,QAAQ;AAAA,UAIhB,OAAQ,MAAM,OAAO,SAAS;AAAA,UAK9B,KAAQ;AAAA,UAKR,MAAQ,QAAQ;AAAA,UAChB,OAAQ,QAAQ;AAAA;AAAA;AAIpB,YAAM,OAAO,QAAQ;AAErB,aAAO;AAAA;AAIT,yBAAqB,OAAO,YAAY;AACtC,UAAI,GACA,YACA,UACA,OACA,IACA,UACA,MAAM,WAAW;AAErB,WAAK,IAAI,MAAM,GAAG,KAAK,GAAG,KAAK;AAC7B,qBAAa,WAAW;AAExB,YAAI,WAAW,WAAW,MAAe,WAAW,WAAW,IAAa;AAC1E;AAAA;AAIF,YAAI,WAAW,QAAQ,IAAI;AACzB;AAAA;AAGF,mBAAW,WAAW,WAAW;AAOjC,mBAAW,IAAI,KACJ,WAAW,IAAI,GAAG,QAAQ,WAAW,MAAM,KAE3C,WAAW,IAAI,GAAG,WAAW,WAAW,UACxC,WAAW,IAAI,GAAG,UAAU,WAAW,QAAQ,KAE/C,WAAW,WAAW,MAAM,GAAG,UAAU,SAAS,QAAQ;AAErE,aAAK,OAAO,aAAa,WAAW;AAEpC,gBAAgB,MAAM,OAAO,WAAW;AACxC,cAAM,OAAU,WAAW,gBAAgB;AAC3C,cAAM,MAAU,WAAW,WAAW;AACtC,cAAM,UAAU;AAChB,cAAM,SAAU,WAAW,KAAK,KAAK;AACrC,cAAM,UAAU;AAEhB,gBAAgB,MAAM,OAAO,SAAS;AACtC,cAAM,OAAU,WAAW,iBAAiB;AAC5C,cAAM,MAAU,WAAW,WAAW;AACtC,cAAM,UAAU;AAChB,cAAM,SAAU,WAAW,KAAK,KAAK;AACrC,cAAM,UAAU;AAEhB,YAAI,UAAU;AACZ,gBAAM,OAAO,WAAW,IAAI,GAAG,OAAO,UAAU;AAChD,gBAAM,OAAO,WAAW,WAAW,MAAM,GAAG,OAAO,UAAU;AAC7D;AAAA;AAAA;AAAA;AAQN,WAAO,QAAQ,cAAc,kBAAkB,OAAO;AACpD,UAAI,MACA,cAAc,MAAM,aACpB,MAAM,MAAM,YAAY;AAE5B,kBAAY,OAAO,MAAM;AAEzB,WAAK,OAAO,GAAG,OAAO,KAAK,QAAQ;AACjC,YAAI,YAAY,SAAS,YAAY,MAAM,YAAY;AACrD,sBAAY,OAAO,YAAY,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC9H3C;AAAA;AAEA;AAEA,QAAI,qBAAuB,gBAA2B;AACtD,QAAI,UAAuB,gBAA2B;AAGtD,WAAO,UAAU,eAAc,OAAO,QAAQ;AAC5C,UAAI,OACA,OACA,OACA,UACA,YACA,KACA,KACA,KACA,OACA,OAAO,IACP,QAAQ,IACR,SAAS,MAAM,KACf,MAAM,MAAM,QACZ,QAAQ,MAAM,KACd,iBAAiB;AAErB,UAAI,MAAM,IAAI,WAAW,MAAM,SAAS,IAAa;AAAE,eAAO;AAAA;AAE9D,mBAAa,MAAM,MAAM;AACzB,iBAAW,MAAM,GAAG,QAAQ,eAAe,OAAO,MAAM,KAAK;AAG7D,UAAI,WAAW,GAAG;AAAE,eAAO;AAAA;AAE3B,YAAM,WAAW;AACjB,UAAI,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS,IAAa;AAM1D,yBAAiB;AAIjB;AACA,eAAO,MAAM,KAAK,OAAO;AACvB,kBAAO,MAAM,IAAI,WAAW;AAC5B,cAAI,CAAC,QAAQ,UAAS,UAAS,IAAM;AAAE;AAAA;AAAA;AAEzC,YAAI,OAAO,KAAK;AAAE,iBAAO;AAAA;AAIzB,gBAAQ;AACR,cAAM,MAAM,GAAG,QAAQ,qBAAqB,MAAM,KAAK,KAAK,MAAM;AAClE,YAAI,IAAI,IAAI;AACV,iBAAO,MAAM,GAAG,cAAc,IAAI;AAClC,cAAI,MAAM,GAAG,aAAa,OAAO;AAC/B,kBAAM,IAAI;AAAA,iBACL;AACL,mBAAO;AAAA;AAKT,kBAAQ;AACR,iBAAO,MAAM,KAAK,OAAO;AACvB,oBAAO,MAAM,IAAI,WAAW;AAC5B,gBAAI,CAAC,QAAQ,UAAS,UAAS,IAAM;AAAE;AAAA;AAAA;AAKzC,gBAAM,MAAM,GAAG,QAAQ,eAAe,MAAM,KAAK,KAAK,MAAM;AAC5D,cAAI,MAAM,OAAO,UAAU,OAAO,IAAI,IAAI;AACxC,oBAAQ,IAAI;AACZ,kBAAM,IAAI;AAIV,mBAAO,MAAM,KAAK,OAAO;AACvB,sBAAO,MAAM,IAAI,WAAW;AAC5B,kBAAI,CAAC,QAAQ,UAAS,UAAS,IAAM;AAAE;AAAA;AAAA;AAAA;AAAA;AAK7C,YAAI,OAAO,OAAO,MAAM,IAAI,WAAW,SAAS,IAAa;AAE3D,2BAAiB;AAAA;AAEnB;AAAA;AAGF,UAAI,gBAAgB;AAIlB,YAAI,OAAO,MAAM,IAAI,eAAe,aAAa;AAAE,iBAAO;AAAA;AAE1D,YAAI,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS,IAAa;AAC1D,kBAAQ,MAAM;AACd,gBAAM,MAAM,GAAG,QAAQ,eAAe,OAAO;AAC7C,cAAI,OAAO,GAAG;AACZ,oBAAQ,MAAM,IAAI,MAAM,OAAO;AAAA,iBAC1B;AACL,kBAAM,WAAW;AAAA;AAAA,eAEd;AACL,gBAAM,WAAW;AAAA;AAKnB,YAAI,CAAC,OAAO;AAAE,kBAAQ,MAAM,IAAI,MAAM,YAAY;AAAA;AAElD,cAAM,MAAM,IAAI,WAAW,mBAAmB;AAC9C,YAAI,CAAC,KAAK;AACR,gBAAM,MAAM;AACZ,iBAAO;AAAA;AAET,eAAO,IAAI;AACX,gBAAQ,IAAI;AAAA;AAOd,UAAI,CAAC,QAAQ;AACX,cAAM,MAAM;AACZ,cAAM,SAAS;AAEf,gBAAe,MAAM,KAAK,aAAa,KAAK;AAC5C,cAAM,QAAS,QAAQ,CAAE,CAAE,QAAQ;AACnC,YAAI,OAAO;AACT,gBAAM,KAAK,CAAE,SAAS;AAAA;AAGxB,cAAM,GAAG,OAAO,SAAS;AAEzB,gBAAe,MAAM,KAAK,cAAc,KAAK;AAAA;AAG/C,YAAM,MAAM;AACZ,YAAM,SAAS;AACf,aAAO;AAAA;AAAA;AAAA;;;AClJT;AAAA;AAEA;AAEA,QAAI,qBAAuB,gBAA2B;AACtD,QAAI,UAAuB,gBAA2B;AAGtD,WAAO,UAAU,gBAAe,OAAO,QAAQ;AAC7C,UAAI,OACA,OACA,SACA,OACA,UACA,YACA,KACA,KACA,KACA,OACA,OACA,QACA,OACA,OAAO,IACP,SAAS,MAAM,KACf,MAAM,MAAM;AAEhB,UAAI,MAAM,IAAI,WAAW,MAAM,SAAS,IAAa;AAAE,eAAO;AAAA;AAC9D,UAAI,MAAM,IAAI,WAAW,MAAM,MAAM,OAAO,IAAa;AAAE,eAAO;AAAA;AAElE,mBAAa,MAAM,MAAM;AACzB,iBAAW,MAAM,GAAG,QAAQ,eAAe,OAAO,MAAM,MAAM,GAAG;AAGjE,UAAI,WAAW,GAAG;AAAE,eAAO;AAAA;AAE3B,YAAM,WAAW;AACjB,UAAI,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS,IAAa;AAO1D;AACA,eAAO,MAAM,KAAK,OAAO;AACvB,kBAAO,MAAM,IAAI,WAAW;AAC5B,cAAI,CAAC,QAAQ,UAAS,UAAS,IAAM;AAAE;AAAA;AAAA;AAEzC,YAAI,OAAO,KAAK;AAAE,iBAAO;AAAA;AAIzB,gBAAQ;AACR,cAAM,MAAM,GAAG,QAAQ,qBAAqB,MAAM,KAAK,KAAK,MAAM;AAClE,YAAI,IAAI,IAAI;AACV,iBAAO,MAAM,GAAG,cAAc,IAAI;AAClC,cAAI,MAAM,GAAG,aAAa,OAAO;AAC/B,kBAAM,IAAI;AAAA,iBACL;AACL,mBAAO;AAAA;AAAA;AAMX,gBAAQ;AACR,eAAO,MAAM,KAAK,OAAO;AACvB,kBAAO,MAAM,IAAI,WAAW;AAC5B,cAAI,CAAC,QAAQ,UAAS,UAAS,IAAM;AAAE;AAAA;AAAA;AAKzC,cAAM,MAAM,GAAG,QAAQ,eAAe,MAAM,KAAK,KAAK,MAAM;AAC5D,YAAI,MAAM,OAAO,UAAU,OAAO,IAAI,IAAI;AACxC,kBAAQ,IAAI;AACZ,gBAAM,IAAI;AAIV,iBAAO,MAAM,KAAK,OAAO;AACvB,oBAAO,MAAM,IAAI,WAAW;AAC5B,gBAAI,CAAC,QAAQ,UAAS,UAAS,IAAM;AAAE;AAAA;AAAA;AAAA,eAEpC;AACL,kBAAQ;AAAA;AAGV,YAAI,OAAO,OAAO,MAAM,IAAI,WAAW,SAAS,IAAa;AAC3D,gBAAM,MAAM;AACZ,iBAAO;AAAA;AAET;AAAA,aACK;AAIL,YAAI,OAAO,MAAM,IAAI,eAAe,aAAa;AAAE,iBAAO;AAAA;AAE1D,YAAI,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS,IAAa;AAC1D,kBAAQ,MAAM;AACd,gBAAM,MAAM,GAAG,QAAQ,eAAe,OAAO;AAC7C,cAAI,OAAO,GAAG;AACZ,oBAAQ,MAAM,IAAI,MAAM,OAAO;AAAA,iBAC1B;AACL,kBAAM,WAAW;AAAA;AAAA,eAEd;AACL,gBAAM,WAAW;AAAA;AAKnB,YAAI,CAAC,OAAO;AAAE,kBAAQ,MAAM,IAAI,MAAM,YAAY;AAAA;AAElD,cAAM,MAAM,IAAI,WAAW,mBAAmB;AAC9C,YAAI,CAAC,KAAK;AACR,gBAAM,MAAM;AACZ,iBAAO;AAAA;AAET,eAAO,IAAI;AACX,gBAAQ,IAAI;AAAA;AAOd,UAAI,CAAC,QAAQ;AACX,kBAAU,MAAM,IAAI,MAAM,YAAY;AAEtC,cAAM,GAAG,OAAO,MACd,SACA,MAAM,IACN,MAAM,KACN,SAAS;AAGX,gBAAiB,MAAM,KAAK,SAAS,OAAO;AAC5C,cAAM,QAAW,QAAQ,CAAE,CAAE,OAAO,OAAQ,CAAE,OAAO;AACrD,cAAM,WAAW;AACjB,cAAM,UAAW;AAEjB,YAAI,OAAO;AACT,gBAAM,KAAK,CAAE,SAAS;AAAA;AAAA;AAI1B,YAAM,MAAM;AACZ,YAAM,SAAS;AACf,aAAO;AAAA;AAAA;AAAA;;;ACtJT;AAAA;AAEA;AAIA,QAAI,WAAc;AAClB,QAAI,cAAc;AAGlB,WAAO,UAAU,kBAAkB,OAAO,QAAQ;AAChD,UAAI,KAAK,SAAS,OAAO,IAAI,OAAO,KAChC,MAAM,MAAM;AAEhB,UAAI,MAAM,IAAI,WAAW,SAAS,IAAa;AAAE,eAAO;AAAA;AAExD,cAAQ,MAAM;AACd,YAAM,MAAM;AAEZ,iBAAS;AACP,YAAI,EAAE,OAAO;AAAK,iBAAO;AAEzB,aAAK,MAAM,IAAI,WAAW;AAE1B,YAAI,OAAO;AAAc,iBAAO;AAChC,YAAI,OAAO;AAAc;AAAA;AAG3B,YAAM,MAAM,IAAI,MAAM,QAAQ,GAAG;AAEjC,UAAI,YAAY,KAAK,MAAM;AACzB,kBAAU,MAAM,GAAG,cAAc;AACjC,YAAI,CAAC,MAAM,GAAG,aAAa,UAAU;AAAE,iBAAO;AAAA;AAE9C,YAAI,CAAC,QAAQ;AACX,kBAAgB,MAAM,KAAK,aAAa,KAAK;AAC7C,gBAAM,QAAU,CAAE,CAAE,QAAQ;AAC5B,gBAAM,SAAU;AAChB,gBAAM,OAAU;AAEhB,kBAAgB,MAAM,KAAK,QAAQ,IAAI;AACvC,gBAAM,UAAU,MAAM,GAAG,kBAAkB;AAE3C,kBAAgB,MAAM,KAAK,cAAc,KAAK;AAC9C,gBAAM,SAAU;AAChB,gBAAM,OAAU;AAAA;AAGlB,cAAM,OAAO,IAAI,SAAS;AAC1B,eAAO;AAAA;AAGT,UAAI,SAAS,KAAK,MAAM;AACtB,kBAAU,MAAM,GAAG,cAAc,YAAY;AAC7C,YAAI,CAAC,MAAM,GAAG,aAAa,UAAU;AAAE,iBAAO;AAAA;AAE9C,YAAI,CAAC,QAAQ;AACX,kBAAgB,MAAM,KAAK,aAAa,KAAK;AAC7C,gBAAM,QAAU,CAAE,CAAE,QAAQ;AAC5B,gBAAM,SAAU;AAChB,gBAAM,OAAU;AAEhB,kBAAgB,MAAM,KAAK,QAAQ,IAAI;AACvC,gBAAM,UAAU,MAAM,GAAG,kBAAkB;AAE3C,kBAAgB,MAAM,KAAK,cAAc,KAAK;AAC9C,gBAAM,SAAU;AAChB,gBAAM,OAAU;AAAA;AAGlB,cAAM,OAAO,IAAI,SAAS;AAC1B,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA;AAAA;;;AC1ET;AAAA;AAEA;AAGA,QAAI,cAAc,kBAA6B;AAG/C,sBAAkB,IAAI;AAEpB,UAAI,KAAK,KAAK;AACd,aAAQ,MAAM,MAAiB,MAAM;AAAA;AAIvC,WAAO,UAAU,qBAAqB,OAAO,QAAQ;AACnD,UAAI,IAAI,OAAO,KAAK,OAChB,MAAM,MAAM;AAEhB,UAAI,CAAC,MAAM,GAAG,QAAQ,MAAM;AAAE,eAAO;AAAA;AAGrC,YAAM,MAAM;AACZ,UAAI,MAAM,IAAI,WAAW,SAAS,MAC9B,MAAM,KAAK,KAAK;AAClB,eAAO;AAAA;AAIT,WAAK,MAAM,IAAI,WAAW,MAAM;AAChC,UAAI,OAAO,MACP,OAAO,MACP,OAAO,MACP,CAAC,SAAS,KAAK;AACjB,eAAO;AAAA;AAGT,cAAQ,MAAM,IAAI,MAAM,KAAK,MAAM;AACnC,UAAI,CAAC,OAAO;AAAE,eAAO;AAAA;AAErB,UAAI,CAAC,QAAQ;AACX,gBAAgB,MAAM,KAAK,eAAe,IAAI;AAC9C,cAAM,UAAU,MAAM,IAAI,MAAM,KAAK,MAAM,MAAM,GAAG;AAAA;AAEtD,YAAM,OAAO,MAAM,GAAG;AACtB,aAAO;AAAA;AAAA;AAAA;;;AC7CT;AAAA;AAEA;AAEA,QAAI,WAAoB;AACxB,QAAI,MAAoB,gBAA2B;AACnD,QAAI,oBAAoB,gBAA2B;AACnD,QAAI,gBAAoB,gBAA2B;AAGnD,QAAI,aAAa;AACjB,QAAI,WAAa;AAGjB,WAAO,UAAU,gBAAgB,OAAO,QAAQ;AAC9C,UAAI,IAAI,OAAM,OAAO,MAAM,MAAM,KAAK,MAAM,MAAM;AAElD,UAAI,MAAM,IAAI,WAAW,SAAS,IAAa;AAAE,eAAO;AAAA;AAExD,UAAI,MAAM,IAAI,KAAK;AACjB,aAAK,MAAM,IAAI,WAAW,MAAM;AAEhC,YAAI,OAAO,IAAc;AACvB,kBAAQ,MAAM,IAAI,MAAM,KAAK,MAAM;AACnC,cAAI,OAAO;AACT,gBAAI,CAAC,QAAQ;AACX,sBAAO,MAAM,GAAG,GAAG,kBAAkB,MAAM,SAAS,MAAM,GAAG,MAAM,IAAI,MAAM,SAAS,MAAM,IAAI;AAChG,oBAAM,WAAW,kBAAkB,SAAQ,cAAc,SAAQ,cAAc;AAAA;AAEjF,kBAAM,OAAO,MAAM,GAAG;AACtB,mBAAO;AAAA;AAAA,eAEJ;AACL,kBAAQ,MAAM,IAAI,MAAM,KAAK,MAAM;AACnC,cAAI,OAAO;AACT,gBAAI,IAAI,UAAU,MAAM,KAAK;AAC3B,kBAAI,CAAC,QAAQ;AAAE,sBAAM,WAAW,SAAS,MAAM;AAAA;AAC/C,oBAAM,OAAO,MAAM,GAAG;AACtB,qBAAO;AAAA;AAAA;AAAA;AAAA;AAMf,UAAI,CAAC,QAAQ;AAAE,cAAM,WAAW;AAAA;AAChC,YAAM;AACN,aAAO;AAAA;AAAA;AAAA;;;AC9CT;AAAA;AAEA;AAGA,+BAA2B,OAAO,YAAY;AAC5C,UAAI,WAAW,WAAW,QAAQ,QAAQ,cAAc,iBACpD,YAAY,UACZ,gBAAgB,IAChB,MAAM,WAAW;AAErB,UAAI,CAAC;AAAK;AAGV,UAAI,YAAY;AAChB,UAAI,eAAe;AACnB,UAAI,QAAQ;AAEZ,WAAK,YAAY,GAAG,YAAY,KAAK,aAAa;AAChD,iBAAS,WAAW;AAEpB,cAAM,KAAK;AAMX,YAAI,WAAW,WAAW,WAAW,OAAO,UAAU,iBAAiB,OAAO,QAAQ,GAAG;AACvF,sBAAY;AAAA;AAGd,uBAAe,OAAO;AAMtB,eAAO,SAAS,OAAO,UAAU;AAEjC,YAAI,CAAC,OAAO;AAAO;AAMnB,YAAI,CAAC,cAAc,eAAe,OAAO,SAAS;AAChD,wBAAc,OAAO,UAAU,CAAE,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA;AAGvD,uBAAe,cAAc,OAAO,QAAS,QAAO,OAAO,IAAI,KAAM,OAAO,SAAS;AAErF,oBAAY,YAAY,MAAM,aAAa;AAE3C,0BAAkB;AAElB,eAAO,YAAY,cAAc,aAAa,MAAM,aAAa,GAAG;AAClE,mBAAS,WAAW;AAEpB,cAAI,OAAO,WAAW,OAAO;AAAQ;AAErC,cAAI,OAAO,QAAQ,OAAO,MAAM,GAAG;AAEjC,yBAAa;AASb,gBAAI,OAAO,SAAS,OAAO,MAAM;AAC/B,kBAAK,QAAO,SAAS,OAAO,UAAU,MAAM,GAAG;AAC7C,oBAAI,OAAO,SAAS,MAAM,KAAK,OAAO,SAAS,MAAM,GAAG;AACtD,+BAAa;AAAA;AAAA;AAAA;AAKnB,gBAAI,CAAC,YAAY;AAKf,yBAAW,YAAY,KAAK,CAAC,WAAW,YAAY,GAAG,OACrD,MAAM,YAAY,KAAK,IACvB;AAEF,oBAAM,aAAa,YAAY,YAAY;AAC3C,oBAAM,aAAa;AAEnB,qBAAO,OAAQ;AACf,qBAAO,MAAQ;AACf,qBAAO,QAAQ;AACf,gCAAkB;AAGlB,6BAAe;AACf;AAAA;AAAA;AAAA;AAKN,YAAI,oBAAoB,IAAI;AAQ1B,wBAAc,OAAO,QAAS,QAAO,OAAO,IAAI,KAAO,QAAO,UAAU,KAAK,KAAM;AAAA;AAAA;AAAA;AAMzF,WAAO,UAAU,oBAAoB,OAAO;AAC1C,UAAI,MACA,cAAc,MAAM,aACpB,MAAM,MAAM,YAAY;AAE5B,wBAAkB,OAAO,MAAM;AAE/B,WAAK,OAAO,GAAG,OAAO,KAAK,QAAQ;AACjC,YAAI,YAAY,SAAS,YAAY,MAAM,YAAY;AACrD,4BAAkB,OAAO,YAAY,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC9HjD;AAAA;AAQA;AAGA,WAAO,UAAU,uBAAuB,OAAO;AAC7C,UAAI,MAAM,MACN,QAAQ,GACR,SAAS,MAAM,QACf,MAAM,MAAM,OAAO;AAEvB,WAAK,OAAO,OAAO,GAAG,OAAO,KAAK,QAAQ;AAGxC,YAAI,OAAO,MAAM,UAAU;AAAG;AAC9B,eAAO,MAAM,QAAQ;AACrB,YAAI,OAAO,MAAM,UAAU;AAAG;AAE9B,YAAI,OAAO,MAAM,SAAS,UACtB,OAAO,IAAI,OACX,OAAO,OAAO,GAAG,SAAS,QAAQ;AAGpC,iBAAO,OAAO,GAAG,UAAU,OAAO,MAAM,UAAU,OAAO,OAAO,GAAG;AAAA,eAC9D;AACL,cAAI,SAAS,MAAM;AAAE,mBAAO,QAAQ,OAAO;AAAA;AAE3C;AAAA;AAAA;AAIJ,UAAI,SAAS,MAAM;AACjB,eAAO,SAAS;AAAA;AAAA;AAAA;AAAA;;;ACtCpB;AAAA;AAEA;AAGA,QAAI,QAAiB;AACrB,QAAI,eAAiB,gBAA2B;AAChD,QAAI,cAAiB,gBAA2B;AAChD,QAAI,iBAAiB,gBAA2B;AAGhD,yBAAqB,KAAK,IAAI,KAAK,WAAW;AAC5C,WAAK,MAAM;AACX,WAAK,MAAM;AACX,WAAK,KAAK;AACV,WAAK,SAAS;AACd,WAAK,cAAc,MAAM,UAAU;AAEnC,WAAK,MAAM;AACX,WAAK,SAAS,KAAK,IAAI;AACvB,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,eAAe;AAIpB,WAAK,QAAQ;AAGb,WAAK,aAAa;AAGlB,WAAK,mBAAmB;AAGxB,WAAK,YAAY;AACjB,WAAK,mBAAmB;AAAA;AAM1B,gBAAY,UAAU,cAAc,WAAY;AAC9C,UAAI,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAClC,YAAM,UAAU,KAAK;AACrB,YAAM,QAAQ,KAAK;AACnB,WAAK,OAAO,KAAK;AACjB,WAAK,UAAU;AACf,aAAO;AAAA;AAOT,gBAAY,UAAU,OAAO,SAAU,MAAM,KAAK,SAAS;AACzD,UAAI,KAAK,SAAS;AAChB,aAAK;AAAA;AAGP,UAAI,QAAQ,IAAI,MAAM,MAAM,KAAK;AACjC,UAAI,aAAa;AAEjB,UAAI,UAAU,GAAG;AAEf,aAAK;AACL,aAAK,aAAa,KAAK,iBAAiB;AAAA;AAG1C,YAAM,QAAQ,KAAK;AAEnB,UAAI,UAAU,GAAG;AAEf,aAAK;AACL,aAAK,iBAAiB,KAAK,KAAK;AAChC,aAAK,aAAa;AAClB,qBAAa,EAAE,YAAY,KAAK;AAAA;AAGlC,WAAK,eAAe,KAAK;AACzB,WAAK,OAAO,KAAK;AACjB,WAAK,YAAY,KAAK;AACtB,aAAO;AAAA;AAUT,gBAAY,UAAU,aAAa,SAAU,OAAO,cAAc;AAChE,UAAI,MAAM,OAAO,UAAU,UAAU,OAAO,UAAU,WAClD,kBAAkB,iBAClB,kBAAkB,iBAClB,gBAAgB,MAChB,iBAAiB,MACjB,MAAM,KAAK,QACX,SAAS,KAAK,IAAI,WAAW;AAGjC,iBAAW,QAAQ,IAAI,KAAK,IAAI,WAAW,QAAQ,KAAK;AAExD,aAAO,MAAM,OAAO,KAAK,IAAI,WAAW,SAAS,QAAQ;AAAE;AAAA;AAE3D,cAAQ,MAAM;AAGd,iBAAW,MAAM,MAAM,KAAK,IAAI,WAAW,OAAO;AAElD,wBAAkB,eAAe,aAAa,YAAY,OAAO,aAAa;AAC9E,wBAAkB,eAAe,aAAa,YAAY,OAAO,aAAa;AAE9E,yBAAmB,aAAa;AAChC,yBAAmB,aAAa;AAEhC,UAAI,kBAAkB;AACpB,wBAAgB;AAAA,iBACP,iBAAiB;AAC1B,YAAI,CAAE,qBAAoB,kBAAkB;AAC1C,0BAAgB;AAAA;AAAA;AAIpB,UAAI,kBAAkB;AACpB,yBAAiB;AAAA,iBACR,iBAAiB;AAC1B,YAAI,CAAE,qBAAoB,kBAAkB;AAC1C,2BAAiB;AAAA;AAAA;AAIrB,UAAI,CAAC,cAAc;AACjB,mBAAY,iBAAmB,EAAC,kBAAkB;AAClD,oBAAY,kBAAmB,EAAC,iBAAkB;AAAA,aAC7C;AACL,mBAAY;AACZ,oBAAY;AAAA;AAGd,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,QAAW;AAAA;AAAA;AAMf,gBAAY,UAAU,QAAQ;AAG9B,WAAO,UAAU;AAAA;AAAA;;;ACzJjB;AAAA;AAKA;AAGA,QAAI,QAAkB;AAMtB,QAAI,SAAS;AAAA,MACX,CAAE,QAAmB;AAAA,MACrB,CAAE,WAAmB;AAAA,MACrB,CAAE,UAAmB;AAAA,MACrB,CAAE,aAAmB;AAAA,MACrB,CAAE,iBAAmB,wBAAwC;AAAA,MAC7D,CAAE,YAAmB,mBAAmC;AAAA,MACxD,CAAE,QAAmB;AAAA,MACrB,CAAE,SAAmB;AAAA,MACrB,CAAE,YAAmB;AAAA,MACrB,CAAE,eAAmB;AAAA,MACrB,CAAE,UAAmB;AAAA;AAGvB,QAAI,UAAU;AAAA,MACZ,CAAE,iBAAmB;AAAA,MACrB,CAAE,iBAAmB,wBAAwC;AAAA,MAC7D,CAAE,YAAmB,mBAAmC;AAAA,MACxD,CAAE,iBAAmB;AAAA;AAOvB,4BAAwB;AACtB,UAAI;AAOJ,WAAK,QAAQ,IAAI;AAEjB,WAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAClC,aAAK,MAAM,KAAK,OAAO,GAAG,IAAI,OAAO,GAAG;AAAA;AAS1C,WAAK,SAAS,IAAI;AAElB,WAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,aAAK,OAAO,KAAK,QAAQ,GAAG,IAAI,QAAQ,GAAG;AAAA;AAAA;AAQ/C,iBAAa,UAAU,YAAY,SAAU,OAAO;AAClD,UAAI,IAAI,GAAG,MAAM,MAAM,KACnB,QAAQ,KAAK,MAAM,SAAS,KAC5B,MAAM,MAAM,QACZ,aAAa,MAAM,GAAG,QAAQ,YAC9B,QAAQ,MAAM;AAGlB,UAAI,OAAO,MAAM,SAAS,aAAa;AACrC,cAAM,MAAM,MAAM;AAClB;AAAA;AAGF,UAAI,MAAM,QAAQ,YAAY;AAC5B,aAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AAKxB,gBAAM;AACN,eAAK,MAAM,GAAG,OAAO;AACrB,gBAAM;AAEN,cAAI,IAAI;AAAE;AAAA;AAAA;AAAA,aAEP;AAYL,cAAM,MAAM,MAAM;AAAA;AAGpB,UAAI,CAAC,IAAI;AAAE,cAAM;AAAA;AACjB,YAAM,OAAO,MAAM;AAAA;AAMrB,iBAAa,UAAU,WAAW,SAAU,OAAO;AACjD,UAAI,IAAI,GACJ,QAAQ,KAAK,MAAM,SAAS,KAC5B,MAAM,MAAM,QACZ,MAAM,MAAM,QACZ,aAAa,MAAM,GAAG,QAAQ;AAElC,aAAO,MAAM,MAAM,KAAK;AAQtB,YAAI,MAAM,QAAQ,YAAY;AAC5B,eAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,iBAAK,MAAM,GAAG,OAAO;AACrB,gBAAI,IAAI;AAAE;AAAA;AAAA;AAAA;AAId,YAAI,IAAI;AACN,cAAI,MAAM,OAAO,KAAK;AAAE;AAAA;AACxB;AAAA;AAGF,cAAM,WAAW,MAAM,IAAI,MAAM;AAAA;AAGnC,UAAI,MAAM,SAAS;AACjB,cAAM;AAAA;AAAA;AAUV,iBAAa,UAAU,QAAQ,SAAU,KAAK,IAAI,KAAK,WAAW;AAChE,UAAI,GAAG,OAAO;AACd,UAAI,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK;AAEzC,WAAK,SAAS;AAEd,cAAQ,KAAK,OAAO,SAAS;AAC7B,YAAM,MAAM;AAEZ,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,cAAM,GAAG;AAAA;AAAA;AAKb,iBAAa,UAAU,QAAQ;AAG/B,WAAO,UAAU;AAAA;AAAA;;;AChLjB;AAAA;AAAA;AAGA,WAAO,UAAU,SAAU,MAAM;AAC/B,UAAI,KAAK;AAGT,SAAG,UAAU,iBAAyC;AACtD,SAAG,SAAU,iBAAwC;AACrD,SAAG,QAAU,iBAAuC;AACpD,SAAG,QAAU,gBAAuC;AAGpD,SAAG,WAAW,CAAE,GAAG,OAAO,GAAG,OAAO,GAAG,QAAS,KAAK;AAGrD,SAAG,UAAU,CAAE,GAAG,OAAO,GAAG,QAAS,KAAK;AAI1C,UAAI,kBAAkB;AAKtB,SAAG,oBAA0B,WAAW,kBAAkB,MAAM,GAAG,WAAW,MAAM,GAAG,UAAU;AAMjG,SAAG,UAED;AAGF,SAAG,WAAc,cAAc,GAAG,UAAU;AAE5C,SAAG,WAED;AAEF,SAAG,sBAED,UAAU,kBAAkB,MAAM,GAAG,WAAW,+BAA+B,GAAG,WAAW;AAE/F,SAAG,WAED,mBAGc,GAAG,UAAU,MAAM,kBAAkB,sCAC/B,GAAG,UAAU,0BACb,GAAG,UAAU,0BACb,GAAG,UAAU,0BACb,GAAG,UAAU,0BACb,GAAG,UAAU,uBAChB,GAAG,oBAAoB,wCASvB,GAAG,UAAU,YACvB,SAAQ,KAAK,SACZ,+BAEA,WAEF,SAAS,GAAG,UAAU,YACb,GAAG,UAAU,eACV,GAAG,UAAU,kBACd,GAAG,UAAU;AAOhC,SAAG,iBAED;AAEF,SAAG,SAED;AAKF,SAAG,kBAGD,QACE,GAAG,SACH,MACA,GAAG,oBAAoB;AAG3B,SAAG,aAED,QACE,GAAG,SACH,SACQ,GAAG,oBAAoB,UAEvB,GAAG,oBAAoB,UAAU,GAAG,oBAAoB,YAAY,GAAG,oBAAoB;AAGvG,SAAG,WAED,iBAIgB,GAAG,aAAa,WAAW,GAAG,aAAsB;AAGtE,SAAG,iBAED,QACE,GAAG,UACL,eACgB,GAAG,aAAa;AAGlC,SAAG,uBAED,cAAc,GAAG,aAAa;AAEhC,SAAG,kBAED,GAAG,WAAW,GAAG;AAEnB,SAAG,wBAED,GAAG,iBAAiB,GAAG;AAEzB,SAAG,uBAED,GAAG,WAAW,GAAG,WAAW,GAAG;AAEjC,SAAG,6BAED,GAAG,iBAAiB,GAAG,WAAW,GAAG;AAEvC,SAAG,mCAED,GAAG,uBAAuB,GAAG,WAAW,GAAG;AAO7C,SAAG,sBAED,wDAAwD,GAAG,WAAW;AAExE,SAAG,kBAEC,QAAQ,kBAAkB,YAAY,GAAG,UAAU,OAC7C,GAAG,iBAAiB,MAAM,GAAG,wBAAwB;AAE/D,SAAG,iBAGC,0CAA0C,GAAG,WAAW,4BAC9B,GAAG,6BAA6B,GAAG,WAAW;AAE5E,SAAG,uBAGC,0CAA0C,GAAG,WAAW,4BAC9B,GAAG,mCAAmC,GAAG,WAAW;AAElF,aAAO;AAAA;AAAA;AAAA;;;ACnLT;AAAA;AAAA;AAQA,oBAAgB,KAAkC;AAChD,UAAI,UAAU,MAAM,UAAU,MAAM,KAAK,WAAW;AAEpD,cAAQ,QAAQ,SAAU,QAAQ;AAChC,YAAI,CAAC,QAAQ;AAAE;AAAA;AAEf,eAAO,KAAK,QAAQ,QAAQ,SAAU,KAAK;AACzC,cAAI,OAAO,OAAO;AAAA;AAAA;AAItB,aAAO;AAAA;AAGT,oBAAgB,KAAK;AAAE,aAAO,OAAO,UAAU,SAAS,KAAK;AAAA;AAC7D,sBAAkB,KAAK;AAAE,aAAO,OAAO,SAAS;AAAA;AAChD,sBAAkB,KAAK;AAAE,aAAO,OAAO,SAAS;AAAA;AAChD,sBAAkB,KAAK;AAAE,aAAO,OAAO,SAAS;AAAA;AAChD,yBAAoB,KAAK;AAAE,aAAO,OAAO,SAAS;AAAA;AAGlD,sBAAkB,KAAK;AAAE,aAAO,IAAI,QAAQ,wBAAwB;AAAA;AAKpE,QAAI,iBAAiB;AAAA,MACnB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,SAAS;AAAA;AAIX,0BAAsB,KAAK;AACzB,aAAO,OAAO,KAAK,OAAO,IAAI,OAAO,SAAU,KAAK,GAAG;AACrD,eAAO,OAAO,eAAe,eAAe;AAAA,SAC3C;AAAA;AAIL,QAAI,iBAAiB;AAAA,MACnB,SAAS;AAAA,QACP,UAAU,SAAU,OAAM,KAAK,MAAM;AACnC,cAAI,OAAO,MAAK,MAAM;AAEtB,cAAI,CAAC,KAAK,GAAG,MAAM;AAEjB,iBAAK,GAAG,OAAQ,IAAI,OAClB,YAAY,KAAK,GAAG,WAAW,KAAK,GAAG,uBAAuB,KAAK,GAAG,UAAU;AAAA;AAGpF,cAAI,KAAK,GAAG,KAAK,KAAK,OAAO;AAC3B,mBAAO,KAAK,MAAM,KAAK,GAAG,MAAM,GAAG;AAAA;AAErC,iBAAO;AAAA;AAAA;AAAA,MAGX,UAAW;AAAA,MACX,QAAW;AAAA,MACX,MAAW;AAAA,QACT,UAAU,SAAU,OAAM,KAAK,MAAM;AACnC,cAAI,OAAO,MAAK,MAAM;AAEtB,cAAI,CAAC,KAAK,GAAG,SAAS;AAEpB,iBAAK,GAAG,UAAW,IAAI,OACrB,MACA,KAAK,GAAG,WAGR,wBAAwB,KAAK,GAAG,aAAa,WAAW,KAAK,GAAG,kBAAkB,MAClF,KAAK,GAAG,WACR,KAAK,GAAG,sBACR,KAAK,GAAG,UAER;AAAA;AAIJ,cAAI,KAAK,GAAG,QAAQ,KAAK,OAAO;AAE9B,gBAAI,OAAO,KAAK,MAAK,MAAM,OAAO,KAAK;AAAE,qBAAO;AAAA;AAChD,gBAAI,OAAO,KAAK,MAAK,MAAM,OAAO,KAAK;AAAE,qBAAO;AAAA;AAChD,mBAAO,KAAK,MAAM,KAAK,GAAG,SAAS,GAAG;AAAA;AAExC,iBAAO;AAAA;AAAA;AAAA,MAGX,WAAW;AAAA,QACT,UAAU,SAAU,OAAM,KAAK,MAAM;AACnC,cAAI,OAAO,MAAK,MAAM;AAEtB,cAAI,CAAC,KAAK,GAAG,QAAQ;AACnB,iBAAK,GAAG,SAAU,IAAI,OACpB,MAAM,KAAK,GAAG,iBAAiB,MAAM,KAAK,GAAG,iBAAiB;AAAA;AAGlE,cAAI,KAAK,GAAG,OAAO,KAAK,OAAO;AAC7B,mBAAO,KAAK,MAAM,KAAK,GAAG,QAAQ,GAAG;AAAA;AAEvC,iBAAO;AAAA;AAAA;AAAA;AAQb,QAAI,kBAAkB;AAGtB,QAAI,eAAe,wFAA8E,MAAM;AAMvG,4BAAwB,MAAM;AAC5B,WAAK,YAAY;AACjB,WAAK,iBAAmB;AAAA;AAG1B,6BAAyB,IAAI;AAC3B,aAAO,SAAU,OAAM,KAAK;AAC1B,YAAI,OAAO,MAAK,MAAM;AAEtB,YAAI,GAAG,KAAK,OAAO;AACjB,iBAAO,KAAK,MAAM,IAAI,GAAG;AAAA;AAE3B,eAAO;AAAA;AAAA;AAIX,gCAA4B;AAC1B,aAAO,SAAU,OAAO,MAAM;AAC5B,aAAK,UAAU;AAAA;AAAA;AAMnB,qBAAiB,MAAM;AAGrB,UAAI,KAAK,KAAK,KAAK,aAAoB,KAAK;AAG5C,UAAI,OAAO,KAAK,SAAS;AAEzB,WAAK;AAEL,UAAI,CAAC,KAAK,mBAAmB;AAC3B,aAAK,KAAK;AAAA;AAEZ,WAAK,KAAK,GAAG;AAEb,SAAG,WAAW,KAAK,KAAK;AAExB,qBAAe,KAAK;AAAE,eAAO,IAAI,QAAQ,UAAU,GAAG;AAAA;AAEtD,SAAG,cAAmB,OAAO,MAAM,GAAG,kBAAkB;AACxD,SAAG,aAAmB,OAAO,MAAM,GAAG,iBAAiB;AACvD,SAAG,mBAAmB,OAAO,MAAM,GAAG,uBAAuB;AAC7D,SAAG,kBAAmB,OAAO,MAAM,GAAG,sBAAsB;AAM5D,UAAI,UAAU;AAEd,WAAK,eAAe;AAEpB,2BAAqB,MAAM,KAAK;AAC9B,cAAM,IAAI,MAAM,iCAAiC,OAAO,QAAQ;AAAA;AAGlE,aAAO,KAAK,KAAK,aAAa,QAAQ,SAAU,MAAM;AACpD,YAAI,MAAM,KAAK,YAAY;AAG3B,YAAI,QAAQ,MAAM;AAAE;AAAA;AAEpB,YAAI,WAAW,EAAE,UAAU,MAAM,MAAM;AAEvC,aAAK,aAAa,QAAQ;AAE1B,YAAI,SAAS,MAAM;AACjB,cAAI,SAAS,IAAI,WAAW;AAC1B,qBAAS,WAAW,gBAAgB,IAAI;AAAA,qBAC/B,YAAW,IAAI,WAAW;AACnC,qBAAS,WAAW,IAAI;AAAA,iBACnB;AACL,wBAAY,MAAM;AAAA;AAGpB,cAAI,YAAW,IAAI,YAAY;AAC7B,qBAAS,YAAY,IAAI;AAAA,qBAChB,CAAC,IAAI,WAAW;AACzB,qBAAS,YAAY;AAAA,iBAChB;AACL,wBAAY,MAAM;AAAA;AAGpB;AAAA;AAGF,YAAI,SAAS,MAAM;AACjB,kBAAQ,KAAK;AACb;AAAA;AAGF,oBAAY,MAAM;AAAA;AAOpB,cAAQ,QAAQ,SAAU,OAAO;AAC/B,YAAI,CAAC,KAAK,aAAa,KAAK,YAAY,SAAS;AAG/C;AAAA;AAGF,aAAK,aAAa,OAAO,WACvB,KAAK,aAAa,KAAK,YAAY,QAAQ;AAC7C,aAAK,aAAa,OAAO,YACvB,KAAK,aAAa,KAAK,YAAY,QAAQ;AAAA;AAM/C,WAAK,aAAa,MAAM,EAAE,UAAU,MAAM,WAAW;AAKrD,UAAI,QAAQ,OAAO,KAAK,KAAK,cACR,OAAO,SAAU,MAAM;AAEtB,eAAO,KAAK,SAAS,KAAK,KAAK,aAAa;AAAA,SAE7C,IAAI,UACJ,KAAK;AAE1B,WAAK,GAAG,cAAgB,OAAO,2BAA2B,GAAG,WAAW,QAAQ,QAAQ,KAAK;AAC7F,WAAK,GAAG,gBAAgB,OAAO,2BAA2B,GAAG,WAAW,QAAQ,QAAQ,KAAK;AAE7F,WAAK,GAAG,UAAU,OAChB,MAAM,KAAK,GAAG,YAAY,SAAS,QAAQ,KAAK,GAAG,gBAAgB,SAAS,OAC5E;AAOF,qBAAe;AAAA;AAQjB,mBAAe,MAAM,OAAO;AAC1B,UAAI,QAAQ,KAAK,WACb,MAAQ,KAAK,gBACb,QAAQ,KAAK,eAAe,MAAM,OAAO;AAO7C,WAAK,SAAY,KAAK,WAAW;AAMjC,WAAK,QAAY,QAAQ;AAMzB,WAAK,YAAY,MAAM;AAMvB,WAAK,MAAY;AAMjB,WAAK,OAAY;AAMjB,WAAK,MAAY;AAAA;AAGnB,yBAAqB,MAAM,OAAO;AAChC,UAAI,QAAQ,IAAI,MAAM,MAAM;AAE5B,WAAK,aAAa,MAAM,QAAQ,UAAU,OAAO;AAEjD,aAAO;AAAA;AA0CT,uBAAmB,SAAS,SAAS;AACnC,UAAI,CAAE,iBAAgB,YAAY;AAChC,eAAO,IAAI,UAAU,SAAS;AAAA;AAGhC,UAAI,CAAC,SAAS;AACZ,YAAI,aAAa,UAAU;AACzB,oBAAU;AACV,oBAAU;AAAA;AAAA;AAId,WAAK,WAAqB,OAAO,IAAI,gBAAgB;AAGrD,WAAK,YAAqB;AAC1B,WAAK,iBAAqB;AAC1B,WAAK,aAAqB;AAC1B,WAAK,iBAAqB;AAE1B,WAAK,cAAqB,OAAO,IAAI,gBAAgB;AACrD,WAAK,eAAqB;AAE1B,WAAK,WAAqB;AAC1B,WAAK,oBAAqB;AAE1B,WAAK,KAAK;AAEV,cAAQ;AAAA;AAWV,cAAU,UAAU,MAAM,aAAa,QAAQ,YAAY;AACzD,WAAK,YAAY,UAAU;AAC3B,cAAQ;AACR,aAAO;AAAA;AAUT,cAAU,UAAU,MAAM,aAAa,SAAS;AAC9C,WAAK,WAAW,OAAO,KAAK,UAAU;AACtC,aAAO;AAAA;AAST,cAAU,UAAU,OAAO,cAAc,OAAM;AAE7C,WAAK,iBAAiB;AACtB,WAAK,YAAiB;AAEtB,UAAI,CAAC,MAAK,QAAQ;AAAE,eAAO;AAAA;AAE3B,UAAI,GAAG,IAAI,IAAI,KAAK,OAAO,MAAM,IAAI,SAAS;AAG9C,UAAI,KAAK,GAAG,YAAY,KAAK,QAAO;AAClC,aAAK,KAAK,GAAG;AACb,WAAG,YAAY;AACf,eAAQ,KAAI,GAAG,KAAK,YAAW,MAAM;AACnC,gBAAM,KAAK,aAAa,OAAM,EAAE,IAAI,GAAG;AACvC,cAAI,KAAK;AACP,iBAAK,aAAiB,EAAE;AACxB,iBAAK,YAAiB,EAAE,QAAQ,EAAE,GAAG;AACrC,iBAAK,iBAAiB,EAAE,QAAQ,EAAE,GAAG,SAAS;AAC9C;AAAA;AAAA;AAAA;AAKN,UAAI,KAAK,SAAS,aAAa,KAAK,aAAa,UAAU;AAEzD,kBAAU,MAAK,OAAO,KAAK,GAAG;AAC9B,YAAI,WAAW,GAAG;AAEhB,cAAI,KAAK,YAAY,KAAK,UAAU,KAAK,WAAW;AAClD,gBAAK,MAAK,MAAK,MAAM,KAAK,SAAS,UAAU,KAAK,GAAG,aAAa,KAAK,GAAG,uBAAuB,MAAM;AAErG,sBAAQ,GAAG,QAAQ,GAAG,GAAG;AAEzB,kBAAI,KAAK,YAAY,KAAK,QAAQ,KAAK,WAAW;AAChD,qBAAK,aAAiB;AACtB,qBAAK,YAAiB;AACtB,qBAAK,iBAAiB,GAAG,QAAQ,GAAG,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAOjD,UAAI,KAAK,SAAS,cAAc,KAAK,aAAa,YAAY;AAE5D,iBAAS,MAAK,QAAQ;AACtB,YAAI,UAAU,GAAG;AAGf,cAAK,MAAK,MAAK,MAAM,KAAK,GAAG,kBAAkB,MAAM;AAEnD,oBAAQ,GAAG,QAAQ,GAAG,GAAG;AACzB,mBAAQ,GAAG,QAAQ,GAAG,GAAG;AAEzB,gBAAI,KAAK,YAAY,KAAK,QAAQ,KAAK,aAClC,UAAU,KAAK,aAAa,OAAO,KAAK,gBAAiB;AAC5D,mBAAK,aAAiB;AACtB,mBAAK,YAAiB;AACtB,mBAAK,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAM9B,aAAO,KAAK,aAAa;AAAA;AAW3B,cAAU,UAAU,UAAU,iBAAiB,OAAM;AACnD,aAAO,KAAK,GAAG,QAAQ,KAAK;AAAA;AAa9B,cAAU,UAAU,eAAe,sBAAsB,OAAM,QAAQ,KAAK;AAE1E,UAAI,CAAC,KAAK,aAAa,OAAO,gBAAgB;AAC5C,eAAO;AAAA;AAET,aAAO,KAAK,aAAa,OAAO,eAAe,SAAS,OAAM,KAAK;AAAA;AAoBrE,cAAU,UAAU,QAAQ,eAAe,OAAM;AAC/C,UAAI,QAAQ,GAAG,SAAS;AAGxB,UAAI,KAAK,aAAa,KAAK,KAAK,mBAAmB,OAAM;AACvD,eAAO,KAAK,YAAY,MAAM;AAC9B,gBAAQ,KAAK;AAAA;AAIf,UAAI,OAAO,QAAQ,MAAK,MAAM,SAAS;AAGvC,aAAO,KAAK,KAAK,OAAO;AACtB,eAAO,KAAK,YAAY,MAAM;AAE9B,eAAO,KAAK,MAAM,KAAK;AACvB,iBAAS,KAAK;AAAA;AAGhB,UAAI,OAAO,QAAQ;AACjB,eAAO;AAAA;AAGT,aAAO;AAAA;AAmBT,cAAU,UAAU,OAAO,cAAc,OAAM,SAAS;AACtD,cAAO,MAAM,QAAQ,SAAQ,QAAO,CAAE;AAEtC,UAAI,CAAC,SAAS;AACZ,aAAK,WAAW,MAAK;AACrB,aAAK,oBAAoB;AACzB,gBAAQ;AACR,eAAO;AAAA;AAGT,WAAK,WAAW,KAAK,SAAS,OAAO,OACJ,OACA,OAAO,SAAU,IAAI,KAAK,KAAK;AAC9B,eAAO,OAAO,IAAI,MAAM;AAAA,SAEzB;AAEjC,cAAQ;AACR,aAAO;AAAA;AAQT,cAAU,UAAU,YAAY,mBAAmB,OAAO;AAKxD,UAAI,CAAC,MAAM,QAAQ;AAAE,cAAM,MAAM,YAAY,MAAM;AAAA;AAEnD,UAAI,MAAM,WAAW,aAAa,CAAC,YAAY,KAAK,MAAM,MAAM;AAC9D,cAAM,MAAM,YAAY,MAAM;AAAA;AAAA;AAUlC,cAAU,UAAU,YAAY,qBAAqB;AAAA;AAIrD,WAAO,UAAU;AAAA;AAAA;;;AC3nBjB;AAAA;AAAA;AAGA,QAAM,SAAS;AAGf,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,cAAc;AACpB,QAAM,WAAW;AACjB,QAAM,YAAY;AAGlB,QAAM,gBAAgB;AACtB,QAAM,gBAAgB;AACtB,QAAM,kBAAkB;AAGxB,QAAM,SAAS;AAAA,MACd,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,iBAAiB;AAAA;AAIlB,QAAM,gBAAgB,OAAO;AAC7B,QAAM,QAAQ,KAAK;AACnB,QAAM,qBAAqB,OAAO;AAUlC,oBAAe,MAAM;AACpB,YAAM,IAAI,WAAW,OAAO;AAAA;AAW7B,iBAAa,OAAO,IAAI;AACvB,YAAM,SAAS;AACf,UAAI,SAAS,MAAM;AACnB,aAAO,UAAU;AAChB,eAAO,UAAU,GAAG,MAAM;AAAA;AAE3B,aAAO;AAAA;AAaR,uBAAmB,QAAQ,IAAI;AAC9B,YAAM,QAAQ,OAAO,MAAM;AAC3B,UAAI,SAAS;AACb,UAAI,MAAM,SAAS,GAAG;AAGrB,iBAAS,MAAM,KAAK;AACpB,iBAAS,MAAM;AAAA;AAGhB,eAAS,OAAO,QAAQ,iBAAiB;AACzC,YAAM,SAAS,OAAO,MAAM;AAC5B,YAAM,UAAU,IAAI,QAAQ,IAAI,KAAK;AACrC,aAAO,SAAS;AAAA;AAgBjB,wBAAoB,QAAQ;AAC3B,YAAM,SAAS;AACf,UAAI,UAAU;AACd,YAAM,SAAS,OAAO;AACtB,aAAO,UAAU,QAAQ;AACxB,cAAM,QAAQ,OAAO,WAAW;AAChC,YAAI,SAAS,SAAU,SAAS,SAAU,UAAU,QAAQ;AAE3D,gBAAM,QAAQ,OAAO,WAAW;AAChC,cAAK,SAAQ,UAAW,OAAQ;AAC/B,mBAAO,KAAO,UAAQ,SAAU,MAAO,SAAQ,QAAS;AAAA,iBAClD;AAGN,mBAAO,KAAK;AACZ;AAAA;AAAA,eAEK;AACN,iBAAO,KAAK;AAAA;AAAA;AAGd,aAAO;AAAA;AAWR,QAAM,aAAa,WAAS,OAAO,cAAc,GAAG;AAWpD,QAAM,eAAe,SAAS,WAAW;AACxC,UAAI,YAAY,KAAO,IAAM;AAC5B,eAAO,YAAY;AAAA;AAEpB,UAAI,YAAY,KAAO,IAAM;AAC5B,eAAO,YAAY;AAAA;AAEpB,UAAI,YAAY,KAAO,IAAM;AAC5B,eAAO,YAAY;AAAA;AAEpB,aAAO;AAAA;AAcR,QAAM,eAAe,SAAS,OAAO,MAAM;AAG1C,aAAO,QAAQ,KAAK,KAAM,SAAQ,MAAQ,UAAQ,MAAM;AAAA;AAQzD,QAAM,QAAQ,SAAS,OAAO,WAAW,WAAW;AACnD,UAAI,IAAI;AACR,cAAQ,YAAY,MAAM,QAAQ,QAAQ,SAAS;AACnD,eAAS,MAAM,QAAQ;AACvB,aAA8B,QAAQ,gBAAgB,QAAQ,GAAG,KAAK,MAAM;AAC3E,gBAAQ,MAAM,QAAQ;AAAA;AAEvB,aAAO,MAAM,IAAK,iBAAgB,KAAK,QAAS,SAAQ;AAAA;AAUzD,QAAM,SAAS,SAAS,OAAO;AAE9B,YAAM,SAAS;AACf,YAAM,cAAc,MAAM;AAC1B,UAAI,IAAI;AACR,UAAI,IAAI;AACR,UAAI,OAAO;AAMX,UAAI,QAAQ,MAAM,YAAY;AAC9B,UAAI,QAAQ,GAAG;AACd,gBAAQ;AAAA;AAGT,eAAS,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAE/B,YAAI,MAAM,WAAW,MAAM,KAAM;AAChC,iBAAM;AAAA;AAEP,eAAO,KAAK,MAAM,WAAW;AAAA;AAM9B,eAAS,QAAQ,QAAQ,IAAI,QAAQ,IAAI,GAAG,QAAQ,eAAwC;AAO3F,YAAI,OAAO;AACX,iBAAS,IAAI,GAAG,IAAI,QAA0B,KAAK,MAAM;AAExD,cAAI,SAAS,aAAa;AACzB,mBAAM;AAAA;AAGP,gBAAM,QAAQ,aAAa,MAAM,WAAW;AAE5C,cAAI,SAAS,QAAQ,QAAQ,MAAO,UAAS,KAAK,IAAI;AACrD,mBAAM;AAAA;AAGP,eAAK,QAAQ;AACb,gBAAM,IAAI,KAAK,OAAO,OAAQ,KAAK,OAAO,OAAO,OAAO,IAAI;AAE5D,cAAI,QAAQ,GAAG;AACd;AAAA;AAGD,gBAAM,aAAa,OAAO;AAC1B,cAAI,IAAI,MAAM,SAAS,aAAa;AACnC,mBAAM;AAAA;AAGP,eAAK;AAAA;AAIN,cAAM,MAAM,OAAO,SAAS;AAC5B,eAAO,MAAM,IAAI,MAAM,KAAK,QAAQ;AAIpC,YAAI,MAAM,IAAI,OAAO,SAAS,GAAG;AAChC,iBAAM;AAAA;AAGP,aAAK,MAAM,IAAI;AACf,aAAK;AAGL,eAAO,OAAO,KAAK,GAAG;AAAA;AAIvB,aAAO,OAAO,cAAc,GAAG;AAAA;AAUhC,QAAM,SAAS,SAAS,OAAO;AAC9B,YAAM,SAAS;AAGf,cAAQ,WAAW;AAGnB,UAAI,cAAc,MAAM;AAGxB,UAAI,IAAI;AACR,UAAI,QAAQ;AACZ,UAAI,OAAO;AAGX,iBAAW,gBAAgB,OAAO;AACjC,YAAI,eAAe,KAAM;AACxB,iBAAO,KAAK,mBAAmB;AAAA;AAAA;AAIjC,UAAI,cAAc,OAAO;AACzB,UAAI,iBAAiB;AAMrB,UAAI,aAAa;AAChB,eAAO,KAAK;AAAA;AAIb,aAAO,iBAAiB,aAAa;AAIpC,YAAI,IAAI;AACR,mBAAW,gBAAgB,OAAO;AACjC,cAAI,gBAAgB,KAAK,eAAe,GAAG;AAC1C,gBAAI;AAAA;AAAA;AAMN,cAAM,wBAAwB,iBAAiB;AAC/C,YAAI,IAAI,IAAI,MAAO,UAAS,SAAS,wBAAwB;AAC5D,iBAAM;AAAA;AAGP,iBAAU,KAAI,KAAK;AACnB,YAAI;AAEJ,mBAAW,gBAAgB,OAAO;AACjC,cAAI,eAAe,KAAK,EAAE,QAAQ,QAAQ;AACzC,mBAAM;AAAA;AAEP,cAAI,gBAAgB,GAAG;AAEtB,gBAAI,IAAI;AACR,qBAAS,IAAI,QAA0B,KAAK,MAAM;AACjD,oBAAM,IAAI,KAAK,OAAO,OAAQ,KAAK,OAAO,OAAO,OAAO,IAAI;AAC5D,kBAAI,IAAI,GAAG;AACV;AAAA;AAED,oBAAM,UAAU,IAAI;AACpB,oBAAM,aAAa,OAAO;AAC1B,qBAAO,KACN,mBAAmB,aAAa,IAAI,UAAU,YAAY;AAE3D,kBAAI,MAAM,UAAU;AAAA;AAGrB,mBAAO,KAAK,mBAAmB,aAAa,GAAG;AAC/C,mBAAO,MAAM,OAAO,uBAAuB,kBAAkB;AAC7D,oBAAQ;AACR,cAAE;AAAA;AAAA;AAIJ,UAAE;AACF,UAAE;AAAA;AAGH,aAAO,OAAO,KAAK;AAAA;AAcpB,QAAM,YAAY,SAAS,OAAO;AACjC,aAAO,UAAU,OAAO,SAAS,QAAQ;AACxC,eAAO,cAAc,KAAK,UACvB,OAAO,OAAO,MAAM,GAAG,iBACvB;AAAA;AAAA;AAeL,QAAM,UAAU,SAAS,OAAO;AAC/B,aAAO,UAAU,OAAO,SAAS,QAAQ;AACxC,eAAO,cAAc,KAAK,UACvB,SAAS,OAAO,UAChB;AAAA;AAAA;AAOL,QAAM,WAAW;AAAA,MAMhB,WAAW;AAAA,MAQX,QAAQ;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA;AAAA,MAEX,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,aAAa;AAAA;AAGd,WAAO,UAAU;AAAA;AAAA;;;ACvbjB;AAAA;AAEA;AAGA,WAAO,UAAU;AAAA,MACf,SAAS;AAAA,QACP,MAAc;AAAA,QACd,UAAc;AAAA,QACd,QAAc;AAAA,QACd,YAAc;AAAA,QACd,SAAc;AAAA,QAGd,aAAc;AAAA,QAOd,QAAQ;AAAA,QAQR,WAAW;AAAA,QAEX,YAAc;AAAA;AAAA,MAGhB,YAAY;AAAA,QAEV,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA;AAAA;AAAA;AAAA;;;ACtCZ;AAAA;AAGA;AAGA,WAAO,UAAU;AAAA,MACf,SAAS;AAAA,QACP,MAAc;AAAA,QACd,UAAc;AAAA,QACd,QAAc;AAAA,QACd,YAAc;AAAA,QACd,SAAc;AAAA,QAGd,aAAc;AAAA,QAOd,QAAQ;AAAA,QAQR,WAAW;AAAA,QAEX,YAAc;AAAA;AAAA,MAGhB,YAAY;AAAA,QAEV,MAAM;AAAA,UACJ,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA;AAAA;AAAA,QAIJ,OAAO;AAAA,UACL,OAAO;AAAA,YACL;AAAA;AAAA;AAAA,QAIJ,QAAQ;AAAA,UACN,OAAO;AAAA,YACL;AAAA;AAAA,UAEF,QAAQ;AAAA,YACN;AAAA,YACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACzDR;AAAA;AAEA;AAGA,WAAO,UAAU;AAAA,MACf,SAAS;AAAA,QACP,MAAc;AAAA,QACd,UAAc;AAAA,QACd,QAAc;AAAA,QACd,YAAc;AAAA,QACd,SAAc;AAAA,QAGd,aAAc;AAAA,QAOd,QAAQ;AAAA,QAQR,WAAW;AAAA,QAEX,YAAc;AAAA;AAAA,MAGhB,YAAY;AAAA,QAEV,MAAM;AAAA,UACJ,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA;AAAA;AAAA,QAIJ,OAAO;AAAA,UACL,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA;AAAA,QAIJ,QAAQ;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UAEF,QAAQ;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC3ER;AAAA;AAEA;AAGA,QAAI,QAAe;AACnB,QAAI,UAAe;AACnB,QAAI,WAAe;AACnB,QAAI,aAAe;AACnB,QAAI,cAAe;AACnB,QAAI,eAAe;AACnB,QAAI,YAAe;AACnB,QAAI,QAAe;AACnB,QAAI,WAAe;AAGnB,QAAI,SAAS;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,MACN,YAAY;AAAA;AAYd,QAAI,eAAe;AACnB,QAAI,eAAe;AAEnB,0BAAsB,KAAK;AAEzB,UAAI,MAAM,IAAI,OAAO;AAErB,aAAO,aAAa,KAAK,OAAQ,aAAa,KAAK,OAAO,OAAO,QAAS;AAAA;AAM5E,QAAI,sBAAsB,CAAE,SAAS,UAAU;AAE/C,2BAAuB,KAAK;AAC1B,UAAI,SAAS,MAAM,MAAM,KAAK;AAE9B,UAAI,OAAO,UAAU;AAOnB,YAAI,CAAC,OAAO,YAAY,oBAAoB,QAAQ,OAAO,aAAa,GAAG;AACzE,cAAI;AACF,mBAAO,WAAW,SAAS,QAAQ,OAAO;AAAA,mBACnC,IAAP;AAAA;AAAA;AAAA;AAIN,aAAO,MAAM,OAAO,MAAM,OAAO;AAAA;AAGnC,+BAA2B,KAAK;AAC9B,UAAI,SAAS,MAAM,MAAM,KAAK;AAE9B,UAAI,OAAO,UAAU;AAOnB,YAAI,CAAC,OAAO,YAAY,oBAAoB,QAAQ,OAAO,aAAa,GAAG;AACzE,cAAI;AACF,mBAAO,WAAW,SAAS,UAAU,OAAO;AAAA,mBACrC,IAAP;AAAA;AAAA;AAAA;AAKN,aAAO,MAAM,OAAO,MAAM,OAAO,SAAS,MAAM,OAAO,eAAe;AAAA;AAyIxE,yBAAoB,YAAY,SAAS;AACvC,UAAI,CAAE,iBAAgB,cAAa;AACjC,eAAO,IAAI,YAAW,YAAY;AAAA;AAGpC,UAAI,CAAC,SAAS;AACZ,YAAI,CAAC,MAAM,SAAS,aAAa;AAC/B,oBAAU,cAAc;AACxB,uBAAa;AAAA;AAAA;AAWjB,WAAK,SAAS,IAAI;AASlB,WAAK,QAAQ,IAAI;AASjB,WAAK,OAAO,IAAI;AAuBhB,WAAK,WAAW,IAAI;AASpB,WAAK,UAAU,IAAI;AAiBnB,WAAK,eAAe;AAQpB,WAAK,gBAAgB;AAOrB,WAAK,oBAAoB;AAWzB,WAAK,QAAQ;AAQb,WAAK,UAAU,MAAM,OAAO,IAAI;AAGhC,WAAK,UAAU;AACf,WAAK,UAAU;AAEf,UAAI,SAAS;AAAE,aAAK,IAAI;AAAA;AAAA;AAuB1B,gBAAW,UAAU,MAAM,SAAU,SAAS;AAC5C,YAAM,OAAO,KAAK,SAAS;AAC3B,aAAO;AAAA;AAcT,gBAAW,UAAU,YAAY,SAAU,SAAS;AAClD,UAAI,OAAO,MAAM;AAEjB,UAAI,MAAM,SAAS,UAAU;AAC3B,qBAAa;AACb,kBAAU,OAAO;AACjB,YAAI,CAAC,SAAS;AAAE,gBAAM,IAAI,MAAM,iCAAiC,aAAa;AAAA;AAAA;AAGhF,UAAI,CAAC,SAAS;AAAE,cAAM,IAAI,MAAM;AAAA;AAEhC,UAAI,QAAQ,SAAS;AAAE,aAAK,IAAI,QAAQ;AAAA;AAExC,UAAI,QAAQ,YAAY;AACtB,eAAO,KAAK,QAAQ,YAAY,QAAQ,SAAU,MAAM;AACtD,cAAI,QAAQ,WAAW,MAAM,OAAO;AAClC,iBAAK,MAAM,MAAM,WAAW,QAAQ,WAAW,MAAM;AAAA;AAEvD,cAAI,QAAQ,WAAW,MAAM,QAAQ;AACnC,iBAAK,MAAM,OAAO,WAAW,QAAQ,WAAW,MAAM;AAAA;AAAA;AAAA;AAI5D,aAAO;AAAA;AAqBT,gBAAW,UAAU,SAAS,SAAU,OAAM,eAAe;AAC3D,UAAI,SAAS;AAEb,UAAI,CAAC,MAAM,QAAQ,QAAO;AAAE,gBAAO,CAAE;AAAA;AAErC,OAAE,QAAQ,SAAS,UAAW,QAAQ,SAAU,OAAO;AACrD,iBAAS,OAAO,OAAO,KAAK,OAAO,MAAM,OAAO,OAAM;AAAA,SACrD;AAEH,eAAS,OAAO,OAAO,KAAK,OAAO,OAAO,OAAO,OAAM;AAEvD,UAAI,SAAS,MAAK,OAAO,SAAU,MAAM;AAAE,eAAO,OAAO,QAAQ,QAAQ;AAAA;AAEzE,UAAI,OAAO,UAAU,CAAC,eAAe;AACnC,cAAM,IAAI,MAAM,mDAAmD;AAAA;AAGrE,aAAO;AAAA;AAWT,gBAAW,UAAU,UAAU,SAAU,OAAM,eAAe;AAC5D,UAAI,SAAS;AAEb,UAAI,CAAC,MAAM,QAAQ,QAAO;AAAE,gBAAO,CAAE;AAAA;AAErC,OAAE,QAAQ,SAAS,UAAW,QAAQ,SAAU,OAAO;AACrD,iBAAS,OAAO,OAAO,KAAK,OAAO,MAAM,QAAQ,OAAM;AAAA,SACtD;AAEH,eAAS,OAAO,OAAO,KAAK,OAAO,OAAO,QAAQ,OAAM;AAExD,UAAI,SAAS,MAAK,OAAO,SAAU,MAAM;AAAE,eAAO,OAAO,QAAQ,QAAQ;AAAA;AAEzE,UAAI,OAAO,UAAU,CAAC,eAAe;AACnC,cAAM,IAAI,MAAM,oDAAoD;AAAA;AAEtE,aAAO;AAAA;AAoBT,gBAAW,UAAU,MAAM,SAAU,SAA2B;AAC9D,UAAI,OAAO,CAAE,MAAO,OAAO,MAAM,UAAU,MAAM,KAAK,WAAW;AACjE,cAAO,MAAM,SAAQ;AACrB,aAAO;AAAA;AAmBT,gBAAW,UAAU,QAAQ,SAAU,KAAK,KAAK;AAC/C,UAAI,OAAO,QAAQ,UAAU;AAC3B,cAAM,IAAI,MAAM;AAAA;AAGlB,UAAI,QAAQ,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM;AAE3C,WAAK,KAAK,QAAQ;AAElB,aAAO,MAAM;AAAA;AAef,gBAAW,UAAU,SAAS,SAAU,KAAK,KAAK;AAChD,YAAM,OAAO;AAEb,aAAO,KAAK,SAAS,OAAO,KAAK,MAAM,KAAK,MAAM,KAAK,SAAS;AAAA;AAalE,gBAAW,UAAU,cAAc,SAAU,KAAK,KAAK;AACrD,UAAI,QAAQ,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM;AAE3C,YAAM,aAAa;AACnB,WAAK,KAAK,QAAQ;AAElB,aAAO,MAAM;AAAA;AAYf,gBAAW,UAAU,eAAe,SAAU,KAAK,KAAK;AACtD,YAAM,OAAO;AAEb,aAAO,KAAK,SAAS,OAAO,KAAK,YAAY,KAAK,MAAM,KAAK,SAAS;AAAA;AAIxE,WAAO,UAAU;AAAA;AAAA;;;ACrkBjB;AAAA;AAEA;AAEA,0BAAsB,OAAO,QAAQ;AACnC,mBAAa;AACX,aAAK,cAAc;AAAA;AAErB,QAAE,YAAY,OAAO;AACrB,YAAM,YAAY,IAAI;AAAA;AAGxB,6BAAyB,SAAS,UAAU,OAAO,UAAU;AAC3D,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,QAAQ;AACb,WAAK,WAAW;AAChB,WAAK,OAAO;AAGZ,UAAI,OAAO,MAAM,sBAAsB,YAAY;AACjD,cAAM,kBAAkB,MAAM;AAAA;AAAA;AAIlC,iBAAa,iBAAiB;AAE9B,oBAAgB,eAAe,SAAU,UAAU,OAAO,UAAU;AAClE,UAAI,2BAA2B;AAAA,QAC7B,SAAS,SAAU,aAAa;AAC9B,iBAAO,MAAM,cAAc,YAAY,QAAQ;AAAA;AAAA,QAGjD,OAAO,SAAU,aAAa;AAC5B,cAAI,eAAe,YAAY,MAAM,IAAI,SAAU,MAAM;AACvD,mBAAO,MAAM,QAAQ,QACjB,YAAY,KAAK,MAAM,MAAM,YAAY,KAAK,MAC9C,YAAY;AAAA;AAGlB,iBAAO,MAAO,aAAY,WAAW,MAAM,MAAM,eAAe;AAAA;AAAA,QAGlE,KAAK,WAAY;AACf,iBAAO;AAAA;AAAA,QAGT,KAAK,WAAY;AACf,iBAAO;AAAA;AAAA,QAGT,OAAO,SAAU,aAAa;AAC5B,iBAAO,YAAY;AAAA;AAAA,QAGrB,KAAK,SAAU,aAAa;AAC1B,iBAAO,SAAS,oBAAoB,YAAY;AAAA;AAAA;AAIpD,mBAAa,IAAI;AACf,eAAO,GAAG,WAAW,GAAG,SAAS,IAAI;AAAA;AAGvC,6BAAuB,IAAG;AACxB,eAAO,GACJ,QAAQ,OAAO,QACf,QAAQ,MAAM,OACd,QAAQ,OAAO,OACf,QAAQ,OAAO,OACf,QAAQ,OAAO,OACf,QAAQ,OAAO,OACf,QAAQ,gBAAgB,SAAU,IAAI;AACrC,iBAAO,SAAS,IAAI;AAAA,WAErB,QAAQ,yBAAyB,SAAU,IAAI;AAC9C,iBAAO,QAAQ,IAAI;AAAA;AAAA;AAIzB,2BAAqB,IAAG;AACtB,eAAO,GACJ,QAAQ,OAAO,QACf,QAAQ,OAAO,OACf,QAAQ,OAAO,OACf,QAAQ,MAAM,OACd,QAAQ,OAAO,OACf,QAAQ,OAAO,OACf,QAAQ,OAAO,OACf,QAAQ,OAAO,OACf,QAAQ,gBAAgB,SAAU,IAAI;AACrC,iBAAO,SAAS,IAAI;AAAA,WAErB,QAAQ,yBAAyB,SAAU,IAAI;AAC9C,iBAAO,QAAQ,IAAI;AAAA;AAAA;AAIzB,mCAA6B,aAAa;AACxC,eAAO,yBAAyB,YAAY,MAAM;AAAA;AAGpD,gCAA0B,WAAU;AAClC,YAAI,eAAe,UAAS,IAAI;AAChC,YAAI,GAAG;AAEP,qBAAa;AAEb,YAAI,aAAa,SAAS,GAAG;AAC3B,eAAK,IAAI,GAAG,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC/C,gBAAI,aAAa,IAAI,OAAO,aAAa,IAAI;AAC3C,2BAAa,KAAK,aAAa;AAC/B;AAAA;AAAA;AAGJ,uBAAa,SAAS;AAAA;AAGxB,gBAAQ,aAAa;AAAA,eACd;AACH,mBAAO,aAAa;AAAA,eAEjB;AACH,mBAAO,aAAa,KAAK,SAAS,aAAa;AAAA;AAG/C,mBACE,aAAa,MAAM,GAAG,IAAI,KAAK,QAC/B,UACA,aAAa,aAAa,SAAS;AAAA;AAAA;AAK3C,6BAAuB,QAAO;AAC5B,eAAO,SAAQ,MAAM,cAAc,UAAS,MAAM;AAAA;AAGpD,aACE,cACA,iBAAiB,YACjB,UACA,cAAc,SACd;AAAA;AAIJ,uBAAmB,OAAO,SAAS;AACjC,gBAAU,YAAY,SAAY,UAAU;AAE5C,UAAI,aAAa;AAEjB,UAAI,yBAAyB,EAAE,KAAK;AACpC,UAAI,wBAAwB;AAE5B,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,UAAU;AACd,UAAI,UAAU;AACd,UAAI,UAAU;AACd,UAAI,UAAU;AACd,UAAI,UAAU;AACd,UAAI,UAAU;AACd,UAAI,UAAU;AACd,UAAI,UAAU;AAEd,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,SAAS;AAEb,UAAI,SAAS,uBAAuB,KAAK;AACzC,UAAI,SAAS,qBAAqB;AAClC,UAAI,SAAS,qBAAqB;AAClC,UAAI,SAAS,qBAAqB;AAClC,UAAI,SAAS,uBAAuB,KAAK;AACzC,UAAI,SAAS,uBAAuB,KAAK;AACzC,UAAI,SAAS,uBAAuB,KAAK;AACzC,UAAI,SAAS,uBAAuB,KAAK;AACzC,UAAI,SAAS,qBAAqB;AAClC,UAAI,SAAS,qBAAqB;AAClC,UAAI,UAAU,qBAAqB;AACnC,UAAI,UAAU,uBAAuB,KAAK;AAC1C,UAAI,UAAU,uBAAuB,KAAK;AAC1C,UAAI,UAAU,uBAAuB,KAAK;AAC1C,UAAI,UAAU,uBAAuB,KAAK;AAC1C,UAAI,UAAU,uBAAuB,KAAK;AAC1C,UAAI,UAAU,qBAAqB;AACnC,UAAI,UAAU,qBAAqB;AACnC,UAAI,UAAU,qBAAqB;AACnC,UAAI,UAAU,qBAAqB;AAEnC,UAAI,SAAS,SAAU,UAAU;AAC/B,eAAO,EAAE,MAAM,YAAY,MAAM,EAAE;AAAA;AAErC,UAAI,SAAS,SAAU,YAAY;AACjC,eAAO,EAAE,MAAM,cAAc,MAAM,EAAE;AAAA;AAEvC,UAAI,SAAS,SAAU,KAAK,OAAO;AACjC,eAAO;AAAA;AAET,UAAI,SAAS,SAAU,KAAK,SAAS,YAAY,OAAO;AACtD,YAAI,SAAS;AACX,uBAAa,cAAc;AAC3B,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA;AAAA;AAIX,cAAM,CAAC,MAAM,WAAW,QAAQ,CAAC,OAAO,KAAK,CAAC,YAAY;AAC1D,eAAO,EAAE,MAAM,SAAS,MAAM,EAAE,KAAK;AAAA;AAEvC,UAAI,SAAS,SAAU,KAAK;AAC1B,eAAO,EAAE,MAAM,aAAa,SAAS,IAAI,MAAM,EAAE;AAAA;AAEnD,UAAI,SAAS,SAAU,MAAM,MAAM;AACjC,eAAO,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG;AAAA;AAEhC,UAAI,SAAS,SAAU,OAAM;AAC3B,eAAO;AAAA;AAET,UAAI,SAAS,SAAU,KAAK;AAC1B,eAAO;AAAA;AAET,UAAI,SAAS,SAAU,SAAS;AAC9B,eAAO;AAAA;AAET,UAAI,SAAS,SAAU,WAAW;AAChC,eAAO;AAAA;AAET,UAAI,UAAU,SAAU,MAAM;AAC5B,eAAO,EAAE,MAAM,SAAS,MAAM,OAAO;AAAA;AAEvC,UAAI,UAAU,SAAU,OAAO;AAC7B,eAAO,EAAE,MAAM,aAAa,MAAM,MAAM;AAAA;AAE1C,UAAI,UAAU,SAAU,MAAM,OAAO;AACnC,eAAO,EAAE,MAAM,aAAa,MAAM;AAAA;AAEpC,UAAI,UAAU,SAAU,MAAM,MAAM,MAAM;AACxC,eAAO,OAAO,CAAC,MAAM,GAAG,QAAQ;AAAA;AAElC,UAAI,UAAU,SAAU,MAAM,QAAQ;AACpC,YAAI,aAAa;AACjB,iBAAS,CAAC,OAAO,EAAE,aAAM,YAAY,OAAO;AAC1C,qBAAW,SAAQ,SAAS;AAC9B,eAAO,IAAI,UAAS,MAAM;AAAA;AAE5B,UAAI,UAAU,SAAU,MAAM;AAC5B,eAAO;AAAA;AAET,UAAI,UAAU,SAAU,MAAM,OAAO;AACnC,eAAO,EAAE,MAAM;AAAA;AAEjB,UAAI,UAAU,SAAU,OAAO;AAC7B,eAAO;AAAA;AAET,UAAI,UAAU,SAAU,QAAQ,MAAM,MAAM;AAC1C,YAAI,WAAW;AAAK,iBAAO,CAAC,MAAM,GAAG;AACrC,eAAO,IAAI,UAAS,CAAC,MAAM,GAAG;AAAA;AAEhC,UAAI,UAAU,WAAY;AACxB,eAAO;AAAA;AAET,UAAI,UAAU,WAAY;AACxB,eAAO;AAAA;AAET,UAAI,UAAU,WAAY;AACxB,eAAO;AAAA;AAET,UAAI,UAAU,SAAU,MAAM,MAAM;AAClC,eAAO,CAAC,MAAM,GAAG;AAAA;AAEnB,UAAI,UAAU,SAAU,OAAO;AAC7B,eAAO,SAAS;AAAA;AAElB,UAAI,UAAU,SAAU,MAAM,MAAM;AAClC,eAAO,OAAO,OAAO,MAAM,GAAG;AAAA;AAEhC,UAAI,UAAU,SAAU,OAAO;AAC7B,eAAO,SAAS;AAAA;AAElB,UAAI,UAAU,SAAU,KAAK,OAAO;AAClC,eAAO,QAAQ,aAAa,KAAK,GAAG,MAAM;AAAA;AAE5C,UAAI,UAAU,WAAY;AACxB,eAAO,WAAW;AAAA;AAEpB,UAAI,UAAU,SAAU,OAAO;AAC7B,eAAO,MAAM,KAAK;AAAA;AAEpB,UAAI,UAAU,SAAU,UAAU;AAChC,eAAO;AAAA;AAGT,UAAI,cAAc;AAClB,UAAI,eAAe;AACnB,UAAI,sBAAsB,CAAC,EAAE,MAAM,GAAG,QAAQ;AAC9C,UAAI,eAAe;AACnB,UAAI,kBAAkB;AAEtB,UAAI;AAEJ,UAAI,eAAe,SAAS;AAC1B,YAAI,CAAE,SAAQ,aAAa,yBAAyB;AAClD,gBAAM,IAAI,MACR,oCAAqC,QAAQ,YAAY;AAAA;AAI7D,gCAAwB,uBAAuB,QAAQ;AAAA;AAGzD,uBAAgB;AACd,eAAO,MAAM,UAAU,cAAc;AAAA;AAGvC,wBAAkB;AAChB,eAAO;AAAA;AAGT,uBAAiB;AACf,eAAO,CAAC,cAAc;AAAA;AAGxB,0BAAoB;AAClB,eAAO,oBAAoB,cAAc;AAAA;AAG3C,wBAAkB,aAAa,WAAU;AACvC,oBACE,cAAa,SACT,YACA,oBAAoB,cAAc;AAExC,cAAM,yBACJ,CAAC,qBAAqB,eACtB,MAAM,UAAU,cAAc,cAC9B;AAAA;AAIJ,sBAAe,SAAS,WAAU;AAChC,oBACE,cAAa,SACT,YACA,oBAAoB,cAAc;AAExC,cAAM,qBAAqB,SAAS;AAAA;AAGtC,sCAAgC,OAAM,YAAY;AAChD,eAAO,EAAE,MAAM,WAAW,MAAM,OAAM;AAAA;AAGxC,oCAA8B,OAAO,UAAU,YAAY;AACzD,eAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA;AAAA;AAIJ,oCAA8B;AAC5B,eAAO,EAAE,MAAM;AAAA;AAGjB,oCAA8B;AAC5B,eAAO,EAAE,MAAM;AAAA;AAGjB,oCAA8B,aAAa;AACzC,eAAO,EAAE,MAAM,SAAS;AAAA;AAG1B,qCAA+B,KAAK;AAClC,YAAI,UAAU,oBAAoB;AAClC,YAAI;AAEJ,YAAI,SAAS;AACX,iBAAO;AAAA,eACF;AACL,cAAI,MAAM;AACV,iBAAO,CAAC,oBAAoB,IAAI;AAC9B;AAAA;AAGF,oBAAU,oBAAoB;AAC9B,oBAAU;AAAA,YACR,MAAM,QAAQ;AAAA,YACd,QAAQ,QAAQ;AAAA;AAGlB,iBAAO,IAAI,KAAK;AACd,gBAAI,MAAM,WAAW,OAAO,IAAI;AAC9B,sBAAQ;AACR,sBAAQ,SAAS;AAAA,mBACZ;AACL,sBAAQ;AAAA;AAGV;AAAA;AAGF,8BAAoB,OAAO;AAE3B,iBAAO;AAAA;AAAA;AAIX,UAAI,oBACF,OAAO,QAAQ,aAAa,YAAY,QAAQ,SAAS,SAAS;AACpE,mCAA6B,UAAU,QAAQ;AAC7C,YAAI,MAAM;AAEV,YAAI;AAAmB,cAAI,WAAW,QAAQ;AAE9C,YAAI,kBAAkB,sBAAsB;AAC5C,YAAI,QAAQ;AAAA,UACV,QAAQ;AAAA,UACR,MAAM,gBAAgB;AAAA,UACtB,QAAQ,gBAAgB;AAAA;AAG1B,YAAI,gBAAgB,sBAAsB;AAC1C,YAAI,MAAM;AAAA,UACR,QAAQ;AAAA,UACR,MAAM,cAAc;AAAA,UACpB,QAAQ,cAAc;AAAA;AAGxB,eAAO;AAAA;AAGT,2BAAqB;AACnB,qBAAa,KAAK,EAAE,KAAK,aAAa,UAAU;AAAA;AAGlD,0BAAoB,WAAU;AAC5B,YAAI,MAAM,aAAa,aAAa,SAAS;AAE7C,YAAI,cAAc,IAAI,KAAK;AACzB;AAAA;AAGF,YAAI,cAAc,IAAI,KAAK;AACzB,cAAI,MAAM;AACV,cAAI,WAAW;AAAA;AAGjB,YAAI,SAAS,KAAK;AAAA;AAGpB,uBAAiB,QAAQ;AACvB,YAAI,YAAW,aAAa;AAC5B,YAAI,MAAM,aAAa,aAAa,SAAS;AAC7C,YAAI,WAAW,UAAS;AAExB,YAAI,IAAI,QAAQ,UAAS,KAAK;AAC5B;AAAA;AAGF,YAAI,QAAQ;AACV,qBAAW,SAAS,IAAI,SAAU,GAAG;AACnC,mBAAO,EAAE,SAAS,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,UAAU;AAAA;AAAA;AAIpE,cAAM,UAAU,KAAK,MAAM,IAAI,UAAU;AAAA;AAG3C,oCAA8B,SAAS,WAAU;AAC/C,eAAO,IAAI,gBAAgB,SAAS,MAAM,MAAM;AAAA;AAGlD,wCAAkC,WAAU,OAAO,WAAU;AAC3D,eAAO,IAAI,gBACT,gBAAgB,aAAa,WAAU,OAAO,YAC9C,WACA,OACA;AAAA;AAIJ,gCAA0B;AACxB,YAAI,YAAW,aAAa;AAC5B,YAAI,UAAU,UAAS;AAEvB,eAAO,yBACL,UAAS,UACT,UAAU,MAAM,SAAS,MAAM,OAAO,WAAW,MACjD,UAAU,MAAM,SACZ,oBAAoB,SAAS,UAAU,KACvC,oBAAoB,SAAS;AAAA;AAIrC,8BAAwB;AACtB,YAAI;AAEJ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,gBAAI,OAAO,YAAY;AACrB,mBAAK;AAAA;AAAA;AAAA;AAKX,eAAO;AAAA;AAGT,wCAAkC;AAChC,YAAI,IAAI;AAER,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,yBAAe;AACf,eAAK,OAAO;AAAA;AAEd,aAAK;AAEL,eAAO;AAAA;AAGT,qCAA+B;AAC7B,YAAI,IAAI,IAAI,IAAI;AAEhB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,yBAAe;AACf,eAAK,OAAO;AAAA,eACP;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,kCAA4B;AAC1B,YAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAE5B,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,eAAK;AACL,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,gBAAI,OAAO,YAAY;AACrB,mBAAK;AAAA;AAEP,2BAAe;AACf,iBAAK,OAAO,IAAI;AAAA,iBACX;AACL,0BAAc;AACd,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AAAA;AAEP,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,iBAAK;AAAA;AAEP,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,uBAAa;AACb,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AAAA;AAEP,yBAAe;AACf,eAAK,OAAO,IAAI,IAAI,IAAI;AAAA,eACnB;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,mCAA6B;AAC3B,YAAI,IAAI,IAAI;AAEZ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,qBAAa;AACb,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,OAAO;AAAA,iBACP;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,kCAA4B;AAC1B,YAAI;AAEJ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL;AAEA,eAAO;AAAA;AAGT,wCAAkC;AAChC,YAAI,IAAI,IAAI,IAAI;AAEhB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,yBAAe;AACf,eAAK,OAAO,IAAI;AAAA,eACX;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,4CAAsC;AACpC,YAAI,IAAI,IAAI;AAEZ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAAA,eAEF;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,OAAO;AAAA,iBACP;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,4CAAsC;AACpC,YAAI,IAAI;AAER,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,yBAAe;AACf,eAAK,OAAO;AAAA;AAEd,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,OAAO;AAAA;AAEd,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,iBAAK;AACL,gBAAI,OAAO,YAAY;AACrB,6BAAe;AACf,mBAAK,OAAO;AAAA;AAEd,iBAAK;AAAA;AAAA;AAIT,eAAO;AAAA;AAGT,2CAAqC;AACnC,YAAI,IAAI,IAAI;AAEZ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAEP;AAEA,eAAO;AAAA;AAGT,wCAAkC;AAChC,YAAI,IAAI,IAAI;AAEZ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAEP;AAEA,eAAO;AAAA;AAGT,uCAAiC;AAC/B,YAAI,IAAI,IAAI,IAAI;AAEhB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,uBAAa;AACb,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,gBAAI,OAAO,YAAY;AACrB,6BAAe;AACf,mBAAK,QAAQ,IAAI;AAAA,mBACZ;AACL,4BAAc;AACd,mBAAK;AAAA;AAAA,iBAEF;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,mCAA6B;AAC3B,YAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAEhC,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,uBAAa;AACb,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,iBAAK;AACL,mBAAO,OAAO,YAAY;AACxB,iBAAG,KAAK;AACR,mBAAK;AAAA;AAEP,iBAAK;AACL,iBAAK;AACL,gBAAI,OAAO,YAAY;AACrB,mBAAK;AAAA;AAEP,iBAAK;AACL,iBAAK;AACL,mBAAO,OAAO,YAAY;AACxB,iBAAG,KAAK;AACR,mBAAK;AAAA;AAEP,2BAAe;AACf,iBAAK,QAAQ,IAAI,IAAI;AACrB,yBAAa;AACb,gBAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,mBAAK;AACL;AAAA,mBACK;AACL,mBAAK;AAAA;AAEP,gBAAI,OAAO,YAAY;AACrB,6BAAe;AACf,mBAAK,QAAQ,IAAI;AAAA,mBACZ;AACL,4BAAc;AACd,mBAAK;AAAA;AAAA,iBAEF;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,4CAAsC;AACpC,YAAI,IAAI,IAAI,IAAI;AAEhB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,uBAAa;AACb,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AAAA;AAEP,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,yBAAe;AACf,eAAK,QAAQ,IAAI;AAAA,eACZ;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,gDAA0C;AACxC,YAAI,IAAI,IAAI,IAAI,IAAI;AAEpB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,aAAK;AACL,eAAO,OAAO,YAAY;AACxB,aAAG,KAAK;AACR,eAAK;AAAA;AAEP,qBAAa;AACb,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,wCAAkC;AAChC,YAAI,IAAI,IAAI;AAEZ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,aAAK;AACL,eAAO,OAAO,YAAY;AACxB,aAAG,KAAK;AACR,eAAK;AAAA;AAEP,qBAAa;AACb,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK,CAAC,IAAI;AACV,eAAK;AAAA,eACA;AACL,wBAAc;AACd,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,mCAA6B;AAC3B,YAAI,IAAI,IAAI,IAAI,IAAI;AAEpB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL,YAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,eAAK,MAAM,OAAO;AAClB;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,iBAAK;AACL,mBAAO,OAAO,YAAY;AACxB,iBAAG,KAAK;AACR,mBAAK;AAAA;AAEP,2BAAe;AACf,iBAAK,QAAQ,IAAI,IAAI;AAAA,iBAChB;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAEP;AAEA,eAAO;AAAA;AAGT,uCAAiC;AAC/B,YAAI,IAAI,IAAI,IAAI;AAEhB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,gBAAI,OAAO,YAAY;AACrB,mBAAK;AAAA;AAEP,gBAAI,OAAO,YAAY;AACrB,kBAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,qBAAK;AACL;AAAA,qBACK;AACL,qBAAK;AAAA;AAEP,kBAAI,OAAO,YAAY;AACrB,+BAAe;AACf,qBAAK,QAAQ;AAAA,qBACR;AACL,8BAAc;AACd,qBAAK;AAAA;AAAA,mBAEF;AACL,4BAAc;AACd,mBAAK;AAAA;AAAA,iBAEF;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA;AAIT,eAAO;AAAA;AAGT,gCAA0B;AACxB,YAAI;AAEJ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,gBAAI,OAAO,YAAY;AACrB,mBAAK;AACL,kBAAI,OAAO,YAAY;AACrB,qBAAK;AACL,oBAAI,OAAO,YAAY;AACrB,uBAAK;AACL,sBAAI,OAAO,YAAY;AACrB,yBAAK;AACL,wBAAI,OAAO,YAAY;AACrB,2BAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnB,eAAO;AAAA;AAGT,oCAA8B;AAC5B,YAAI,IAAI;AAER,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL,YAAI,MAAM,OAAO,aAAa,OAAO,QAAQ;AAC3C,eAAK;AACL,yBAAe;AAAA,eACV;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,yBAAe;AACf,eAAK;AAAA;AAEP,aAAK;AACL;AAEA,eAAO;AAAA;AAGT,uCAAiC;AAC/B,YAAI,IAAI;AAER,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL,YAAI,MAAM,OAAO,aAAa,OAAO,SAAS;AAC5C,eAAK;AACL,yBAAe;AAAA,eACV;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,yBAAe;AACf,eAAK;AAAA;AAEP,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,MAAM,OAAO,aAAa,OAAO,SAAS;AAC5C,iBAAK;AACL,2BAAe;AAAA,iBACV;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK;AAAA;AAEP,eAAK;AAAA;AAEP;AAEA,eAAO;AAAA;AAGT,qCAA+B;AAC7B,YAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAE5B,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,qBAAa;AACb,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,eAAK;AACL,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,iBAAK;AACL,mBAAO,OAAO,YAAY;AACxB,iBAAG,KAAK;AACR,mBAAK;AAAA;AAEP,iBAAK;AACL,2BAAe;AACf,iBAAK,QAAQ,IAAI;AAAA,iBACZ;AACL,0BAAc;AACd,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AAAA;AAEP,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,uBAAa;AACb,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,yCAAmC;AACjC,YAAI,IAAI,IAAI,IAAI,IAAI;AAEpB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,aAAK;AACL,eAAO,OAAO,YAAY;AACxB,aAAG,KAAK;AACR,eAAK;AAAA;AAEP,qBAAa;AACb,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,oCAA8B;AAC5B,YAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAE5B,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,qBAAa;AACb,YAAI,MAAM,WAAW,iBAAiB,KAAK;AACzC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,eAAK;AACL,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,iBAAK;AACL,mBAAO,OAAO,YAAY;AACxB,iBAAG,KAAK;AACR,mBAAK;AAAA;AAEP,iBAAK;AACL,2BAAe;AACf,iBAAK,QAAQ,IAAI;AAAA,iBACZ;AACL,0BAAc;AACd,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AAAA;AAEP,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,uBAAa;AACb,cAAI,MAAM,WAAW,iBAAiB,KAAK;AACzC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,wCAAkC;AAChC,YAAI,IAAI,IAAI,IAAI,IAAI;AAEpB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,aAAK;AACL,eAAO,OAAO,YAAY;AACxB,aAAG,KAAK;AACR,eAAK;AAAA;AAEP,qBAAa;AACb,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,eAAK;AACL,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,OAAO;AAAA,iBACP;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,wCAAkC;AAChC,YAAI,IAAI,IAAI,IAAI,IAAI;AAEpB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,aAAK;AACL,YAAI,OAAO,YAAY;AACrB,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,uBAAa;AACb,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,iBAAK;AACL,mBAAO,OAAO,YAAY;AACxB,iBAAG,KAAK;AACR,mBAAK;AAAA;AAEP,iBAAK;AACL,gBAAI,OAAO,YAAY;AACrB,6BAAe;AACf,mBAAK,QAAQ,IAAI;AAAA,mBACZ;AACL,4BAAc;AACd,mBAAK;AAAA;AAAA,iBAEF;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,sCAAgC;AAC9B,YAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAE5B,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AAAA;AAEP,aAAK;AACL,YAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,eAAK,MAAM,OAAO;AAClB;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,gBAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,mBAAK,MAAM,OAAO;AAClB;AAAA,mBACK;AACL,mBAAK;AAAA;AAAA;AAAA,eAGJ;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AACL,gBAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,mBAAK,MAAM,OAAO;AAClB;AAAA,mBACK;AACL,mBAAK;AAAA;AAEP,gBAAI,OAAO,YAAY;AACrB,qBAAO,OAAO,YAAY;AACxB,mBAAG,KAAK;AACR,oBAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,uBAAK,MAAM,OAAO;AAClB;AAAA,uBACK;AACL,uBAAK;AAAA;AAAA;AAAA,mBAGJ;AACL,mBAAK;AAAA;AAEP,gBAAI,OAAO,YAAY;AACrB,mBAAK,CAAC,IAAI;AACV,mBAAK;AAAA,mBACA;AACL,4BAAc;AACd,mBAAK;AAAA;AAAA,iBAEF;AACL,0BAAc;AACd,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,iBAAK;AAAA;AAEP,yBAAe;AACf,eAAK;AAAA,eACA;AACL,wBAAc;AACd,eAAK;AAAA;AAEP;AAEA,eAAO;AAAA;AAGT,sCAAgC;AAC9B,YAAI,IAAI,IAAI,IAAI;AAEhB,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AACL,eAAK;AACL,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,iBAAK;AAAA;AAEP,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAEP;AAEA,eAAO;AAAA;AAGT,2CAAqC;AACnC,YAAI;AAEJ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,YAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,eAAK,MAAM,OAAO;AAClB;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,6CAAuC;AACrC,YAAI,IAAI,IAAI;AAEZ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,aAAK;AACL,YAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,eAAK;AACL;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,cAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,iBAAK;AACL;AAAA,iBACK;AACL,iBAAK;AAAA;AAEP,cAAI,OAAO,YAAY;AACrB,gBAAI,MAAM,WAAW,iBAAiB,IAAI;AACxC,mBAAK;AACL;AAAA,mBACK;AACL,mBAAK;AAAA;AAAA;AAGT,cAAI,OAAO,YAAY;AACrB,2BAAe;AACf,iBAAK,QAAQ;AAAA,iBACR;AACL,0BAAc;AACd,iBAAK;AAAA;AAAA,eAEF;AACL,wBAAc;AACd,eAAK;AAAA;AAGP,eAAO;AAAA;AAGT,qCAA+B;AAC7B,YAAI,IAAI,IAAI;AAEZ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,aAAK;AACL,aAAK;AACL,YAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,eAAK,MAAM,OAAO;AAClB;AAAA,eACK;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,iBAAO,OAAO,YAAY;AACxB,eAAG,KAAK;AACR,gBAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,mBAAK,MAAM,OAAO;AAClB;AAAA,mBACK;AACL,mBAAK;AAAA;AAAA;AAAA,eAGJ;AACL,eAAK;AAAA;AAEP,YAAI,OAAO,YAAY;AACrB,eAAK,MAAM,UAAU,IAAI;AAAA,eACpB;AACL,eAAK;AAAA;AAEP;AAEA,eAAO;AAAA;AAGT,4BAAsB;AACpB,YAAI;AAEJ,YAAI,eAAe,SAAU,WAAU;AACrC,cAAI,oBAAoB;AAAG,uBAAW;AAAA;AAGxC,qBAAa;AACb;AACA,YAAI,OAAO,KAAK,MAAM,OAAO,eAAe;AAC1C,eAAK,MAAM,OAAO;AAClB;AAAA,eACK;AACL,eAAK;AAAA;AAEP;AAEA,eAAO;AAAA;AAGT,YAAM,EAAE,qBAAU,wBAAa;AAE/B;AACA,mBAAa;AAEb,UAAI,eAAe,cAAc,gBAAgB,MAAM,QAAQ;AAC7D,eAAO;AAAA,aACF;AACL,YAAI,eAAe,cAAc,cAAc,MAAM,QAAQ;AAC3D,qBAAW;AAAA;AAGb,cAAM;AAAA;AAAA;AAIV,WAAO,UAAU;AAAA,MACf,aAAa;AAAA,MACb,OAAO;AAAA;AAAA;AAAA;;;AC1yDT;AAAA;AAEA;AAGA,QAAI,cAAc;AAElB,yBAAqB,OAAO,QAAQ;AAClC,UAAI,OACA,SACA,OACA,MAAM,MAAM,QACZ,QAAQ,MAAM;AAElB,UAAI,MAAM,IAAI,WAAW,WAAW,IAAa;AAAE,eAAO;AAAA;AAC1D,UAAI,QAAQ;AAAE,eAAO;AAAA;AACrB,UAAI,QAAQ,KAAK,KAAK;AAAE,eAAO;AAAA;AAE/B,YAAM,MAAM,QAAQ;AAEpB,aAAO,MAAM,MAAM,KAAK;AACtB,YAAI,MAAM,IAAI,WAAW,MAAM,SAAS,IAAa;AACnD,kBAAQ;AACR;AAAA;AAGF,cAAM,GAAG,OAAO,UAAU;AAAA;AAG5B,UAAI,CAAC,SAAS,QAAQ,MAAM,MAAM,KAAK;AACrC,cAAM,MAAM;AACZ,eAAO;AAAA;AAGT,gBAAU,MAAM,IAAI,MAAM,QAAQ,GAAG,MAAM;AAG3C,UAAI,QAAQ,MAAM,uBAAuB;AACvC,cAAM,MAAM;AACZ,eAAO;AAAA;AAIT,YAAM,SAAS,MAAM;AACrB,YAAM,MAAM,QAAQ;AAGpB,cAAgB,MAAM,KAAK,YAAY,OAAO;AAC9C,YAAM,SAAU;AAEhB,cAAgB,MAAM,KAAK,QAAQ,IAAI;AACvC,YAAM,UAAU,QAAQ,QAAQ,aAAa;AAE7C,cAAgB,MAAM,KAAK,aAAa,OAAO;AAC/C,YAAM,SAAU;AAEhB,YAAM,MAAM,MAAM,SAAS;AAC3B,YAAM,SAAS;AACf,aAAO;AAAA;AAIT,WAAO,UAAU,oBAAoB,IAAI;AACvC,SAAG,OAAO,MAAM,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;;;AC/D3C;AAAA;AAAA;AAGA,WAAO,UAAU;AAAA;AAAA;;;ACHjB,iBAAuB;;;ACAvB,iBAAmC;;;ACEnC,qBAAiD;AAAA,EAK/C,YAAY,OAA4B,IAAI;AAJnC,oBAAW;AAKlB,SAAK,OAAO;AAAA;AAAA,EAGd,QAAQ,EAAE,cAAsB,IAAI;AAClC,WAAO,qBAAqB,WACxB,UAAU,KAAK,QACf,KAAK,KAAK,OAAO,CAAC,MAAM,IAAI,QAAQ,IAAI,MAAM;AAAA;AAAA;;;ACdtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,eAAe,OAA+B;AACnD,SAAO,CAAC,CAAC,OAAO;AAAA;AAGX,oBAAoB,OAAmC;AAC5D,SAAO,CAAC,CAAE,QAAO,aAAa;AAAA;AAGzB,uBAAuB,OAA+C;AAC3E,MAAI,SAAS,QAAQ,OAAO,UAAU;AAAU;AAEhD,MAAI,MAAM,QAAQ;AAAQ,eAAW,KAAK;AAAO,aAAO,aAAa;AAErE,MAAI,MAAM;AAAQ,UAAM;AAExB,MAAI,OAAO,eAAe,WAAW,OAAO;AAAW;AAEvD,aAAW,KAAK,OAAO,OAAO;AAAQ,WAAO,aAAa;AAAA;AAGrD,iBAAiB,OAAY,SAAiB,IAAS;AAC5D,MAAI,SAAS,QAAQ,OAAO,UAAU;AAAU,WAAO;AAEvD,MAAI,MAAM,QAAQ;AAAQ,WAAO,MAAM,IAAI,CAAC,UAAS,QAAQ,OAAM;AAEnE,MAAI,MAAM,UAAU,OAAO,mBAAmB;AAC5C,WAAO,MAAM,QAAQ;AAEvB,MAAI,OAAO,eAAe,WAAW,OAAO;AAAW,WAAO;AAE9D,QAAM,SAAiC;AACvC,aAAW,CAAC,GAAG,MAAM,OAAO,QAAQ;AAAQ,WAAO,KAAK,QAAQ,GAAG;AACnE,SAAO;AAAA;;;ACpCT,sBAAiD;AAAA,EAM/C,YAAY,MAAc,YAAiC;AALlD,oBAAW;AAMlB,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA;AAAA,EAGpB,QAAQ,SAAiB,IAAI;AAC3B,UAAM,KAAK,QAAQ,YAAY,KAAK;AACpC,QAAI,CAAC;AAAI,aAAO;AAEhB,UAAM,aAAa,QAAQ,KAAK,YAAY;AAC5C,WAAO,GAAG,YAAY,YAAY;AAAA;AAAA;;;AHbtC,IAAK;AAAL,UAAK,SAAL;AACE;AACA;AACA;AAAA,GAHG;AAME,IAAM,OAAO;AACb,IAAM,QAAQ;AAEd,oBAAoB,SAAiB,QAAQ,GAAG;AACrD,MAAI,QAAQ;AACZ,WAAS,MAAM,OAAO,MAAM,QAAQ,QAAQ,OAAO;AACjD,UAAM,OAAO,QAAQ;AAErB,YAAQ;AAAA,WACD;AACH,gBAAQ;AAAA,eACD;AACH,oBAAQ;AACR;AAAA,eACG;AACH,oBAAQ;AACR;AAAA;AAEJ;AAAA,WACG;AACH,gBAAQ;AACR;AAAA,WACG;AACH,YAAI,SAAS;AAAK,kBAAQ;AAAA,iBACjB,QAAQ,WAAW,OAAO;AAAM,iBAAO;AAAA;AAAA;AAAA;AAKxD,kBAAkB,SAAiB,MAAc,cAAsB;AACrE,MAAI;AACF,WAAO,sBAAM,SAAS,EAAE,UAAU;AAAA,WAC3B,QAAP;AACA,QAAI,CAAE,mBAAiB;AAAc,YAAM;AAC3C,UAAM;AAAA,MACJ;AAAA,MACA,UAAU,EAAE,OAAO;AAAA,QACjB;AACJ,UAAM,WAAW;AAAA,MACf,OAAO,EAAE,MAAM,WAAW,MAAM,SAAS;AAAA,MACzC,KAAK,EAAE,MAAM,OAAO,GAAG,WAAW,IAAI,SAAS;AAAA;AAGjD,WAAO,EAAE,MAAM,SAAS,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAI/C,mBAAmB,SAAiB,YAAY,GAAY;AACjE,MAAI,OAAO,YAAY;AACvB,QAAM,SAAS;AACf,MAAI,QAAQ;AAEZ,WAAS,MAAM,GAAG,MAAM,QAAQ,QAAQ,OAAO;AAC7C,QAAI,QAAQ,SAAS,MAAM;AACzB;AACA;AAAA;AAGF,QAAI,CAAC,QAAQ,WAAW,MAAM;AAAM;AAEpC,UAAM,MAAM,WAAW,SAAS,QAAQ;AACxC,UAAM,QAAO,QAAQ,MAAM,KAAK,MAAM,MAAM;AAC5C,UAAM,QAAQ,QAAQ,MAAM,MAAM,KAAK,QAAQ;AAC/C,UAAM,YAAY,QAAQ,YAAY,MAAM;AAC5C,UAAM,UAAU,QAAQ,QAAQ,MAAM;AACtC,UAAM,cAAc,QAAQ,MAAM,WAAW;AAC7C,UAAM,MAAM,SAAS,MAAM,QAAQ,MAAM,MAAM;AAG/C,UAAM,mBAAmB,YAAY,WAAW,QAAO,YAAY;AACnE,UAAM,gBAAgB,QAAQ,MAAM,OAAO;AAE3C,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,KAAK,MAAM;AAAA,MACX,SAAS;AAAA;AAGX,WAAO,KAAK;AAAA,MACV,KAAK,CAAC,MAAM,OAAO;AAAA,MACnB,UAAU;AAAA,QACR,OAAO,MAAM;AAAA,QACb,KAAK,MAAM,YAAY,MAAK;AAAA;AAAA,MAE9B,OAAO;AAAA,MACP,KAAK,MAAM,MAAK,SAAS;AAAA,MACzB,MAAM;AAAA,SACH;AAAA;AAGL,YAAQ,MAAM,MAAM;AACpB,UAAM,QAAQ;AAAA;AAGhB,SAAO,KAAK;AAAA,IACV,MAAM;AAAA,IACN;AAAA,IACA,KAAK,QAAQ,SAAS;AAAA,IACtB,SAAS,QAAQ,MAAM;AAAA;AAGzB,SAAO;AAAA;;;AIjHT,kBAAmC;AAanC,qBACE,OACA,SACA,cACO;AACP,MAAI;AACF,UAAM,EAAE,MAAM,MAAM,UAAU,MAAM,uBAAM,SAAS,EAAE,UAAU;AAC/D,UAAM,QAAQ,MAAM,KAAK,MAAM,IAAI;AACnC,UAAM,OAAO;AACb,UAAM,OAAO;AAEb,WAAO;AAAA,WACA,QAAP;AACA,QAAI,CAAE,mBAAiB;AAAc,YAAM;AAE3C,UAAM;AAAA,MACJ;AAAA,MACA,UAAU,EAAE,OAAO;AAAA,QACjB;AACJ,UAAM,WAAW,eACb;AAAA,MACE,OAAO,EAAE,QAAQ,MAAM,SAAS;AAAA,MAChC,KAAK,EAAE,QAAQ,IAAI,SAAS;AAAA,QAE9B;AAEJ,UAAM,QAAQ,MAAM,KAAK,SAAS,IAAI;AACtC,UAAM,OAAO,EAAE,OAAO,EAAE,SAAS;AACjC,WAAO;AAAA;AAAA;AAIX,eACE,OACA,WACA,SACA,QACS;AACT,QAAM,QAAQ,MAAM,OAAO,aAAa,MAAM,OAAO;AACrD,QAAM,SAAS,MAAM,OAAO;AAE5B,MAAI,CAAC,MAAM,IAAI,WAAW,MAAM;AAAQ,WAAO;AAE/C,QAAM,SAAS,WAAW,MAAM,KAAK;AACrC,QAAM,eAAe,MAAM,IAAI,MAAM,GAAG,QAAQ,OAAO;AAEvD,MAAI,CAAC,UAAU,SAAS,eAAe,MAAM;AAAQ,WAAO;AAE5D,QAAM,eAAe,QAAQ,KAAK;AAClC,QAAM,UAAU,MAAM,IAAI,MAAM,cAAc,QAAQ;AACtD,QAAM,QAAQ,QAAQ,MAAM,MAAM;AAElC,MAAI,QAAQ,OAAO;AAAK,WAAO;AAE/B,MAAI;AAAQ,WAAO;AAEnB,QAAM,QAAQ,YAAY,OAAO,SAAS;AAC1C,QAAM,MAAM,CAAC,WAAW,YAAY;AACpC,QAAM,QAAQ;AACd,SAAO;AAAA;AAGT,gBAAgB,OAAoB,QAA0B;AAC5D,MAAI,CAAC,MAAM,IAAI,WAAW,MAAM,MAAM;AAAM,WAAO;AAEnD,QAAM,SAAS,WAAW,MAAM,KAAK,MAAM;AAC3C,MAAI,CAAC;AAAQ,WAAO;AAEpB,QAAM,UAAU,MAAM,IAAI,MAAM,MAAM,MAAM,KAAK,QAAQ;AACzD,MAAI,CAAC;AAAQ,gBAAY,OAAO,QAAQ;AAExC,QAAM,MAAM,SAAS,MAAM;AAC3B,SAAO;AAAA;AAGT,cAAc,OAAkB;AAC9B,MAAI;AACJ,OAAK,SAAS,MAAM,QAAQ;AAC1B,QAAI,MAAM,SAAS;AAAS;AAE5B,QAAI,MAAM,KAAK,SAAS,OAAO;AAC7B,YAAM,QAAQ,MAAM,KAAK,QAAQ;AACjC,YAAM,MAAM,WAAW,MAAM,MAAM;AACnC,YAAM,UAAU,MAAM,KAAK,MAAM,QAAQ,KAAK,QAAQ;AAEtD,UAAI;AACF,cAAM,EAAE,SAAS,uBAAM,QAAQ,QAAQ,EAAE,UAAU;AACnD,cAAM,OAAO;AAAA,eACN,QAAP;AACA,YAAI,CAAE,mBAAiB;AAAc,gBAAM;AAC3C,YAAI,CAAC,MAAM;AAAQ,gBAAM,SAAS;AAClC,cAAM,OAAO,KAAK;AAAA,UAChB,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,SAAS,8BACN,OAAsB;AAAA;AAAA;AAAA;AAM/B,QACE,OAAO,MAAM,YAAY,KACvB,CAAC,SAAyB,KAAK,SAAS,aAAa,CAAC,KAAK;AAG7D;AAEF,UAAM,WAAW,UAAU,MAAM,SAAS,MAAM,IAAI;AAAA;AAAA;AAIzC,gBAAgB,IAA8B;AAC3D,KAAG,MAAM,MAAM,OAAO,aAAa,eAAe,OAAO;AAAA,IACvD,KAAK,CAAC,aAAa;AAAA;AAErB,KAAG,OAAO,MAAM,KAAK,cAAc;AACnC,KAAG,KAAK,MAAM,KAAK,eAAe;AAAA;;;AChIpC,IAAM,QAAQ;AAEd,iBAAiB,OAAmB,GAAW;AAC7C,SAAO,MAAM,IAAI,MAAM,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI;AAAA;AAG3D,mBAAmB,OAAmB,SAAiB;AACrD,WAAS,OAAO,GAAG,OAAO,SAAS;AACjC,QAAI,QAAQ,OAAO,UAAU;AAAO,aAAO;AAAA;AAG/C,gBACE,OACA,WACA,SACA,QACS;AACT,MAAI,aAAa,KAAK,QAAQ,OAAO,MAAM;AAAO,WAAO;AAEzD,QAAM,QAAQ,UAAU,OAAO;AAE/B,MAAI,CAAC;AAAO,WAAO;AACnB,MAAI;AAAQ,WAAO;AAEnB,QAAM,QAAQ,MAAM,KAAK,eAAe,IAAI;AAC5C,QAAM,UAAU,MAAM,IAAI,MAAM,MAAM,OAAO,IAAI,MAAM,OAAO,QAAQ;AACtE,QAAM,MAAM,CAAC,GAAG;AAChB,QAAM,SAAS;AAEf,QAAM,OAAO,QAAQ;AACrB,SAAO;AAAA;AAGM,iBAAgB,IAA8B;AAC3D,KAAG,MAAM,MAAM,OAAO,MAAM,eAAe;AAAA;;;ANhC7C,sBAA+B;AAAA,EAG7B,YACE,SAA8D,IAC9D;AACA,SAAK,SAAS,IAAI,mBAAW;AAC7B,SAAK,OAAO,IAAI,QAAa,eAAe;AAC5C,SAAK,OAAO,IAAI,SAAa,eAAe;AAC5C,SAAK,OAAO,IAAI;AAChB,SAAK,OAAO,QAAQ;AAAA;AAAA,EAGtB,SAAS,SAA0B;AACjC,WAAO,KAAK,OAAO,MAAM,QAAQ,YAAY;AAAA;AAAA;;;AOjBjD,gBAAyB;AAAA,EAOvB,YACE,OAAO,OACP,aAAa,IACb,WAAiC,IACjC;AAVO,oBAAW;AAWlB,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,WAAW;AAAA;AAAA;;;ACdb,kBAAoD;AAAA,EACzD,SAAS,OAA+B;AACtC,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAAU,aAAO;AAEnE,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA;AAAA;AAAA;AAAA,EAKf,UAAU,OAAY;AACpB,QAAI,CAAC,SAAS,OAAO,UAAU;AAAU,aAAO;AAEhD,UAAM,UAAU;AAChB,eAAW,CAAC,GAAG,MAAM,OAAO,QAAQ,SAAS;AAAK,UAAI;AAAG,gBAAQ,KAAK;AACtE,WAAO,QAAQ,KAAK;AAAA;AAAA;;;ACPjB,IAAM,mBAAqC;AAAA,EAChD,OAAO,EAAE,MAAM,OAAO,QAAQ;AAAA,EAC9B,IAAI,EAAE,MAAM,QAAQ,QAAQ;AAAA;AAU9B,IAAO,sBAAQ;AAAA,EACb,WAAW,MAAY,EAAE,QAAQ,IAAI,OAAO,OAAe,IAAI;AAC7D,WAAO,KAAK,MAAM,KAAK,KAAK,OAAO,MAAM,KAAK;AAAA;AAAA,EAGhD,WAAW,MAAY,SAAiB,IAAI;AAC1C,UAAM,SAAS,KAAK,WAAW,MAAM,WAAW;AAChD,UAAM,SAA8B;AAEpC,UAAM,QAAQ,KAAK,qBAAqB,OAAO;AAC/C,eAAW,CAAC,KAAK,SAAS,OAAO,QAAQ,QAAQ;AAC/C,UAAI,KAAK,UAAU;AAAO;AAE1B,YAAM,OAAO,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAE7D,UAAI,QAAQ,KAAK,WAAW;AAC5B,UAAI,OAAO,KAAK,SAAS,YAAY;AACnC,cAAM,WAAgB,IAAI,KAAK;AAC/B,YAAI,SAAS,WAAW;AACtB,kBAAQ,SAAS,UAAU,OAAO;AAAA;AAAA;AAGtC,cAAQ,UAAU,SAAY,KAAK,UAAU;AAE7C,UAAI,UAAU;AAAW;AACzB,aAAO,QAAQ;AAAA;AAGjB,WAAO;AAAA;AAAA,EAGT,SAAS,MAAY,SAAiB,IAAI;AACxC,WAAO,KAAK,SAAS,QAAQ,CAAC,UAAU,KAAK,KAAK,OAAO;AAAA;AAAA,EAG3D,KAAK,MAAY,SAAiB,IAAI;AACpC,UAAM,SAAS,KAAK,WAAW,MAAM,WAAW;AAChD,QAAI,UAAU,OAAO,qBAAqB;AACxC,aAAO,OAAO,UAAU,MAAM;AAEhC,UAAM,WAAW,KAAK,SAAS,MAAM;AACrC,QAAI,CAAC,UAAU,CAAC,OAAO;AAAQ,aAAO;AAEtC,UAAM,aAAa,KAAK,WAAW,MAAM;AACzC,WAAO,IAAI,IAAI,OAAO,QAAQ,YAAY;AAAA;AAAA;;;ACzD9C,iBAA6C;AAAA,EAa3C,YACE,OAAO,QACP,aAAkC,IAClC,WAAmB,IACnB,KACA;AAjBO,oBAAW;AAIpB,kBAA4B;AAC5B,iBAAkB;AAIlB,kBAAS;AASP,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,MAAM;AAAA;AAAA,GAGZ,OAAuC;AACtC,eAAW,SAAS,KAAK,UAAU;AACjC,YAAM;AACN,aAAO,MAAM;AAAA;AAAA;AAAA,EAIjB,KAAK,MAAY;AACf,SAAK,SAAS,KAAK;AAAA;AAAA,EAGrB,QAAQ,SAAiB,IAAU;AACjC,WAAO,OAAO,OAAO,IAAI,QAAQ,MAAM;AAAA,MACrC,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,MAAM,QAAQ;AAAA,MACrD,YAAY,QAAQ,KAAK,YAAY;AAAA;AAAA;AAAA,EAIzC,WAAW,SAAiB,IAAwB;AAClD,WAAO,oBAAY,WAAW,MAAM;AAAA;AAAA,EAGtC,oBAAoB,SAAiB,IAAI;AACvC,WAAO,oBAAY,WAAW,MAAM;AAAA;AAAA,EAGtC,kBAAkB,QAAsC;AACtD,WAAO,oBAAY,SAAS,MAAM;AAAA;AAAA,EAGpC,UAAU,QAAqC;AAC7C,WAAO,oBAAY,KAAK,MAAM;AAAA;AAAA;;;AC7DlC,IAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA;AAGF,iBAAiB,GAAW,OAAqB;AAC/C,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,QAAQ,SAAS,MAAM;AAC7B,SAAO,QAAQ,OAAO,OAAO,IAAI,SAAS,SAAS;AAAA;AAGrD,kBAAkB,OAA6B;AAC7C,SAAO,KAAK,MAAM,OAAM;AAAA;AAG1B,IAAO,cAAQ;AAAA,KACV;AAAA,KACA;AAAA,EACH;AAAA;;;ACtBF,sBAAsB,MAAY,WAAW,MAAM;AACjD,OAAK,OAAO;AACZ,OAAK,aAAa;AAElB,aAAW,QAAQ,KAAK;AAAU,SAAK,OAAO;AAE9C,SAAO;AAAA;AAGM,mBAAmB,WAAgB;AAChD,aAAW,QAAQ,UAAS,QAAQ;AAClC,QAAI,KAAK,SAAS,SAAS,KAAK,QAAQ;AAAS;AAEjD,UAAM,CAAC,UAAU,QAAQ,KAAK;AAC9B,QAAI,CAAC,SAAS,MAAM,SAAS;AAAS;AAEtC,UAAM,SAAQ,IAAI,YAAI,KAAK,SAAS,KAAK,YAAY;AAAA,MACnD,IAAI,YAAI,KAAK;AAAA,MACb,IAAI,YAAI,KAAK;AAAA;AAGf,UAAM,CAAC,QAAO,UAAS,OAAM;AAE7B,QAAI,MAAM,SAAS;AAAQ,aAAM,KAAK,aAAa,OAAO;AAE1D,eAAW,OAAO,MAAM;AAGtB,UAAI,IAAI,SAAS;AAAQ,qBAAa;AAAA,eAC7B,IAAI,SAAS,SAAS,IAAI,OAAO,MAAM;AAC9C,cAAM,WAAW;AAEjB,mBAAW,SAAS,IAAI,UAAU;AAEhC,cAAI,MAAM,SAAS;AAAM;AACzB,cAAI,MAAM,SAAS;AAAQ,yBAAa;AACxC,mBAAS,KAAK;AAAA;AAGhB,YAAI,WAAW;AAAA;AACV;AACP,aAAM,KAAK;AAAA;AAGb,SAAK,WAAW,CAAC;AAAA;AAAA;;;AC/CrB,IAAO,qBAAQ,CAAC;;;ACMhB,IAAM,WAAmC;AAAA,EACvC,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,aAAa;AAAA;AAGf,kBAAkB,MAAY,YAA8B;AAC1D,aAAW,EAAE,MAAM,OAAO,UAAU;AAClC,QAAI,SAAS;AAAa,WAAK,WAAW,QAAQ;AAAA,aACzC,SAAS;AAChB,UAAI,KAAK,WAAW;AAAO,aAAK,WAAW,MAAM,QAAQ;AAAA;AACpD,aAAK,WAAW,QAAQ,GAAG,OAAO;AAAA;AAG7C,qBAAqB,OAAc,MAAc;AAC/C,UAAQ;AAAA,SACD;AACH,aAAO,EAAE,OAAO,OAAO,MAAM,IAAI,QAAQ,KAAK;AAAA,SAC3C;AACH,aAAO,EAAE,SAAS,MAAM,KAAK,WAAW;AAAA,SACrC,QAAQ;AACX,YAAM,QAAQ,OAAO,YAAY,MAAM;AACvC,aAAO,EAAE,MAAM,MAAM;AAAA;AAAA,SAElB,SAAS;AACZ,YAAM,QAAQ,OAAO,YAAY,MAAM;AACvC,aAAO,EAAE,KAAK,MAAM,SAAS,KAAK,MAAM;AAAA;AAAA,SAErC;AAAA,SACA;AAAA,SACA;AACH,aAAO,EAAE,SAAU,OAAM,QAAQ,IAAI,YAAY,MAAM;AAAA,SACpD,SAAS;AACZ,YAAM,CAAC,YAAY,MAAM,KAAK,MAAM,KAAK;AACzC,aAAO,aAAa,KAChB,EAAE,SAAS,MAAM,YACjB,EAAE,SAAS,MAAM,SAAS;AAAA;AAAA;AAG9B,aAAO;AAAA;AAAA;AAIb,qBACE,OACA,OACA,MACA,cACA;AACA,MAAI,MAAM,SAAS,eAAe;AAChC,UAAM,GAAG,WAAW,cAAc,MAAM;AACxC;AAAA;AAGF,MAAI,MAAM,UAAW,MAAM,SAAS,UAAU,MAAM,YAAY;AAAK;AAErE,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,SAAS,MAAM,MAAM,SAAS;AACpC,QAAM,EAAE,KAAK,YAAY,kBAAU,MAAM,QAAQ;AAEjD,MAAI,MAAM,SAAS,cAAc;AAC/B,QAAI;AAAc,aAAO,SAAS,cAAc;AAEhD,WAAO,OAAO,OAAO,KAAK;AAAA,MACxB,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,sCAAsC,OAAO;AAAA;AAAA;AAI1D,MAAI,WAAW,MAAM,KAAK,QAAQ,kBAAkB;AACpD,MAAI,SAAS;AAAW,eAAW,SAAS;AAE5C,MAAI,aAAa,SAAS;AACxB,UAAM,EAAE,SAAS,aAAa;AAC9B,WAAO,KAAK,EAAE,IAAI,eAAe,OAAO,YAAY,SAAS;AAAA;AAG/D,MAAI,MAAM,UAAU,GAAG;AACrB,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,OAAO,SAAS,MAAM;AAAK,eAAO,MAAM,KAAK,GAAG,MAAM;AAC1D,aAAO,MAAM;AAAA;AAGf,WAAO,KAAK;AAAA,MACV,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,SAAS;AAAA;AAAA;AAItB,QAAM,QAAQ,YAAY,OAAO;AACjC,QAAM,OAAO,IAAI,KAAK,UAAU,OAAO,QAAW,OAAO;AACzD,QAAM,EAAE,WAAW,OAAO;AAE1B,OAAK,SAAS;AACd,OAAK,QAAQ,MAAM,OAAO,OAAO,SAAS;AAC1C,OAAK,WAAW;AAAA,IACd;AAAA,IACA,OAAO;AAAA,MACL,MAAM,KAAK,MAAM;AAAA,MACjB,WAAW,SAAS;AAAA;AAAA,IAEtB,KAAK;AAAA,MACH,MAAM,KAAK,MAAM;AAAA,MACjB,WAAW,SAAS;AAAA;AAAA;AAIxB,MAAI;AAAc,SAAK,SAAS;AAEhC,MAAI,cAAc,CAAC,OAAO,SAAS,SAAS,SAAS;AACnD,aAAS,MAAM;AAEjB,SAAO,KAAK;AACZ,MAAI,MAAM,UAAU;AAAG,UAAM,KAAK;AAElC,MAAI,CAAC,MAAM,QAAQ,MAAM;AAAW;AAEpC,iBAAe;AAEf,QAAM,KAAK;AAEX,QAAM,aAAa,aAAa;AAChC,MAAI,CAAC,YAAY;AACf,eAAW,SAAS,MAAM;AACxB,kBAAY,OAAO,OAAO,MAAM;AAAA;AAGpC,QAAM;AAAA;AAGO,gBAAgB,QAAiB,MAAe;AAC7D,QAAM,MAAM,IAAI,KAAK;AACrB,QAAM,QAAQ,CAAC;AAEf,aAAW,SAAS;AAAQ,gBAAY,OAAO,OAAO;AAEtD,MAAI,MAAM,SAAS;AACjB,eAAW,QAAQ,MAAM,MAAM;AAC7B,WAAK,OAAO,KAAK;AAAA,QACf,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS,SAAS,KAAK,OAAO,KAAK;AAAA;AAGzC,aAAW,cAAa;AAAY,eAAU;AAE9C,SAAO;AAAA;;;AC/JT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gBAAyB;AAAA,EAMrB,YAAY,SAAiB,SAAiB;AALrC,oBAAW;AAMlB,SAAK,UAAU;AACf,SAAK,SAAS;AAAA;AAAA;;;ADJb,IAAM,WAAmB;AAAA,EAC9B,QAAQ;AAAA,EACR,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAEF,YAAY;AAAA,IACV,aAAa,EAAE,QAAQ;AAAA;AAAA;AAIpB,IAAM,UAAkB;AAAA,EAC7B,UAAU,CAAC;AAAA,EACX,YAAY;AAAA,IACV,OAAO,EAAE,MAAM,QAAQ,QAAQ,OAAO,UAAU;AAAA;AAAA,EAElD,UAAU,MAAM,QAAQ;AACtB,WAAO,IAAI,IACT,IAAI,KAAK,WAAW,YACpB,KAAK,oBAAoB,SACzB,KAAK,kBAAkB;AAAA;AAAA;AAKtB,IAAM,YAAoB;AAAA,EAC/B,QAAQ;AAAA,EACR,UAAU,CAAC;AAAA;AAGN,IAAM,QAAgB;AAAA,EAC3B,QAAQ;AAAA,EACR,YAAY;AAAA,IACV,KAAK,EAAE,MAAM,QAAQ,UAAU;AAAA,IAC/B,KAAK,EAAE,MAAM;AAAA;AAAA;AAKV,IAAM,SAAgB;AAAA,EAC3B,QAAQ;AAAA,EACR,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,QAAQ,QAAQ,OAAO,UAAU;AAAA,IAClD,UAAU,EAAE,MAAM,QAAQ,QAAQ;AAAA,IAClC,SAAS,EAAE,MAAM,SAAS,QAAQ,OAAO,SAAS;AAAA;AAAA,EAEpD,UAAU,MAAM,QAAQ;AACtB,UAAM,aAAa,KAAK,oBAAoB;AAC5C,UAAM,WAAW,KAAK,SAAS,SAC3B,KAAK,kBAAkB,UACvB,CAAC,KAAK,WAAW;AAErB,WAAO,IAAI,IAAI,OAAO,YAAY;AAAA;AAAA;AAI/B,IAAM,aAAqB;AAAA,EAChC,QAAQ;AAAA,EACR,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAIG,IAAM,OAAe;AAAA,EAC1B,QAAQ;AAAA,EACR,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAIG,IAAM,OAAe;AAAA,EAC1B,UAAU,CAAC;AAAA,EACX,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,SAAS,QAAQ,OAAO,UAAU;AAAA;AAAA,EAErD,UAAU,MAAM,QAAQ;AACtB,WAAO,IAAI,IACT,KAAK,WAAW,UAAU,OAAO,MACjC,KAAK,oBAAoB,SACzB,KAAK,kBAAkB;AAAA;AAAA;AAKtB,IAAM,KAAa;AAAA,EACxB,QAAQ;AAAA;AAGH,IAAM,QAAgB;AAAA,EAC3B,QAAQ;AAAA;AAGH,IAAM,KAAa;AAAA,EACxB,QAAQ;AAAA,EACR,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAEF,YAAY;AAAA,IACV,SAAS,EAAE,MAAM;AAAA,IACjB,SAAS,EAAE,MAAM;AAAA,IACjB,OAAO,EAAE,MAAM;AAAA;AAAA;AAIZ,IAAM,KAAa;AAAA,EACxB,QAAQ;AAAA,EACR,YAAY;AAAA,IACV,OAAO,EAAE,MAAM;AAAA,IACf,OAAO,EAAE,MAAM;AAAA;AAAA;AAIZ,IAAM,KAAa;AAAA,EACxB,QAAQ;AAAA,EACR,UAAU,CAAC,MAAM;AAAA;AAGZ,IAAM,QAAgB;AAAA,EAC3B,QAAQ;AAAA,EACR,UAAU,CAAC,MAAM;AAAA;AAGZ,IAAM,QAAgB;AAAA,EAC3B,QAAQ;AAAA,EACR,UAAU,CAAC;AAAA;AAGN,IAAM,SAAiB;AAAA,EAC5B,QAAQ;AAAA,EACR,UAAU,CAAC,MAAM,KAAK,QAAQ,QAAQ,QAAQ;AAAA;AAGzC,IAAM,KAAa;AAAA,EACxB,QAAQ;AAAA,EACR,UAAU,CAAC,UAAU,KAAK,QAAQ,QAAQ,QAAQ;AAAA;AAG7C,IAAM,IAAY;AAAA,EACvB,QAAQ;AAAA,EACR,UAAU,CAAC,UAAU,MAAM,QAAQ,QAAQ,QAAQ;AAAA;AAG9C,IAAM,UAAiB;AAAA,EAC5B,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAIG,IAAM,OAAe;AAAA,EAC1B,QAAQ;AAAA,EACR,UAAU,CAAC,UAAU,MAAM,KAAK,QAAQ,QAAQ;AAAA,EAChD,YAAY;AAAA,IACV,MAAM,EAAE,MAAM,QAAQ,UAAU;AAAA,IAChC,OAAO,EAAE,MAAM;AAAA;AAAA;AAIZ,IAAM,OAAe;AAAA,EAC1B,QAAQ;AAAA,EACR,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,QAAQ,QAAQ,OAAO,UAAU;AAAA;AAAA,EAEpD,UAAU,MAAM,QAAQ;AACtB,UAAM,aAAa,KAAK,oBAAoB;AAC5C,WAAO,IAAI,IAAI,QAAQ,YAAY,CAAC,KAAK,WAAW;AAAA;AAAA;AAIjD,IAAM,OAAe;AAAA,EAC1B,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,QAAQ,UAAU;AAAA;AAAA,EAErC,UAAU,MAAM;AACd,WAAO,KAAK,WAAW;AAAA;AAAA;AAIpB,IAAM,YAAoB;AAAA,EAC/B,QAAQ;AAAA;AAGH,IAAM,YAAoB;AAAA,EAC/B,UAAU,OAAO,SAAS;AACxB,WAAO;AAAA;AAAA;AAIJ,IAAM,OAAe;AAAA,EAC1B,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,QAAQ,UAAU;AAAA;AAAA,EAGrC,UAAU,MAAM;AACd,WAAO,KAAK,WAAW,UACnB,IAAI,IAAI,KAAK,WAAW,SAAS,KAAK,UACtC;AAAA;AAAA;AAID,IAAM,QAAQ;;;AEjPd,gBAAgB,OAAY;AACjC,SAAO,UAAU,SAAS,UAAU,UAAa,UAAU;AAAA;AAG7D,0BAA0B,MAAY;AACpC,QAAM,aAA0B;AAAA,IAC9B,EAAE,WAAW,KAAK,WAAW,SAAS,UAAU;AAAA;AAElD,aAAW,SAAS,KAAK,UAAU;AACjC,QAAI,MAAM,SAAS,SAAS,MAAM,QAAQ;AACxC,iBAAW,KAAK;AAAA,QACd,WACE,aAAa,MAAM,aAAa,MAAM,WAAW,UAAU;AAAA,QAC7D,UAAU;AAAA;AAAA;AAET,iBAAW,WAAW,SAAS,GAAG,SAAS,KAAK;AAAA;AAGvD,SAAO;AAAA;AAGF,IAAM,QAAgB;AAAA,EAC3B,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,QAAQ,QAAQ;AAAA;AAAA,EAGnC,UAAU,MAAM,QAAQ;AACtB,UAAM,aAAa,iBAAiB;AACpC,eAAW,EAAE,WAAW,cAAc;AACpC,UAAI,OAAO;AACT,eAAO,SAAS,QAAQ,CAAC,UAAU,MAAM,UAAU;AACvD,WAAO;AAAA;AAAA;AAIJ,IAAM,UAAkB;AAAA,EAC7B,aAAa;AAAA,EACb,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,QAAQ,QAAQ;AAAA;AAAA;;;ACxC9B,IAAM,UAAkB;AAAA,EAC7B,aAAa;AAAA,EACb,YAAY;AAAA,IACV,MAAM,EAAE,MAAM,QAAQ,QAAQ,OAAO,UAAU;AAAA,IAC/C,WAAW,EAAE,MAAM,QAAQ,QAAQ;AAAA;AAAA,EAGrC,UAAU,MAAY,QAAgB;AACpC,UAAM,EAAE,WAAW,OAAO;AAC1B,UAAM,EAAE,MAAM,cAAc,KAAK;AACjC,UAAM,WAAyB,SAAS;AAExC,QAAI,CAAC;AAAS,aAAO;AAErB,UAAM,eAAe;AAAA,SAChB;AAAA,MACH,WAAW;AAAA,WACN,OAAO;AAAA,WACP;AAAA,SACF,uBAAuB;AAAA;AAAA;AAI5B,UAAM,oBAAoB,CAAC,SACzB,KAAK,QAAQ,cAAc,kBAAkB;AAE/C,WAAO,MAAM,QAAQ,YACjB,SAAQ,QAAQ,qBAChB,kBAAkB;AAAA;AAAA;;;AC5BnB,IAAM,SAAgB;AAAA,EAC3B,UAAU,CAAC;AAAA;;;ACCb,IAAO,eAAQ;AAAA,EACb,IAAI;AAAA,EACJ,MAAM;AAAA,EACN;AAAA,EACA;AAAA;;;ACLF,IAAM,MAAsB;AAAA,EAC1B,UAAU,YAAY;AACpB,WAAO,OAAO,OAAO,YAAY,MAAM,CAAC,MAAM,OAAO;AAAA;AAAA;AAIzD,IAAM,KAAqB;AAAA,EACzB,UAAU,YAAY;AACpB,WAAO,OAAO,OAAO,YAAY,KAAK,CAAC,MAAM,OAAO,QAAQ;AAAA;AAAA;AAIhE,IAAM,MAAsB;AAAA,EAC1B,YAAY;AAAA,IACV,GAAG,EAAE,UAAU;AAAA;AAAA,EAGjB,UAAU,YAAY;AACpB,WAAO,CAAC,OAAO,WAAW;AAAA;AAAA;AAI9B,IAAM,SAAyB;AAAA,EAC7B,UAAU,YAAY;AACpB,UAAM,SAAS,OAAO,OAAO;AAC7B,WAAO,OAAO,MAAM,CAAC,MAAM,MAAM,OAAO;AAAA;AAAA;AAI5C,IAAM,QAAwB;AAAA,EAC5B,UAAU,YAAY;AACpB,WAAO,KAAK,UAAU,WAAW,IAAI,MAAM;AAAA;AAAA;AAI/C,IAAM,YAA4B;AAAA,EAChC,UAAU,YAAY;AACpB,WAAO,WAAW,OAAO,SAAY,WAAW,KAAK,WAAW;AAAA;AAAA;AAIpE,IAAO,oBAAQ,EAAE,KAAK,IAAI,KAAK,QAAQ,SAAS,WAAW;;;AC5C3D,yBAAuB;AAEvB,IAAM,EAAE,eAAe,kCAAa;AAIpC,IAAM,eAAe,IAAI,IAAI;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAGa,gBAAgB,MAAmC;AAChE,MAAI,OAAO,SAAS;AAAU,WAAO,WAAW;AAEhD,MAAI,MAAM,QAAQ;AAAO,WAAO,KAAK,IAAI,QAAQ,KAAK;AAEtD,MAAI,SAAS,QAAQ,OAAO,SAAS;AAAU,WAAO;AAEtD,MAAI,KAAK,aAAa;AAAO,WAAO,KAAK;AAEzC,QAAM,EAAE,MAAM,YAAY,WAAW,OAAO;AAE5C,MAAI,CAAC;AAAM,WAAO,OAAO;AAEzB,MAAI,SAAS,IAAI;AACjB,aAAW,CAAC,GAAG,MAAM,OAAO,QAAQ,cAAc;AAChD,cAAU,IAAI,MAAM,WAAW,OAAO;AACxC,YAAU;AAEV,MAAI,aAAa,IAAI;AAAO,WAAO;AAEnC,MAAI,SAAS;AAAQ,cAAU,OAAO;AACtC,YAAU,KAAK;AAEf,SAAO;AAAA;;;AC1CF,iBACL,MACA,YACoB;AACpB,SAAO,OAAO,SAAS,WACnB,aACA,KAAK,OAAO,KAAK,GAAG,gBACpB,OACA,sBAAsB,WACtB,WAAW,QACX,WAAW;AAAA;;;ACLF,iBACb,MACA,OACA,EAAE,aAAa,OAAO,IACtB,KACA;AACA,sBAAoB,OAAiB;AACnC,QAAI,SAAS,QAAQ,OAAO,UAAU;AAAU,aAAO;AAEvD,QAAI,MAAM,QAAQ;AAAQ,aAAO,MAAM,IAAI,CAAC,UAAS,WAAW;AAEhE,QAAI,CAAC,OAAO,OAAO,SAAS,MAAM;AAAW,aAAO,QAAO;AAE3D,QAAI,OAAO,UAAU;AAAU,aAAO;AAEtC,UAAM,SAAiC;AACvC,eAAW,CAAC,GAAG,MAAM,OAAO,QAAQ;AAAQ,aAAO,KAAK,WAAW;AACnE,WAAO;AAAA;AAGT,mBAAgB,OAAsC;AACpD,QAAI,MAAM,QAAQ;AAChB,aAAO,MAAM,cAAc,MAAM,UAAU,MAAM,GAAG,MAAK,IAAI;AAE/D,QAAI,UAAS,QAAQ,OAAO,UAAS;AAAU,aAAO;AAEtD,QAAI,MAAK,aAAa;AAAO,aAAO,MAAM,MAAK,SAAS,MAAK;AAE7D,UAAM;AAAA,MACJ;AAAA,MACA,YAAY,EAAE,OAAO,cAAc,UAAU;AAAA,MAC7C,WAAW;AAAA,QACT;AAEJ,QAAI;AAAW,YAAM,YAAY;AAEjC,WAAO,MAAM,cACX,QAAQ,MAAM,aACd,OAAO,KAAK,OAAO,UAAU,IAAI,OAAO,WAAW,QACnD,GAAG,SAAS,IAAI;AAAA;AAIpB,SAAO,QAAO;AAAA;;;ACjDD,qBACb,MACA,KACQ;AACR,uBAAqB,UAAwC;AAC3D,WAAO,SAAS,IAAI,SAAQ,KAAK;AAAA;AAGnC,sBAAoB,OAAiB;AACnC,QAAI,SAAS,QAAQ,OAAO,UAAU;AACpC,aAAO,KAAK,UAAU;AAExB,QAAI,MAAM,QAAQ;AAChB,aAAO,IAAI,MAAM,IAAI,CAAC,UAAS,WAAW,QAAO,KAAK;AAExD,QAAI,CAAC,OAAO,OAAO,SAAS,MAAM;AAAW,aAAO,QAAO;AAE3D,QAAI,OAAO,UAAU;AAAU,aAAO,KAAK,UAAU;AAErD,UAAM,SAAS,OAAO,QAAQ,OAC3B,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,UAAU,IAAI,WAAW,IAAI,KAAK,OACxD,KAAK;AAER,WAAO,IAAI;AAAA;AAGb,mBAAgB,OAAmC;AACjD,QAAI,MAAM,QAAQ;AAChB,aAAO,6CAA6C,YAAY;AAElE,QAAI,UAAS,QAAQ,OAAO,UAAS;AAAU,aAAO,KAAK,UAAU;AAErE,QAAI,MAAK,aAAa;AAAO,aAAO,MAAM,MAAK,SAAS,MAAK,WAAW;AAExE,UAAM;AAAA,MACJ;AAAA,MACA,YAAY,EAAE,OAAO,cAAc,UAAU;AAAA,MAC7C,WAAW;AAAA,QACT;AAEJ,QAAI;AAAW,YAAM,YAAY;AAEjC,WAAO;AAAA,cACG,KAAK,UAAU;AAAA,MACvB,OAAO,KAAK,OAAO,UAAU,IAAI,SAAS,WAAW;AAAA,MACrD,YAAY;AAAA;AAGhB,SAAO;AAAA;AAAA,MAEH;AAAA,aACO,QAAO;AAAA;AAAA;AAAA;;;AClDpB,IAAO,oBAAQ,EAAE,cAAM,gBAAO;;;ACQ9B,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAKK,sBACL,MACA,OACA,QAC6B;AAC7B,MAAI,CAAC;AAAM,WAAO;AAElB,MAAI,YAAI,WAAW,UAAU,OAAO,YAAY,mBAAmB;AACjE,UAAM,SAAS,OAAO,YAAY,MAAM;AACxC,WAAO,CAAC,QAAQ,UACZ,OACA,MAAM,QAAQ,OAAO,WACrB,OAAO,QAAQ,KAAK,CAAC,MAAM,MAAM,UAAU,SAC3C,OAAO,YAAY;AAAA;AAGzB,MAAI,YAAI,MAAM;AAAQ,WAAO;AAE7B,MAAI,MAAM,QAAQ;AAChB,WAAO,KAAK,KAAK,CAAC,MAAM,aAAa,GAAG,OAAO;AAEjD,MAAI,OAAO,SAAS;AAAU,WAAO,aAAa;AAElD,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,WAAgB,IAAI;AAC1B,QAAI,SAAS,UAAU;AACrB,aAAO,SAAS,SAAS,OAAO;AAAA;AAAA;AAIpC,SAAO,SAAS,QAAQ,MAAM,gBAAgB;AAAA;AAGhD,sBAAsB,MAAyB;AAC7C,MAAI,OAAO,SAAS;AAAU,WAAO;AAErC,MAAI,MAAM,QAAQ;AAAO,WAAO,KAAK,IAAI,cAAc,KAAK;AAE5D,SAAO,KAAK;AAAA;AAGd,0BAA0B,IAAc,QAAmC;AACzE,QAAM,SAAS,OAAO,YAAY,GAAG;AACrC,QAAM,SAA4B;AAElC,MAAI,CAAC;AACH,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS,uBAAuB,GAAG;AAAA;AAAA;AAIzC,MAAI,OAAO;AAAU,WAAO,KAAK,GAAG,OAAO,SAAS,IAAI;AAExD,MAAI,OAAO,YAAY;AACrB,eAAW,CAAC,KAAK,UAAU,OAAO,QAAQ,GAAG,aAAa;AACxD,YAAM,QAAQ,OAAO,aAAa;AAElC,UAAI,CAAC,OAAO;AACV,eAAO,KAAK;AAAA,UACV,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,SAAS,sBAAsB;AAAA;AAGjC;AAAA;AAGF,UAAI,YAAI,MAAM,UAAU,CAAC,YAAI,WAAW;AAAQ;AAEhD,UAAI,MAAM,MAAM;AACd,cAAM,QAAQ,aAAa,MAAM,MAAM,OAAO;AAC9C,YAAI,UAAU,OAAO;AACnB,iBAAO,KAAK;AAAA,YACV,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,SAAS,cAAc,YACrB,GAAG,uBACc,aAAa,MAAM;AAAA;AAAA,mBAE/B,MAAM,QAAQ,QAAQ;AAC/B,iBAAO,KAAK,GAAG;AAAA;AAAA;AAAA;AAAA;AAMvB,aAAW,CAAC,KAAK,EAAE,eAAe,OAAO,QAAQ,OAAO,cAAc;AACpE,QAAI,YAAY,GAAG,WAAW,SAAS;AACrC,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS,+BAA+B;AAAA;AAG9C,SAAO;AAAA;AAGM,kBAAkB,MAAY,QAAgB;AAC3D,QAAM,SAAS,KAAK,WAAW;AAC/B,QAAM,SAA4B,CAAC,GAAI,KAAK,UAAU;AAEtD,MAAI,CAAC,QAAQ;AACX,WAAO,KAAK;AAAA,MACV,IAAI,KAAK,MAAM,kBAAkB;AAAA,MACjC,OAAO;AAAA,MACP,SAAS,KAAK,MACV,kBAAkB,KAAK,SACvB,mBAAmB,KAAK;AAAA;AAG9B,WAAO;AAAA;AAGT,MAAI,OAAO,eAAe,KAAK,SAAS,SAAS;AAC/C,WAAO,KAAK;AAAA,MACV,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,QAAQ,KAAK;AAAA;AAG1B,QAAM,aAAa;AAAA,OACd;AAAA,OACA,OAAO;AAAA;AAGZ,MAAI,OAAO;AAAU,WAAO,KAAK,GAAG,OAAO,SAAS,MAAM;AAE1D,WAAS,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,aAAa;AACxD,UAAM,SAAS,WAAW;AAE1B,QAAI,CAAC,QAAQ;AACX,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS,sBAAsB;AAAA;AAGjC;AAAA;AAGF,QAAI,EAAE,MAAM,SAAS,eAAe;AAEpC,QAAI,YAAI,MAAM,QAAQ;AACpB,UAAI,YAAI,WAAW,UAAU,OAAO,YAAY;AAC9C,eAAO,KAAK,GAAG,iBAAiB,OAAO;AAAA;AACpC;AAAA;AAGP,YAAQ;AACR,QAAI,QAAQ,QAAQ,MAAM,MAAM;AAC9B,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA;AAGb,QAAI,MAAM;AACR,YAAM,QAAQ,aAAa,MAAM,OAAO;AACxC,UAAI,UAAU,OAAO;AACnB,eAAO,KAAK;AAAA,UACV,IAAI;AAAA,UACJ,OAAO,cAAc;AAAA,UACrB,SAAS,cAAc,sBAAsB,aAAa;AAAA;AAAA;AAG9D,UAAI,MAAM,QAAQ,QAAQ;AACxB,eAAO,KAAK,GAAG;AAAA;AAAA;AAInB,QAAI,OAAO,YAAY;AAAY,gBAAU,QAAQ;AAErD,QAAI,MAAM,QAAQ,YAAY,CAAC,QAAQ,SAAS;AAC9C,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,OAAO,cAAc;AAAA,QACrB,SAAS,cAAc,0BAA0B,KAAK,UACpD;AAAA;AAIN,QAAI,mBAAmB,UAAU,CAAC,QAAQ,KAAK;AAC7C,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,OAAO,cAAc;AAAA,QACrB,SAAS,cAAc,mBAAmB;AAAA;AAAA;AAIhD,aAAW,CAAC,KAAK,EAAE,eAAe,OAAO,QAAQ;AAC/C,QAAI,YAAY,KAAK,WAAW,SAAS;AACvC,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS,+BAA+B;AAAA;AAG9C,aAAW,EAAE,UAAU,KAAK,UAAU;AACpC,QAAI,OAAO,YAAY,SAAS,WAAW,CAAC,OAAO,SAAS,SAAS;AACnE,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS,eAAe,aAAa,KAAK,OAAO,KAAK;AAAA;AAAA;AAI5D,SAAO;AAAA;;;AClNT,IAAM,YAAY,IAAI;AAEtB,qBAAqB,SAAiB,IAAY;AAChD,SAAO;AAAA,OACF;AAAA,IACH,MAAM;AAAA,SACD;AAAA,SACA,OAAO;AAAA;AAAA,IAEZ,OAAO;AAAA,SACF;AAAA,SACA,OAAO;AAAA;AAAA,IAEZ,WAAW;AAAA,SACN;AAAA,SACA,OAAO;AAAA;AAAA;AAAA;AAKT,gBAAe,SAA2B,MAAqB;AACpE,MAAI,OAAO,YAAY;AAAU,cAAU,UAAU,SAAS;AAC9D,SAAO,OAAO,SAAS;AAAA;AAWlB,kBACL,SACA,QACK;AACL,MAAI,MAAM,QAAQ;AAChB,WAAO,QAAQ,QAAQ,CAAC,UAAU,MAAM,QAAQ;AAElD,SAAO,QAAQ,QAAQ;AAAA;AAWlB,oBACL,OACA,SACK;AACL,QAAM,SAAS,YAAY;AAC3B,QAAM,UAAU,SAAQ,OAAO;AAE/B,MAAI,MAAM,QAAQ;AAChB,WAAO,QAAQ,QAAQ,CAAC,UAAU,MAAM,UAAU;AACpD,SAAO,QAAQ,UAAU;AAAA;AAGpB,mBACL,SACA,SACiB;AACjB,QAAM,SAAS,YAAY;AAE3B,QAAM,SAAS;AACf,aAAW,QAAQ,CAAC,SAAS,GAAG,QAAQ,SAAS;AAC/C,UAAM,EAAE,MAAM,OAAO,aAAa;AAClC,UAAM,SAAS,SAAU,MAAM;AAE/B,eAAW,UAAS;AAAQ,aAAO,KAAK,EAAE,MAAM,OAAO,UAAU;AAAA;AAGnE,SAAO;AAAA;AAGF,uBACL,MACA,aAAa,OACV,UACH;AACA,SAAO,EAAE,MAAM,YAAY;AAAA;AAG7B,IAAO,kBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;",
661− "names": []
662− }
663−diff --git a/node_modules/@markdoc/markdoc/dist/react.js b/node_modules/@markdoc/markdoc/dist/react.js
664−index 18aebbc..80d39d9 100644
665−--- a/node_modules/@markdoc/markdoc/dist/react.js
666−+++ b/node_modules/@markdoc/markdoc/dist/react.js
667−@@ -4,13 +4,13 @@ function tagName(name, components) {
668− }
669−
670− // src/renderers/react/react.ts
671−-function dynamic(node, React, { components = {} } = {}) {
672−+function dynamic(node, React, { components = {} } = {}, raw) {
673− function deepRender(value) {
674− if (value == null || typeof value !== "object")
675− return value;
676− if (Array.isArray(value))
677− return value.map((item) => deepRender(item));
678−- if (value.$$mdtype === "Tag")
679−+ if (["Tag", "Raw"].includes(value.$$mdtype))
680− return render(value);
681− if (typeof value !== "object")
682− return value;
683−@@ -24,6 +24,8 @@ function dynamic(node, React, { components = {} } = {}) {
684− return React.createElement(React.Fragment, null, ...node2.map(render));
685− if (node2 === null || typeof node2 !== "object")
686− return node2;
687−+ if (node2.$$mdtype === "Raw")
688−+ return raw?.(node2.content, node2.inline);
689− const {
690− name,
691− attributes: { class: className, ...attrs } = {},
692−diff --git a/node_modules/@markdoc/markdoc/dist/react.js.map b/node_modules/@markdoc/markdoc/dist/react.js.map
693−index d8e7ba9..9b904eb 100644
694−--- a/node_modules/@markdoc/markdoc/dist/react.js.map
695−+++ b/node_modules/@markdoc/markdoc/dist/react.js.map
696−@@ -1,7 +1,7 @@
697− {
698− "version": 3,
699− "sources": ["../src/renderers/react/shared.ts", "../src/renderers/react/react.ts"],
700−- "sourcesContent": ["import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {}\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n"],
701−- "mappings": ";AAIO,iBACL,MACA,YACoB;AACpB,SAAO,OAAO,SAAS,WACnB,aACA,KAAK,OAAO,KAAK,GAAG,gBACpB,OACA,sBAAsB,WACtB,WAAW,QACX,WAAW;AAAA;;;ACLF,iBACb,MACA,OACA,EAAE,aAAa,OAAO,IACtB;AACA,sBAAoB,OAAiB;AACnC,QAAI,SAAS,QAAQ,OAAO,UAAU;AAAU,aAAO;AAEvD,QAAI,MAAM,QAAQ;AAAQ,aAAO,MAAM,IAAI,CAAC,SAAS,WAAW;AAEhE,QAAI,MAAM,aAAa;AAAO,aAAO,OAAO;AAE5C,QAAI,OAAO,UAAU;AAAU,aAAO;AAEtC,UAAM,SAAiC;AACvC,eAAW,CAAC,GAAG,MAAM,OAAO,QAAQ;AAAQ,aAAO,KAAK,WAAW;AACnE,WAAO;AAAA;AAGT,kBAAgB,OAAsC;AACpD,QAAI,MAAM,QAAQ;AAChB,aAAO,MAAM,cAAc,MAAM,UAAU,MAAM,GAAG,MAAK,IAAI;AAE/D,QAAI,UAAS,QAAQ,OAAO,UAAS;AAAU,aAAO;AAEtD,UAAM;AAAA,MACJ;AAAA,MACA,YAAY,EAAE,OAAO,cAAc,UAAU;AAAA,MAC7C,WAAW;AAAA,QACT;AAEJ,QAAI;AAAW,YAAM,YAAY;AAEjC,WAAO,MAAM,cACX,QAAQ,MAAM,aACd,OAAO,KAAK,OAAO,UAAU,IAAI,OAAO,WAAW,QACnD,GAAG,SAAS,IAAI;AAAA;AAIpB,SAAO,OAAO;AAAA;",
702−+ "sourcesContent": ["import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {},\n raw?: (content: string, inline: boolean) => ReactNode\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n"],
703−+ "mappings": ";AAIO,iBACL,MACA,YACoB;AACpB,SAAO,OAAO,SAAS,WACnB,aACA,KAAK,OAAO,KAAK,GAAG,gBACpB,OACA,sBAAsB,WACtB,WAAW,QACX,WAAW;AAAA;;;ACLF,iBACb,MACA,OACA,EAAE,aAAa,OAAO,IACtB,KACA;AACA,sBAAoB,OAAiB;AACnC,QAAI,SAAS,QAAQ,OAAO,UAAU;AAAU,aAAO;AAEvD,QAAI,MAAM,QAAQ;AAAQ,aAAO,MAAM,IAAI,CAAC,SAAS,WAAW;AAEhE,QAAI,CAAC,OAAO,OAAO,SAAS,MAAM;AAAW,aAAO,OAAO;AAE3D,QAAI,OAAO,UAAU;AAAU,aAAO;AAEtC,UAAM,SAAiC;AACvC,eAAW,CAAC,GAAG,MAAM,OAAO,QAAQ;AAAQ,aAAO,KAAK,WAAW;AACnE,WAAO;AAAA;AAGT,kBAAgB,OAAsC;AACpD,QAAI,MAAM,QAAQ;AAChB,aAAO,MAAM,cAAc,MAAM,UAAU,MAAM,GAAG,MAAK,IAAI;AAE/D,QAAI,UAAS,QAAQ,OAAO,UAAS;AAAU,aAAO;AAEtD,QAAI,MAAK,aAAa;AAAO,aAAO,MAAM,MAAK,SAAS,MAAK;AAE7D,UAAM;AAAA,MACJ;AAAA,MACA,YAAY,EAAE,OAAO,cAAc,UAAU;AAAA,MAC7C,WAAW;AAAA,QACT;AAEJ,QAAI;AAAW,YAAM,YAAY;AAEjC,WAAO,MAAM,cACX,QAAQ,MAAM,aACd,OAAO,KAAK,OAAO,UAAU,IAAI,OAAO,WAAW,QACnD,GAAG,SAAS,IAAI;AAAA;AAIpB,SAAO,OAAO;AAAA;",
704− "names": []
705− }
706−diff --git a/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts b/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts
707−new file mode 100644
708−index 0000000..d89ea0c
709−--- /dev/null
710−+++ b/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts
711−@@ -0,0 +1,7 @@
712−+export default class Raw {
713−+ readonly $$mdtype: "Raw";
714−+ content: string;
715−+ inline: boolean;
716−+ constructor(content: string, inline: boolean);
717−+}
718−+//# sourceMappingURL=raw.d.ts.map
719−\ No newline at end of file
720−diff --git a/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts.map
721−new file mode 100644
722−index 0000000..29dd5ef
723−--- /dev/null
724−+++ b/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts.map
725−@@ -0,0 +1 @@
726−+{"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../../src/ast/raw.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,GAAG;IACpB,QAAQ,CAAC,QAAQ,QAAkB;IAEnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;gBAEJ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CAI7C"}
727−\ No newline at end of file
728−diff --git a/node_modules/@markdoc/markdoc/dist/src/parser.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/parser.d.ts.map
729−index 142cac5..14bd44c 100644
730−--- a/node_modules/@markdoc/markdoc/dist/src/parser.d.ts.map
731−+++ b/node_modules/@markdoc/markdoc/dist/src/parser.d.ts.map
732−@@ -1 +1 @@
733−-{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,YAAY,CAAC;AAK9B,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAuI/C,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,QAiB5D"}
734−\ No newline at end of file
735−+{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,YAAY,CAAC;AAK9B,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AA0I/C,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,QAiB5D"}
736−\ No newline at end of file
737−diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/html.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/renderers/html.d.ts.map
738−index 7be1b51..44d71b3 100644
739−--- a/node_modules/@markdoc/markdoc/dist/src/renderers/html.d.ts.map
740−+++ b/node_modules/@markdoc/markdoc/dist/src/renderers/html.d.ts.map
741−@@ -1 +1 @@
742−-{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/renderers/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAsBpD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAsBhE"}
743−\ No newline at end of file
744−+{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/renderers/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAsBpD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAwBhE"}
745−\ No newline at end of file
746−diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts b/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts
747−index 7875013..31545f8 100644
748−--- a/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts
749−+++ b/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts
750−@@ -6,6 +6,6 @@ declare type ReactShape = Readonly<{
751− }>;
752− export default function dynamic(node: RenderableTreeNodes, React: ReactShape, { components }?: {
753− components?: {} | undefined;
754−-}): ReactNode;
755−+}, raw?: (content: string, inline: boolean) => ReactNode): ReactNode;
756− export {};
757− //# sourceMappingURL=react.d.ts.map
758−\ No newline at end of file
759−diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts.map
760−index 45e1f88..a38ac3e 100644
761−--- a/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts.map
762−+++ b/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts.map
763−@@ -1 +1 @@
764−-{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../../src/renderers/react/react.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAU,MAAM,aAAa,CAAC;AAE/D,aAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,OAAO,CAC7B,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,UAAU,EACjB,EAAE,UAAe,EAAE;;CAAK,aAsCzB"}
765−\ No newline at end of file
766−+{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../../src/renderers/react/react.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAU,MAAM,aAAa,CAAC;AAE/D,aAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,OAAO,CAC7B,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,UAAU,EACjB,EAAE,UAAe,EAAE;;CAAK,EACxB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,SAAS,aAwCtD"}
767−\ No newline at end of file
768−diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts b/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts
769−index 63f862f..23045ff 100644
770−--- a/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts
771−+++ b/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts
772−@@ -1,3 +1,3 @@
773− import type { RenderableTreeNodes } from '../../types';
774−-export default function reactStatic(node: RenderableTreeNodes): string;
775−+export default function reactStatic(node: RenderableTreeNodes, raw?: (content: string, inline: boolean) => string): string;
776− //# sourceMappingURL=static.d.ts.map
777−\ No newline at end of file
778−diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts.map
779−index f2f9e9f..721699f 100644
780−--- a/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts.map
781−+++ b/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts.map
782−@@ -1 +1 @@
783−-{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../../../src/renderers/react/static.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA2C3E,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAOrE"}
784−\ No newline at end of file
785−+{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../../../src/renderers/react/static.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,IAAI,EAAE,mBAAmB,EACzB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,GACjD,MAAM,CAmDR"}
786−\ No newline at end of file
787−diff --git a/node_modules/@markdoc/markdoc/dist/src/schema.d.ts b/node_modules/@markdoc/markdoc/dist/src/schema.d.ts
788−index 68cebb9..181dfe9 100644
789−--- a/node_modules/@markdoc/markdoc/dist/src/schema.d.ts
790−+++ b/node_modules/@markdoc/markdoc/dist/src/schema.d.ts
791−@@ -23,5 +23,6 @@ export declare const code: Schema;
792− export declare const text: Schema;
793− export declare const hardbreak: Schema;
794− export declare const softbreak: Schema;
795−+export declare const html: Schema;
796− export declare const error: {};
797− //# sourceMappingURL=schema.d.ts.map
798−\ No newline at end of file
799−diff --git a/node_modules/@markdoc/markdoc/dist/src/schema.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/schema.d.ts.map
800−index 5dfd3df..08a856a 100644
801−--- a/node_modules/@markdoc/markdoc/dist/src/schema.d.ts.map
802−+++ b/node_modules/@markdoc/markdoc/dist/src/schema.d.ts.map
803−@@ -1 +1 @@
804−-{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,eAAO,MAAM,QAAQ,EAAE,MAgBtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAYrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAGvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAOnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAenB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAaxB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAclB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAYlB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAEhB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAEnB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAmBhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAMhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAGhB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAGnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAGnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAGpB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAGhB,CAAC;AAEF,eAAO,MAAM,CAAC,EAAE,MAGf,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAapB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAOlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MASlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAOlB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAEvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAIvB,CAAC;AAEF,eAAO,MAAM,KAAK,IAAK,CAAC"}
805−\ No newline at end of file
806−+{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAItC,eAAO,MAAM,QAAQ,EAAE,MAgBtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAYrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAGvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAOnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAenB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAaxB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAclB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAYlB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAEhB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAEnB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAmBhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAMhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAGhB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAGnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAGnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAGpB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAGhB,CAAC;AAEF,eAAO,MAAM,CAAC,EAAE,MAGf,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAapB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAOlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MASlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAOlB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAEvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAIvB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAUlB,CAAC;AAEF,eAAO,MAAM,KAAK,IAAK,CAAC"}
807−\ No newline at end of file
808−diff --git a/node_modules/@markdoc/markdoc/dist/src/tags/index.d.ts b/node_modules/@markdoc/markdoc/dist/src/tags/index.d.ts
809−index d93a2df..3af6bfb 100644
810−--- a/node_modules/@markdoc/markdoc/dist/src/tags/index.d.ts
811−+++ b/node_modules/@markdoc/markdoc/dist/src/tags/index.d.ts
812−@@ -1,39 +1,39 @@
813− declare const _default: {
814−- if: import("../types").Schema<Readonly<Partial<{
815−- nodes: Partial<Record<import("../types").NodeType, import("../types").Schema<Readonly<Partial<any>>, string>>>;
816−- tags: Record<string, import("../types").Schema<Readonly<Partial<any>>, string>>;
817−+ if: import("@markdoc/markdoc").Schema<Readonly<Partial<{
818−+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
819−+ tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
820− variables: Record<string, any>;
821−- functions: Record<string, import("../types").ConfigFunction>;
822−+ functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
823− partials: Record<string, any>;
824− validation?: {
825− validateFunctions?: boolean | undefined;
826− } | undefined;
827− }>>, string>;
828−- else: import("../types").Schema<Readonly<Partial<{
829−- nodes: Partial<Record<import("../types").NodeType, import("../types").Schema<Readonly<Partial<any>>, string>>>;
830−- tags: Record<string, import("../types").Schema<Readonly<Partial<any>>, string>>;
831−+ else: import("@markdoc/markdoc").Schema<Readonly<Partial<{
832−+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
833−+ tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
834− variables: Record<string, any>;
835−- functions: Record<string, import("../types").ConfigFunction>;
836−+ functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
837− partials: Record<string, any>;
838− validation?: {
839− validateFunctions?: boolean | undefined;
840− } | undefined;
841− }>>, string>;
842−- partial: import("../types").Schema<Readonly<Partial<{
843−- nodes: Partial<Record<import("../types").NodeType, import("../types").Schema<Readonly<Partial<any>>, string>>>;
844−- tags: Record<string, import("../types").Schema<Readonly<Partial<any>>, string>>;
845−+ partial: import("@markdoc/markdoc").Schema<Readonly<Partial<{
846−+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
847−+ tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
848− variables: Record<string, any>;
849−- functions: Record<string, import("../types").ConfigFunction>;
850−+ functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
851− partials: Record<string, any>;
852− validation?: {
853− validateFunctions?: boolean | undefined;
854− } | undefined;
855− }>>, string>;
856−- table: import("../types").Schema<Readonly<Partial<{
857−- nodes: Partial<Record<import("../types").NodeType, import("../types").Schema<Readonly<Partial<any>>, string>>>;
858−- tags: Record<string, import("../types").Schema<Readonly<Partial<any>>, string>>;
859−+ table: import("@markdoc/markdoc").Schema<Readonly<Partial<{
860−+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
861−+ tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
862− variables: Record<string, any>;
863−- functions: Record<string, import("../types").ConfigFunction>;
864−+ functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
865− partials: Record<string, any>;
866− validation?: {
867− validateFunctions?: boolean | undefined;
868−diff --git a/node_modules/@markdoc/markdoc/dist/src/tokenizer/index.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/tokenizer/index.d.ts.map
869−index b64c092..9a2cf05 100644
870−--- a/node_modules/@markdoc/markdoc/dist/src/tokenizer/index.d.ts.map
871−+++ b/node_modules/@markdoc/markdoc/dist/src/tokenizer/index.d.ts.map
872−@@ -1 +1 @@
873−-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tokenizer/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,OAAO,CAAC,MAAM,CAAa;gBAGzB,MAAM,GAAE,UAAU,CAAC,OAAO,GAAG;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAO;IAQlE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE;CAGnC"}
874−\ No newline at end of file
875−+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tokenizer/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,OAAO,CAAC,MAAM,CAAa;gBAGzB,MAAM,GAAE,UAAU,CAAC,OAAO,GAAG;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAO;IASlE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE;CAGnC"}
876−\ No newline at end of file
877−diff --git a/node_modules/@markdoc/markdoc/dist/src/types.d.ts b/node_modules/@markdoc/markdoc/dist/src/types.d.ts
878−index 802c687..0357804 100644
879−--- a/node_modules/@markdoc/markdoc/dist/src/types.d.ts
880−+++ b/node_modules/@markdoc/markdoc/dist/src/types.d.ts
881−@@ -1,6 +1,7 @@
882− import type Func from './ast/function';
883− import type Node from './ast/node';
884− import type Tag from './ast/tag';
885−+import type Raw from './ast/raw';
886− export type { Node, Tag };
887− export declare type Function = Func;
888− export interface AstType {
889−@@ -48,7 +49,7 @@ export declare type LocationEdge = {
890− };
891− export declare type NodeType = 'document' | 'heading' | 'paragraph' | 'blockquote' | 'hr' | 'image' | 'fence' | 'tag' | 'list' | 'item' | 'table' | 'thead' | 'tbody' | 'tr' | 'td' | 'th' | 'inline' | 'strong' | 'em' | 's' | 'link' | 'code' | 'text' | 'hardbreak' | 'softbreak';
892− export declare type Primitive = null | boolean | number | string;
893−-export declare type RenderableTreeNode = Tag | string | null;
894−+export declare type RenderableTreeNode = Tag | Raw | string | null;
895− export declare type RenderableTreeNodes = RenderableTreeNode | RenderableTreeNode[];
896− export declare type Scalar = Primitive | Scalar[] | {
897− [key: string]: Scalar;
898−diff --git a/node_modules/@markdoc/markdoc/dist/src/types.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/types.d.ts.map
899−index 197fd8e..6014cce 100644
900−--- a/node_modules/@markdoc/markdoc/dist/src/types.d.ts.map
901−+++ b/node_modules/@markdoc/markdoc/dist/src/types.d.ts.map
902−@@ -1 +1 @@
903−-{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
904−\ No newline at end of file
905−+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
906−\ No newline at end of file
907−diff --git a/node_modules/@markdoc/markdoc/index.ts b/node_modules/@markdoc/markdoc/index.ts
908−index 3fc8b83..7961632 100644
909−--- a/node_modules/@markdoc/markdoc/index.ts
910−+++ b/node_modules/@markdoc/markdoc/index.ts
911−@@ -12,6 +12,7 @@ import transformer from './src/transformer';
912− import validator from './src/validator';
913− import { parseTags } from './src/utils';
914− import transforms from './src/transforms/index';
915−+import Raw from '@markdoc/markdoc/src/ast/raw';
916−
917− import type Token from 'markdown-it/lib/token';
918− import type { Config, RenderableTreeNode, ValidateError } from './src/types';
919−@@ -114,6 +115,7 @@ export default {
920− transforms,
921− Ast,
922− Tag,
923−+ Raw,
924− Tokenizer,
925− parseTags,
926− transformer,
927−@@ -133,6 +135,7 @@ export {
928− renderers,
929− Ast,
930− Tag,
931−+ Raw,
932− Tokenizer,
933− parseTags,
934− transformer,
935−diff --git a/node_modules/@markdoc/markdoc/patches/markdown-it+12.3.2.patch b/node_modules/@markdoc/markdoc/patches/markdown-it+12.3.2.patch
936−new file mode 100644
937−index 0000000..c6c9c4f
938−--- /dev/null
939−+++ b/node_modules/@markdoc/markdoc/patches/markdown-it+12.3.2.patch
940−@@ -0,0 +1,216 @@
941−+diff --git a/node_modules/markdown-it/lib/rules_block/blockquote.js b/node_modules/markdown-it/lib/rules_block/blockquote.js
942−+index a02699a..400f67b 100644
943−+--- a/node_modules/markdown-it/lib/rules_block/blockquote.js
944−++++ b/node_modules/markdown-it/lib/rules_block/blockquote.js
945−+@@ -31,7 +31,7 @@ module.exports = function blockquote(state, startLine, endLine, silent) {
946−+ max = state.eMarks[startLine];
947−+
948−+ // if it's indented more than 3 spaces, it should be a code block
949−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
950−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
951−+
952−+ // check the block quote marker
953−+ if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }
954−+diff --git a/node_modules/markdown-it/lib/rules_block/code.js b/node_modules/markdown-it/lib/rules_block/code.js
955−+index 018e019..e6bf920 100644
956−+--- a/node_modules/markdown-it/lib/rules_block/code.js
957−++++ b/node_modules/markdown-it/lib/rules_block/code.js
958−+@@ -4,6 +4,8 @@
959−+
960−+
961−+ module.exports = function code(state, startLine, endLine/*, silent*/) {
962−++ if (state.md.options.allowIndentation) { return false; }
963−++
964−+ var nextLine, last, token;
965−+
966−+ if (state.sCount[startLine] - state.blkIndent < 4) { return false; }
967−+diff --git a/node_modules/markdown-it/lib/rules_block/fence.js b/node_modules/markdown-it/lib/rules_block/fence.js
968−+index 44f1538..f726fb5 100644
969−+--- a/node_modules/markdown-it/lib/rules_block/fence.js
970−++++ b/node_modules/markdown-it/lib/rules_block/fence.js
971−+@@ -10,7 +10,7 @@ module.exports = function fence(state, startLine, endLine, silent) {
972−+ max = state.eMarks[startLine];
973−+
974−+ // if it's indented more than 3 spaces, it should be a code block
975−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
976−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
977−+
978−+ if (pos + 3 > max) { return false; }
979−+
980−+@@ -63,7 +63,7 @@ module.exports = function fence(state, startLine, endLine, silent) {
981−+
982−+ if (state.src.charCodeAt(pos) !== marker) { continue; }
983−+
984−+- if (state.sCount[nextLine] - state.blkIndent >= 4) {
985−++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {
986−+ // closing fence should be indented less than 4 spaces
987−+ continue;
988−+ }
989−+diff --git a/node_modules/markdown-it/lib/rules_block/heading.js b/node_modules/markdown-it/lib/rules_block/heading.js
990−+index 9863f48..bd2123a 100644
991−+--- a/node_modules/markdown-it/lib/rules_block/heading.js
992−++++ b/node_modules/markdown-it/lib/rules_block/heading.js
993−+@@ -11,7 +11,7 @@ module.exports = function heading(state, startLine, endLine, silent) {
994−+ max = state.eMarks[startLine];
995−+
996−+ // if it's indented more than 3 spaces, it should be a code block
997−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
998−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
999−+
1000−+ ch = state.src.charCodeAt(pos);
1001−+
1002−+diff --git a/node_modules/markdown-it/lib/rules_block/hr.js b/node_modules/markdown-it/lib/rules_block/hr.js
1003−+index a3bb14e..5d90d60 100644
1004−+--- a/node_modules/markdown-it/lib/rules_block/hr.js
1005−++++ b/node_modules/markdown-it/lib/rules_block/hr.js
1006−+@@ -11,7 +11,7 @@ module.exports = function hr(state, startLine, endLine, silent) {
1007−+ max = state.eMarks[startLine];
1008−+
1009−+ // if it's indented more than 3 spaces, it should be a code block
1010−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1011−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1012−+
1013−+ marker = state.src.charCodeAt(pos++);
1014−+
1015−+diff --git a/node_modules/markdown-it/lib/rules_block/html_block.js b/node_modules/markdown-it/lib/rules_block/html_block.js
1016−+index 2f17675..41ac35f 100644
1017−+--- a/node_modules/markdown-it/lib/rules_block/html_block.js
1018−++++ b/node_modules/markdown-it/lib/rules_block/html_block.js
1019−+@@ -26,7 +26,7 @@ module.exports = function html_block(state, startLine, endLine, silent) {
1020−+ max = state.eMarks[startLine];
1021−+
1022−+ // if it's indented more than 3 spaces, it should be a code block
1023−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1024−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1025−+
1026−+ if (!state.md.options.html) { return false; }
1027−+
1028−+diff --git a/node_modules/markdown-it/lib/rules_block/lheading.js b/node_modules/markdown-it/lib/rules_block/lheading.js
1029−+index 19bdc39..3c9d9ab 100644
1030−+--- a/node_modules/markdown-it/lib/rules_block/lheading.js
1031−++++ b/node_modules/markdown-it/lib/rules_block/lheading.js
1032−+@@ -9,7 +9,7 @@ module.exports = function lheading(state, startLine, endLine/*, silent*/) {
1033−+ terminatorRules = state.md.block.ruler.getRules('paragraph');
1034−+
1035−+ // if it's indented more than 3 spaces, it should be a code block
1036−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1037−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1038−+
1039−+ oldParentType = state.parentType;
1040−+ state.parentType = 'paragraph'; // use paragraph to match terminatorRules
1041−+@@ -18,7 +18,7 @@ module.exports = function lheading(state, startLine, endLine/*, silent*/) {
1042−+ for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
1043−+ // this would be a code block normally, but after paragraph
1044−+ // it's considered a lazy continuation regardless of what's there
1045−+- if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1046−++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1047−+
1048−+ //
1049−+ // Check for underline in setext header
1050−+diff --git a/node_modules/markdown-it/lib/rules_block/list.js b/node_modules/markdown-it/lib/rules_block/list.js
1051−+index 1e5e87b..95f71c2 100644
1052−+--- a/node_modules/markdown-it/lib/rules_block/list.js
1053−++++ b/node_modules/markdown-it/lib/rules_block/list.js
1054−+@@ -130,7 +130,7 @@ module.exports = function list(state, startLine, endLine, silent) {
1055−+ tight = true;
1056−+
1057−+ // if it's indented more than 3 spaces, it should be a code block
1058−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1059−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1060−+
1061−+ // Special case:
1062−+ // - item 1
1063−+@@ -138,7 +138,8 @@ module.exports = function list(state, startLine, endLine, silent) {
1064−+ // - item 3
1065−+ // - item 4
1066−+ // - this one is a paragraph continuation
1067−+- if (state.listIndent >= 0 &&
1068−++ if (!state.md.options.allowIndentation &&
1069−++ state.listIndent >= 0 &&
1070−+ state.sCount[startLine] - state.listIndent >= 4 &&
1071−+ state.sCount[startLine] < state.blkIndent) {
1072−+ return false;
1073−+@@ -244,7 +245,7 @@ module.exports = function list(state, startLine, endLine, silent) {
1074−+
1075−+ // If we have more than 4 spaces, the indent is 1
1076−+ // (the rest is just indented code block)
1077−+- if (indentAfterMarker > 4) { indentAfterMarker = 1; }
1078−++ if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }
1079−+
1080−+ // " - test"
1081−+ // ^^^^^ - calculating total length of this thing
1082−+@@ -317,7 +318,7 @@ module.exports = function list(state, startLine, endLine, silent) {
1083−+ if (state.sCount[nextLine] < state.blkIndent) { break; }
1084−+
1085−+ // if it's indented more than 3 spaces, it should be a code block
1086−+- if (state.sCount[startLine] - state.blkIndent >= 4) { break; }
1087−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }
1088−+
1089−+ // fail if terminating block found
1090−+ terminate = false;
1091−+diff --git a/node_modules/markdown-it/lib/rules_block/paragraph.js b/node_modules/markdown-it/lib/rules_block/paragraph.js
1092−+index f0c6872..d779a75 100644
1093−+--- a/node_modules/markdown-it/lib/rules_block/paragraph.js
1094−++++ b/node_modules/markdown-it/lib/rules_block/paragraph.js
1095−+@@ -16,7 +16,7 @@ module.exports = function paragraph(state, startLine/*, endLine*/) {
1096−+ for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
1097−+ // this would be a code block normally, but after paragraph
1098−+ // it's considered a lazy continuation regardless of what's there
1099−+- if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1100−++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1101−+
1102−+ // quirk for blockquotes, this line should already be checked by that rule
1103−+ if (state.sCount[nextLine] < 0) { continue; }
1104−+diff --git a/node_modules/markdown-it/lib/rules_block/reference.js b/node_modules/markdown-it/lib/rules_block/reference.js
1105−+index 78daa26..126ca93 100644
1106−+--- a/node_modules/markdown-it/lib/rules_block/reference.js
1107−++++ b/node_modules/markdown-it/lib/rules_block/reference.js
1108−+@@ -28,7 +28,7 @@ module.exports = function reference(state, startLine, _endLine, silent) {
1109−+ nextLine = startLine + 1;
1110−+
1111−+ // if it's indented more than 3 spaces, it should be a code block
1112−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1113−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1114−+
1115−+ if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }
1116−+
1117−+@@ -54,7 +54,7 @@ module.exports = function reference(state, startLine, _endLine, silent) {
1118−+ for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
1119−+ // this would be a code block normally, but after paragraph
1120−+ // it's considered a lazy continuation regardless of what's there
1121−+- if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1122−++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1123−+
1124−+ // quirk for blockquotes, this line should already be checked by that rule
1125−+ if (state.sCount[nextLine] < 0) { continue; }
1126−+diff --git a/node_modules/markdown-it/lib/rules_block/table.js b/node_modules/markdown-it/lib/rules_block/table.js
1127−+index 7d9208f..fab9aba 100644
1128−+--- a/node_modules/markdown-it/lib/rules_block/table.js
1129−++++ b/node_modules/markdown-it/lib/rules_block/table.js
1130−+@@ -62,7 +62,7 @@ module.exports = function table(state, startLine, endLine, silent) {
1131−+ if (state.sCount[nextLine] < state.blkIndent) { return false; }
1132−+
1133−+ // if it's indented more than 3 spaces, it should be a code block
1134−+- if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; }
1135−++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }
1136−+
1137−+ // first character of the second line should be '|', '-', ':',
1138−+ // and no other characters are allowed but spaces;
1139−+@@ -121,7 +121,7 @@ module.exports = function table(state, startLine, endLine, silent) {
1140−+
1141−+ lineText = getLine(state, startLine).trim();
1142−+ if (lineText.indexOf('|') === -1) { return false; }
1143−+- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1144−++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1145−+ columns = escapedSplit(lineText);
1146−+ if (columns.length && columns[0] === '') columns.shift();
1147−+ if (columns.length && columns[columns.length - 1] === '') columns.pop();
1148−+@@ -179,7 +179,7 @@ module.exports = function table(state, startLine, endLine, silent) {
1149−+ if (terminate) { break; }
1150−+ lineText = getLine(state, nextLine).trim();
1151−+ if (!lineText) { break; }
1152−+- if (state.sCount[nextLine] - state.blkIndent >= 4) { break; }
1153−++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }
1154−+ columns = escapedSplit(lineText);
1155−+ if (columns.length && columns[0] === '') columns.shift();
1156−+ if (columns.length && columns[columns.length - 1] === '') columns.pop();
1157−\ No newline at end of file
1158−diff --git a/node_modules/@markdoc/markdoc/src/ast/raw.ts b/node_modules/@markdoc/markdoc/src/ast/raw.ts
1159−new file mode 100644
1160−index 0000000..dab66db
1161−--- /dev/null
1162−+++ b/node_modules/@markdoc/markdoc/src/ast/raw.ts
1163−@@ -0,0 +1,11 @@
1164−+export default class Raw {
1165−+ readonly $$mdtype = 'Raw' as const;
1166−+
1167−+ content: string;
1168−+ inline: boolean;
1169−+
1170−+ constructor(content: string, inline: boolean) {
1171−+ this.content = content;
1172−+ this.inline = inline;
1173−+ }
1174−+ }
1175−\ No newline at end of file
1176−diff --git a/node_modules/@markdoc/markdoc/src/parser.ts b/node_modules/@markdoc/markdoc/src/parser.ts
1177−index b8fba4a..e9a197c 100644
1178−--- a/node_modules/@markdoc/markdoc/src/parser.ts
1179−+++ b/node_modules/@markdoc/markdoc/src/parser.ts
1180−@@ -11,6 +11,8 @@ const mappings: Record<string, string> = {
1181− code_inline: 'code',
1182− list_item: 'item',
1183− variable: 'text',
1184−+ html_block: 'html',
1185−+ html_inline: 'html',
1186− };
1187−
1188− function annotate(node: Node, attributes: AttributeValue[]) {
1189−@@ -37,6 +39,7 @@ function handleAttrs(token: Token, type: string) {
1190− }
1191− case 'text':
1192− case 'code':
1193−+ case 'html':
1194− return { content: (token.meta || {}).variable || token.content };
1195− case 'fence': {
1196− const [language] = token.info.split(' ', 1);
1197−diff --git a/node_modules/@markdoc/markdoc/src/renderers/html.ts b/node_modules/@markdoc/markdoc/src/renderers/html.ts
1198−index f27fa5a..d9b61da 100644
1199−--- a/node_modules/@markdoc/markdoc/src/renderers/html.ts
1200−+++ b/node_modules/@markdoc/markdoc/src/renderers/html.ts
1201−@@ -28,6 +28,8 @@ export default function render(node: RenderableTreeNodes): string {
1202−
1203− if (node === null || typeof node !== 'object') return '';
1204−
1205−+ if (node.$$mdtype === 'Raw') return node.content;
1206−+
1207− const { name, attributes, children = [] } = node;
1208−
1209− if (!name) return render(children);
1210−diff --git a/node_modules/@markdoc/markdoc/src/renderers/react/react.ts b/node_modules/@markdoc/markdoc/src/renderers/react/react.ts
1211−index 337c4f2..b319c85 100644
1212−--- a/node_modules/@markdoc/markdoc/src/renderers/react/react.ts
1213−+++ b/node_modules/@markdoc/markdoc/src/renderers/react/react.ts
1214−@@ -10,14 +10,15 @@ type ReactShape = Readonly<{
1215− export default function dynamic(
1216− node: RenderableTreeNodes,
1217− React: ReactShape,
1218−- { components = {} } = {}
1219−+ { components = {} } = {},
1220−+ raw?: (content: string, inline: boolean) => ReactNode
1221− ) {
1222− function deepRender(value: any): any {
1223− if (value == null || typeof value !== 'object') return value;
1224−
1225− if (Array.isArray(value)) return value.map((item) => deepRender(item));
1226−
1227−- if (value.$$mdtype === 'Tag') return render(value);
1228−+ if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);
1229−
1230− if (typeof value !== 'object') return value;
1231−
1232−@@ -32,6 +33,8 @@ export default function dynamic(
1233−
1234− if (node === null || typeof node !== 'object') return node;
1235−
1236−+ if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline);
1237−+
1238− const {
1239− name,
1240− attributes: { class: className, ...attrs } = {},
1241−diff --git a/node_modules/@markdoc/markdoc/src/renderers/react/static.ts b/node_modules/@markdoc/markdoc/src/renderers/react/static.ts
1242−index 2a4a589..c80b378 100644
1243−--- a/node_modules/@markdoc/markdoc/src/renderers/react/static.ts
1244−+++ b/node_modules/@markdoc/markdoc/src/renderers/react/static.ts
1245−@@ -1,48 +1,54 @@
1246− import { tagName } from './shared';
1247− import type { RenderableTreeNode, RenderableTreeNodes } from '../../types';
1248−
1249−-function renderArray(children: RenderableTreeNode[]): string {
1250−- return children.map(render).join(', ');
1251−-}
1252−+export default function reactStatic(
1253−+ node: RenderableTreeNodes,
1254−+ raw?: (content: string, inline: boolean) => string
1255−+): string {
1256−+ function renderArray(children: RenderableTreeNode[]): string {
1257−+ return children.map(render).join(', ');
1258−+ }
1259−
1260−-function deepRender(value: any): any {
1261−- if (value == null || typeof value !== 'object') return JSON.stringify(value);
1262−+ function deepRender(value: any): any {
1263−+ if (value == null || typeof value !== 'object')
1264−+ return JSON.stringify(value);
1265−
1266−- if (Array.isArray(value))
1267−- return `[${value.map((item) => deepRender(item)).join(', ')}]`;
1268−+ if (Array.isArray(value))
1269−+ return `[${value.map((item) => deepRender(item)).join(', ')}]`;
1270−
1271−- if (value.$$mdtype === 'Tag') return render(value);
1272−+ if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);
1273−
1274−- if (typeof value !== 'object') return JSON.stringify(value);
1275−+ if (typeof value !== 'object') return JSON.stringify(value);
1276−
1277−- const object = Object.entries(value)
1278−- .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))
1279−- .join(', ');
1280−+ const object = Object.entries(value)
1281−+ .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))
1282−+ .join(', ');
1283−
1284−- return `{${object}}`;
1285−-}
1286−+ return `{${object}}`;
1287−+ }
1288−
1289−-function render(node: RenderableTreeNodes): string {
1290−- if (Array.isArray(node))
1291−- return `React.createElement(React.Fragment, null, ${renderArray(node)})`;
1292−+ function render(node: RenderableTreeNodes): string {
1293−+ if (Array.isArray(node))
1294−+ return `React.createElement(React.Fragment, null, ${renderArray(node)})`;
1295−
1296−- if (node === null || typeof node !== 'object') return JSON.stringify(node);
1297−+ if (node === null || typeof node !== 'object') return JSON.stringify(node);
1298−
1299−- const {
1300−- name,
1301−- attributes: { class: className, ...attrs } = {},
1302−- children = [],
1303−- } = node;
1304−+ if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline) ?? '';
1305−
1306−- if (className) attrs.className = className;
1307−+ const {
1308−+ name,
1309−+ attributes: { class: className, ...attrs } = {},
1310−+ children = [],
1311−+ } = node;
1312−
1313−- return `React.createElement(
1314−+ if (className) attrs.className = className;
1315−+
1316−+ return `React.createElement(
1317− tagName(${JSON.stringify(name)}, components),
1318− ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},
1319− ${renderArray(children)})`;
1320−-}
1321−+ }
1322−
1323−-export default function reactStatic(node: RenderableTreeNodes): string {
1324− return `
1325− (({components = {}} = {}) => {
1326− ${tagName}
1327−diff --git a/node_modules/@markdoc/markdoc/src/schema.ts b/node_modules/@markdoc/markdoc/src/schema.ts
1328−index d29dfff..8113cfa 100644
1329−--- a/node_modules/@markdoc/markdoc/src/schema.ts
1330−+++ b/node_modules/@markdoc/markdoc/src/schema.ts
1331−@@ -1,5 +1,6 @@
1332− import type { Schema } from './types';
1333− import Tag from './ast/tag';
1334−+import Raw from './ast/raw';
1335−
1336− export const document: Schema = {
1337− render: 'article',
1338−@@ -230,4 +231,16 @@ export const softbreak: Schema = {
1339− },
1340− };
1341−
1342−+export const html: Schema = {
1343−+ attributes: {
1344−+ content: { type: String, required: true },
1345−+ },
1346−+
1347−+ transform(node) {
1348−+ return node.attributes.content
1349−+ ? new Raw(node.attributes.content, node.inline)
1350−+ : null;
1351−+ },
1352−+};
1353−+
1354− export const error = {};
1355−diff --git a/node_modules/@markdoc/markdoc/src/tokenizer/index.ts b/node_modules/@markdoc/markdoc/src/tokenizer/index.ts
1356−index d38d05c..24e4ee7 100644
1357−--- a/node_modules/@markdoc/markdoc/src/tokenizer/index.ts
1358−+++ b/node_modules/@markdoc/markdoc/src/tokenizer/index.ts
1359−@@ -12,6 +12,7 @@ export default class Tokenizer {
1360− this.parser = new MarkdownIt(config);
1361− this.parser.use(annotations, 'annotations', {});
1362− this.parser.use(frontmatter, 'frontmatter', {});
1363−+ this.parser.use(require('markdown-it-sup'))
1364− this.parser.disable('lheading');
1365− }
1366−
1367−diff --git a/node_modules/@markdoc/markdoc/src/types.ts b/node_modules/@markdoc/markdoc/src/types.ts
1368−index d9c708c..f5a337d 100644
1369−--- a/node_modules/@markdoc/markdoc/src/types.ts
1370−+++ b/node_modules/@markdoc/markdoc/src/types.ts
1371−@@ -1,6 +1,8 @@
1372− import type Func from './ast/function';
1373− import type Node from './ast/node';
1374− import type Tag from './ast/tag';
1375−+import type Raw from './ast/raw';
1376−+
1377−
1378− export type { Node, Tag };
1379− export declare type Function = Func;
1380−@@ -86,7 +88,7 @@ export type NodeType =
1381−
1382− export type Primitive = null | boolean | number | string;
1383−
1384−-export type RenderableTreeNode = Tag | string | null;
1385−+export type RenderableTreeNode = Tag | Raw | string | null;
1386− export type RenderableTreeNodes = RenderableTreeNode | RenderableTreeNode[];
1387−
1388− export type Scalar = Primitive | Scalar[] | { [key: string]: Scalar };
1389−diff --git a/node_modules/@markdoc/markdoc/tsconfig.json b/node_modules/@markdoc/markdoc/tsconfig.json
1390−new file mode 100644
1391−index 0000000..31f3c3e
1392−--- /dev/null
1393−+++ b/node_modules/@markdoc/markdoc/tsconfig.json
1394−@@ -0,0 +1,14 @@
1395−+{
1396−+ "compilerOptions": {
1397−+ "strict": true,
1398−+ "target": "ES2021",
1399−+ "lib": ["ES2021"],
1400−+ "allowJs": true,
1401−+ "allowSyntheticDefaultImports": true,
1402−+ "declaration": true,
1403−+ "declarationMap": true,
1404−+ "moduleResolution": "node"
1405−+ },
1406−+ "include": ["**/*.ts", "**/*.d.ts"],
1407−+ "exclude": ["dist", "spec", "**/*.test.ts"]
1408−+ }
1409−\ No newline at end of file
styles/globals.cssdeleted−223
@@ -1,223 +0,0 @@
1−@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Source+Code+Pro:wght@400;500;600;700;800&display=swap");
2−
3−@tailwind base;
4−@tailwind components;
5−@tailwind utilities;
6−
7−:root {
8− --tray-time: 0ms;
9−}
10−
11−html,
12−body {
13− padding: 0;
14− margin: 0;
15− /* Make all text wall-600 by default */
16− @apply text-wall-600;
17−}
18−
19−/* Reset a tags */
20−a {
21− color: inherit;
22− text-decoration: none;
23− cursor: pointer;
24−}
25−
26−/* Links in p tags should be green */
27−p a {
28− @apply text-green-400 font-semibold;
29−}
30−
31−/* Reduce b and strong tag weight default */
32−b,
33−strong {
34− @apply font-semibold;
35−}
36−
37−/* Typography */
38−
39−h1,
40−.type-h1 {
41− @apply text-4xl lg:text-5xl font-extrabold leading-tight text-wall-600;
42−}
43−
44−h2,
45−.type-h2 {
46− @apply text-3xl lg:text-4xl font-bold leading-tight;
47−}
48−
49−h3,
50−.type-h3 {
51− @apply text-xl font-semibold;
52−}
53−
54−h4,
55−.type-ui {
56− @apply text-lg font-semibold;
57−}
58−
59−h5,
60−.type-h5,
61−.type-bold {
62− @apply text-base font-semibold leading-relaxed;
63−}
64−
65−p,
66−.type-p {
67− @apply text-base leading-relaxed;
68−}
69−
70−.lead {
71− font-size: 1.3rem;
72−}
73−
74−.type-sub {
75− @apply text-sm;
76−}
77−
78−.type-sub-bold {
79− @apply text-sm font-semibold;
80−}
81−
82−code .type-code {
83− @apply bg-wall-100 p-4 font-mono;
84−}
85−
86−.font-bold {
87− @apply antialiased;
88−}
89−/* Utils */
90−
91−.layout-narrow {
92− @apply w-full md:w-8/12 lg:w-6/12;
93−}
94−
95−.layout {
96− @apply w-full md:w-10/12 lg:w-8/12;
97−}
98−
99−.measure {
100− max-width: 34em;
101−}
102−
103−.flex-center {
104− display: flex;
105− align-items: center;
106− justify-content: center;
107−}
108−
109−.bg-img {
110− background-repeat: no-repeat;
111− background-position: center center;
112− @apply bg-wall-100;
113−}
114−
115−.button-sm {
116− @apply flex-center px-3 h-10 rounded-lg type-ui;
117−}
118−
119−.button-lg {
120− @apply flex-center px-6 py-1 rounded-xl h-14 type-ui;
121−}
122−
123−.badge-sm {
124− min-height: 2rem;
125− @apply flex-center text-base font-medium px-3 rounded-full;
126−}
127−
128−.badge-lg {
129− @apply flex-center type-ui px-5 h-12 rounded-full;
130−}
131−
132−.button-sm:hover,
133−.button-text:hover,
134−.button-lg:hover,
135−a:hover {
136− opacity: 0.66;
137−}
138−
139−/* BEM Classes - Use sparingly */
140−
141−.port-hero-card-height {
142− height: 36em;
143−}
144−
145−.port-hero-image-height {
146− height: 32em;
147−}
148−
149−.port-hero-image {
150− transform: translateX(8%);
151− background-image: linear-gradient(
152− to right,
153− rgba(255, 255, 255, 0) 85%,
154− rgba(255, 255, 255, 1) 100%
155− ),
156− url("https://media.urbit.org/port.svg");
157− background-size: cover;
158−}
159−
160−.tray-menu-open {
161− transform: translateX(0);
162− transition: transform var(--tray-time);
163−}
164−
165−.tray-menu-closed {
166− transform: translateX(-110vw);
167− transition: transform var(--tray-time);
168−}
169−
170−.tray-menu-width {
171− width: calc(100vw - 4rem - 1rem - 1rem);
172−}
173−
174−.mobile-search-button-width {
175− width: calc(100vw - 4rem - 1rem - 1rem - 1rem - 1rem);
176−}
177−
178−.tray-overlay-open {
179− opacity: 1;
180− transition: opacity var(--tray-time);
181−}
182−
183−.tray-overlay-closed {
184− opacity: 0;
185− transition: opacity var(--tray-time);
186−}
187−
188−.menu-open {
189− left: 0;
190− visibility: visible;
191− display: block;
192−}
193−
194−.menu-closed {
195− left: -100vw;
196− visibility: hidden;
197− display: none;
198−}
199−
200−.dot::before {
201− width: 0.5rem;
202− height: 0.5rem;
203− border-radius: 99px;
204− content: "";
205− position: absolute;
206− left: -1rem;
207− top: 33%;
208− @apply bg-green-400;
209−}
210−
211−.sidebar .markdown span#figure,
212−.sidebar .markdown img {
213− width: auto !important;
214− margin: 0 auto !important;
215− left: 0 !important;
216− display: block !important;
217− position: static !important;
218− border-radius: 0 !important;
219−}
220−
221−.markdown .display .tab {
222− @apply p-3;
223−}
styles/markdown.cssdeleted−214
@@ -1,214 +0,0 @@
1−.markdown *:last-child {
2− @apply pb-0 mb-0;
3−}
4−
5−.markdown *:first-child {
6− @apply pt-0 mt-0;
7−}
8−
9−.markdown *:first-child figure {
10− @apply pt-0 mt-0;
11−}
12−
13−.markdown .display * {
14− margin-top: unset;
15− margin-bottom: unset;
16− margin-left: unset;
17− padding: unset;
18− padding-top: unset;
19− padding-bottom: unset;
20−}
21−
22−.markdown p,
23−.markdown ul,
24−.markdown ol,
25−.markdown blockquote {
26− @apply my-8;
27−}
28−
29−/* Default Typography */
30−
31−.markdown h1 {
32− @apply text-4xl font-bold mt-32 mb-16;
33−}
34−
35−.markdown h2 {
36− @apply text-3xl font-bold mt-24 mb-12;
37−}
38−
39−.markdown h3 {
40− @apply text-2xl font-semibold mt-16 mb-8;
41−}
42−
43−.markdown h4 {
44− @apply text-xl font-semibold mt-8 mb-4;
45−}
46−
47−.markdown p {
48− @apply text-base md:text-lg leading-relaxed;
49−}
50−
51−.markdown-callout p {
52− @apply mt-1;
53− @apply mb-2;
54− font-size: 1rem;
55−}
56−
57−.markdown li {
58− @apply py-2 ml-6 text-base md:text-lg;
59−}
60−
61−.markdown hr {
62− @apply my-16 border-t-2 border-wall-300;
63−}
64−
65−.markdown iframe {
66− min-height: 512px;
67−}
68−
69−/* Implicit "citation" heuristic */
70−.markdown blockquote > p > strong {
71− font-style: normal;
72−}
73−
74−/* Technical Typography */
75−
76−.markdown.technical h1 {
77− @apply text-3xl font-bold mt-32 mb-16;
78−}
79−
80−.markdown.technical h2 {
81− @apply text-2xl font-bold mt-24 mb-12;
82−}
83−
84−.markdown.technical h3 {
85− @apply text-xl font-semibold mt-16 mb-8;
86−}
87−
88−.markdown.technical h4 {
89− @apply text-lg font-semibold mt-8 mb-4;
90−}
91−
92−.markdown.technical p {
93− @apply text-base leading-relaxed;
94−}
95−
96−.markdown.technical p code {
97− white-space: pre-wrap;
98−}
99−
100−.markdown.technical li {
101− @apply py-2 ml-6 text-base;
102−}
103−
104−/* Imagery */
105−
106−.markdown img {
107− @apply rounded-lg w-full h-auto;
108−}
109−
110−.markdown span#figure {
111− @apply relative my-8 z-0 w-full left-0 block;
112−}
113−
114−@media (min-width: 768px) {
115− .markdown span#figure {
116− width: 125%;
117− left: -12.5%;
118− }
119−}
120−
121−.markdown pre,
122−.markdown pre[class*="language-"] {
123− @apply block p-4 bg-wall-100 rounded-lg overflow-x-auto;
124−}
125−
126−.markdown code,
127−.markdown code[class*="language-"] {
128− @apply px-2 py-0.5 bg-wall-100 rounded-lg;
129−}
130−
131−.markdown a code,
132−.markdown a code[class*="language-"] {
133− @apply bg-green-100 text-green-400;
134−}
135−
136−.markdown ul {
137− list-style: outside;
138− list-style-type: disc;
139−}
140−
141−.markdown ol {
142− list-style: outside;
143− list-style-type: decimal;
144−}
145−
146−.markdown li a,
147−.markdown h3 a,
148−.markdown h2 a {
149− @apply text-green-400;
150−}
151−
152−/* Links in list item tags should be green */
153−.markdown li a {
154− @apply text-green-400 font-semibold;
155−}
156−
157−.markdown blockquote {
158− @apply border-l-4 border-wall-300 pl-6 italic;
159−}
160−.markdown blockquote cite {
161− @apply not-italic font-semibold;
162−}
163−
164−.markdown table {
165− border-collapse: separate;
166− border-spacing: 0;
167− min-width: 350px;
168−}
169−
170−.markdown table tr th,
171−.markdown table tr td {
172− border-right-width: 2px;
173− border-right-style: solid;
174− border-bottom-width: 2px;
175− border-bottom-style: solid;
176− padding: 8px !important;
177− @apply border-wall-100;
178−}
179−
180−.markdown table tr th:first-child,
181−.markdown table tr td:first-child {
182− border-left-width: 2px;
183− border-left-style: solid;
184− @apply border-wall-100;
185−}
186−
187−.markdown table tr th {
188− background: rgba(240, 239, 236, 0.33);
189− border-top-width: 2px;
190− border-top-style: solid;
191− text-align: left;
192− vertical-align: middle;
193− @apply border-wall-100;
194−}
195−
196−/* top-left border-radius */
197−.markdown table tr:first-child th:first-child {
198− border-top-left-radius: 8px;
199−}
200−
201−/* top-right border-radius */
202−.markdown table tr:first-child th:last-child {
203− border-top-right-radius: 8px;
204−}
205−
206−/* bottom-left border-radius */
207−.markdown table tr:last-child td:first-child {
208− border-bottom-left-radius: 8px;
209−}
210−
211−/* bottom-right border-radius */
212−.markdown table tr:last-child td:last-child {
213− border-bottom-right-radius: 8px;
214−}
styles/prism.cssdeleted−170
@@ -1,170 +0,0 @@
1−/* PrismJS 1.24.0
2−https://prismjs.com/download.html#themes=prism-coy&languages=markup+css+clike+javascript */
3−/**
4− * prism.js Coy theme for JavaScript, CoffeeScript, CSS and HTML
5− * Based on https://github.com/tshedor/workshop-wp-theme (Example: http://workshop.kansan.com/category/sessions/basics or http://workshop.timshedor.com/category/sessions/basics);
6− * @author Tim Shedor
7− */
8−
9−code[class*="language-"],
10−pre[class*="language-"] {
11− @apply text-wall-600;
12− background: none;
13− font-family: "Source Code Pro", monospace;
14− font-size: 1em;
15− text-align: left;
16− white-space: pre;
17− word-spacing: normal;
18− word-break: normal;
19− word-wrap: normal;
20− line-height: 1.5;
21−
22− -moz-tab-size: 4;
23− -o-tab-size: 4;
24− tab-size: 4;
25−
26− -webkit-hyphens: none;
27− -moz-hyphens: none;
28− -ms-hyphens: none;
29− hyphens: none;
30−}
31−
32−/* Code blocks */
33−pre[class*="language-"] {
34− position: relative;
35− overflow: visible;
36−}
37−
38−code[class*="language-"] {
39− max-height: inherit;
40− height: inherit;
41− display: block;
42− overflow: auto;
43−}
44−
45−/* Inline code */
46−:not(pre) > code[class*="language-"] {
47− position: relative;
48− border-radius: 0.3em;
49− color: #c92c2c;
50− display: inline;
51− white-space: normal;
52−}
53−
54−.token.comment,
55−.token.block-comment,
56−.token.prolog,
57−.token.doctype,
58−.token.cdata {
59− color: #7d8b99;
60−}
61−
62−.token.punctuation {
63− color: #5f6364;
64−}
65−
66−.token.property,
67−.token.tag,
68−.token.boolean,
69−.token.number,
70−.token.constant,
71−.token.symbol,
72−.token.deleted {
73− @apply text-red;
74−}
75−
76−.token.function-name,
77−.token.function {
78− @apply text-wall-600;
79−}
80−
81−.token.selector,
82−.token.attr-name,
83−.token.string,
84−.token.char,
85−.token.builtin,
86−.token.inserted {
87− @apply text-green-400;
88−}
89−
90−.token.operator,
91−.token.entity,
92−.token.url,
93−.token.variable {
94− @apply text-wall-500;
95−}
96−
97−.token.atrule,
98−.token.attr-value,
99−.token.class-name {
100− @apply text-blue-400;
101−}
102−
103−.token.keyword {
104− @apply text-purple;
105−}
106−
107−.token.regex,
108−.token.important {
109− color: #e90;
110−}
111−
112−.language-css .token.string,
113−.style .token.string {
114− color: #a67f59;
115− background: rgba(255, 255, 255, 0.5);
116−}
117−
118−.token.important {
119− font-weight: normal;
120−}
121−
122−.token.bold {
123− font-weight: bold;
124−}
125−.token.italic {
126− font-style: italic;
127−}
128−
129−.token.entity {
130− cursor: help;
131−}
132−
133−.token.namespace {
134− opacity: 0.7;
135−}
136−
137−@media screen and (max-width: 767px) {
138− pre[class*="language-"]:before,
139− pre[class*="language-"]:after {
140− bottom: 14px;
141− box-shadow: none;
142− }
143−}
144−
145−/* Plugin styles: Line Numbers */
146−pre[class*="language-"].line-numbers.line-numbers {
147− padding-left: 0;
148−}
149−
150−pre[class*="language-"].line-numbers.line-numbers code {
151− padding-left: 3.8em;
152−}
153−
154−pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows {
155− left: 0;
156−}
157−
158−/* Plugin styles: Line Highlight */
159−pre[class*="language-"][data-line] {
160− padding-top: 0;
161− padding-bottom: 0;
162− padding-left: 0;
163−}
164−pre[data-line] code {
165− position: relative;
166− padding-left: 4em;
167−}
168−pre .line-highlight {
169− margin-top: 0;
170−}
tailwind.config.js+1−65
@@ -1,72 +1,8 @@
11module.exports = {
2+ presets: [require("foundation-design-system/tailwind.config")],
23 content: [
34 "./pages/**/*.{js,ts,jsx,tsx}",
45 "./components/**/*.{js,ts,jsx,tsx}",
56 "./content/**/*.md",
67 ],
7− theme: {
8− colors: {
9− // Wall
10− "wall-100": "#F3F2F0", // Primary
11− "wall-200": "#E3E0DB",
12− "wall-300": "#C8C4BD",
13− "wall-400": "#918C84",
14− "wall-500": "#5A564F",
15− "wall-600": "#24221E",
16− washedWall: "rgba(240, 239, 236, .8)", // for overlays
17− // Greens (Theme Primary Color)
18− "green-100": "#E5F7F1",
19− "green-200": "#BFEBDB",
20− "green-300": "#80D8B8",
21− "green-400": "#00B171", // Primary
22− "green-500": "#006842",
23− "green-600": "#001F13",
24− // Yellows
25− "yellow-100": "#FFFCF1",
26− "yellow-200": "#FEEBAA",
27− "yellow-300": "#FCDB63", // Primary
28− "yellow-400": "#CE9645",
29− "yellow-500": "#A15A2D",
30− "yellow-600": "#602010",
31− // Blues
32− "blue-100": "#F1F9FF",
33− "blue-200": "#BAE9FF",
34− "blue-300": "#7ED8FF",
35− "blue-400": "#219DFF", // Primary
36− "blue-500": "#193C90",
37− "blue-600": "#070821",
38− // Util
39− black: "#000",
40− white: "#FFF",
41− transparent: "rgba(0,0,0,0)",
42− // Syntax highlighting
43− purple: "rgba(157,82,255,0.8)",
44− red: "#ff4136",
45− // White semi-opaques
46− washedWhite: "rgba(255,255,255, 0.5)",
47− midWhite: "rgba(255,255,255, 0.8)",
48− },
49− fontFamily: {
50− sans: ["Inter", "-apple-system", "sans-serif"],
51− mono: ["Source Code Pro", "monospace"],
52− },
53− extend: {
54− fontSize: {
55− xs: "0.75rem",
56− sm: "0.875rem",
57− base: "1rem",
58− lg: "1.125rem",
59− xl: "1.25rem",
60− "2xl": "1.5rem",
61− "3xl": "1.875rem",
62− "4xl": "2.25rem",
63− "5xl": "3rem",
64− "6xl": "4rem",
65− },
66− },
67− },
68− variants: {
69− extend: {},
70− },
71− plugins: [require("@tailwindcss/aspect-ratio")],
728};