{"version":3,"file":"index-DDkfbFPw.mjs","sources":["../../../node_modules/@shockpkg/archive-files/esm/types.mjs","../../../node_modules/@shockpkg/archive-files/esm/util.mjs","../../../node_modules/@shockpkg/archive-files/esm/archive.mjs","../../../node_modules/@xmldom/xmldom/lib/conventions.js","../../../node_modules/@xmldom/xmldom/lib/dom.js","../../../node_modules/@xmldom/xmldom/lib/entities.js","../../../node_modules/@xmldom/xmldom/lib/sax.js","../../../node_modules/@xmldom/xmldom/lib/dom-parser.js","../../../node_modules/@xmldom/xmldom/lib/index.js","../../../node_modules/@shockpkg/plist-dom/esm/util.mjs","../../../node_modules/@shockpkg/plist-dom/esm/options.mjs","../../../node_modules/@shockpkg/plist-dom/esm/value.mjs","../../../node_modules/@shockpkg/plist-dom/esm/value/boolean.mjs","../../../node_modules/@shockpkg/plist-dom/esm/value/data.mjs","../../../node_modules/@shockpkg/plist-dom/esm/value/integer.mjs","../../../node_modules/@shockpkg/plist-dom/esm/value/real.mjs","../../../node_modules/@shockpkg/plist-dom/esm/value/string.mjs","../../../node_modules/@shockpkg/plist-dom/esm/value/dict.mjs","../../../node_modules/@shockpkg/plist-dom/esm/value/array.mjs","../../../node_modules/@shockpkg/plist-dom/esm/plist.mjs","../../../node_modules/@shockpkg/hdi-mac/esm/mounter.mjs","../../../node_modules/@shockpkg/archive-files/esm/archive/hdi.mjs"],"sourcesContent":["export let PathType = /*#__PURE__*/function (PathType) {\n  PathType[\"DIRECTORY\"] = \"directory\";\n  PathType[\"FILE\"] = \"file\";\n  PathType[\"SYMLINK\"] = \"symlink\";\n  PathType[\"RESOURCE_FORK\"] = \"resource-fork\";\n  return PathType;\n}({});\n//# sourceMappingURL=types.mjs.map","import { constants as fsConstants } from 'node:fs';\nimport { chmod, lstat, open, readdir, readlink, symlink, utimes } from 'node:fs/promises';\nimport { join as pathJoin } from 'node:path';\nimport { Writable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport { PathType } from \"./types.mjs\";\nconst {\n  O_WRONLY,\n  O_SYMLINK\n} = fsConstants;\nexport const fsLchmodSupported = !!O_SYMLINK;\nexport const fsLutimesSupported = !!O_SYMLINK;\n\n/**\n * Normalize an entry path.\n *\n * @param path Path string.\n * @returns Normalized path.\n */\nexport function pathNormalize(path) {\n  return path.replace(/\\\\/g, '/').replace(/([^/])\\/+$/, '$1');\n}\n\n/**\n * Get path to the resource fork pseudo-file.\n *\n * @param path Path string.\n * @returns Resource fork pseudo-file path.\n */\nexport function pathResourceFork(path) {\n  return pathJoin(path, '..namedfork', 'rsrc');\n}\n\n/**\n * Get path type from stat object, or null if unsupported.\n *\n * @param stat Stats object.\n * @returns Path type.\n */\nexport function statToPathType(stat) {\n  if (stat.isSymbolicLink()) {\n    return PathType.SYMLINK;\n  }\n  if (stat.isDirectory()) {\n    return PathType.DIRECTORY;\n  }\n  if (stat.isFile()) {\n    return PathType.FILE;\n  }\n  return null;\n}\n\n/**\n * Get path type from stat mode, or null if unsupported.\n *\n * @param mode Stat mode.\n * @returns Path type.\n */\nexport function modeToPathType(mode) {\n  if (bitwiseAndEqual(mode, 0o0120000)) {\n    return PathType.SYMLINK;\n  }\n  if (bitwiseAndEqual(mode, 0o0040000)) {\n    return PathType.DIRECTORY;\n  }\n  if (bitwiseAndEqual(mode, 0o0100000)) {\n    return PathType.FILE;\n  }\n  return null;\n}\n\n/**\n * Get permission bits from mode value.\n *\n * @param mode Stat mode.\n * @returns Permission bits.\n */\nexport function modePermissionBits(mode) {\n  // eslint-disable-next-line no-bitwise\n  return mode & 0b111111111;\n}\n\n/**\n * Check if all the bits set.\n *\n * @param value Bits value.\n * @param mask Mask value.\n * @returns True of all the bits set.\n */\nexport function bitwiseAndEqual(value, mask) {\n  // eslint-disable-next-line no-bitwise\n  return (value & mask) === mask;\n}\n\n/**\n * Read a stream into a buffer.\n * Reading a stream into a buffer should be avoided where possible.\n * This is however useful for some small streams.\n *\n * @param stream Readable stream.\n * @returns Full buffer.\n */\nexport async function streamToBuffer(stream) {\n  const datas = [];\n  let size = 0;\n  await pipeline(stream, new Writable({\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    write: (data, _encoding, cb) => {\n      datas.push(data);\n      size += data.length;\n      cb();\n    }\n  }));\n  return Buffer.concat(datas, size);\n}\n\n/**\n * Wrapper for lchmod, does nothing on unsupported platforms.\n *\n * @param path File path.\n * @param mode File mode.\n */\nexport async function fsLchmod(path, mode) {\n  // Skip if not supported.\n  if (!fsLchmodSupported) {\n    return;\n  }\n\n  // eslint-disable-next-line no-bitwise\n  const fd = await open(path, O_WRONLY | O_SYMLINK);\n  try {\n    await fd.chmod(mode);\n  } finally {\n    await fd.close();\n  }\n}\n\n/**\n * Wrapper for utimes.\n *\n * @param path File path.\n * @param atime Access time.\n * @param mtime Modification time.\n */\nexport async function fsUtimes(path, atime, mtime) {\n  await utimes(path, atime, mtime);\n}\n\n/**\n * Implementation of lutimes, does nothing on unsupported platforms.\n *\n * @param path File path.\n * @param atime Access time.\n * @param mtime Modification time.\n */\nexport async function fsLutimes(path, atime, mtime) {\n  // Skip if not supported.\n  if (!fsLutimesSupported) {\n    return;\n  }\n\n  // eslint-disable-next-line no-bitwise\n  const fd = await open(path, O_WRONLY | O_SYMLINK);\n  try {\n    await fd.utimes(atime, mtime);\n  } finally {\n    await fd.close();\n  }\n}\n\n/**\n * A readlink wrapper that returns raw link buffer.\n *\n * @param path Link path.\n * @returns Raw link.\n */\nexport async function fsReadlinkRaw(path) {\n  return readlink(path, 'buffer');\n}\n\n/**\n * Wrapper for symlink.\n *\n * @param path Path of symbolic link.\n * @param target Target of symbolic link.\n */\nexport async function fsSymlink(path, target) {\n  await symlink(target, path);\n}\n\n/**\n * Wrapper for chmod.\n *\n * @param path File path.\n * @param mode File mode.\n */\nexport async function fsChmod(path, mode) {\n  await chmod(path, mode);\n}\n\n/**\n * A readdir wrapper with consistent output.\n *\n * @param path Directory path.\n * @returns Directory listing.\n */\nexport async function fsReaddir(path) {\n  return (await readdir(path)).sort();\n}\n\n/**\n * An lstat wrapper.\n *\n * @param path Path string.\n * @returns Stat object.\n */\nexport async function fsLstat(path) {\n  return lstat(path);\n}\n\n/**\n * An lstat wrapper returning null if not exist.\n *\n * @param path Path string.\n * @returns Stat object.\n */\nexport async function fsLstatExists(path) {\n  try {\n    return await fsLstat(path);\n  } catch (err) {\n    const {\n      code\n    } = err;\n    if (code === 'ENOENT' || code === 'ENOTDIR') {\n      return null;\n    }\n    throw err;\n  }\n}\n\n/**\n * Walk file system path.\n * If callback returns false skips recursing a directory.\n * If callback returns null aborts walking.\n *\n * @param base Directory path.\n * @param itter Callback for each entry.\n * @param options Walk options.\n */\nexport async function fsWalk(base, itter, options = {}) {\n  const {\n    ignoreUnreadableDirectories\n  } = options;\n  const stack = (await fsReaddir(base)).reverse();\n  while (stack.length) {\n    const entry = stack.pop();\n    const fullPath = pathJoin(base, entry);\n    // eslint-disable-next-line no-await-in-loop\n    const stat = await fsLstat(fullPath);\n\n    // Callback, possibly stop recursion on directory.\n    // eslint-disable-next-line no-await-in-loop\n    const recurse = await itter(entry, stat);\n    if (recurse === null) {\n      break;\n    }\n    if (recurse === false || !stat.isDirectory()) {\n      continue;\n    }\n\n    // Recurse down.\n    let subs = [];\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      subs = await fsReaddir(fullPath);\n    } catch (err) {\n      if (!(err && ignoreUnreadableDirectories && err.code === 'EACCES')) {\n        throw err;\n      }\n    }\n    for (let i = subs.length; i--;) {\n      stack.push(pathJoin(entry, subs[i]));\n    }\n  }\n}\n//# sourceMappingURL=util.mjs.map","/* eslint-disable max-classes-per-file */\n\nimport { createWriteStream } from 'node:fs';\nimport { mkdir, rm, writeFile } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport { Readable, pipeline } from 'node:stream';\nimport { promisify } from 'node:util';\nconst pipe = promisify(pipeline);\nimport { PathType } from \"./types.mjs\";\nimport { fsChmod, fsLchmod, fsLstatExists, fsLutimes, fsSymlink, fsUtimes, modePermissionBits, pathNormalize, pathResourceFork, streamToBuffer } from \"./util.mjs\";\n/**\n * Entry object.\n */\nexport class Entry {\n  /**\n   * Entry archive.\n   */\n\n  /**\n   * Entry type.\n   */\n\n  /**\n   * Entry path.\n   */\n\n  /**\n   * Entry path, raw.\n   */\n\n  /**\n   * Entry size.\n   */\n\n  /**\n   * Entry size, compressed.\n   */\n\n  /**\n   * Entry mode.\n   */\n\n  /**\n   * Entry uid.\n   */\n\n  /**\n   * Entry gid.\n   */\n\n  /**\n   * Entry uname.\n   */\n\n  /**\n   * Entry gname.\n   */\n\n  /**\n   * Entry atime.\n   */\n\n  /**\n   * Entry mtime.\n   */\n\n  /**\n   * Read data.\n   */\n\n  /**\n   * Read rsrc.\n   */\n\n  /**\n   * Read symlink.\n   */\n\n  /**\n   * Entry triggering.\n   */\n  _triggering = false;\n\n  /**\n   * Entry triggered.\n   */\n  _triggered = false;\n\n  /**\n   * Entry extracted.\n   */\n  _extracted = false;\n\n  /**\n   * Entry constructor.\n   *\n   * @param info Info object.\n   */\n  constructor(info) {\n    this.archive = info.archive;\n    this.type = info.type;\n    this.pathRaw = info.pathRaw;\n    this.path = pathNormalize(info.pathRaw);\n    this.size = info.size ?? null;\n    this.sizeComp = info.sizeComp ?? null;\n    this.mode = info.mode ?? null;\n    this.uid = info.uid ?? null;\n    this.gid = info.gid ?? null;\n    this.uname = info.uname ?? null;\n    this.gname = info.gname ?? null;\n    this.atime = info.atime ?? null;\n    this.mtime = info.mtime ?? null;\n    this._readData = info.readData ?? null;\n    this._readRsrc = info.readRsrc ?? null;\n    this._readSymlink = info.readSymlink ?? null;\n  }\n\n  /**\n   * This entry path includes named volume.\n   *\n   * @returns Entry has volume name in path.\n   */\n  get hasNamedVolume() {\n    return this.archive.hasNamedVolumes;\n  }\n\n  /**\n   * This entry volume name, or null.\n   *\n   * @returns Entry path volume name.\n   */\n  get volumeName() {\n    if (this.hasNamedVolume) {\n      const {\n        path\n      } = this;\n      return path.slice(0, path.indexOf('/'));\n    }\n    return null;\n  }\n\n  /**\n   * This entry path without any possible volume name.\n   *\n   * @returns Entry path without the volume name.\n   */\n  get volumePath() {\n    const {\n      path\n    } = this;\n    if (this.hasNamedVolume) {\n      return path.slice(path.indexOf('/') + 1);\n    }\n    return path;\n  }\n\n  /**\n   * Read entry as stream, or null if nothing to read.\n   * Consuming function will need to wait for stream to close.\n   *\n   * @returns Readable stream or null if nothing to read.\n   */\n  async stream() {\n    this._beginExtract();\n    return this._stream();\n  }\n\n  /**\n   * Read entire entry into a Buffer.\n   *\n   * @returns Buffer or null if nothing to be read.\n   */\n  async read() {\n    this._beginExtract();\n    const stream = await this._stream();\n    return stream ? streamToBuffer(stream) : null;\n  }\n\n  /**\n   * Extract entry.\n   *\n   * @param path Extract path.\n   * @param options Extract options.\n   */\n  async extract(path, options = {}) {\n    this._beginExtract();\n    await this._extract(path, options);\n  }\n\n  /**\n   * Trigger on itterator function.\n   *\n   * @param itter Itterator function.\n   * @returns Return value.\n   */\n  async trigger(itter) {\n    let r;\n    if (this._triggered) {\n      throw new Error('Archive entry already triggered');\n    }\n    this._triggered = this._triggering = true;\n    try {\n      r = await itter(this);\n    } finally {\n      this._triggering = false;\n    }\n    return r;\n  }\n\n  /**\n   * Run again after reading.\n   *\n   * @param path Extract path, relative.\n   * @param pathFull An optional full path to be used.\n   * @param options Extract options.\n   */\n  async setAttributes(path, pathFull = null, options = {}) {\n    const pathSet = pathFull === null ? path : pathFull;\n    const {\n      ignorePermissions,\n      ignoreTimes\n    } = options;\n    const {\n      type,\n      mode,\n      atime,\n      mtime\n    } = this;\n    let link = false;\n    switch (type) {\n      case PathType.FILE:\n        {\n          break;\n        }\n      case PathType.RESOURCE_FORK:\n        {\n          break;\n        }\n      case PathType.DIRECTORY:\n        {\n          break;\n        }\n      case PathType.SYMLINK:\n        {\n          link = true;\n          break;\n        }\n      default:\n        {\n          throw new Error(`Unsupported path type: ${type}`);\n        }\n    }\n    const atimeSet = atime || mtime || null;\n    const mtimeSet = mtime || atime || null;\n    if (!ignorePermissions && mode !== null) {\n      const chmod = link ? fsLchmod : fsChmod;\n      const modeSet = modePermissionBits(mode);\n      await chmod(pathSet, modeSet);\n    }\n    if (!ignoreTimes && atimeSet && mtimeSet) {\n      const utimes = link ? fsLutimes : fsUtimes;\n      await utimes(pathSet, atimeSet, mtimeSet);\n    }\n  }\n\n  /**\n   * Method to call before begining extraction.\n   * Throws error if extraction already started or entry not active.\n   */\n  _beginExtract() {\n    if (!this._triggering) {\n      throw new Error('Archive entry is not active');\n    }\n    if (this._extracted) {\n      throw new Error('Archive entry can only be extracted once');\n    }\n    this._extracted = true;\n  }\n\n  /**\n   * Create an extract error for path that exists.\n   *\n   * @param path Extract path.\n   * @returns Error object.\n   */\n  _errorExtractPathExists(path) {\n    return new Error(`Extract path already exists: ${path}`);\n  }\n\n  /**\n   * Create an extract error for a resource fork not going to a file.\n   *\n   * @param path Extract path.\n   * @returns Error object.\n   */\n  _errorNoResourceFork(path) {\n    return new Error(`Extract path for resource fork not a file: ${path}`);\n  }\n\n  /**\n   * Extract entry.\n   *\n   * @param path Extract path.\n   * @param options Extract options.\n   */\n  async _extract(path, options) {\n    this.archive.afterReadSetAttributesRemove(path);\n    const {\n      type\n    } = this;\n    switch (type) {\n      case PathType.FILE:\n        {\n          await this._extractFile(path, options);\n          break;\n        }\n      case PathType.RESOURCE_FORK:\n        {\n          await this._extractResourceFork(path, options);\n          break;\n        }\n      case PathType.DIRECTORY:\n        {\n          await this._extractDirectory(path, options);\n          break;\n        }\n      case PathType.SYMLINK:\n        {\n          await this._extractSymlink(path, options);\n          break;\n        }\n      default:\n        {\n          throw new Error(`Unsupported path type: ${type}`);\n        }\n    }\n  }\n\n  /**\n   * Base function for extracting stream to a file.\n   *\n   * @param path Extract path.\n   * @param reader Reader function.\n   * @param options Extract options.\n   */\n  async _extractStreamToFile(path, reader, options) {\n    const {\n      replace\n    } = options;\n\n    // Check if something exists at path, optionally removing.\n    const stat = await fsLstatExists(path);\n    if (stat) {\n      // If replacing, then remove, else throw.\n      if (replace) {\n        await rm(path, {\n          recursive: true,\n          force: true\n        });\n      } else {\n        throw this._errorExtractPathExists(path);\n      }\n    } else {\n      await mkdir(dirname(path), {\n        recursive: true\n      });\n    }\n\n    // Write file.\n    await writeFile(path, Buffer.alloc(0));\n    const stream = await reader();\n    if (stream) {\n      await pipe(stream, createWriteStream(path));\n    }\n\n    // Set attributes.\n    await this.setAttributes(path, null, options);\n  }\n\n  /**\n   * Extract as a file.\n   *\n   * @param path Extract path.\n   * @param options Extract options.\n   */\n  async _extractFile(path, options) {\n    const readData = this._readData;\n    if (!readData) {\n      throw new Error('Internal error');\n    }\n    await this._extractStreamToFile(path, readData, options);\n  }\n\n  /**\n   * Extract as resource fork to an existing file.\n   *\n   * @param path Extract path.\n   * @param options Extract options.\n   */\n  async _extractResourceFork(path, options) {\n    const readRsrc = this._readRsrc;\n    if (!readRsrc) {\n      throw new Error('Internal error');\n    }\n\n    // Optionally extract as a data file.\n    if (options.resourceForkAsFile) {\n      await this._extractStreamToFile(path, readRsrc, options);\n      return;\n    }\n\n    // Check if file exists at path, else throw.\n    const stat = await fsLstatExists(path);\n    if (!stat || !stat.isFile()) {\n      throw this._errorNoResourceFork(path);\n    }\n\n    // Create resource fork path.\n    const pathRsrc = pathResourceFork(path);\n\n    // Write the resource fork.\n    const stream = await readRsrc();\n\n    // eslint-disable-next-line unicorn/prefer-ternary\n    if (stream) {\n      await pipe(stream, createWriteStream(pathRsrc));\n    } else {\n      await writeFile(pathRsrc, Buffer.alloc(0));\n    }\n\n    // Set attributes.\n    await this.setAttributes(path, null, options);\n  }\n\n  /**\n   * Extract as a directory.\n   *\n   * @param path Extract path.\n   * @param options Extract options.\n   */\n  async _extractDirectory(path, options) {\n    const {\n      replace\n    } = options;\n\n    // Check if something exists at path, else create.\n    const stat = await fsLstatExists(path);\n    if (stat) {\n      // If not directory, then remove and replace it, else throw.\n      if (!stat.isDirectory()) {\n        if (replace) {\n          await rm(path, {\n            recursive: true,\n            force: true\n          });\n          await mkdir(path, {\n            recursive: true\n          });\n        } else {\n          throw this._errorExtractPathExists(path);\n        }\n      }\n    } else {\n      await mkdir(path, {\n        recursive: true\n      });\n    }\n\n    // Set directory attributes after any children are added.\n    this.archive.afterReadSetAttributes(path, this, {\n      ...options\n    });\n  }\n\n  /**\n   * Extract as a symlink.\n   *\n   * @param path Extract path.\n   * @param options Extract options.\n   */\n  async _extractSymlink(path, options) {\n    const readSymlink = this._readSymlink;\n    if (!readSymlink) {\n      throw new Error('Internal error');\n    }\n    const {\n      replace,\n      symlinkAsFile\n    } = options;\n\n    // Check if something exists at path, optionally removing.\n    const stat = await fsLstatExists(path);\n    if (stat) {\n      // If replacing, then remove, else throw.\n      if (replace) {\n        await rm(path, {\n          recursive: true,\n          force: true\n        });\n      } else {\n        throw this._errorExtractPathExists(path);\n      }\n    } else {\n      // Ensure base directory exists.\n      await mkdir(dirname(path), {\n        recursive: true\n      });\n    }\n\n    // Read target.\n    const target = await readSymlink();\n\n    // Create link, optionally as a file.\n    // eslint-disable-next-line unicorn/prefer-ternary\n    if (symlinkAsFile) {\n      await writeFile(path, target);\n    } else {\n      await fsSymlink(path, target);\n    }\n\n    // Set attributes.\n    await this.setAttributes(path, null, options);\n  }\n\n  /**\n   * Read as stream.\n   *\n   * @returns Readable stream.\n   */\n  async _stream() {\n    const {\n      type\n    } = this;\n    switch (type) {\n      case PathType.FILE:\n        {\n          return this._streamFile();\n        }\n      case PathType.RESOURCE_FORK:\n        {\n          return this._streamResourceFork();\n        }\n      case PathType.DIRECTORY:\n        {\n          return this._streamDirectory();\n        }\n      case PathType.SYMLINK:\n        {\n          return this._streamSymlink();\n        }\n      default:\n        {\n          throw new Error(`Unsupported path type: ${type}`);\n        }\n    }\n  }\n\n  /**\n   * Read file as stream.\n   *\n   * @returns Readable stream.\n   */\n  async _streamFile() {\n    const readData = this._readData;\n    if (!readData) {\n      throw new Error('Internal error');\n    }\n    return readData();\n  }\n\n  /**\n   * Read resource fork as stream.\n   *\n   * @returns Readable stream.\n   */\n  async _streamResourceFork() {\n    const readRsrc = this._readRsrc;\n    if (!readRsrc) {\n      throw new Error('Internal error');\n    }\n    return readRsrc();\n  }\n\n  /**\n   * Read directory null stream.\n   *\n   * @returns Null stream.\n   */\n  async _streamDirectory() {\n    return null;\n  }\n\n  /**\n   * Read symlink as stream.\n   *\n   * @returns Readable stream.\n   */\n  async _streamSymlink() {\n    const readSymlink = this._readSymlink;\n    if (!readSymlink) {\n      throw new Error('Internal error');\n    }\n    const r = new Readable({\n      // eslint-disable-next-line jsdoc/require-jsdoc\n      read: () => {\n        readSymlink().then(d => {\n          r.push(d);\n          // eslint-disable-next-line unicorn/no-array-push-push\n          r.push(null);\n        }, err => {\n          r.emit('error', err);\n        });\n      }\n    });\n    return r;\n  }\n}\n\n/**\n * Archive object.\n */\nexport class Archive {\n  /**\n   * List of file extensions, or null.\n   */\n  static FILE_EXTENSIONS = null;\n\n  /**\n   * Archive has named volumes that each entry will be under.\n   */\n  static HAS_NAMED_VOLUMES = false;\n\n  /**\n   * Entry constructor.\n   */\n  Entry = Entry;\n\n  /**\n   * File path.\n   */\n\n  /**\n   * Flag for currently reading.\n   */\n  _reading = false;\n\n  /**\n   * Map of entries to set attributes on after reading.\n   */\n  _afterReadSetAttributes = null;\n\n  /**\n   * Archive constructor.\n   *\n   * @param path File path.\n   */\n  constructor(path) {\n    this.path = path;\n  }\n\n  /**\n   * List of file extensions used by this format.\n   *\n   * @returns List of file extensions.\n   */\n  get fileExtensions() {\n    return this.constructor.FILE_EXTENSIONS || null;\n  }\n\n  /**\n   * Archive has named volumes that each entry will be under.\n   *\n   * @returns Archive has named volumns.\n   */\n  get hasNamedVolumes() {\n    return this.constructor.HAS_NAMED_VOLUMES;\n  }\n\n  /**\n   * Add an instance to set attributes after the read finishes.\n   *\n   * @param path Path string.\n   * @param entry Entry instance.\n   * @param options Extract options.\n   */\n  afterReadSetAttributes(path, entry, options = {}) {\n    const afters = this._afterReadSetAttributes;\n    if (!afters) {\n      throw new Error('Archive after read callbacks can only be added while reading');\n    }\n    afters.set(resolve(path), {\n      path,\n      entry,\n      options\n    });\n  }\n\n  /**\n   * Remove an instance to set attributes after the read finishes.\n   *\n   * @param path Path string.\n   */\n  afterReadSetAttributesRemove(path) {\n    const afters = this._afterReadSetAttributes;\n    if (!afters) {\n      throw new Error('Archive after read callbacks can only be removed while reading');\n    }\n    afters.delete(resolve(path));\n  }\n\n  /**\n   * Read archive.\n   * If the itter callback returns false, reading ends.\n   * If the itter callback returns null, skip descent where available.\n   *\n   * @param itter Async callback for each archive entry.\n   */\n  async read(itter) {\n    if (this._reading) {\n      throw new Error('Archive already being read');\n    }\n    this._reading = true;\n\n    // Reset the after entries.\n    this._afterReadSetAttributes = new Map();\n\n    // Read and handle all the afters, reset after.\n    try {\n      await this._read(itter);\n      await this._afterReadSetAttributesTrigger();\n    } finally {\n      this._afterReadSetAttributes = null;\n      this._reading = false;\n    }\n  }\n\n  /**\n   * Run all after read set attributes.\n   */\n  async _afterReadSetAttributesTrigger() {\n    const afters = this._afterReadSetAttributes;\n    if (!afters) {\n      return;\n    }\n\n    // Prioritize by path length.\n    const resolves = [];\n    for (const [resolved] of afters) {\n      resolves.push(resolved);\n    }\n    resolves.sort((a, b) => b.length - a.length);\n    for (const resolved of resolves) {\n      const ent = afters.get(resolved);\n      if (!ent) {\n        throw new Error('Internal error');\n      }\n      const {\n        entry,\n        path,\n        options\n      } = ent;\n      // eslint-disable-next-line no-await-in-loop\n      await entry.setAttributes(path, resolved, options);\n    }\n  }\n\n  /**\n   * Read archive, class implementation.\n   * If the itter callback returns false, reading ends.\n   * If the itter callback returns null, skip descent where available.\n   *\n   * @param itter Async callback for each archive entry.\n   */\n}\n//# sourceMappingURL=archive.mjs.map","'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array<T> | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array<T> | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial<Pick<ArrayConstructor['prototype'], 'find'>>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick<ObjectConstructor, 'freeze'> = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly<T>}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record<string, boolean | undefined>} current\n * @param {string} element\n * @returns {Record<string, boolean | undefined>}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index  unsigned long\n\t *   Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i<this.length;i++){\n\t\t\tserializeToString(this[i],buf,isHTML,nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * @private\n\t * @param {function (Node):boolean} predicate\n\t * @returns {Node[]}\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * @private\n\t * @param {Node} item\n\t * @returns {number}\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\n\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list,'length',ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i] || null;\n}\n\n_extends(LiveNodeList,NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used\n * to represent collections of nodes that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n */\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i]\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n//\t\tif(key.indexOf(':')>0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t *   (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument  DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI,  qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t *   (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t  or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n  \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    // Introduced in DOM Level 2:\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\n\tinsertBefore :  function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i<len;i++){\n\t\t\t// add namespaces for attributes\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\tvisibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });\n\t\t\t}else if(attr.nodeName == 'xmlns'){\n\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t}\n\t\t}\n\n\t\tfor(var i=0;i<len;i++){\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = attr.prefix||'';\n\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : \"xmlns\", uri);\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t\t}\n\t\t\tserializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t}\n\n\t\t// add namespace for current node\n\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {\n\t\t\tvar prefix = node.prefix||'';\n\t\t\tvar uri = node.namespaceURI;\n\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : \"xmlns\", uri);\n\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t}\n\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',prefixedNodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&amp;` and `&lt;` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" &gt; \", and must, for compatibility,\n\t\t * be escaped using either `&gt;` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC ', pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push(' ', sysid);\n\t\t\t}\n\t\t\tbuf.push('>');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i<len;i++){\n\t\t\t//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));\n\t\t//}\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t//case ENTITY_REFERENCE_NODE:\n\t//case PROCESSING_INSTRUCTION_NODE:\n\t////case TEXT_NODE:\n\t//case CDATA_SECTION_NODE:\n\t//case COMMENT_NODE:\n\t//\tdeep = false;\n\t//\tbreak;\n\t//case DOCUMENT_NODE:\n\t//case DOCUMENT_TYPE_NODE:\n\t//cannot be imported.\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE：\n\t//can not hit in level3\n\t//default:throw e;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n//\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\n//\t\t\t\t\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor (var n in node) {\n\t\tif (Object.prototype.hasOwnProperty.call(node, n)) {\n\t\t\tvar v = node[n];\n\t\t\tif (typeof v != \"object\") {\n\t\t\t\tif (v != node2[n]) {\n\t\t\t\t\tnode2[n] = v;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value\n}\n//do dynamic\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = data;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tfunction getTextContent(node){\n\t\t\tswitch(node.nodeType){\n\t\t\tcase ELEMENT_NODE:\n\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\tvar buf = [];\n\t\t\t\tnode = node.firstChild;\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\t\t\t\treturn buf.join('');\n\t\t\tdefault:\n\t\t\t\treturn node.nodeValue;\n\t\t\t}\n\t\t}\n\n\t\t__set__ = function(object,key,value){\n\t\t\t//console.log(value)\n\t\t\tobject['$$'+key] = value\n\t\t}\n\t}\n}catch(e){//ie8\n}\n\n//if(typeof require == 'function'){\n\texports.DocumentType = DocumentType;\n\texports.DOMException = DOMException;\n\texports.DOMImplementation = DOMImplementation;\n\texports.Element = Element;\n\texports.Node = Node;\n\texports.NodeList = NodeList;\n\texports.XMLSerializer = XMLSerializer;\n//}\n","'use strict';\n\nvar freeze = require('./conventions').freeze;\n\n/**\n * The entities that are predefined in every XML document.\n *\n * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1\n * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia\n */\nexports.XML_ENTITIES = freeze({\n\tamp: '&',\n\tapos: \"'\",\n\tgt: '>',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4]   \tNameStartChar\t   ::=   \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a]   \tNameChar\t   ::=   \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5]   \tName\t   ::=   \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el<el />\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t    \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t    \t\t\tdoc.appendChild(text);\n\t    \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t        \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t        \t\tend = tagStart+1+tagName.length;\n\t        \t}else if(tagName.match(/\\s</)){\n\t        \t\ttagName = tagName.replace(/[\\s<].*/,'');\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' maybe not complete');\n\t        \t\tend = tagStart+1+tagName.length;\n\t\t\t\t}\n\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\tvar endMatch = config.tagName == tagName;\n\t\t\t\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\n\t\t        if(endIgnoreCaseMach){\n\t\t        \tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\t\t\tif(localNSMap){\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!endMatch){\n\t\t            \terrorHandler.fatalError(\"end tag name: \"+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case\n\t\t\t\t\t}\n\t\t        }else{\n\t\t        \tparseStack.push(config)\n\t\t        }\n\n\t\t\t\tend++;\n\t\t\t\tbreak;\n\t\t\t\t// end elment\n\t\t\tcase '?':// <?...?>\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseDCC(source,tagStart,domBuilder,errorHandler);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\t\t\t\t//elStartEnd\n\t\t\t\tvar end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\n\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(locator && len){\n\t\t\t\t\tvar locator2 = copyLocator(locator,{});\n\t\t\t\t\t//try{//attribute position fixed\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.locator = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator2\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator;\n\t\t\t\t}else{\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (NAMESPACE.isHTML(el.uri) && !el.closed) {\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t} else {\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}\n\t\t}catch(e){\n\t\t\tif (e instanceof ParseError) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\terrorHandler.error('element parse error: '+e)\n\t\t\tend = -1;\n\t\t}\n\t\tif(end>start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退，有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed  = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName =  el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos =  source.lastIndexOf('</'+tagName+'>')\n\t\tif(pos<elStartEnd){//忘记闭合\n\t\t\tpos = source.lastIndexOf('</'+tagName)\n\t\t}\n\t\tcloseMap[tagName] =pos\n\t}\n\treturn pos<elStartEnd;\n\t//}\n}\n\nfunction _copy (source, target) {\n\tfor (var n in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\t//append comment source.substring(4,end)//<!--\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\t//error\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tdomBuilder.startCDATA();\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\tdomBuilder.endCDATA()\n\t\t\treturn end+3;\n\t\t}\n\t\t//<!DOCTYPE\n\t\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)\n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = false;\n\t\t\tvar sysid = false;\n\t\t\tif(len>3){\n\t\t\t\tif(/^public$/i.test(matchs[2][0])){\n\t\t\t\t\tpubid = matchs[3][0];\n\t\t\t\t\tsysid = len>4 && matchs[4][0];\n\t\t\t\t}else if(/^system$/i.test(matchs[2][0])){\n\t\t\t\t\tsysid = matchs[3][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name, pubid, sysid);\n\t\t\tdomBuilder.endDTD();\n\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction ElementAttributes(){\n\tthis.attributeNames = {}\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\taddValue:function(qName, value, offset) {\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetLocator:function(i){return this[i].locator},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n//\t,getIndex:function(uri, localName)){\n//\t\tif(localName){\n//\n//\t\t}else{\n//\t\t\tvar qName = uri\n//\t\t}\n//\t},\n//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n//\tgetType:function(uri,localName){}\n//\tgetType:function(i){},\n}\n\n\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nexports.XMLReader = XMLReader;\nexports.ParseError = ParseError;\n","var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA\n * > 2. the two-character sequence #xD #x85\n * > 3. the single character #x85\n * > 4. the single character #x2028\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeLineEndings(input) {\n\treturn input\n\t\t.replace(/\\r[\\n\\u0085]/g, '\\n')\n\t\t.replace(/[\\r\\u0085\\u2028]/g, '\\n')\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {DOMHandler} [domBuilder]\n * @property {Function} [errorHandler]\n * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing\n * \t\t\t\t\t\tdefaults to `normalizeLineEndings`\n * @property {Locator} [locator]\n * @property {Record<string, string>} [xmlns]\n *\n * @see normalizeLineEndings\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code\n * from a string into a DOM `Document`.\n *\n * _xmldom is different from the spec in that it allows an `options` parameter,\n * to override the default behavior._\n *\n * @param {DOMParserOptions} [options]\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax =  new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n  \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tvar normalize = options.normalizeLineEndings || normalizeLineEndings;\n\tif (source && typeof source === 'string') {\n\t\tsax.parse(\n\t\t\tnormalize(source),\n\t\t\tdefaultNSMap,\n\t\t\tentityMap\n\t\t)\n\t} else {\n\t\tsax.errorHandler.error('invalid doc source')\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n    this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n    \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n    \tif (this.locator) {\n        \tthis.doc.documentURI = this.locator.systemId;\n    \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\n\t    var len = attrs.length;\n\t    appendElement(this, el);\n\t    this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t    for (var i = 0 ; i < len; i++) {\n\t        var namespaceURI = attrs.getURI(i);\n\t        var value = attrs.getValue(i);\n\t        var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t    }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t    var ins = this.doc.createProcessingInstruction(target, data);\n\t    this.locator && position(this.locator,ins)\n\t    appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\n\t    \tlocator.lineNumber = 0;\n\t    }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t    var comm = this.doc.createComment(chars);\n\t    this.locator && position(this.locator,comm)\n\t    appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t    //used in characters() methods\n\t    this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t    this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t    if (impl && impl.createDocumentType) {\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\n\t        this.locator && position(this.locator,dt)\n\t        appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t    }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n *  #comment(chars, start, length)\n *  #startCDATA()\n *  #endCDATA()\n *  #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n *  #endDTD()\n *  #startEntity(name)\n *  #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n *  #elementDecl(name, model)\n *  #externalEntityDecl(name, publicId, systemId)\n *  #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n *  #resolveEntity(String name,String publicId,String baseURI,String systemId)\n *  #resolveEntity(publicId, systemId)\n *  #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n *  #notationDecl(name, publicId, systemId) {};\n *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n    if (!hander.currentElement) {\n        hander.doc.appendChild(node);\n    } else {\n        hander.currentElement.appendChild(node);\n    }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.DOMParser = DOMParser;\n","var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n","import { DOMParser } from '@xmldom/xmldom';\nconst B6 = 0x3f;\nconst B8 = 0xff;\nconst C64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst C64M = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 64, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51];\n/**\n * Decode an XML string.\n *\n * @param xml XML string.\n * @returns Decoded declaration, doctype, and document element.\n */\nexport function xmlDecode(xml) {\n  let declaration = null;\n  let doctype = null;\n  const errors = [];\n  const parser = new DOMParser({\n    locator: {},\n    errorHandler: {\n      /**\n       * Warning callback.\n       *\n       * @param e Error string.\n       */\n      warning: e => {\n        // Ignore warnings.\n      },\n      /**\n       * Error callback.\n       *\n       * @param e Error string.\n       */\n      error: e => {\n        errors.push(e);\n      },\n      /**\n       * Fatal error callback.\n       *\n       * @param e Error string.\n       */\n      fatalError: e => {\n        errors.push(e);\n      }\n    }\n  });\n  const doc = parser.parseFromString(xml, 'text/xml');\n  if (errors.length) {\n    throw new Error(`XML decode error: ${errors[0]}`);\n  }\n  const {\n    childNodes\n  } = doc;\n  const documentElement = doc.documentElement || null;\n  for (let i = 0, l = childNodes.length; i < l; i++) {\n    const childNode = childNodes[i];\n    if (childNode === documentElement) {\n      break;\n    }\n    const str = childNode.toString();\n    if (/^<\\?xml[^>]*\\?>$/.test(str)) {\n      declaration = str;\n    }\n    if (/^<!DOCTYPE[^>]*>$/.test(str)) {\n      doctype = str;\n    }\n  }\n  if (!documentElement) {\n    throw new Error('XML decode error: No document element');\n  }\n  return {\n    declaration,\n    doctype,\n    documentElement\n  };\n}\n\n/**\n * List XML element child elements.\n * Throws if non-whitespace nodes are found.\n *\n * @param element XML element.\n * @returns XML element list.\n */\nexport function xmlElementChildElements(element) {\n  const {\n    childNodes\n  } = element;\n  const r = [];\n  for (let i = 0, l = childNodes.length; i < l; i++) {\n    const childNode = childNodes[i];\n    if ('tagName' in childNode) {\n      r.push(childNode);\n      continue;\n    }\n    const {\n      nodeValue\n    } = childNode;\n    if (nodeValue && !/^\\s*$/.test(nodeValue)) {\n      throw new Error(`Found text children of: ${element.tagName}`);\n    }\n  }\n  return r;\n}\n\n/**\n * Get the XML element text node.\n * Returns null if none, throws if multiple elements.\n *\n * @param element XML element.\n * @returns XML text node list.\n */\nexport function xmlElementText(element) {\n  const {\n    childNodes\n  } = element;\n  let r = null;\n  for (let i = 0, l = childNodes.length; i < l; i++) {\n    if (i) {\n      throw new Error(`Multiple child elements in: ${element.tagName}`);\n    }\n    const childNode = childNodes[i];\n    if (!('tagName' in childNode) && 'data' in childNode && 'nodeValue' in childNode) {\n      r = childNode;\n    } else {\n      throw new Error(`Unexpected child element in: ${element.tagName}`);\n    }\n  }\n  return r;\n}\n\n/**\n * Assert XML element has no children.\n *\n * @param element XML element.\n * @param tagName XML element tag name.\n */\nexport function assertXmlTagName(element, tagName) {\n  const tn = element.tagName;\n  if (tn !== tagName) {\n    throw new Error(`Unexpected tagName: ${tagName}`);\n  }\n}\n\n/**\n * Assert XML element has no children.\n *\n * @param element XML element.\n */\nexport function assertNoXmlElementChildNodes(element) {\n  const {\n    childNodes\n  } = element;\n  if (childNodes.length) {\n    throw new Error(`Unexpected child nodes: ${element.tagName}`);\n  }\n}\n\n/**\n * Base64 encode function mirroring decode function.\n *\n * @param data Byte array.\n * @returns Base64 string.\n */\nexport function base64Encode(data) {\n  const l = data.length;\n  let r = '';\n  for (let i = 0; i < l;) {\n    const a = data[i++];\n    const b = i < l ? data[i++] : null;\n    const c = i < l ? data[i++] : null;\n    // eslint-disable-next-line no-bitwise\n    const o = a << 16 | (b || 0) << 8 | (c || 0);\n    r +=\n    // eslint-disable-next-line no-bitwise\n    C64[o >> 18] +\n    // eslint-disable-next-line no-bitwise\n    C64[o >> 12 & B6] +\n    // eslint-disable-next-line no-bitwise\n    C64[b === null ? 64 : o >> 6 & B6] +\n    // eslint-disable-next-line no-bitwise\n    C64[c === null ? 64 : o & B6];\n  }\n  return r;\n}\n\n/**\n * Base64 decode function that matches plist parsing behavior.\n *\n * @param base64 Base64 string.\n * @returns Byte array.\n */\nexport function base64Decode(base64) {\n  const l = base64.length;\n  const r = [];\n  OUTER: for (let a, b, c, d, m, z, i = 0; i < l;) {\n    for (;;) {\n      // eslint-disable-next-line unicorn/prefer-code-point\n      if ((m = C64M[base64.charCodeAt(i++)]) >= 0) {\n        a = m;\n        break;\n      }\n      if (i >= l) {\n        break OUTER;\n      }\n    }\n    for (;;) {\n      // eslint-disable-next-line unicorn/prefer-code-point\n      if ((m = C64M[base64.charCodeAt(i++)]) >= 0) {\n        b = m;\n        break;\n      }\n      if (i >= l) {\n        break OUTER;\n      }\n    }\n    for (;;) {\n      // eslint-disable-next-line unicorn/prefer-code-point\n      if ((m = C64M[base64.charCodeAt(i++)]) >= 0) {\n        c = m;\n        break;\n      }\n      if (i >= l) {\n        break OUTER;\n      }\n    }\n    for (;;) {\n      // eslint-disable-next-line unicorn/prefer-code-point\n      if ((m = C64M[base64.charCodeAt(i++)]) >= 0) {\n        d = m;\n        break;\n      }\n      if (i >= l) {\n        break OUTER;\n      }\n    }\n    // eslint-disable-next-line no-bitwise\n    z = (a & B6) << 18 | (b & B6) << 12 | (c & B6) << 6 | d & B6;\n    // eslint-disable-next-line default-case, no-nested-ternary\n    switch (c > B6 ? d > B6 ? 2 : 0 : d > B6 ? 1 : 0) {\n      case 0:\n        {\n          // eslint-disable-next-line no-bitwise\n          r.push(z >> 16 & B8, z >> 8 & B8, z & B8);\n          break;\n        }\n      case 1:\n        {\n          // eslint-disable-next-line no-bitwise\n          r.push(z >> 16 & B8, z >> 8 & B8);\n          break;\n        }\n      case 2:\n        {\n          // eslint-disable-next-line no-bitwise\n          r.push(z >> 16 & B8);\n          break;\n        }\n    }\n  }\n  return new Uint8Array(r);\n}\n//# sourceMappingURL=util.mjs.map","export const INDENT_STRING = '\\t';\nexport const NEWLINE_STRING = '\\n';\nexport const DATA_COLUMNS = 68;\nexport const INDENT_ROOT = false;\n//# sourceMappingURL=options.mjs.map","import { xmlDecode } from \"./util.mjs\";\n\n/**\n * Value object.\n */\nexport class Value {\n  /**\n   * Value type.\n   */\n\n  /**\n   * Tag names.\n   */\n\n  /**\n   * Value constructor.\n   */\n  constructor() {}\n\n  /**\n   * Value type.\n   *\n   * @returns Type string.\n   */\n  get type() {\n    return this.constructor.TYPE;\n  }\n\n  /**\n   * Cast to specific type or null.\n   *\n   * @param Type Type constructor.\n   * @returns This object or null.\n   */\n  castTo(Type) {\n    return this.type === Type.TYPE ? this : null;\n  }\n\n  /**\n   * Cast to specific type or throw.\n   *\n   * @param Type Type constructor.\n   * @returns This object.\n   */\n  castAs(Type) {\n    const casted = this.castTo(Type);\n    if (!casted) {\n      throw new Error(`Cannot cast type '${this.type}' to '${Type.TYPE}'`);\n    }\n    return casted;\n  }\n\n  /**\n   * Decode document from string.\n   *\n   * @param xml XML string.\n   */\n  fromXml(xml) {\n    const {\n      documentElement\n    } = xmlDecode(xml);\n    this.fromXmlElement(documentElement);\n  }\n\n  /**\n   * Decode value from element.\n   *\n   * @param element XML element.\n   */\n\n  /**\n   * Encode Value to string.\n   *\n   * @param options Options object.\n   * @param depth Indent depth.\n   * @returns Xml string.\n   */\n}\n//# sourceMappingURL=value.mjs.map","import { INDENT_STRING } from \"../options.mjs\";\nimport { assertNoXmlElementChildNodes, assertXmlTagName } from \"../util.mjs\";\nimport { Value } from \"../value.mjs\";\n\n/**\n * ValueBoolean object.\n */\nexport class ValueBoolean extends Value {\n  /**\n   * Value type.\n   */\n  static TYPE = 'boolean';\n\n  /**\n   * Tag names.\n   */\n  static TAG_NAMES = ['true', 'false'];\n\n  /**\n   * Value value.\n   */\n  value = false;\n\n  /**\n   * ValueBoolean constructor.\n   *\n   * @param value The value.\n   */\n  constructor(value = false) {\n    super();\n    this.value = value;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  fromXmlElement(element) {\n    assertNoXmlElementChildNodes(element);\n    switch (element.tagName) {\n      case 'true':\n        {\n          this.value = true;\n          return;\n        }\n      case 'false':\n        {\n          this.value = false;\n          return;\n        }\n      default:\n        {\n          throw assertXmlTagName(element, '');\n        }\n    }\n  }\n\n  /**\n   * @inheritdoc\n   */\n  toXml(options = null, depth = 0) {\n    const p = (options?.indentString ?? INDENT_STRING).repeat(depth);\n    return this.value ? `${p}<true/>` : `${p}<false/>`;\n  }\n}\n//# sourceMappingURL=boolean.mjs.map","import { DATA_COLUMNS, INDENT_STRING, NEWLINE_STRING } from \"../options.mjs\";\nimport { assertXmlTagName, base64Decode, base64Encode, xmlElementText } from \"../util.mjs\";\nimport { Value } from \"../value.mjs\";\n\n/**\n * ValueData object.\n */\nexport class ValueData extends Value {\n  /**\n   * Value type.\n   */\n  static TYPE = 'data';\n\n  /**\n   * Tag names.\n   */\n  static TAG_NAMES = ['data'];\n\n  /**\n   * Value value.\n   */\n\n  /**\n   * ValueData constructor.\n   *\n   * @param value The value.\n   */\n  constructor(value = new Uint8Array(0)) {\n    super();\n    this.value = value;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  fromXmlElement(element) {\n    assertXmlTagName(element, 'data');\n    const text = xmlElementText(element)?.nodeValue || '';\n    this.value = base64Decode(text);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  toXml(options = null, depth = 0) {\n    const n = options?.newlineString ?? NEWLINE_STRING;\n    const c = options?.dataColumns ?? DATA_COLUMNS;\n    const p = (options?.indentString ?? INDENT_STRING).repeat(depth);\n    let r = `${p}<data>`;\n    if (c > 0) {\n      for (let s = base64Encode(this.value); s; s = s.slice(c)) {\n        r += `${n}${p}${s.slice(0, c)}`;\n      }\n    } else {\n      r += `${n}${p}${base64Encode(this.value)}`;\n    }\n    r += `${n}${p}</data>`;\n    return r;\n  }\n}\n//# sourceMappingURL=data.mjs.map","import { INDENT_STRING } from \"../options.mjs\";\nimport { assertXmlTagName, xmlElementText } from \"../util.mjs\";\nimport { Value } from \"../value.mjs\";\nconst MAX_NUM = 0x1fffffffffffff;\n\n/**\n * Assert number is integer.\n *\n * @param value Number value.\n */\nfunction assertInteger(value) {\n  if (typeof value === 'number' && !Number.isInteger(value)) {\n    // eslint-disable-next-line unicorn/prefer-type-error\n    throw new Error(`Value not an integer: ${value}`);\n  }\n}\n\n/**\n * ValueInteger object.\n */\nexport class ValueInteger extends Value {\n  /**\n   * Value type.\n   */\n  static TYPE = 'integer';\n\n  /**\n   * Tag names.\n   */\n  static TAG_NAMES = ['integer'];\n\n  /**\n   * Value value.\n   */\n  value = 0;\n\n  /**\n   * ValueInteger constructor.\n   *\n   * @param value The value.\n   */\n  constructor(value = 0) {\n    super();\n    assertInteger(value);\n    this.value = value;\n  }\n\n  /**\n   * Get value as BigInt.\n   *\n   * @returns Value as a BigInt.\n   */\n  asBigInt() {\n    return BigInt(this.value);\n  }\n\n  /**\n   * Get value as Number, possibly losing some precision.\n   *\n   * @returns Value as a Number.\n   */\n  asNumber() {\n    return Number(this.value);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  fromXmlElement(element) {\n    assertXmlTagName(element, 'integer');\n    const text = xmlElementText(element)?.nodeValue || '';\n    if (!/^[+-]?\\d+$/.test(text)) {\n      throw new Error(`Invalid integer data: ${text}`);\n    }\n    const num = +text;\n    this.value = num > MAX_NUM || num < -MAX_NUM ? BigInt(text) : num;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  toXml(options = null, depth = 0) {\n    const p = (options?.indentString ?? INDENT_STRING).repeat(depth);\n    const v = this.value;\n    assertInteger(v);\n    return `${p}<integer>${v}</integer>`;\n  }\n}\n//# sourceMappingURL=integer.mjs.map","import { INDENT_STRING } from \"../options.mjs\";\nimport { assertXmlTagName, xmlElementText } from \"../util.mjs\";\nimport { Value } from \"../value.mjs\";\n\n/**\n * ValueReal object.\n */\nexport class ValueReal extends Value {\n  /**\n   * Value type.\n   */\n  static TYPE = 'real';\n\n  /**\n   * Tag names.\n   */\n  static TAG_NAMES = ['real'];\n\n  /**\n   * Value value.\n   */\n  value = 0;\n\n  /**\n   * ValueReal constructor.\n   *\n   * @param value The value.\n   */\n  constructor(value = 0) {\n    super();\n    this.value = value;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  fromXmlElement(element) {\n    assertXmlTagName(element, 'real');\n    const text = xmlElementText(element)?.nodeValue || '';\n    if (!/^[+-]?(\\d+|\\d*\\.\\d+)$/.test(text)) {\n      throw new Error(`Invalid real data: ${text}`);\n    }\n    this.value = +text;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  toXml(options = null, depth = 0) {\n    const p = (options?.indentString ?? INDENT_STRING).repeat(depth);\n    const v = this.value;\n    return `${p}<real>${v}</real>`;\n  }\n}\n//# sourceMappingURL=real.mjs.map","import { INDENT_STRING } from \"../options.mjs\";\nimport { assertXmlTagName, xmlElementText } from \"../util.mjs\";\nimport { Value } from \"../value.mjs\";\n\n/**\n * ValueString object.\n */\nexport class ValueString extends Value {\n  /**\n   * Value type.\n   */\n  static TYPE = 'string';\n\n  /**\n   * Tag names.\n   */\n  static TAG_NAMES = ['string'];\n\n  /**\n   * Value value.\n   */\n  value = '';\n\n  /**\n   * ValueString constructor.\n   *\n   * @param value The value.\n   */\n  constructor(value = '') {\n    super();\n    this.value = value;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  fromXmlElement(element) {\n    assertXmlTagName(element, 'string');\n    this.value = xmlElementText(element)?.nodeValue || '';\n  }\n\n  /**\n   * @inheritdoc\n   */\n  toXml(options = null, depth = 0) {\n    const p = (options?.indentString ?? INDENT_STRING).repeat(depth);\n    const e = this.value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');\n    return `${p}<string>${e}</string>`;\n  }\n}\n//# sourceMappingURL=string.mjs.map","import { INDENT_STRING, NEWLINE_STRING } from \"../options.mjs\";\nimport { assertXmlTagName, xmlElementChildElements, xmlElementText } from \"../util.mjs\";\nimport { Value } from \"../value.mjs\";\nimport { ValueArray } from \"./array.mjs\";\nimport { ValueBoolean } from \"./boolean.mjs\";\nimport { ValueData } from \"./data.mjs\";\nimport { ValueInteger } from \"./integer.mjs\";\nimport { ValueReal } from \"./real.mjs\";\nimport { ValueString } from \"./string.mjs\";\nlet childTagNames;\n\n/**\n * ValueDict object.\n */\nexport class ValueDict extends Value {\n  /**\n   * Value type.\n   */\n  static TYPE = 'dict';\n\n  /**\n   * Tag names.\n   */\n  static TAG_NAMES = ['dict'];\n\n  /**\n   * Child tag names.\n   *\n   * @returns Child tag names map.\n   */\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  static get CHILD_TAG_NAMES() {\n    if (!childTagNames) {\n      childTagNames = new Map();\n      for (const ValueType of [ValueArray, ValueBoolean, ValueData, ValueDict, ValueInteger, ValueReal, ValueString]) {\n        for (const t of ValueType.TAG_NAMES) {\n          childTagNames.set(t, ValueType);\n        }\n      }\n    }\n    return childTagNames;\n  }\n\n  /**\n   * Value value.\n   */\n  value = new Map();\n\n  /**\n   * ValueDict constructor.\n   *\n   * @param value The value.\n   */\n  constructor(value = new Map()) {\n    super();\n    this.value = value;\n  }\n\n  /**\n   * Dictionary size.\n   *\n   * @returns The size.\n   */\n  get size() {\n    return this.value.size;\n  }\n\n  /**\n   * Check if key exists.\n   *\n   * @param key Dictionary key.\n   * @returns The value or null.\n   */\n  has(key) {\n    return this.value.has(key);\n  }\n\n  /**\n   * Get value for key or null if does not exist.\n   *\n   * @param key Dictionary key.\n   * @returns The value or null.\n   */\n  get(key) {\n    return this.value.get(key) || null;\n  }\n\n  /**\n   * Get value for key or throw.\n   *\n   * @param key Dictionary key.\n   * @returns The value.\n   */\n  getValue(key) {\n    const r = this.get(key);\n    if (!r) {\n      throw new Error(`Key is null: ${key}`);\n    }\n    return r;\n  }\n\n  /**\n   * Set value for key.\n   *\n   * @param key Dictionary key.\n   * @param value Value object.\n   */\n  set(key, value) {\n    this.value.set(key, value);\n  }\n\n  /**\n   * Delete value for key.\n   *\n   * @param key Dictionary key.\n   */\n  delete(key) {\n    this.value.delete(key);\n  }\n\n  /**\n   * Clear dictionary.\n   */\n  clear() {\n    this.value.clear();\n  }\n\n  /**\n   * @inheritdoc\n   */\n  fromXmlElement(element) {\n    assertXmlTagName(element, 'dict');\n    const children = xmlElementChildElements(element);\n    const l = children.length;\n    if (l % 2) {\n      throw new Error(`Uneven number of child elements: ${l}`);\n    }\n    const v = new Map();\n    for (let i = 0; i < l; i += 2) {\n      const eK = children[i];\n      const eV = children[i + 1];\n      assertXmlTagName(eK, 'key');\n      const key = xmlElementText(eK)?.nodeValue || '';\n      const value = this.childFromXmlElement(eV);\n      v.set(key, value);\n    }\n    this.value = v;\n  }\n\n  /**\n   * Decode child element from XML element.\n   *\n   * @param element XML element.\n   * @returns Value element.\n   */\n  childFromXmlElement(element) {\n    const {\n      tagName\n    } = element;\n    const {\n      CHILD_TAG_NAMES\n    } = this.constructor;\n    const Value = CHILD_TAG_NAMES.get(tagName) || null;\n    if (!Value) {\n      throw new Error(`Unknown element type: ${tagName}`);\n    }\n    const r = new Value();\n    r.fromXmlElement(element);\n    return r;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  toXml(options = null, depth = 0) {\n    const i = options?.indentString ?? INDENT_STRING;\n    const n = options?.newlineString ?? NEWLINE_STRING;\n    const p = i.repeat(depth);\n    const v = this.value;\n    if (!v.size) {\n      return `${p}<dict/>`;\n    }\n    const p2 = i.repeat(depth + 1);\n    let r = `${p}<dict>`;\n    for (const [key, val] of v) {\n      const e = key.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');\n      r += `${n}${p2}<key>${e}</key>${n}${val.toXml(options, depth + 1)}`;\n    }\n    r += `${n}${p}</dict>`;\n    return r;\n  }\n}\n//# sourceMappingURL=dict.mjs.map","import { INDENT_STRING, NEWLINE_STRING } from \"../options.mjs\";\nimport { assertXmlTagName, xmlElementChildElements } from \"../util.mjs\";\nimport { Value } from \"../value.mjs\";\nimport { ValueBoolean } from \"./boolean.mjs\";\nimport { ValueData } from \"./data.mjs\";\nimport { ValueDict } from \"./dict.mjs\";\nimport { ValueInteger } from \"./integer.mjs\";\nimport { ValueReal } from \"./real.mjs\";\nimport { ValueString } from \"./string.mjs\";\nlet childTagNames;\n\n/**\n * ValueArray object.\n */\nexport class ValueArray extends Value {\n  /**\n   * Value type.\n   */\n  static TYPE = 'array';\n\n  /**\n   * Tag names.\n   */\n  static TAG_NAMES = ['array'];\n\n  /**\n   * Child tag names.\n   *\n   * @returns Child tag names map.\n   */\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  static get CHILD_TAG_NAMES() {\n    if (!childTagNames) {\n      childTagNames = new Map();\n      for (const ValueType of [ValueArray, ValueBoolean, ValueData, ValueDict, ValueInteger, ValueReal, ValueString]) {\n        for (const t of ValueType.TAG_NAMES) {\n          childTagNames.set(t, ValueType);\n        }\n      }\n    }\n    return childTagNames;\n  }\n\n  /**\n   * Value value.\n   */\n  value = [];\n\n  /**\n   * ValueArray constructor.\n   *\n   * @param value The value.\n   */\n  constructor(value = []) {\n    super();\n    this.value = value;\n  }\n\n  /**\n   * Array length.\n   *\n   * @returns The length.\n   */\n  get length() {\n    return this.value.length;\n  }\n\n  /**\n   * Get value at index or null if out of bounds.\n   *\n   * @param index Array index.\n   * @returns The value or null.\n   */\n  get(index) {\n    const {\n      value\n    } = this;\n    return index < this.length ? value[index] : null;\n  }\n\n  /**\n   * Get value at index or throw.\n   *\n   * @param index Array index.\n   * @returns The value.\n   */\n  getValue(index) {\n    const r = this.get(index);\n    if (!r) {\n      throw new Error(`Index out of bounds: ${index}`);\n    }\n    return r;\n  }\n\n  /**\n   * Set value at index.\n   *\n   * @param index Array index.\n   * @param value Value object.\n   */\n  set(index, value) {\n    this.value[index] = value;\n  }\n\n  /**\n   * Push values onto array.\n   *\n   * @param values Value objects.\n   */\n  push(...values) {\n    this.value.push(...values);\n  }\n\n  /**\n   * Pop value off array or null.\n   *\n   * @returns Value object or null.\n   */\n  pop() {\n    return this.value.pop() || null;\n  }\n\n  /**\n   * Pop value off array or throw.\n   *\n   * @returns Value object or null.\n   */\n  popValue() {\n    const r = this.pop();\n    if (!r) {\n      throw new Error('Cannot pop empty array');\n    }\n    return r;\n  }\n\n  /**\n   * Shift value off array or null.\n   *\n   * @returns Value object or null.\n   */\n  shift() {\n    return this.value.shift() || null;\n  }\n\n  /**\n   * Pop value off array or throw.\n   *\n   * @returns Value object or null.\n   */\n  shiftValue() {\n    const r = this.shift();\n    if (!r) {\n      throw new Error('Cannot shift empty array');\n    }\n    return r;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  fromXmlElement(element) {\n    assertXmlTagName(element, 'array');\n    const children = xmlElementChildElements(element);\n    this.value = children.map(el => this.childFromXmlElement(el));\n  }\n\n  /**\n   * Decode child element from XML element.\n   *\n   * @param element XML element.\n   * @returns Value element.\n   */\n  childFromXmlElement(element) {\n    const {\n      tagName\n    } = element;\n    const {\n      CHILD_TAG_NAMES\n    } = this.constructor;\n    const Value = CHILD_TAG_NAMES.get(tagName) || null;\n    if (!Value) {\n      throw new Error(`Unknown element type: ${tagName}`);\n    }\n    const r = new Value();\n    r.fromXmlElement(element);\n    return r;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  toXml(options = null, depth = 0) {\n    const n = options?.newlineString ?? NEWLINE_STRING;\n    const p = (options?.indentString ?? INDENT_STRING).repeat(depth);\n    const v = this.value;\n    if (!v.length) {\n      return `${p}<array/>`;\n    }\n    let r = `${p}<array>`;\n    for (const el of v) {\n      r += `${n}${el.toXml(options, depth + 1)}`;\n    }\n    r += `${n}${p}</array>`;\n    return r;\n  }\n}\n//# sourceMappingURL=array.mjs.map","import { INDENT_ROOT, NEWLINE_STRING } from \"./options.mjs\";\nimport { xmlDecode, xmlElementChildElements } from \"./util.mjs\";\nimport { ValueDict } from \"./value/dict.mjs\";\nconst xmlDeclaration = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>';\nconst xmlDoctype = '<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">';\n\n/**\n * Plist object.\n */\nexport class Plist {\n  /**\n   * Default XML declaration.\n   */\n  static XML_DECLARATION = xmlDeclaration;\n\n  /**\n   * Default XML doctype.\n   */\n  static XML_DOCTYPE = xmlDoctype;\n\n  /**\n   * XML declaration.\n   */\n  xmlDeclaration = xmlDeclaration;\n\n  /**\n   * XML doctype.\n   */\n  xmlDoctype = xmlDoctype;\n\n  /**\n   * Value element.\n   */\n  value = null;\n\n  /**\n   * Plist constructor.\n   *\n   * @param value The value.\n   */\n  constructor(value = null) {\n    this.value = value;\n  }\n\n  /**\n   * Get value or throw if null.\n   *\n   * @returns The value.\n   */\n  getValue() {\n    const {\n      value\n    } = this;\n    if (!value) {\n      throw new Error('Value is null');\n    }\n    return value;\n  }\n\n  /**\n   * Cast to specific type or null.\n   *\n   * @param Type Type constructor.\n   * @returns The object or null.\n   */\n  valueCastTo(Type) {\n    const {\n      value\n    } = this;\n    return value ? value.castTo(Type) : null;\n  }\n\n  /**\n   * Cast to specific type or throw.\n   *\n   * @param Type Type constructor.\n   * @returns The object.\n   */\n  valueCastAs(Type) {\n    const casted = this.valueCastTo(Type);\n    if (!casted) {\n      throw new Error(`Cannot cast value to type '${Type.TYPE}'`);\n    }\n    return casted;\n  }\n\n  /**\n   * Decode document from string.\n   *\n   * @param xml XML string.\n   */\n  fromXml(xml) {\n    const {\n      declaration,\n      doctype,\n      documentElement\n    } = xmlDecode(xml);\n    this.fromXmlElement(documentElement, declaration, doctype);\n  }\n\n  /**\n   * Decode document from element.\n   *\n   * @param element XML element.\n   * @param declaration XML declaration.\n   * @param doctype XML doctype.\n   */\n  fromXmlElement(element, declaration = null, doctype = null) {\n    const {\n      tagName\n    } = element;\n    if (tagName !== 'plist') {\n      throw new Error(`Unexpected root plist tag name: ${tagName}`);\n    }\n    const childElements = xmlElementChildElements(element);\n    const childElementsL = childElements.length;\n    if (childElementsL > 1) {\n      throw new Error(`Multiple root plist child tag: ${childElementsL}`);\n    }\n    this.value = childElementsL ? this.childFromXmlElement(childElements[0]) : null;\n    this.xmlDeclaration = declaration || '';\n    this.xmlDoctype = doctype || '';\n  }\n\n  /**\n   * Decode child element from XML element.\n   *\n   * @param element XML element.\n   * @returns Value element.\n   */\n  childFromXmlElement(element) {\n    const a = new ValueDict();\n    return a.childFromXmlElement(element);\n  }\n\n  /**\n   * Encode documents to string.\n   *\n   * @param options Options object.\n   * @returns XML string.\n   */\n  toXml(options = null) {\n    const ir = options?.indentRoot ?? INDENT_ROOT;\n    const n = options?.newlineString ?? NEWLINE_STRING;\n    const v = this.value;\n    return [...[this.xmlDeclaration, this.xmlDoctype].filter(Boolean), '<plist version=\"1.0\">', ...(v ? [v.toXml(options, ir ? 1 : 0)] : []), '</plist>', ''].join(n);\n  }\n}\n//# sourceMappingURL=plist.mjs.map","import { spawn, spawnSync } from 'node:child_process';\nimport { Plist, ValueDict, ValueArray, ValueString, ValueBoolean } from '@shockpkg/plist-dom';\n/**\n * Mounter object.\n */\nexport class Mounter {\n  /**\n   * The path to hdiutil.\n   */\n\n  /**\n   * Mounter constructor.\n   *\n   * @param options Options object.\n   */\n  constructor(options = null) {\n    this.hdiutil = (options ? options.hdiutil : null) || 'hdiutil';\n  }\n\n  /**\n   * Attach a disk image.\n   *\n   * @param file Path to disk image.\n   * @param options Options object.\n   * @param ejectOnExit Eject on exit options, or null.\n   * @returns Info object.\n   */\n  async attach(file, options = null, ejectOnExit = null) {\n    const devices = await this._runAttach(this._argsAttach(file, options));\n    const {\n      eject,\n      ejectSync\n    } = this._createEjects(devices);\n    return {\n      devices,\n      eject,\n      ejectSync\n    };\n  }\n\n  /**\n   * Attach a disk image.\n   *\n   * @param file Path to disk image.\n   * @param options Options object.\n   * @param ejectOnExit Eject on exit options, or null.\n   * @returns Info object.\n   */\n  attachSync(file, options = null, ejectOnExit = null) {\n    // eslint-disable-next-line no-sync\n    const devices = this._runAttachSync(this._argsAttach(file, options));\n    const {\n      eject,\n      ejectSync\n    } = this._createEjects(devices);\n    return {\n      devices,\n      eject,\n      ejectSync\n    };\n  }\n\n  /**\n   * Eject a disk image.\n   *\n   * @param file Path to device file or volume mount point.\n   * @param options Options object.\n   */\n  async eject(file, options = null) {\n    await this._runEject(this._argsEject(file, options));\n  }\n\n  /**\n   * Eject a disk image.\n   *\n   * @param file Path to device file or volume mount point.\n   * @param options Options object.\n   */\n  ejectSync(file, options = null) {\n    // eslint-disable-next-line no-sync\n    this._runEjectSync(this._argsEject(file, options));\n  }\n\n  /**\n   * Create args for attach.\n   *\n   * @param file Path to disk image.\n   * @param options Options object.\n   * @returns Argument list.\n   */\n  _argsAttach(file, options = null) {\n    const args = ['attach', '-plist'];\n    if (options) {\n      if (options.readonly) {\n        args.push('-readonly');\n      }\n      if (options.nobrowse) {\n        args.push('-nobrowse');\n      }\n    }\n    args.push(this._fileArg(file));\n    return args;\n  }\n\n  /**\n   * Create args for eject.\n   *\n   * @param file Path to device file or volume mount point.\n   * @param options Options object.\n   * @returns Argument list.\n   */\n  _argsEject(file, options = null) {\n    const args = ['eject'];\n    if (options && options.force) {\n      args.push('-force');\n    }\n    args.push(this._fileArg(file));\n    return args;\n  }\n\n  /**\n   * Run hdiutil attach command, returning the devices list on success.\n   *\n   * @param args CLI args.\n   * @returns Devices list.\n   */\n  async _runAttach(args) {\n    const stdouts = [];\n    const proc = spawn(this.hdiutil, args);\n    proc.stdout.on('data', data => {\n      stdouts.push(data);\n    });\n    const code = await new Promise((resolve, reject) => {\n      proc.once('exit', resolve);\n      proc.once('error', reject);\n    });\n    if (code) {\n      throw new Error(`Attach failed: hdiutil exit code: ${code}`);\n    }\n    return this._parseDevices(Buffer.concat(stdouts).toString());\n  }\n\n  /**\n   * Run hdiutil attach command, returning the devices list on success.\n   *\n   * @param args CLI args.\n   * @returns Devices list.\n   */\n  _runAttachSync(args) {\n    const {\n      status,\n      error,\n      stdout\n    } = spawnSync(this.hdiutil, args);\n    if (error) {\n      throw error;\n    }\n    if (status) {\n      throw new Error(`Attach failed: hdiutil exit code: ${status}`);\n    }\n    return this._parseDevices(stdout.toString());\n  }\n\n  /**\n   * Run hdiutil eject command.\n   *\n   * @param args CLI args.\n   */\n  async _runEject(args) {\n    const proc = spawn(this.hdiutil, args);\n    const status = await new Promise((resolve, reject) => {\n      proc.once('exit', resolve);\n      proc.once('error', reject);\n    });\n    if (status) {\n      throw new Error(`Eject failed: hdiutil exit code: ${status}`);\n    }\n  }\n\n  /**\n   * Run hdiutil eject command.\n   *\n   * @param args CLI args.\n   */\n  _runEjectSync(args) {\n    const {\n      status,\n      error\n    } = spawnSync(this.hdiutil, args);\n    if (error) {\n      throw error;\n    }\n    if (status) {\n      throw new Error(`Eject failed: hdiutil exit code: ${status}`);\n    }\n  }\n\n  /**\n   * Create file argument from file path.\n   *\n   * @param file File path.\n   * @returns A path for use as argument.\n   */\n  _fileArg(file) {\n    // Make sure it will not be recognized as option argument.\n    return file.startsWith('-') ? `./${file}` : file;\n  }\n\n  /**\n   * Parse devices plist into devices list.\n   *\n   * @param xml XML plist.\n   * @returns Devices list.\n   */\n  _parseDevices(xml) {\n    const plist = new Plist();\n    plist.fromXml(xml);\n    const systemEntities = plist.valueCastAs(ValueDict).getValue('system-entities').castAs(ValueArray);\n    const r = [];\n    for (const value of systemEntities.value) {\n      const dict = value.castAs(ValueDict);\n      const devEntry = dict.getValue('dev-entry').castAs(ValueString).value;\n      const potentiallyMountable = dict.getValue('potentially-mountable').castAs(ValueBoolean).value;\n      const contentHint = dict.get('content-hint');\n      const unmappedContentHint = dict.get('unmapped-content-hint');\n      const volumeKind = dict.get('volume-kind');\n      const mountPoint = dict.get('mount-point');\n      const device = {\n        devEntry,\n        potentiallyMountable\n      };\n      if (contentHint) {\n        device.contentHint = contentHint.castAs(ValueString).value;\n      }\n      if (unmappedContentHint) {\n        device.unmappedContentHint = unmappedContentHint.castAs(ValueString).value;\n      }\n      if (volumeKind) {\n        device.volumeKind = volumeKind.castAs(ValueString).value;\n      }\n      if (mountPoint) {\n        device.mountPoint = mountPoint.castAs(ValueString).value;\n      }\n      r.push(device);\n    }\n    return r;\n  }\n\n  /**\n   * Find the root device, null on empty list.\n   *\n   * @param devices Device list.\n   * @returns Root device or null if an empty list.\n   */\n  _findRootDevice(devices) {\n    let r = null;\n    for (const device of devices) {\n      if (r === null || r.devEntry.length > device.devEntry.length) {\n        r = device;\n      }\n    }\n    return r;\n  }\n\n  /**\n   * Create ejects callback from a list of devices.\n   *\n   * @param devices Device list.\n   * @param ejectOnExit Eject on exit options, or null.\n   * @returns Callback function.\n   */\n  _createEjects(devices, ejectOnExit = null) {\n    // Find the root device, to use to eject (none possible in theory).\n    let devEntry = this._findRootDevice(devices)?.devEntry;\n    let shutdown = null;\n    const info = {\n      /**\n       * The eject callback function.\n       *\n       * @param options Eject options.\n       */\n      eject: async (options = null) => {\n        if (devEntry) {\n          await this.eject(devEntry, options);\n          devEntry = '';\n          if (shutdown) {\n            process.off('exit', shutdown);\n          }\n        }\n      },\n      /**\n       * The eject callback function.\n       *\n       * @param options Eject options.\n       */\n      ejectSync: (options = null) => {\n        if (devEntry) {\n          // eslint-disable-next-line no-sync\n          this.ejectSync(devEntry, options);\n          devEntry = '';\n          if (shutdown) {\n            process.off('exit', shutdown);\n          }\n        }\n      }\n    };\n    if (ejectOnExit) {\n      /**\n       * Attempt to auto-eject on normal shutdown.\n       * Does not catch signals (no clean way in a library).\n       * Users can explicitly call process.exit() on signals to use this.\n       */\n      shutdown = () => {\n        // eslint-disable-next-line no-sync\n        info.ejectSync(ejectOnExit);\n      };\n      process.once('exit', shutdown);\n    }\n    return info;\n  }\n}\n//# sourceMappingURL=mounter.mjs.map","/* eslint-disable max-classes-per-file */\n\nimport { createReadStream } from 'node:fs';\nimport { basename, join as pathJoin } from 'node:path';\nimport { Mounter } from '@shockpkg/hdi-mac';\nimport { Archive, Entry } from \"../archive.mjs\";\nimport { PathType } from \"../types.mjs\";\nimport { fsLstatExists, fsReadlinkRaw, fsWalk, pathNormalize, pathResourceFork, statToPathType } from \"../util.mjs\";\nconst walkOpts = {\n  ignoreUnreadableDirectories: true\n};\nconst ejectOptions = {\n  force: true\n};\n/**\n * EntryHdi object.\n */\nexport class EntryHdi extends Entry {\n  /**\n   * @inheritdoc\n   */\n\n  /**\n   * @inheritdoc\n   */\n\n  /**\n   * @inheritdoc\n   */\n  sizeComp = null;\n\n  /**\n   * @inheritdoc\n   */\n\n  /**\n   * @inheritdoc\n   */\n\n  /**\n   * @inheritdoc\n   */\n\n  /**\n   * @inheritdoc\n   */\n  uname = null;\n\n  /**\n   * @inheritdoc\n   */\n  gname = null;\n\n  /**\n   * @inheritdoc\n   */\n\n  /**\n   * @inheritdoc\n   */\n\n  /**\n   * EntryHdi constructor.\n   *\n   * @param info Info object.\n   */\n  constructor(info) {\n    super(info);\n    this.archive = info.archive;\n    this.size = info.size;\n    this.mode = info.mode;\n    this.uid = info.uid;\n    this.gid = info.gid;\n    this.atime = info.atime;\n    this.mtime = info.mtime;\n  }\n\n  /**\n   * Get the path of resource psuedo-file, raw.\n   *\n   * @returns Path string.\n   */\n  get rsrcPathRaw() {\n    return pathResourceFork(this.pathRaw);\n  }\n\n  /**\n   * Get the path of resource psuedo-file, normalized.\n   *\n   * @returns Path string.\n   */\n  get rsrcPath() {\n    return pathNormalize(pathResourceFork(this.path));\n  }\n}\n\n/**\n * ArchiveHdi object.\n */\nexport class ArchiveHdi extends Archive {\n  /**\n   * @inheritdoc\n   */\n  static FILE_EXTENSIONS = ['.dmg', '.iso', '.cdr'];\n\n  /**\n   * @inheritdoc\n   */\n  static HAS_NAMED_VOLUMES = true;\n\n  /**\n   * @inheritdoc\n   */\n  Entry = EntryHdi;\n\n  /**\n   * Mounter, Mac.\n   */\n  mounterMac = new Mounter();\n\n  /**\n   * Hide mounted disk image from the file explorers.\n   */\n  nobrowse = false;\n\n  /**\n   * ArchiveHdi constructor.\n   *\n   * @param path File path.\n   */\n  constructor(path) {\n    super(path);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  async read(itter) {\n    await super.read(itter);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  async _read(itter) {\n    const {\n      mounterMac,\n      nobrowse\n    } = this;\n\n    /**\n     * Each itterator.\n     *\n     * @param pathFull Full path.\n     * @param pathRaw Raw path.\n     * @param stat Stat object.\n     * @returns Recursion hint.\n     */\n    const each = async (pathFull, pathRaw, stat) => {\n      const type = statToPathType(stat);\n      if (type === null) {\n        return true;\n      }\n      const {\n        size,\n        mode,\n        uid,\n        gid,\n        atime,\n        mtime\n      } = stat;\n      const readData = type === PathType.FILE ? async () => createReadStream(pathFull) : null;\n      const readSymlink = type === PathType.SYMLINK ? async () => fsReadlinkRaw(pathFull) : null;\n      const entry = new this.Entry({\n        archive: this,\n        type,\n        pathRaw,\n        size,\n        mode,\n        uid,\n        gid,\n        atime,\n        mtime,\n        readData,\n        readSymlink\n      });\n      const ret = await entry.trigger(itter);\n      if (ret === false) {\n        return null;\n      }\n      if (ret === null) {\n        return false;\n      }\n      if (type === PathType.FILE) {\n        const rsrcPathFull = pathResourceFork(pathFull);\n        const rsrcStat = await fsLstatExists(rsrcPathFull);\n        if (rsrcStat) {\n          const sizeRsrc = rsrcStat.size;\n\n          /**\n           * Read RSRC.\n           *\n           * @returns Read stream.\n           */\n          const readRsrc = async () => createReadStream(rsrcPathFull);\n          const entryRsrc = new this.Entry({\n            archive: this,\n            type: PathType.RESOURCE_FORK,\n            pathRaw,\n            size: sizeRsrc,\n            mode,\n            uid,\n            gid,\n            atime,\n            mtime,\n            readRsrc\n          });\n          const ret = await entryRsrc.trigger(itter);\n          if (ret === false) {\n            return null;\n          }\n          if (ret === null) {\n            return false;\n          }\n        }\n      }\n      return true;\n    };\n\n    // Using auto-eject on normal exit option.\n    const info = await mounterMac.attach(this.path, {\n      nobrowse,\n      readonly: true\n    }, ejectOptions);\n\n    // Eject device when done.\n    try {\n      for (const device of info.devices) {\n        const {\n          mountPoint\n        } = device;\n        if (!mountPoint) {\n          continue;\n        }\n        const volumeName = basename(mountPoint);\n        // eslint-disable-next-line no-await-in-loop\n        await fsWalk(mountPoint, async (pathRel, stat) => {\n          const pathFull = pathJoin(mountPoint, pathRel);\n          const pathRaw = pathJoin(volumeName, pathRel);\n          return each(pathFull, pathRaw, stat);\n        }, walkOpts);\n      }\n    } finally {\n      await info.eject(ejectOptions);\n    }\n  }\n}\n//# sourceMappingURL=hdi.mjs.map"],"names":["PathType","O_WRONLY","O_SYMLINK","fsConstants","fsLchmodSupported","fsLutimesSupported","pathNormalize","path","pathResourceFork","pathJoin","statToPathType","stat","modePermissionBits","mode","streamToBuffer","stream","datas","size","pipeline","Writable","data","_encoding","cb","fsLchmod","fd","open","fsUtimes","atime","mtime","utimes","fsLutimes","fsReadlinkRaw","readlink","fsSymlink","target","symlink","fsChmod","chmod","fsReaddir","readdir","fsLstat","lstat","fsLstatExists","err","code","fsWalk","base","itter","options","ignoreUnreadableDirectories","stack","entry","fullPath","recurse","subs","i","pipe","promisify","Entry","info","r","pathFull","pathSet","ignorePermissions","ignoreTimes","type","link","atimeSet","mtimeSet","modeSet","reader","replace","rm","mkdir","dirname","writeFile","createWriteStream","readData","readRsrc","pathRsrc","readSymlink","symlinkAsFile","Readable","d","Archive","afters","resolve","resolves","resolved","b","ent","find","list","predicate","ac","item","freeze","object","oc","assign","source","key","MIME_TYPE","value","NAMESPACE","uri","conventions","require$$0","notEmptyString","input","splitOnASCIIWhitespace","orderedSetReducer","current","element","toOrderedSet","arrayIncludes","copy","src","dest","p","_extends","Class","Super","pt","t","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","ExceptionCode","ExceptionMessage","HIERARCHY_REQUEST_ERR","NOT_FOUND_ERR","INUSE_ATTRIBUTE_ERR","DOMException","message","error","NodeList","index","isHTML","nodeFilter","buf","serializeToString","LiveNodeList","node","refresh","_updateLiveList","inc","ls","__set__","NamedNodeMap","_findNodeIndex","_addNamedNode","el","newAttr","oldAttr","doc","_onRemoveAttribute","_onAddAttribute","_removeNamedNode","attr","lastIndex","namespaceURI","localName","DOMImplementation","feature","version","qualifiedName","doctype","Document","root","publicId","systemId","DocumentType","Node","newChild","refChild","_insertBefore","oldChild","assertPreReplacementValidityInDocument","_removeChild","deep","cloneNode","child","next","map","n","prefix","_xmlEncoder","c","_visitNode","callback","ns","remove","_onUpdateChild","cs","parentNode","previous","hasValidParentNodeType","hasInsertableNodeType","isElementNode","isTextNode","isDocTypeNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","hasElementChildThatIsNotChild","assertPreInsertionValidity1to5","parent","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","_inDocumentAssertion","cp","newFirst","newLast","pre","_appendSingleChild","importedNode","importNode","id","rtv","classNames","classNamesSet","nodeClassNames","matches","nodeClassNamesSet","tagName","Element","attrs","DocumentFragment","Text","Comment","CDATASection","ProcessingInstruction","name","Attr","EntityReference","pl","old","CharacterData","offset","count","text","start","end","newText","newNode","Notation","Entity","XMLSerializer","isHtml","nodeSerializeToString","refNode","visibleNamespaces","needNamespaceDefine","addSerializedAttribute","len","nodeName","prefixedNodeName","defaultNS","ai","nsi","namespace","pubid","sysid","sub","node2","v","attrs2","getTextContent","dom","exports","nameStartChar","nameChar","tagNamePattern","S_TAG","S_ATTR","S_ATTR_SPACE","S_EQ","S_ATTR_NOQUOT_VALUE","S_ATTR_END","S_TAG_SPACE","S_TAG_CLOSE","ParseError","locator","XMLReader","defaultNSMap","entityMap","domBuilder","_copy","parse","defaultNSMapCopy","errorHandler","fixedFromCharCode","surrogate1","surrogate2","entityReplacer","a","k","appendText","xt","position","m","lineEnd","linePattern","lineStart","parseStack","closeMap","tagStart","config","localNSMap","endMatch","endIgnoreCaseMach","parseInstruction","parseDCC","ElementAttributes","currentNSMap","parseElementStartPart","fixSelfClosed","locator2","copyLocator","appendElement","parseHtmlSpecialContent","e","f","addAttribute","qname","startIndex","attrName","s","qName","nsp","nsPrefix","elStartEnd","elEndStart","pos","matchs","split","lastMatch","match","reg","sax","require$$1","entities","require$$2","require$$3","normalizeLineEndings","DOMParser","mimeType","DOMHandler","buildErrorHandler","normalize","errorImpl","isCallback","build","fn","msg","_locator","ins","ch","length","chars","_toString","charNode","comm","impl","dt","l","hander","domParser","lib","B6","B8","C64","C64M","xmlDecode","xml","declaration","errors","childNodes","documentElement","childNode","str","xmlElementChildElements","nodeValue","xmlElementText","assertXmlTagName","assertNoXmlElementChildNodes","base64Encode","o","base64Decode","base64","OUTER","z","INDENT_STRING","NEWLINE_STRING","DATA_COLUMNS","INDENT_ROOT","Value","Type","casted","ValueBoolean","depth","ValueData","MAX_NUM","assertInteger","ValueInteger","num","ValueReal","ValueString","childTagNames","ValueDict","ValueType","ValueArray","children","eK","eV","CHILD_TAG_NAMES","p2","val","values","xmlDeclaration","xmlDoctype","Plist","childElements","childElementsL","ir","Mounter","file","ejectOnExit","devices","eject","ejectSync","args","stdouts","proc","spawn","reject","status","stdout","spawnSync","plist","systemEntities","dict","devEntry","potentiallyMountable","contentHint","unmappedContentHint","volumeKind","mountPoint","device","shutdown","walkOpts","ejectOptions","EntryHdi","ArchiveHdi","mounterMac","nobrowse","each","pathRaw","uid","gid","createReadStream","ret","rsrcPathFull","rsrcStat","sizeRsrc","volumeName","basename","pathRel"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}