{"version":3,"file":"markdown-it.js","names":["decode","encode","fromCodePoint","fromCodePoint","htmlDecodeTree","xmlDecodeTree","_class","isString","assign","escapeRE","assign","isLinkOpen","isLinkClose","linkify","_rules","r_normalize","r_block","r_inline","r_linkify","r_replacements","r_smartquotes","r_text_join","block_names","_rules","r_table","r_code","r_fence","r_blockquote","r_hr","r_list","r_reference","r_html_block","r_heading","r_lheading","r_paragraph","postProcess","r_text","r_linkify","r_newline","r_escape","r_backticks","r_strikethrough","r_emphasis","r_link","r_image","r_autolink","r_html_inline","r_entity","r_balance_pairs","r_fragments_join","Any","Cc","Z","P","reFactory","cfg_default","cfg_zero","cfg_commonmark","mdurl.parse","mdurl.encode","mdurl.format","mdurl.decode","utils.isString","ParserCore","utils","utils.assign","helpers"],"sources":["../node_modules/mdurl/lib/decode.mjs","../node_modules/mdurl/lib/encode.mjs","../node_modules/mdurl/lib/format.mjs","../node_modules/mdurl/lib/parse.mjs","../node_modules/mdurl/index.mjs","../node_modules/uc.micro/properties/Any/regex.mjs","../node_modules/uc.micro/categories/Cc/regex.mjs","../node_modules/uc.micro/categories/Cf/regex.mjs","../node_modules/uc.micro/categories/P/regex.mjs","../node_modules/uc.micro/categories/S/regex.mjs","../node_modules/uc.micro/categories/Z/regex.mjs","../node_modules/uc.micro/index.mjs","../node_modules/entities/lib/esm/generated/decode-data-html.js","../node_modules/entities/lib/esm/generated/decode-data-xml.js","../node_modules/entities/lib/esm/decode_codepoint.js","../node_modules/entities/lib/esm/decode.js","../lib/common/utils.mjs","../lib/helpers/parse_link_label.mjs","../lib/helpers/parse_link_destination.mjs","../lib/helpers/parse_link_title.mjs","../lib/helpers/index.mjs","../lib/renderer.mjs","../lib/ruler.mjs","../lib/token.mjs","../lib/rules_core/state_core.mjs","../lib/rules_core/normalize.mjs","../lib/rules_core/block.mjs","../lib/rules_core/inline.mjs","../lib/rules_core/linkify.mjs","../lib/rules_core/replacements.mjs","../lib/rules_core/smartquotes.mjs","../lib/rules_core/text_join.mjs","../lib/parser_core.mjs","../lib/rules_block/state_block.mjs","../lib/rules_block/table.mjs","../lib/rules_block/code.mjs","../lib/rules_block/fence.mjs","../lib/rules_block/blockquote.mjs","../lib/rules_block/hr.mjs","../lib/rules_block/list.mjs","../lib/rules_block/reference.mjs","../lib/common/html_blocks.mjs","../lib/common/html_re.mjs","../lib/rules_block/html_block.mjs","../lib/rules_block/heading.mjs","../lib/rules_block/lheading.mjs","../lib/rules_block/paragraph.mjs","../lib/parser_block.mjs","../lib/rules_inline/state_inline.mjs","../lib/rules_inline/text.mjs","../lib/rules_inline/linkify.mjs","../lib/rules_inline/newline.mjs","../lib/rules_inline/escape.mjs","../lib/rules_inline/backticks.mjs","../lib/rules_inline/strikethrough.mjs","../lib/rules_inline/emphasis.mjs","../lib/rules_inline/link.mjs","../lib/rules_inline/image.mjs","../lib/rules_inline/autolink.mjs","../lib/rules_inline/html_inline.mjs","../lib/rules_inline/entity.mjs","../lib/rules_inline/balance_pairs.mjs","../lib/rules_inline/fragments_join.mjs","../lib/parser_inline.mjs","../node_modules/linkify-it/lib/re.mjs","../node_modules/linkify-it/index.mjs","../node_modules/punycode.js/punycode.es6.js","../lib/presets/default.mjs","../lib/presets/zero.mjs","../lib/presets/commonmark.mjs","../lib/index.mjs"],"sourcesContent":["/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n  let cache = decodeCache[exclude]\n  if (cache) { return cache }\n\n  cache = decodeCache[exclude] = []\n\n  for (let i = 0; i < 128; i++) {\n    const ch = String.fromCharCode(i)\n    cache.push(ch)\n  }\n\n  for (let i = 0; i < exclude.length; i++) {\n    const ch = exclude.charCodeAt(i)\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n  }\n\n  return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars\n  }\n\n  const cache = getDecodeCache(exclude)\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n    let result = ''\n\n    for (let i = 0, l = seq.length; i < l; i += 3) {\n      const 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        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n        if ((b2 & 0xC0) === 0x80) {\n          const 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        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          const 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        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n        const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          let 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\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\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  let cache = encodeCache[exclude]\n  if (cache) { return cache }\n\n  cache = encodeCache[exclude] = []\n\n  for (let i = 0; i < 128; i++) {\n    const 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 (let i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i]\n  }\n\n  return cache\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  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  const cache = getEncodeCache(exclude)\n  let result = ''\n\n  for (let i = 0, l = string.length; i < l; i++) {\n    const 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        const 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\nexport default encode\n","export default function format (url) {\n  let 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//\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\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.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks.  Always escape these.\nconst 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.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n  javascript: true,\n  'javascript:': true\n}\n// protocols that always contain a // bit.\nconst 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\nfunction urlParse (url, slashesDenoteHost) {\n  if (url && url instanceof Url) return url\n\n  const u = new Url()\n  u.parse(url, slashesDenoteHost)\n  return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n  let lowerProto, hec, slashes\n  let 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    const 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  let 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  /* eslint-disable-next-line no-useless-escape */\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    // 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    let hostEnd = -1\n    for (let 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    let 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 (let 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    const 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    const ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']'\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      const hostparts = this.hostname.split(/\\./)\n      for (let i = 0, l = hostparts.length; i < l; i++) {\n        const part = hostparts[i]\n        if (!part) { continue }\n        if (!part.match(hostnamePartPattern)) {\n          let newpart = ''\n          for (let 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            const validParts = hostparts.slice(0, i)\n            const notHost = hostparts.slice(i + 1)\n            const 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  const 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  const 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  let 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\nexport default urlParse\n","import decode from './lib/decode.mjs'\nimport encode from './lib/encode.mjs'\nimport format from './lib/format.mjs'\nimport parse from './lib/parse.mjs'\n\nexport {\n  decode,\n  encode,\n  format,\n  parse\n}\n","export default /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","export default /[\\0-\\x1F\\x7F-\\x9F]/","export default /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","export default /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\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-\\u2E4F\\u2E52-\\u2E5D\\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[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","export default /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/","export default /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","import Any from './properties/Any/regex.mjs';\nimport Cc  from './categories/Cc/regex.mjs';\nimport Cf  from './categories/Cf/regex.mjs';\nimport P   from './categories/P/regex.mjs';\nimport S   from './categories/S/regex.mjs';\nimport Z   from './categories/Z/regex.mjs';\n\nexport { Any, Cc, Cf, P, S, Z };\n","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n    [0, 65533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n    let output = \"\";\n    if (codePoint > 0xffff) {\n        codePoint -= 0x10000;\n        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n        codePoint = 0xdc00 | (codePoint & 0x3ff);\n    }\n    output += String.fromCharCode(codePoint);\n    return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n    var _a;\n    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n        return 0xfffd;\n    }\n    return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport default function decodeCodePoint(codePoint) {\n    return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode_codepoint.js.map","import htmlDecodeTree from \"./generated/decode-data-html.js\";\nimport xmlDecodeTree from \"./generated/decode-data-xml.js\";\nimport decodeCodePoint, { replaceCodePoint, fromCodePoint, } from \"./decode_codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };\nexport { replaceCodePoint, fromCodePoint } from \"./decode_codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n    CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n    CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n    CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n    CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n    CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n    CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n    CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n    CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n    CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n    CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n    CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n    CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n    BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n    EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n    EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n    EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n    /** Entities in text nodes that can end with any character. */\n    DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n    /** Only allow entities terminated with a semicolon. */\n    DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n    /** Entities in attributes have limitations on ending characters. */\n    DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n    constructor(\n    /** The tree used to decode entities. */\n    decodeTree, \n    /**\n     * The function that is called when a codepoint is decoded.\n     *\n     * For multi-byte named entities, this will be called multiple times,\n     * with the second codepoint, and the same `consumed` value.\n     *\n     * @param codepoint The decoded codepoint.\n     * @param consumed The number of bytes consumed by the decoder.\n     */\n    emitCodePoint, \n    /** An object that is used to produce errors. */\n    errors) {\n        this.decodeTree = decodeTree;\n        this.emitCodePoint = emitCodePoint;\n        this.errors = errors;\n        /** The current state of the decoder. */\n        this.state = EntityDecoderState.EntityStart;\n        /** Characters that were consumed while parsing an entity. */\n        this.consumed = 1;\n        /**\n         * The result of the entity.\n         *\n         * Either the result index of a numeric entity, or the codepoint of a\n         * numeric entity.\n         */\n        this.result = 0;\n        /** The current index in the decode tree. */\n        this.treeIndex = 0;\n        /** The number of characters that were consumed in excess. */\n        this.excess = 1;\n        /** The mode in which the decoder is operating. */\n        this.decodeMode = DecodingMode.Strict;\n    }\n    /** Resets the instance to make it reusable. */\n    startEntity(decodeMode) {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n    }\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     *\n     * @param string The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    write(str, offset) {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (str.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(str, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(str, offset);\n            }\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(str, offset);\n            }\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(str, offset);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(str, offset);\n            }\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(str, offset);\n            }\n        }\n    }\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericStart(str, offset) {\n        if (offset >= str.length) {\n            return -1;\n        }\n        if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(str, offset + 1);\n        }\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(str, offset);\n    }\n    addToNumericResult(str, start, end, base) {\n        if (start !== end) {\n            const digitCount = end - start;\n            this.result =\n                this.result * Math.pow(base, digitCount) +\n                    parseInt(str.substr(start, digitCount), base);\n            this.consumed += digitCount;\n        }\n    }\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericHex(str, offset) {\n        const startIdx = offset;\n        while (offset < str.length) {\n            const char = str.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 16);\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 16);\n        return -1;\n    }\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericDecimal(str, offset) {\n        const startIdx = offset;\n        while (offset < str.length) {\n            const char = str.charCodeAt(offset);\n            if (isNumber(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 10);\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 10);\n        return -1;\n    }\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     *\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    emitNumericEntity(lastCp, expectedLength) {\n        var _a;\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n            return 0;\n        }\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        }\n        else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n        this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n        return this.consumed;\n    }\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNamedEntity(str, offset) {\n        const { decodeTree } = this;\n        let current = decodeTree[this.treeIndex];\n        // The mask is the number of bytes of the value, including the current byte.\n        let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n        for (; offset < str.length; offset++, this.excess++) {\n            const char = str.charCodeAt(offset);\n            this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n                }\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (this.decodeMode !== DecodingMode.Strict) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n        }\n        return -1;\n    }\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNotTerminatedNamedEntity() {\n        var _a;\n        const { result, decodeTree } = this;\n        const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n        return this.consumed;\n    }\n    /**\n     * Emit a named entity.\n     *\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNamedEntityData(result, valueLength, consumed) {\n        const { decodeTree } = this;\n        this.emitCodePoint(valueLength === 1\n            ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n            : decodeTree[result + 1], consumed);\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n        return consumed;\n    }\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     *\n     * @returns The number of characters consumed.\n     */\n    end() {\n        var _a;\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n    let ret = \"\";\n    const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str)));\n    return function decodeWithTrie(str, decodeMode) {\n        let lastIndex = 0;\n        let offset = 0;\n        while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n            ret += str.slice(lastIndex, offset);\n            decoder.startEntity(decodeMode);\n            const len = decoder.write(str, \n            // Skip the \"&\"\n            offset + 1);\n            if (len < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n            lastIndex = offset + len;\n            // If `len` is 0, skip the current `&` and continue.\n            offset = len === 0 ? lastIndex + 1 : lastIndex;\n        }\n        const result = ret + str.slice(lastIndex);\n        // Make sure we don't keep a reference to the final string.\n        ret = \"\";\n        return result;\n    };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIdx, char) {\n    const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n    }\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        const value = char - jumpOffset;\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIdx + value] - 1;\n    }\n    // Case 3: Multiple branches encoded in dictionary\n    // Binary search for the character.\n    let lo = nodeIdx;\n    let hi = lo + branchCount - 1;\n    while (lo <= hi) {\n        const mid = (lo + hi) >>> 1;\n        const midVal = decodeTree[mid];\n        if (midVal < char) {\n            lo = mid + 1;\n        }\n        else if (midVal > char) {\n            hi = mid - 1;\n        }\n        else {\n            return decodeTree[mid + branchCount];\n        }\n    }\n    return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\nconst xmlDecoder = getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(str, mode = DecodingMode.Legacy) {\n    return htmlDecoder(str, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(str) {\n    return htmlDecoder(str, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(str) {\n    return htmlDecoder(str, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(str) {\n    return xmlDecoder(str, DecodingMode.Strict);\n}\n//# sourceMappingURL=decode.js.map","// Utilities\n//\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTML } from 'entities'\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\n\nfunction isString (obj) { return _class(obj) === '[object String]' }\n\nconst _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  const 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\nfunction isValidEntityCode (c) {\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    const surrogate1 = 0xd800 + (c >> 10)\n    const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n    return String.fromCharCode(surrogate1, surrogate2)\n  }\n  return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match, name) {\n  if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    const code = name[1].toLowerCase() === 'x'\n      ? parseInt(name.slice(2), 16)\n      : parseInt(name.slice(1), 10)\n\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code)\n    }\n\n    return match\n  }\n\n  const decoded = decodeHTML(match)\n  if (decoded !== match) {\n    return decoded\n  }\n\n  return match\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\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst 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\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\nfunction escapeRE (str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\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// Currently without astral characters support.\nfunction isPunctChar (ch) {\n  return ucmicro.P.test(ch) || ucmicro.S.test(ch)\n}\n\nfunction isPunctCharCode (code) {\n  return isPunctChar(fromCodePoint(code))\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 'ẞ'.toLowerCase() === 'Ṿ', 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 ('ẞ'.toLowerCase() === 'Ṿ') {\n    /* c8 ignore next 2 */\n    str = str.replace(/ẞ/g, 'ß')\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  // İ, ϴ, ẞ, Ω, K, Å - 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 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\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 ϑ (it's already lowercase),\n  // and .toUpperCase() doesn't change ϴ (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\nfunction isAsciiTrimmable (c) {\n  return c === 0x20 || c === 0x09 || c === 0x0a || c === 0x0d\n}\n\n// \"Light\" .trim() for blocks (headers, paragraphs), where unicode spaces\n// should be preserved.\nfunction asciiTrim (str) {\n  let start = 0\n  for (; start < str.length; start++) {\n    if (!isAsciiTrimmable(str.charCodeAt(start))) {\n      break\n    }\n  }\n  let end = str.length - 1\n  for (; end >= start; end--) {\n    if (!isAsciiTrimmable(str.charCodeAt(end))) {\n      break\n    }\n  }\n  return str.slice(start, end + 1)\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//\nconst lib = { mdurl, ucmicro }\n\nexport {\n  lib,\n  assign,\n  isString,\n  has,\n  unescapeMd,\n  unescapeAll,\n  isValidEntityCode,\n  fromCodePoint,\n  escapeHtml,\n  arrayReplaceAt,\n  isSpace,\n  isWhiteSpace,\n  isMdAsciiPunct,\n  isPunctChar,\n  isPunctCharCode,\n  escapeRE,\n  normalizeReference,\n  asciiTrim\n}\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n\nexport default function parseLinkLabel (state, start, disableNested) {\n  let level, found, marker, prevPos\n\n  const max = state.posMax\n  const 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  let labelEnd = -1\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\nimport { unescapeAll } from '../common/utils.mjs'\n\nexport default function parseLinkDestination (str, start, max) {\n  let code\n  let pos = start\n\n  const result = {\n    ok: false,\n    pos: 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  let 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.pos = pos\n  result.ok = true\n  return result\n}\n","// Parse link title\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\n// Parse link title within `str` in [start, max] range,\n// or continue previous parsing if `prev_state` is defined (equal to result of last execution).\n//\nexport default function parseLinkTitle (str, start, max, prev_state) {\n  let code\n  let pos = start\n\n  const state = {\n    // if `true`, this is a valid link title\n    ok: false,\n    // if `true`, this link can be continued on the next line\n    can_continue: false,\n    // if `ok`, it's the position of the first character after the closing marker\n    pos: 0,\n    // if `ok`, it's the unescaped title\n    str: '',\n    // expected closing marker character code\n    marker: 0\n  }\n\n  if (prev_state) {\n    // this is a continuation of a previous parseLinkTitle call on the next line,\n    // used in reference links only\n    state.str = prev_state.str\n    state.marker = prev_state.marker\n  } else {\n    if (pos >= max) { return state }\n\n    let marker = str.charCodeAt(pos)\n    if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return state }\n\n    start++\n    pos++\n\n    // if opening marker is \"(\", switch it to closing marker \")\"\n    if (marker === 0x28) { marker = 0x29 }\n\n    state.marker = marker\n  }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos)\n    if (code === state.marker) {\n      state.pos = pos + 1\n      state.str += unescapeAll(str.slice(start, pos))\n      state.ok = true\n      return state\n    } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n      return state\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++\n    }\n\n    pos++\n  }\n\n  // no closing marker found, but this link title may continue on the next line (for references)\n  state.can_continue = true\n  state.str += unescapeAll(str.slice(start, pos))\n  return state\n}\n","// Just a shortcut for bulk export\n\nimport parseLinkLabel from './parse_link_label.mjs'\nimport parseLinkDestination from './parse_link_destination.mjs'\nimport parseLinkTitle from './parse_link_title.mjs'\n\nexport {\n  parseLinkLabel,\n  parseLinkDestination,\n  parseLinkTitle\n}\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\nimport { assign, unescapeAll, escapeHtml } from './common/utils.mjs'\n\nconst default_rules = {}\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n\n  return '<code' + slf.renderAttrs(token) + '>' +\n          escapeHtml(token.content) +\n          '</code>'\n}\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n\n  return '<pre' + slf.renderAttrs(token) + '><code>' +\n          escapeHtml(tokens[idx].content) +\n          '</code></pre>\\n'\n}\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n  const info = token.info ? unescapeAll(token.info).trim() : ''\n  let langName = ''\n  let langAttrs = ''\n\n  if (info) {\n    const arr = info.split(/(\\s+)/g)\n    langName = arr[0]\n    langAttrs = arr.slice(2).join('')\n  }\n\n  let highlighted\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    const i = token.attrIndex('class')\n    const 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    const tmpToken = {\n      attrs: tmpAttrs\n    }\n\n    return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`\n  }\n\n  return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`\n}\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  const 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\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\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content)\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 * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer () {\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.mjs)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules)\n}\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs (token) {\n  let 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 * 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  const token = tokens[idx]\n  let result = ''\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  let needLf = false\n  if (token.block) {\n    needLf = true\n\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        const 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        } 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 * 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  let result = ''\n  const rules = this.rules\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    const 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/** 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  let result = ''\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    switch (tokens[i].type) {\n      case 'text':\n        result += tokens[i].content\n        break\n      case 'image':\n        result += this.renderInlineAsText(tokens[i].children, options, env)\n        break\n      case 'html_inline':\n      case 'html_block':\n        result += tokens[i].content\n        break\n      case 'softbreak':\n      case 'hardbreak':\n        result += '\\n'\n        break\n      default:\n        // all other tokens are skipped\n    }\n  }\n\n  return result\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  let result = ''\n  const rules = this.rules\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    const 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[type](tokens, i, options, env, this)\n    } else {\n      result += this.renderToken(tokens, i, options, env)\n    }\n  }\n\n  return result\n}\n\nexport default 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\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// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n  for (let 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// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n  const self = this\n  const 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 * 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  const index = this.__find__(name)\n  const 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 * 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  const index = this.__find__(beforeName)\n  const 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,\n    alt: opt.alt || []\n  })\n\n  this.__cache__ = null\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  const index = this.__find__(afterName)\n  const 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,\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  const opt = options || {}\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  })\n\n  this.__cache__ = null\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  const result = []\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    const 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 * 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 * 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  const result = []\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    const 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 * 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\nexport default Ruler\n","// Token class\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 * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex (name) {\n  if (!this.attrs) { return -1 }\n\n  const attrs = this.attrs\n\n  for (let i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) { return i }\n  }\n  return -1\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 * 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  const idx = this.attrIndex(name)\n  const attrData = [name, value]\n\n  if (idx < 0) {\n    this.attrPush(attrData)\n  } else {\n    this.attrs[idx] = attrData\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  const idx = this.attrIndex(name)\n  let value = null\n  if (idx >= 0) {\n    value = this.attrs[idx][1]\n  }\n  return value\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  const 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\nexport default Token\n","// Core state object\n//\n\nimport Token from '../token.mjs'\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\nexport default StateCore\n","// Normalize input string\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst NEWLINES_RE = /\\r\\n?|\\n/g\nconst NULL_RE = /\\0/g\n\nexport default function normalize (state) {\n  let 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","export default function block (state) {\n  let 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","export default function inline (state) {\n  const tokens = state.tokens\n\n  // Parse inlines\n  for (let i = 0, l = tokens.length; i < l; i++) {\n    const 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\nimport { arrayReplaceAt } from '../common/utils.mjs'\n\nfunction isLinkOpen (str) {\n  return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n  return /^<\\/a\\s*>/i.test(str)\n}\n\nexport default function linkify (state) {\n  const blockTokens = state.tokens\n\n  if (!state.md.options.linkify) { return }\n\n  for (let 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    let tokens = blockTokens[j].children\n\n    let 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 (let i = tokens.length - 1; i >= 0; i--) {\n      const 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        const text = currentToken.content\n        let links = state.md.linkify.match(text)\n\n        // Now split string to nodes\n        const nodes = []\n        let level = currentToken.level\n        let lastPos = 0\n\n        // forbid escape sequence at the start of the string,\n        // this avoids http\\://example.com/ from being linkified as\n        // http:<a href=\"//example.com/\">//example.com/</a>\n        if (links.length > 0 &&\n            links[0].index === 0 &&\n            i > 0 &&\n            tokens[i - 1].type === 'text_special') {\n          links = links.slice(1)\n        }\n\n        for (let ln = 0; ln < links.length; ln++) {\n          const url = links[ln].url\n          const fullUrl = state.md.normalizeLink(url)\n          if (!state.md.validateLink(fullUrl)) { continue }\n\n          let 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          const pos = links[ln].index\n\n          if (pos > lastPos) {\n            const token = new state.Token('text', '', 0)\n            token.content = text.slice(lastPos, pos)\n            token.level = level\n            nodes.push(token)\n          }\n\n          const token_o = new state.Token('link_open', 'a', 1)\n          token_o.attrs = [['href', fullUrl]]\n          token_o.level = level++\n          token_o.markup = 'linkify'\n          token_o.info = 'auto'\n          nodes.push(token_o)\n\n          const token_t = new state.Token('text', '', 0)\n          token_t.content = urlText\n          token_t.level = level\n          nodes.push(token_t)\n\n          const token_c = new state.Token('link_close', 'a', -1)\n          token_c.level = --level\n          token_c.markup = 'linkify'\n          token_c.info = 'auto'\n          nodes.push(token_c)\n\n          lastPos = links[ln].lastIndex\n        }\n        if (lastPos < text.length) {\n          const 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) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i\n\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig\nconst SCOPED_ABBR = {\n  c: '©',\n  r: '®',\n  tm: '™'\n}\n\nfunction replaceFn (match, name) {\n  return SCOPED_ABBR[name.toLowerCase()]\n}\n\nfunction replace_scoped (inlineTokens) {\n  let inside_autolink = 0\n\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const 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  let inside_autolink = 0\n\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const 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, '±')\n          // .., ..., ....... -> …\n          // but ?..... & !..... -> ?.. & !..\n          .replace(/\\.{2,}/g, '…').replace(/([?!])…/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\nexport default function replace (state) {\n  let blkIdx\n\n  if (!state.md.options.typographer) { return }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\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","// Convert straight quotation marks to typographic ones\n//\n\nimport { isWhiteSpace, isPunctCharCode, isMdAsciiPunct } from '../common/utils.mjs'\n\nconst QUOTE_TEST_RE = /['\"]/\nconst QUOTE_RE = /['\"]/g\nconst APOSTROPHE = '\\u2019' /* ’ */\n\nfunction addReplacement (replacements, tokenIdx, pos, ch) {\n  if (!replacements[tokenIdx]) {\n    replacements[tokenIdx] = []\n  }\n\n  replacements[tokenIdx].push({ pos, ch })\n}\n\nfunction applyReplacements (str, replacements) {\n  let result = ''\n  let lastPos = 0\n\n  replacements.sort((a, b) => a.pos - b.pos)\n\n  for (let i = 0; i < replacements.length; i++) {\n    const replacement = replacements[i]\n\n    result += str.slice(lastPos, replacement.pos) + replacement.ch\n    lastPos = replacement.pos + 1\n  }\n\n  return result + str.slice(lastPos)\n}\n\nfunction process_inlines (tokens, state) {\n  let j\n\n  const stack = []\n  // token index -> list of replacements in the original token content\n  const replacements = {}\n\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i]\n\n    const 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    const text = token.content\n    let pos = 0\n    const 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      const t = QUOTE_RE.exec(text)\n      if (!t) { break }\n\n      let canOpen = true\n      let canClose = true\n      pos = t.index + 1\n      const isSingle = (t[0] === \"'\")\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      let 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      let 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      const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar)\n      const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar)\n\n      const isLastWhiteSpace = isWhiteSpace(lastChar)\n      const 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          addReplacement(replacements, i, 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          let 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            let openQuote\n            let closeQuote\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            addReplacement(replacements, i, t.index, closeQuote)\n            addReplacement(replacements, item.token, item.pos, openQuote)\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        addReplacement(replacements, i, t.index, APOSTROPHE)\n      }\n    }\n  }\n\n  Object.keys(replacements).forEach(function (tokenIdx) {\n    tokens[tokenIdx].content = applyReplacements(tokens[tokenIdx].content, replacements[tokenIdx])\n  })\n}\n\nexport default function smartquotes (state) {\n  /* eslint max-depth:0 */\n  if (!state.md.options.typographer) { return }\n\n  for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\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","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nexport default function text_join (state) {\n  let curr, last\n  const blockTokens = state.tokens\n  const l = blockTokens.length\n\n  for (let j = 0; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') continue\n\n    const tokens = blockTokens[j].children\n    const max = tokens.length\n\n    for (curr = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text_special') {\n        tokens[curr].type = 'text'\n      }\n    }\n\n    for (curr = last = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text' &&\n          curr + 1 < max &&\n          tokens[curr + 1].type === 'text') {\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}\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateCore from './rules_core/state_core.mjs'\n\nimport r_normalize from './rules_core/normalize.mjs'\nimport r_block from './rules_core/block.mjs'\nimport r_inline from './rules_core/inline.mjs'\nimport r_linkify from './rules_core/linkify.mjs'\nimport r_replacements from './rules_core/replacements.mjs'\nimport r_smartquotes from './rules_core/smartquotes.mjs'\nimport r_text_join from './rules_core/text_join.mjs'\n\nconst _rules = [\n  ['normalize', r_normalize],\n  ['block', r_block],\n  ['inline', r_inline],\n  ['linkify', r_linkify],\n  ['replacements', r_replacements],\n  ['smartquotes', r_smartquotes],\n  // `text_join` finds `text_special` tokens (for escape sequences)\n  // and joins them with the rest of the text\n  ['text_join', r_text_join]\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 (let i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1])\n  }\n}\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n  const rules = this.ruler.getRules('')\n\n  for (let i = 0, l = rules.length; i < l; i++) {\n    rules[i](state)\n  }\n}\n\nCore.prototype.State = StateCore\n\nexport default Core\n","// Parser state class\n\nimport Token from '../token.mjs'\nimport { isSpace } from '../common/utils.mjs'\n\nfunction StateBlock (src, md, env, tokens) {\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\n  // required block content indent (for example, if we are\n  // inside a list, it would be positioned after list marker)\n  this.blkIndent = 0\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  // Create caches\n  // Generate markers.\n  const s = this.src\n\n  for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n    const 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  const 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 (let 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  for (let max = this.src.length; pos < max; pos++) {\n    const 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 (let 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  if (begin >= end) {\n    return ''\n  }\n\n  const queue = new Array(end - begin)\n\n  for (let i = 0, line = begin; line < end; line++, i++) {\n    let lineIndent = 0\n    const lineStart = this.bMarks[line]\n    let first = lineStart\n    let last\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      const 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\nexport default StateBlock\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000\n\nfunction getLine (state, line) {\n  const pos = state.bMarks[line] + state.tShift[line]\n  const max = state.eMarks[line]\n\n  return state.src.slice(pos, max)\n}\n\nfunction escapedSplit (str) {\n  const result = []\n  const max = str.length\n\n  let pos = 0\n  let ch = str.charCodeAt(pos)\n  let isEscaped = false\n  let lastPos = 0\n  let current = ''\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\nexport default function table (state, startLine, endLine, silent) {\n  // should have at least two lines\n  if (startLine + 2 > endLine) { return false }\n\n  let 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.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  let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n  if (pos >= state.eMarks[nextLine]) { return false }\n\n  const 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  const 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    const ch = state.src.charCodeAt(pos)\n\n    if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false }\n\n    pos++\n  }\n\n  let lineText = getLine(state, startLine + 1)\n  let columns = lineText.split('|')\n  const aligns = []\n  for (let i = 0; i < columns.length; i++) {\n    const 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.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  const columnCount = columns.length\n  if (columnCount === 0 || columnCount !== aligns.length) { return false }\n\n  if (silent) { return true }\n\n  const oldParentType = state.parentType\n  state.parentType = 'table'\n\n  // use 'blockquote' lists for termination because it's\n  // the most similar to tables\n  const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n  const token_to = state.push('table_open', 'table', 1)\n  const tableLines = [startLine, 0]\n  token_to.map = tableLines\n\n  const token_tho = state.push('thead_open', 'thead', 1)\n  token_tho.map = [startLine, startLine + 1]\n\n  const token_htro = state.push('tr_open', 'tr', 1)\n  token_htro.map = [startLine, startLine + 1]\n\n  for (let i = 0; i < columns.length; i++) {\n    const token_ho = state.push('th_open', 'th', 1)\n    if (aligns[i]) {\n      token_ho.attrs = [['style', 'text-align:' + aligns[i]]]\n    }\n\n    const token_il = state.push('inline', '', 0)\n    token_il.content = columns[i].trim()\n    token_il.children = []\n\n    state.push('th_close', 'th', -1)\n  }\n\n  state.push('tr_close', 'tr', -1)\n  state.push('thead_close', 'thead', -1)\n\n  let tbodyLines\n  let autocompletedCells = 0\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) { break }\n\n    let terminate = false\n    for (let 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.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    // note: autocomplete count can be negative if user specifies more columns than header,\n    // but that does not affect intended use (which is limiting expansion)\n    autocompletedCells += columnCount - columns.length\n    if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { break }\n\n    if (nextLine === startLine + 2) {\n      const token_tbo = state.push('tbody_open', 'tbody', 1)\n      token_tbo.map = tbodyLines = [startLine + 2, 0]\n    }\n\n    const token_tro = state.push('tr_open', 'tr', 1)\n    token_tro.map = [nextLine, nextLine + 1]\n\n    for (let i = 0; i < columnCount; i++) {\n      const token_tdo = state.push('td_open', 'td', 1)\n      if (aligns[i]) {\n        token_tdo.attrs = [['style', 'text-align:' + aligns[i]]]\n      }\n\n      const token_il = state.push('inline', '', 0)\n      token_il.content = columns[i] ? columns[i].trim() : ''\n      token_il.children = []\n\n      state.push('td_close', 'td', -1)\n    }\n    state.push('tr_close', 'tr', -1)\n  }\n\n  if (tbodyLines) {\n    state.push('tbody_close', 'tbody', -1)\n    tbodyLines[1] = nextLine\n  }\n\n  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\nexport default function code (state, startLine, endLine/*, silent */) {\n  if (state.sCount[startLine] - state.blkIndent < 4) { return false }\n\n  let nextLine = startLine + 1\n  let last = nextLine\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  const 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\nexport default function fence (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (pos + 3 > max) { return false }\n\n  const marker = state.src.charCodeAt(pos)\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false\n  }\n\n  // scan marker length\n  let mem = pos\n  pos = state.skipChars(pos, marker)\n\n  let len = pos - mem\n\n  if (len < 3) { return false }\n\n  const markup = state.src.slice(mem, pos)\n  const 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  let nextLine = startLine\n  let haveEndMarker = false\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.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  const 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\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function blockquote (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  const oldLineMax = state.lineMax\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (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  const oldBMarks = []\n  const oldBSCount = []\n  const oldSCount = []\n  const oldTShift = []\n\n  const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n  const oldParentType = state.parentType\n  state.parentType = 'blockquote'\n  let lastLineEmpty = false\n  let nextLine\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; 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    const 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      let initial = state.sCount[nextLine] + 1\n      let spaceAfterMarker\n      let adjustTab\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        adjustTab = false\n        spaceAfterMarker = true\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true\n\n        if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++\n          initial++\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      let offset = initial\n      oldBMarks.push(state.bMarks[nextLine])\n      state.bMarks[nextLine] = pos\n\n      while (pos < max) {\n        const 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    let terminate = false\n    for (let 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  const oldIndent = state.blkIndent\n  state.blkIndent = 0\n\n  const token_o = state.push('blockquote_open', 'blockquote', 1)\n  token_o.markup = '>'\n  const lines = [startLine, 0]\n  token_o.map = lines\n\n  state.md.block.tokenize(state, startLine, nextLine)\n\n  const token_c = state.push('blockquote_close', 'blockquote', -1)\n  token_c.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 (let 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\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function hr (state, startLine, endLine, silent) {\n  const max = state.eMarks[startLine]\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  const 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  let cnt = 1\n  while (pos < max) {\n    const 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  const 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\nimport { isSpace } from '../common/utils.mjs'\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker (state, startLine) {\n  const max = state.eMarks[startLine]\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n\n  const 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    const 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  const start = state.bMarks[startLine] + state.tShift[startLine]\n  const max = state.eMarks[startLine]\n  let pos = start\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) { return -1 }\n\n  let 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      // 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  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  const level = state.level + 2\n\n  for (let 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\nexport default function list (state, startLine, endLine, silent) {\n  let max, pos, start, token\n  let nextLine = startLine\n  let tight = true\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - 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.listIndent >= 0 &&\n      state.sCount[nextLine] - state.listIndent >= 4 &&\n      state.sCount[nextLine] < state.blkIndent) {\n    return false\n  }\n\n  let isTerminatingParagraph = false\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[nextLine] >= state.blkIndent) {\n      isTerminatingParagraph = true\n    }\n  }\n\n  // Detect list type and position after marker\n  let isOrdered\n  let markerValue\n  let posAfterMarker\n  if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n    isOrdered = true\n    start = state.bMarks[nextLine] + state.tShift[nextLine]\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  } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n    isOrdered = false\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[nextLine]) return false\n  }\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true }\n\n  // We should terminate list on style change. Remember first one to compare.\n  const markerCharCode = state.src.charCodeAt(posAfterMarker - 1)\n\n  // Start list\n  const 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  } else {\n    token = state.push('bullet_list_open', 'ul', 1)\n  }\n\n  const listLines = [nextLine, 0]\n  token.map = listLines\n  token.markup = String.fromCharCode(markerCharCode)\n\n  //\n  // Iterate list items\n  //\n\n  let prevEmptyEnd = false\n  const terminatorRules = state.md.block.ruler.getRules('list')\n\n  const oldParentType = state.parentType\n  state.parentType = 'list'\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker\n    max = state.eMarks[nextLine]\n\n    const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine])\n    let offset = initial\n\n    while (pos < max) {\n      const 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    const contentStart = pos\n    let indentAfterMarker\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 (indentAfterMarker > 4) { indentAfterMarker = 1 }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    const 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    const itemLines = [nextLine, 0]\n    token.map = itemLines\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    const oldTight = state.tight\n    const oldTShift = state.tShift[nextLine]\n    const oldSCount = state.sCount[nextLine]\n\n    //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n    const oldListIndent = state.listIndent\n    state.listIndent = state.blkIndent\n    state.blkIndent = indent\n\n    state.tight = true\n    state.tShift[nextLine] = contentStart - state.bMarks[nextLine]\n    state.sCount[nextLine] = offset\n\n    if (contentStart >= max && state.isEmpty(nextLine + 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, nextLine, 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 - nextLine) > 1 && state.isEmpty(state.line - 1)\n\n    state.blkIndent = state.listIndent\n    state.listIndent = oldListIndent\n    state.tShift[nextLine] = oldTShift\n    state.sCount[nextLine] = oldSCount\n    state.tight = oldTight\n\n    token = state.push('list_item_close', 'li', -1)\n    token.markup = String.fromCharCode(markerCharCode)\n\n    nextLine = state.line\n    itemLines[1] = nextLine\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.sCount[nextLine] - state.blkIndent >= 4) { break }\n\n    // fail if terminating block found\n    let terminate = false\n    for (let 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","import { isSpace, normalizeReference } from '../common/utils.mjs'\n\nexport default function reference (state, startLine, _endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n  let nextLine = startLine + 1\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false }\n\n  function getNextLine (nextLine) {\n    const endLine = state.lineMax\n\n    if (nextLine >= endLine || state.isEmpty(nextLine)) {\n      // empty line or end of input\n      return null\n    }\n\n    let isContinuation = false\n\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.sCount[nextLine] - state.blkIndent > 3) { isContinuation = true }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { isContinuation = true }\n\n    if (!isContinuation) {\n      const terminatorRules = state.md.block.ruler.getRules('reference')\n      const oldParentType = state.parentType\n      state.parentType = 'reference'\n\n      // Some tags can terminate paragraph without empty line.\n      let terminate = false\n      for (let 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      state.parentType = oldParentType\n      if (terminate) {\n        // terminated by another block\n        return null\n      }\n    }\n\n    const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n    const max = state.eMarks[nextLine]\n\n    // max + 1 explicitly includes the newline\n    return state.src.slice(pos, max + 1)\n  }\n\n  let str = state.src.slice(pos, max + 1)\n\n  max = str.length\n  let labelEnd = -1\n\n  for (pos = 1; pos < max; pos++) {\n    const 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      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\n    } else if (ch === 0x5C /* \\ */) {\n      pos++\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        const lineContent = getNextLine(nextLine)\n        if (lineContent !== null) {\n          str += lineContent\n          max = str.length\n          nextLine++\n        }\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    const ch = str.charCodeAt(pos)\n    if (ch === 0x0A) {\n      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\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  const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n  if (!destRes.ok) { return false }\n\n  const href = state.md.normalizeLink(destRes.str)\n  if (!state.md.validateLink(href)) { return false }\n\n  pos = destRes.pos\n\n  // save cursor state, we could require to rollback later\n  const destEndPos = pos\n  const destEndLineNo = nextLine\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  const start = pos\n  for (; pos < max; pos++) {\n    const ch = str.charCodeAt(pos)\n    if (ch === 0x0A) {\n      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\n    } else if (isSpace(ch)) {\n      /* Nothing */\n    } else {\n      break\n    }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n  while (titleRes.can_continue) {\n    const lineContent = getNextLine(nextLine)\n    if (lineContent === null) break\n    str += lineContent\n    pos = max\n    max = str.length\n    nextLine++\n    titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n  }\n  let title\n\n  if (pos < max && start !== pos && titleRes.ok) {\n    title = titleRes.str\n    pos = titleRes.pos\n  } else {\n    title = ''\n    pos = destEndPos\n    nextLine = destEndLineNo\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    const 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      nextLine = destEndLineNo\n      while (pos < max) {\n        const 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  const 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, href }\n  }\n\n  state.line = nextLine\n  return true\n}\n","// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nexport default [\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  'search',\n  'section',\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\nconst attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'\n\nconst attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)'\n\nconst open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>'\n\nconst close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\nconst comment = '<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->'\nconst processing = '<[?][\\\\s\\\\S]*?[?]>'\nconst declaration = '<![A-Za-z][^>]*>'\nconst cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>'\n\nconst HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n                        '|' + processing + '|' + declaration + '|' + cdata + ')')\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')')\n\nexport { HTML_TAG_RE, HTML_OPEN_CLOSE_TAG_RE }\n","// HTML block\n\nimport block_names from '../common/html_blocks.mjs'\nimport { HTML_OPEN_CLOSE_TAG_RE } from '../common/html_re.mjs'\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//\nconst 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\nexport default function html_block (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (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  let lineText = state.src.slice(pos, max)\n\n  let i = 0\n  for (; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) { break }\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  let nextLine = startLine + 1\n\n  // Block types 6 and 7 (the only ones whose end condition is a blank line)\n  // have `/^$/` as their closing regexp. For all other types (1-5, e.g.\n  // `<!--` comments), a blank line is regular content and must not terminate\n  // the block - it ends only when its closing sequence is found.\n  const endsOnBlankLine = HTML_SEQUENCES[i][1].test('')\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) {\n        // An outdented blank line shouldn't end a block that doesn't end on a\n        // blank line (e.g. a `<!--` comment inside a list item). Such blocks\n        // must continue until their closing sequence regardless of indent.\n        if (endsOnBlankLine || !state.isEmpty(nextLine)) { break }\n      }\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  const 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\nimport { isSpace, asciiTrim } from '../common/utils.mjs'\n\nexport default function heading (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  let ch = state.src.charCodeAt(pos)\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false }\n\n  // count heading level\n  let 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  const 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  const token_o = state.push('heading_open', 'h' + String(level), 1)\n  token_o.markup = '########'.slice(0, level)\n  token_o.map = [startLine, state.line]\n\n  const token_i = state.push('inline', '', 0)\n  token_i.content = asciiTrim(state.src.slice(pos, max))\n  token_i.map = [startLine, state.line]\n  token_i.children = []\n\n  const token_c = state.push('heading_close', 'h' + String(level), -1)\n  token_c.markup = '########'.slice(0, level)\n\n  return true\n}\n","// lheading (---, ===)\n\nimport { asciiTrim } from '../common/utils.mjs'\n\nexport default function lheading (state, startLine, endLine/*, silent */) {\n  const 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.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  const oldParentType = state.parentType\n  state.parentType = 'paragraph' // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  let level = 0\n  let marker\n  let nextLine = startLine + 1\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.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n      const 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    let terminate = false\n    for (let 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    state.parentType = oldParentType\n    return false\n  }\n\n  const content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false))\n\n  state.line = nextLine + 1\n\n  const token_o = state.push('heading_open', 'h' + String(level), 1)\n  token_o.markup = String.fromCharCode(marker)\n  token_o.map = [startLine, state.line]\n\n  const token_i = state.push('inline', '', 0)\n  token_i.content = content\n  token_i.map = [startLine, state.line - 1]\n  token_i.children = []\n\n  const token_c = state.push('heading_close', 'h' + String(level), -1)\n  token_c.markup = String.fromCharCode(marker)\n\n  state.parentType = oldParentType\n\n  return true\n}\n","// Paragraph\n\nimport { asciiTrim } from '../common/utils.mjs'\n\nexport default function paragraph (state, startLine, endLine) {\n  const terminatorRules = state.md.block.ruler.getRules('paragraph')\n  const oldParentType = state.parentType\n  let nextLine = startLine + 1\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.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    let terminate = false\n    for (let 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  const content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false))\n\n  state.line = nextLine\n\n  const token_o = state.push('paragraph_open', 'p', 1)\n  token_o.map = [startLine, state.line]\n\n  const token_i = state.push('inline', '', 0)\n  token_i.content = content\n  token_i.map = [startLine, state.line]\n  token_i.children = []\n\n  state.push('paragraph_close', 'p', -1)\n\n  state.parentType = oldParentType\n\n  return true\n}\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateBlock from './rules_block/state_block.mjs'\n\nimport r_table from './rules_block/table.mjs'\nimport r_code from './rules_block/code.mjs'\nimport r_fence from './rules_block/fence.mjs'\nimport r_blockquote from './rules_block/blockquote.mjs'\nimport r_hr from './rules_block/hr.mjs'\nimport r_list from './rules_block/list.mjs'\nimport r_reference from './rules_block/reference.mjs'\nimport r_html_block from './rules_block/html_block.mjs'\nimport r_heading from './rules_block/heading.mjs'\nimport r_lheading from './rules_block/lheading.mjs'\nimport r_paragraph from './rules_block/paragraph.mjs'\n\nconst _rules = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  ['table', r_table, ['paragraph', 'reference']],\n  ['code', r_code],\n  ['fence', r_fence, ['paragraph', 'reference', 'blockquote', 'list']],\n  ['blockquote', r_blockquote, ['paragraph', 'reference', 'blockquote', 'list']],\n  ['hr', r_hr, ['paragraph', 'reference', 'blockquote', 'list']],\n  ['list', r_list, ['paragraph', 'reference', 'blockquote']],\n  ['reference', r_reference],\n  ['html_block', r_html_block, ['paragraph', 'reference', 'blockquote']],\n  ['heading', r_heading, ['paragraph', 'reference', 'blockquote']],\n  ['lheading', r_lheading],\n  ['paragraph', r_paragraph]\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 (let 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// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const maxNesting = state.md.options.maxNesting\n  let line = startLine\n  let hasEmptyLines = false\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    const prevLine = state.line\n    let ok = false\n\n    for (let i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false)\n      if (ok) {\n        if (prevLine >= state.line) {\n          throw new Error(\"block rule didn't increment state.line\")\n        }\n        break\n      }\n    }\n\n    // this can only happen if user disables paragraph rule\n    if (!ok) throw new Error('none of the block rules matched')\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 * 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  if (!src) { return }\n\n  const state = new this.State(src, md, env, outTokens)\n\n  this.tokenize(state, state.line, state.lineMax)\n}\n\nParserBlock.prototype.State = StateBlock\n\nexport default ParserBlock\n","// Inline parser state\n\nimport Token from '../token.mjs'\nimport { isWhiteSpace, isPunctCharCode, isMdAsciiPunct } from '../common/utils.mjs'\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  // Counter used to disable inline linkify-it execution\n  // inside <a> and markdown links\n  this.linkLevel = 0\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  const 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// 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  const token = new Token(type, tag, nesting)\n  let 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// 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  const max = this.posMax\n  const marker = this.src.charCodeAt(start)\n\n  // Astral characters below are combined manually, because .codePointAt()\n  // does not guarantee numeric type output. And we don't wish JIT cache issues.\n  // The broken surrogate pairs are evaluated as U+FFFD to prevent possible\n  // crashes.\n\n  let lastChar\n  if (start === 0) {\n    // treat beginning of the line as a whitespace\n    lastChar = 0x20\n  } else if (start === 1) {\n    lastChar = this.src.charCodeAt(0)\n    if ((lastChar & 0xF800) === 0xD800) { lastChar = 0xFFFD }\n  } else {\n    lastChar = this.src.charCodeAt(start - 1)\n    if ((lastChar & 0xFC00) === 0xDC00) {\n      // low surrogate => add high one, replace broken pair with U+FFFD\n      const highSurr = this.src.charCodeAt(start - 2)\n      lastChar = (highSurr & 0xFC00) === 0xD800\n        ? 0x10000 + ((highSurr - 0xD800) << 10) + (lastChar - 0xDC00)\n        : 0xFFFD\n    } else if ((lastChar & 0xFC00) === 0xD800) {\n      lastChar = 0xFFFD\n    }\n  }\n\n  let pos = start\n  while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }\n\n  const count = pos - start\n\n  // treat end of the line as a whitespace\n  let nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20\n  if ((nextChar & 0xFC00) === 0xD800) {\n    // high surrogate => add low one, replace broken pair with U+FFFD\n    const lowSurr = this.src.charCodeAt(pos + 1)\n    nextChar = (lowSurr & 0xFC00) === 0xDC00\n      ? 0x10000 + ((nextChar - 0xD800) << 10) + (lowSurr - 0xDC00)\n      : 0xFFFD\n  } else if ((nextChar & 0xFC00) === 0xDC00) {\n    nextChar = 0xFFFD\n  }\n\n  const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar)\n  const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar)\n\n  const isLastWhiteSpace = isWhiteSpace(lastChar)\n  const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n  const left_flanking =\n    !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)\n  const right_flanking =\n    !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)\n\n  const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar)\n  const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar)\n\n  return { can_open, can_close, length: count }\n}\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token\n\nexport default StateInline\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\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\nexport default function text (state, silent) {\n  let 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 `ParserInline` 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","// Process links like https://example.org/\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i\n\nexport default function linkify (state, silent) {\n  if (!state.md.options.linkify) return false\n  if (state.linkLevel > 0) return false\n\n  const pos = state.pos\n  const max = state.posMax\n\n  if (pos + 3 > max) return false\n  if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false\n  if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false\n  if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false\n\n  const match = state.pending.match(SCHEME_RE)\n  if (!match) return false\n\n  const proto = match[1]\n\n  const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length))\n  if (!link) return false\n\n  let url = link.url\n\n  // invalid link, but still detected by linkify somehow;\n  // need to check to prevent infinite loop below\n  if (url.length <= proto.length) return false\n\n  // disallow '*' at the end of the link (conflicts with emphasis)\n  // do manual backsearch to avoid perf issues with regex /\\*+$/ on \"****...****a\".\n  let urlEnd = url.length\n  while (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 0x2A/* * */) {\n    urlEnd--\n  }\n  if (urlEnd !== url.length) {\n    url = url.slice(0, urlEnd)\n  }\n\n  const fullUrl = state.md.normalizeLink(url)\n  if (!state.md.validateLink(fullUrl)) return false\n\n  if (!silent) {\n    state.pending = state.pending.slice(0, -proto.length)\n\n    const token_o = state.push('link_open', 'a', 1)\n    token_o.attrs = [['href', fullUrl]]\n    token_o.markup = 'linkify'\n    token_o.info = 'auto'\n\n    const token_t = state.push('text', '', 0)\n    token_t.content = state.md.normalizeLinkText(url)\n\n    const token_c = state.push('link_close', 'a', -1)\n    token_c.markup = 'linkify'\n    token_c.info = 'auto'\n  }\n\n  state.pos += url.length - proto.length\n  return true\n}\n","// Proceess '\\n'\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function newline (state, silent) {\n  let pos = state.pos\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false }\n\n  const pmax = state.pending.length - 1\n  const 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        let 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    } 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\nimport { isSpace } from '../common/utils.mjs'\n\nconst ESCAPED = []\n\nfor (let i = 0; i < 256; i++) { ESCAPED.push(0) }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1 })\n\nexport default function escape (state, silent) {\n  let pos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false\n  pos++\n\n  // '\\' at the end of the inline block\n  if (pos >= max) return false\n\n  let ch1 = state.src.charCodeAt(pos)\n\n  if (ch1 === 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      ch1 = state.src.charCodeAt(pos)\n      if (!isSpace(ch1)) break\n      pos++\n    }\n\n    state.pos = pos\n    return true\n  }\n\n  // '\\' before a space is a literal backslash. Don't consume the space, so a\n  // trailing two-space hard line break is still detected by the newline rule.\n  if (ch1 === 0x20) {\n    if (!silent) {\n      const token = state.push('text_special', '', 0)\n      token.content = '\\\\'\n      token.markup = '\\\\'\n      token.info = 'escape'\n    }\n\n    state.pos = pos\n    return true\n  }\n\n  let escapedStr = state.src[pos]\n\n  if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n    const ch2 = state.src.charCodeAt(pos + 1)\n\n    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n      escapedStr += state.src[pos + 1]\n      pos++\n    }\n  }\n\n  const origStr = '\\\\' + escapedStr\n\n  if (!silent) {\n    const token = state.push('text_special', '', 0)\n\n    if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n      token.content = escapedStr\n    } else {\n      token.content = origStr\n    }\n\n    token.markup = origStr\n    token.info = 'escape'\n  }\n\n  state.pos = pos + 1\n  return true\n}\n","// Parse backticks\n\nexport default function backtick (state, silent) {\n  let pos = state.pos\n  const ch = state.src.charCodeAt(pos)\n\n  if (ch !== 0x60/* ` */) { return false }\n\n  const start = pos\n  pos++\n  const max = state.posMax\n\n  // scan marker length\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }\n\n  const marker = state.src.slice(start, pos)\n  const 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  let matchEnd = pos\n  let matchStart\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    const closerLength = matchEnd - matchStart\n\n    if (closerLength === openerLength) {\n      // Found matching closer length.\n      if (!silent) {\n        const 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\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize (state, silent) {\n  const start = state.pos\n  const marker = state.src.charCodeAt(start)\n\n  if (silent) { return false }\n\n  if (marker !== 0x7E/* ~ */) { return false }\n\n  const scanned = state.scanDelims(state.pos, true)\n  let len = scanned.length\n  const ch = String.fromCharCode(marker)\n\n  if (len < 2) { return false }\n\n  let token\n\n  if (len % 2) {\n    token = state.push('text', '', 0)\n    token.content = ch\n    len--\n  }\n\n  for (let i = 0; i < len; i += 2) {\n    token = state.push('text', '', 0)\n    token.content = ch + ch\n\n    state.delimiters.push({\n      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\nfunction postProcess (state, delimiters) {\n  let token\n  const loneMarkers = []\n  const max = delimiters.length\n\n  for (let i = 0; i < max; i++) {\n    const startDelim = delimiters[i]\n\n    if (startDelim.marker !== 0x7E/* ~ */) {\n      continue\n    }\n\n    if (startDelim.end === -1) {\n      continue\n    }\n\n    const 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      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    const i = loneMarkers.pop()\n    let 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// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  postProcess(state, state.delimiters)\n\n  for (let 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\nexport default {\n  tokenize: strikethrough_tokenize,\n  postProcess: strikethrough_postProcess\n}\n","// Process *this* and _that_\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize (state, silent) {\n  const start = state.pos\n  const marker = state.src.charCodeAt(start)\n\n  if (silent) { return false }\n\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false }\n\n  const scanned = state.scanDelims(state.pos, marker === 0x2A)\n\n  for (let i = 0; i < scanned.length; i++) {\n    const 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,\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\nfunction postProcess (state, delimiters) {\n  const max = delimiters.length\n\n  for (let i = max - 1; i >= 0; i--) {\n    const 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    const 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    const 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    const ch = String.fromCharCode(startDelim.marker)\n\n    const token_o = state.tokens[startDelim.token]\n    token_o.type = isStrong ? 'strong_open' : 'em_open'\n    token_o.tag = isStrong ? 'strong' : 'em'\n    token_o.nesting = 1\n    token_o.markup = isStrong ? ch + ch : ch\n    token_o.content = ''\n\n    const token_c = state.tokens[endDelim.token]\n    token_c.type = isStrong ? 'strong_close' : 'em_close'\n    token_c.tag = isStrong ? 'strong' : 'em'\n    token_c.nesting = -1\n    token_c.markup = isStrong ? ch + ch : ch\n    token_c.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// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  postProcess(state, state.delimiters)\n\n  for (let 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\nexport default {\n  tokenize: emphasis_tokenize,\n  postProcess: emphasis_post_process\n}\n","// Process [link](<to> \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function link (state, silent) {\n  let code, label, res, ref\n  let href = ''\n  let title = ''\n  let start = state.pos\n  let parseReference = true\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n  const oldPos = state.pos\n  const max = state.posMax\n  const labelStart = state.pos + 1\n  const 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  let 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    const token_o = state.push('link_open', 'a', 1)\n    const attrs = [['href', href]]\n    token_o.attrs = attrs\n    if (title) {\n      attrs.push(['title', title])\n    }\n\n    state.linkLevel++\n    state.md.inline.tokenize(state)\n    state.linkLevel--\n\n    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\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function image (state, silent) {\n  let code, content, label, pos, ref, res, title, start\n  let href = ''\n  const oldPos = state.pos\n  const 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  const labelStart = state.pos + 2\n  const 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    const tokens = []\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens\n    )\n\n    const token = state.push('image', 'img', 0)\n    const attrs = [['src', href], ['alt', '']]\n    token.attrs = attrs\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/* eslint max-len:0 */\nconst 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])?)*)$/\n/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/\n\nexport default function autolink (state, silent) {\n  let pos = state.pos\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n  const start = state.pos\n  const max = state.posMax\n\n  for (;;) {\n    if (++pos >= max) return false\n\n    const ch = state.src.charCodeAt(pos)\n\n    if (ch === 0x3C /* < */) return false\n    if (ch === 0x3E /* > */) break\n  }\n\n  const url = state.src.slice(start + 1, pos)\n\n  if (AUTOLINK_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink(url)\n    if (!state.md.validateLink(fullUrl)) { return false }\n\n    if (!silent) {\n      const token_o = state.push('link_open', 'a', 1)\n      token_o.attrs = [['href', fullUrl]]\n      token_o.markup = 'autolink'\n      token_o.info = 'auto'\n\n      const token_t = state.push('text', '', 0)\n      token_t.content = state.md.normalizeLinkText(url)\n\n      const token_c = state.push('link_close', 'a', -1)\n      token_c.markup = 'autolink'\n      token_c.info = 'auto'\n    }\n\n    state.pos += url.length + 2\n    return true\n  }\n\n  if (EMAIL_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink('mailto:' + url)\n    if (!state.md.validateLink(fullUrl)) { return false }\n\n    if (!silent) {\n      const token_o = state.push('link_open', 'a', 1)\n      token_o.attrs = [['href', fullUrl]]\n      token_o.markup = 'autolink'\n      token_o.info = 'auto'\n\n      const token_t = state.push('text', '', 0)\n      token_t.content = state.md.normalizeLinkText(url)\n\n      const token_c = state.push('link_close', 'a', -1)\n      token_c.markup = 'autolink'\n      token_c.info = 'auto'\n    }\n\n    state.pos += url.length + 2\n    return true\n  }\n\n  return false\n}\n","// Process html tags\n\nimport { HTML_TAG_RE } from '../common/html_re.mjs'\n\nfunction isLinkOpen (str) {\n  return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n  return /^<\\/a\\s*>/i.test(str)\n}\n\nfunction isLetter (ch) {\n  /* eslint no-bitwise:0 */\n  const lc = ch | 0x20 // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */)\n}\n\nexport default function html_inline (state, silent) {\n  if (!state.md.options.html) { return false }\n\n  // Check start\n  const max = state.posMax\n  const pos = state.pos\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false\n  }\n\n  // Quick fail on second char\n  const 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  const match = state.src.slice(pos).match(HTML_TAG_RE)\n  if (!match) { return false }\n\n  if (!silent) {\n    const token = state.push('html_inline', '', 0)\n    token.content = match[0]\n\n    if (isLinkOpen(token.content)) state.linkLevel++\n    if (isLinkClose(token.content)) state.linkLevel--\n  }\n  state.pos += match[0].length\n  return true\n}\n","// Process html entity - &#123;, &#xAF;, &quot;, ...\n\nimport { decodeHTMLStrict } from 'entities'\nimport { isValidEntityCode, fromCodePoint } from '../common/utils.mjs'\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i\nconst NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i\n\nexport default function entity (state, silent) {\n  const pos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) return false\n\n  if (pos + 1 >= max) return false\n\n  const ch = state.src.charCodeAt(pos + 1)\n\n  if (ch === 0x23 /* # */) {\n    const match = state.src.slice(pos).match(DIGITAL_RE)\n    if (match) {\n      if (!silent) {\n        const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10)\n\n        const token = state.push('text_special', '', 0)\n        token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)\n        token.markup = match[0]\n        token.info = 'entity'\n      }\n      state.pos += match[0].length\n      return true\n    }\n  } else {\n    const match = state.src.slice(pos).match(NAMED_RE)\n    if (match) {\n      const decoded = decodeHTMLStrict(match[0])\n      if (decoded !== match[0]) {\n        if (!silent) {\n          const token = state.push('text_special', '', 0)\n          token.content = decoded\n          token.markup = match[0]\n          token.info = 'entity'\n        }\n        state.pos += match[0].length\n        return true\n      }\n    }\n  }\n\n  return false\n}\n","// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters (delimiters) {\n  const openersBottom = {}\n  const max = delimiters.length\n\n  if (!max) return\n\n  // headerIdx is the first delimiter of the current (where closer is) delimiter run\n  let headerIdx = 0\n  let lastTokenIdx = -2 // needs any value lower than -1\n  const jumps = []\n\n  for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n    const 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    /* eslint-disable-next-line no-prototype-builtins */\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n    }\n\n    const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n    let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n    let newMinOpenerIdx = openerIdx\n\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      const opener = delimiters[openerIdx]\n\n      if (opener.marker !== closer.marker) continue\n\n      if (opener.open && opener.end < 0) {\n        let 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          const 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\nexport default function link_pairs (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  processDelimiters(state.delimiters)\n\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(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\nexport default function fragments_join (state) {\n  let curr, last\n  let level = 0\n  const tokens = state.tokens\n  const 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      // 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","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateInline from './rules_inline/state_inline.mjs'\n\nimport r_text from './rules_inline/text.mjs'\nimport r_linkify from './rules_inline/linkify.mjs'\nimport r_newline from './rules_inline/newline.mjs'\nimport r_escape from './rules_inline/escape.mjs'\nimport r_backticks from './rules_inline/backticks.mjs'\nimport r_strikethrough from './rules_inline/strikethrough.mjs'\nimport r_emphasis from './rules_inline/emphasis.mjs'\nimport r_link from './rules_inline/link.mjs'\nimport r_image from './rules_inline/image.mjs'\nimport r_autolink from './rules_inline/autolink.mjs'\nimport r_html_inline from './rules_inline/html_inline.mjs'\nimport r_entity from './rules_inline/entity.mjs'\n\nimport r_balance_pairs from './rules_inline/balance_pairs.mjs'\nimport r_fragments_join from './rules_inline/fragments_join.mjs'\n\n// Parser rules\n\nconst _rules = [\n  ['text', r_text],\n  ['linkify', r_linkify],\n  ['newline', r_newline],\n  ['escape', r_escape],\n  ['backticks', r_backticks],\n  ['strikethrough', r_strikethrough.tokenize],\n  ['emphasis', r_emphasis.tokenize],\n  ['link', r_link],\n  ['image', r_image],\n  ['autolink', r_autolink],\n  ['html_inline', r_html_inline],\n  ['entity', r_entity]\n]\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2 = [\n  ['balance_pairs', r_balance_pairs],\n  ['strikethrough', r_strikethrough.postProcess],\n  ['emphasis', r_emphasis.postProcess],\n  // rules for pairs separate '**' into its own text tokens, which may be left unused,\n  // rule below merges unused segments back with the rest of the text\n  ['fragments_join', r_fragments_join]\n]\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline () {\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n  this.ruler = new Ruler()\n\n  for (let 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 (let i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1])\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  const pos = state.pos\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const maxNesting = state.md.options.maxNesting\n  const cache = state.cache\n\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos]\n    return\n  }\n\n  let ok = false\n\n  if (state.level < maxNesting) {\n    for (let 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) {\n        if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n        break\n      }\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// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const end = state.posMax\n  const 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    const prevPos = state.pos\n    let ok = false\n\n    if (state.level < maxNesting) {\n      for (let i = 0; i < len; i++) {\n        ok = rules[i](state, false)\n        if (ok) {\n          if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n          break\n        }\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 * 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  const state = new this.State(str, md, env, outTokens)\n\n  this.tokenize(state)\n\n  const rules = this.ruler2.getRules('')\n  const len = rules.length\n\n  for (let i = 0; i < len; i++) {\n    rules[i](state)\n  }\n}\n\nParserInline.prototype.State = StateInline\n\nexport default ParserInline\n","import { Any, Cc, Z, P } from 'uc.micro'\n\nexport default function (opts) {\n  const re = {}\n  opts = opts || {}\n\n  re.src_Any = Any.source\n  re.src_Cc = Cc.source\n  re.src_Z = Z.source\n  re.src_P = P.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  const 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  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  // Length is capped to exclude possible rescans till the end and avoid O(n^2)\n  // DoS. No standard limit, just take something reasonable.\n  re.src_auth = `(?:(?:(?!${re.src_ZCc}|[@/\\\\[\\\\]()]).){1,50}@)?`\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})` +\n    `(?!${opts['---'] ? '-(?!--)|' : '-|'}_|:\\\\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\n          // allow `I'm_king` if no pair found\n          `\\\\'(?=${re.src_pseudo_letter}|[-])|` +\n\n          // 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          '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n          `\\\\.(?!${re.src_ZCc}|[.]|$)|` +\n          (opts['---']\n            ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            : '\\\\-+|'\n          ) +\n          // allow `,,,` in paths\n          `,(?!${re.src_ZCc}|$)|` +\n\n          // allow `;` if not followed by space-like char\n          `;(?!${re.src_ZCc}|$)|` +\n\n          // allow `!!!` in paths, but not at the end\n          `\\\\!+(?!${re.src_ZCc}|[!]|$)|` +\n\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  // Max name length capped to 64 chars (RFC 5321). This also prevents O(n^2)\n  // rescans to the end on inputs like `mailto:mailto:...`\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]{0,63}'\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  // Main rules\n  //\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","import reFactory from './lib/re.mjs'\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n  const 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\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n}\n\nfunction isOptionsObj (obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    /* eslint-disable-next-line no-prototype-builtins */\n    return acc || defaultOptions.hasOwnProperty(k)\n  }, false)\n}\n\nconst defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      const 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      const 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      const 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// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nconst 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\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|')\n\nfunction createValidator (re) {\n  return function (text, pos) {\n    const 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  // Load & clone RE patterns.\n  const re = self.re = reFactory(self.__opts__)\n\n  // Define dynamic patterns\n  const 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.email_fuzzy_global = RegExp(untpl(re.tpl_email_fuzzy), 'ig')\n  re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i')\n  re.link_fuzzy_global = RegExp(untpl(re.tpl_link_fuzzy), 'ig')\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i')\n  re.link_no_ip_fuzzy_global = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'ig')\n  re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i')\n\n  //\n  // Compile each schema\n  //\n\n  const 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    const val = self.__schemas__[name]\n\n    // skip disabled methods\n    if (val === null) { return }\n\n    const 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  const 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  self.re.schema_at_start = RegExp(`^${self.re.schema_search.source}`, 'i')\n\n  self.re.pretest = RegExp(\n    `(${self.re.schema_test.source})|(${self.re.host_fuzzy_test.source})|@`,\n    'i'\n  )\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (text, schema, index, lastIndex) {\n  const raw = text.slice(index, lastIndex)\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema = schema.toLowerCase()\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index = index\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = lastIndex\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw = raw\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text = raw\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url = raw\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  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/** 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/** 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 * 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  if (!text.length) { return false }\n\n  let m, re\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      if (this.testSchemaAt(text, m[2], re.lastIndex)) { return true }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    if (text.search(this.re.host_fuzzy_test) >= 0) {\n      if (text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy) !== null) {\n        return true\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    if (text.indexOf('@') >= 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 (text.match(this.re.email_fuzzy) !== null) { return true }\n    }\n  }\n\n  return false\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 * 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 * 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  const result = []\n  const type_schemed = []\n  const type_fuzzy_link = []\n  const type_fuzzy_email = []\n  let m, len, re\n\n  function choose (a, b) {\n    if (!a) { return b }\n    if (!b) { return a }\n    if (a.index !== b.index) { return a.index < b.index ? a : b }\n    return a.lastIndex >= b.lastIndex ? a : b\n  }\n\n  if (!text.length) { return null }\n\n  // scan for links with schema\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        type_schemed.push({\n          schema: m[2],\n          index: m.index + m[1].length,\n          lastIndex: m.index + m[0].length + len\n        })\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    re = this.__opts__.fuzzyIP ? this.re.link_fuzzy_global : this.re.link_no_ip_fuzzy_global\n    re.lastIndex = 0\n    while ((m = re.exec(text)) !== null) {\n      type_fuzzy_link.push({\n        schema: '',\n        index: m.index + m[1].length,\n        lastIndex: m.index + m[0].length\n      })\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    re = this.re.email_fuzzy_global\n    re.lastIndex = 0\n    while ((m = re.exec(text)) !== null) {\n      type_fuzzy_email.push({\n        schema: 'mailto:',\n        index: m.index + m[1].length,\n        lastIndex: m.index + m[0].length\n      })\n    }\n  }\n\n  const indexes = [0, 0, 0]\n  let lastIndex = 0\n\n  for (;;) {\n    const candidates = [\n      type_schemed[indexes[0]],\n      type_fuzzy_email[indexes[1]],\n      type_fuzzy_link[indexes[2]]\n    ]\n\n    const candidate = choose(choose(candidates[0], candidates[1]), candidates[2])\n\n    if (!candidate) { break }\n\n    if (candidate === candidates[0]) {\n      indexes[0]++\n    } else if (candidate === candidates[1]) {\n      indexes[1]++\n    } else {\n      indexes[2]++\n    }\n\n    if (candidate.index < lastIndex) { continue }\n\n    const match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex)\n    this.__compiled__[match.schema].normalize(match, this)\n    result.push(match)\n    lastIndex = candidate.lastIndex\n  }\n\n  if (result.length) {\n    return result\n  }\n\n  return null\n}\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n  if (!text.length) return null\n\n  const m = this.re.schema_at_start.exec(text)\n  if (!m) return null\n\n  const len = this.testSchemaAt(text, m[2], m[0].length)\n  if (!len) return null\n\n  const match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len)\n\n  this.__compiled__[match.schema].normalize(match, this)\n  return match\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|рф\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  // 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 * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n}\n\nexport default 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-\\x7F]/; // Note: U+007F DEL is excluded too.\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, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(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 {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.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\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).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 = codePoints => String.fromCodePoint(...codePoints);\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 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\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\tconst 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) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (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\tconst 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\tconst 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.3.1',\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\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","// markdown-it default options\n\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\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 '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\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    // Internal protection, recursion limit\n    maxNesting: 100\n  },\n\n  components: {\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\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\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 '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\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    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline',\n        'text_join'\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        'fragments_join'\n      ]\n    }\n  }\n}\n","// Commonmark default options\n\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: true,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: true,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\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 '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\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    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline',\n        'text_join'\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        'fragments_join'\n      ]\n    }\n  }\n}\n","// Main parser class\n\nimport * as utils from './common/utils.mjs'\nimport * as helpers from './helpers/index.mjs'\nimport Renderer from './renderer.mjs'\nimport ParserCore from './parser_core.mjs'\nimport ParserBlock from './parser_block.mjs'\nimport ParserInline from './parser_inline.mjs'\nimport LinkifyIt from 'linkify-it'\nimport * as mdurl from 'mdurl'\nimport punycode from 'punycode.js'\n\nimport cfg_default from './presets/default.mjs'\nimport cfg_zero from './presets/zero.mjs'\nimport cfg_commonmark from './presets/commonmark.mjs'\n\nconst config = {\n  default: cfg_default,\n  zero: cfg_zero,\n  commonmark: cfg_commonmark\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\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/\nconst 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  const str = url.trim().toLowerCase()\n\n  return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true\n}\n\nconst RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:']\n\nfunction normalizeLink (url) {\n  const 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  const 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 * 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.mjs) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) -\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.mjs) -\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.mjs) +\n *   quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n *   pairs, when typographer enabled and smartquotes on. For example, you can\n *   use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n *   `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` 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>` or `<code>`):\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><code class=\"hljs\">' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre><code class=\"hljs\">' + 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.mjs).\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.mjs)\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  // 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.mjs).\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  this.options = {}\n  this.configure(presetName)\n\n  if (options) { this.set(options) }\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/** 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  const self = this\n\n  if (utils.isString(presets)) {\n    const 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/** 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  let 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  const 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/** 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  let 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  const 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/** 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  const args = [this].concat(Array.prototype.slice.call(arguments, 1))\n  plugin.apply(plugin, args)\n  return this\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  const state = new this.core.State(src, this, env)\n\n  this.core.process(state)\n\n  return state.tokens\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/** 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  const 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 * 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\nexport default MarkdownIt\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,64,65,66],"mappings":"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"}