import * as path from 'path'; import path__default, { join } from 'path'; import fs from 'fs'; import { parse as parse$8 } from 'svelte/compiler'; import util from 'util'; const defineConfig = (config) => config; var bail_1 = bail; function bail(err) { if (err) { throw err } } /*! * Determine if an object is a Buffer * * @author Feross Aboukhadijeh * @license MIT */ var isBuffer = function isBuffer (obj) { return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) }; var hasOwn = Object.prototype.hasOwnProperty; var toStr = Object.prototype.toString; var defineProperty = Object.defineProperty; var gOPD = Object.getOwnPropertyDescriptor; var isArray = function isArray(arr) { if (typeof Array.isArray === 'function') { return Array.isArray(arr); } return toStr.call(arr) === '[object Array]'; }; var isPlainObject = function isPlainObject(obj) { if (!obj || toStr.call(obj) !== '[object Object]') { return false; } var hasOwnConstructor = hasOwn.call(obj, 'constructor'); var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); // Not own constructor property must be Object if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { return false; } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key; for (key in obj) { /**/ } return typeof key === 'undefined' || hasOwn.call(obj, key); }; // If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target var setProperty = function setProperty(target, options) { if (defineProperty && options.name === '__proto__') { defineProperty(target, options.name, { enumerable: true, configurable: true, value: options.newValue, writable: true }); } else { target[options.name] = options.newValue; } }; // Return undefined instead of __proto__ if '__proto__' is not an own property var getProperty = function getProperty(obj, name) { if (name === '__proto__') { if (!hasOwn.call(obj, name)) { return void 0; } else if (gOPD) { // In early versions of node, obj['__proto__'] is buggy when obj has // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. return gOPD(obj, name).value; } } return obj[name]; }; var extend$2 = function extend() { var options, name, src, copy, copyIsArray, clone; var target = arguments[0]; var i = 1; var length = arguments.length; var deep = false; // Handle a deep copy situation if (typeof target === 'boolean') { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { target = {}; } for (; i < length; ++i) { options = arguments[i]; // Only deal with non-null/undefined values if (options != null) { // Extend the base object for (name in options) { src = getProperty(target, name); copy = getProperty(options, name); // Prevent never-ending loop if (target !== copy) { // Recurse if we're merging plain objects or arrays if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && isArray(src) ? src : []; } else { clone = src && isPlainObject(src) ? src : {}; } // Never move original objects, clone them setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); // Don't bring in undefined values } else if (typeof copy !== 'undefined') { setProperty(target, { name: name, newValue: copy }); } } } } } // Return the modified object return target; }; var isPlainObj = value => { if (Object.prototype.toString.call(value) !== '[object Object]') { return false; } const prototype = Object.getPrototypeOf(value); return prototype === null || prototype === Object.prototype; }; var slice$3 = [].slice; var wrap_1$1 = wrap$2; // Wrap `fn`. // Can be sync or async; return a promise, receive a completion handler, return // new values and errors. function wrap$2(fn, callback) { var invoked; return wrapped function wrapped() { var params = slice$3.call(arguments, 0); var callback = fn.length > params.length; var result; if (callback) { params.push(done); } try { result = fn.apply(null, params); } catch (error) { // Well, this is quite the pickle. // `fn` received a callback and invoked it (thus continuing the pipeline), // but later also threw an error. // We’re not about to restart the pipeline again, so the only thing left // to do is to throw the thing instead. if (callback && invoked) { throw error } return done(error) } if (!callback) { if (result && typeof result.then === 'function') { result.then(then, done); } else if (result instanceof Error) { done(result); } else { then(result); } } } // Invoke `next`, only once. function done() { if (!invoked) { invoked = true; callback.apply(null, arguments); } } // Invoke `done` with one value. // Tracks if an error is passed, too. function then(value) { done(null, value); } } var trough_1 = trough; trough.wrap = wrap_1$1; var slice$2 = [].slice; // Create new middleware. function trough() { var fns = []; var middleware = {}; middleware.run = run; middleware.use = use; return middleware // Run `fns`. Last argument must be a completion handler. function run() { var index = -1; var input = slice$2.call(arguments, 0, -1); var done = arguments[arguments.length - 1]; if (typeof done !== 'function') { throw new Error('Expected function as last argument, not ' + done) } next.apply(null, [null].concat(input)); // Run the next `fn`, if any. function next(err) { var fn = fns[++index]; var params = slice$2.call(arguments, 0); var values = params.slice(1); var length = input.length; var pos = -1; if (err) { done(err); return } // Copy non-nully input into values. while (++pos < length) { if (values[pos] === null || values[pos] === undefined) { values[pos] = input[pos]; } } input = values; // Next or done. if (fn) { wrap_1$1(fn, next).apply(null, input); } else { done.apply(null, [null].concat(input)); } } } // Add `fn` to the list. function use(fn) { if (typeof fn !== 'function') { throw new Error('Expected `fn` to be a function, not ' + fn) } fns.push(fn); return middleware } } var own$f = {}.hasOwnProperty; var unistUtilStringifyPosition = stringify$4; function stringify$4(value) { // Nothing. if (!value || typeof value !== 'object') { return '' } // Node. if (own$f.call(value, 'position') || own$f.call(value, 'type')) { return position$1(value.position) } // Position. if (own$f.call(value, 'start') || own$f.call(value, 'end')) { return position$1(value) } // Point. if (own$f.call(value, 'line') || own$f.call(value, 'column')) { return point(value) } // ? return '' } function point(point) { if (!point || typeof point !== 'object') { point = {}; } return index$6(point.line) + ':' + index$6(point.column) } function position$1(pos) { if (!pos || typeof pos !== 'object') { pos = {}; } return point(pos.start) + '-' + point(pos.end) } function index$6(value) { return value && typeof value === 'number' ? value : 1 } var vfileMessage = VMessage; // Inherit from `Error#`. function VMessagePrototype() {} VMessagePrototype.prototype = Error.prototype; VMessage.prototype = new VMessagePrototype(); // Message properties. var proto$6 = VMessage.prototype; proto$6.file = ''; proto$6.name = ''; proto$6.reason = ''; proto$6.message = ''; proto$6.stack = ''; proto$6.fatal = null; proto$6.column = null; proto$6.line = null; // Construct a new VMessage. // // Note: We cannot invoke `Error` on the created context, as that adds readonly // `line` and `column` attributes on Safari 9, thus throwing and failing the // data. function VMessage(reason, position, origin) { var parts; var range; var location; if (typeof position === 'string') { origin = position; position = null; } parts = parseOrigin(origin); range = unistUtilStringifyPosition(position) || '1:1'; location = { start: {line: null, column: null}, end: {line: null, column: null} }; // Node. if (position && position.position) { position = position.position; } if (position) { // Position. if (position.start) { location = position; position = position.start; } else { // Point. location.start = position; } } if (reason.stack) { this.stack = reason.stack; reason = reason.message; } this.message = reason; this.name = range; this.reason = reason; this.line = position ? position.line : null; this.column = position ? position.column : null; this.location = location; this.source = parts[0]; this.ruleId = parts[1]; } function parseOrigin(origin) { var result = [null, null]; var index; if (typeof origin === 'string') { index = origin.indexOf(':'); if (index === -1) { result[1] = origin; } else { result[0] = origin.slice(0, index); result[1] = origin.slice(index + 1); } } return result } function replaceExt(npath, ext) { if (typeof npath !== 'string') { return npath; } if (npath.length === 0) { return npath; } var nFileName = path__default.basename(npath, path__default.extname(npath)) + ext; return path__default.join(path__default.dirname(npath), nFileName); } var replaceExt_1 = replaceExt; var core$1 = VFile; var own$e = {}.hasOwnProperty; var proto$5 = VFile.prototype; // Order of setting (least specific to most), we need this because otherwise // `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a // stem can be set. var order$1 = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']; proto$5.toString = toString; // Access full path (`~/index.min.js`). Object.defineProperty(proto$5, 'path', {get: getPath, set: setPath}); // Access parent path (`~`). Object.defineProperty(proto$5, 'dirname', {get: getDirname, set: setDirname}); // Access basename (`index.min.js`). Object.defineProperty(proto$5, 'basename', {get: getBasename, set: setBasename}); // Access extname (`.js`). Object.defineProperty(proto$5, 'extname', {get: getExtname, set: setExtname}); // Access stem (`index.min`). Object.defineProperty(proto$5, 'stem', {get: getStem, set: setStem}); // Construct a new file. function VFile(options) { var prop; var index; var length; if (!options) { options = {}; } else if (typeof options === 'string' || isBuffer(options)) { options = {contents: options}; } else if ('message' in options && 'messages' in options) { return options } if (!(this instanceof VFile)) { return new VFile(options) } this.data = {}; this.messages = []; this.history = []; this.cwd = process.cwd(); // Set path related properties in the correct order. index = -1; length = order$1.length; while (++index < length) { prop = order$1[index]; if (own$e.call(options, prop)) { this[prop] = options[prop]; } } // Set non-path related properties. for (prop in options) { if (order$1.indexOf(prop) === -1) { this[prop] = options[prop]; } } } function getPath() { return this.history[this.history.length - 1] } function setPath(path) { assertNonEmpty(path, 'path'); if (path !== this.path) { this.history.push(path); } } function getDirname() { return typeof this.path === 'string' ? path__default.dirname(this.path) : undefined } function setDirname(dirname) { assertPath(this.path, 'dirname'); this.path = path__default.join(dirname || '', this.basename); } function getBasename() { return typeof this.path === 'string' ? path__default.basename(this.path) : undefined } function setBasename(basename) { assertNonEmpty(basename, 'basename'); assertPart(basename, 'basename'); this.path = path__default.join(this.dirname || '', basename); } function getExtname() { return typeof this.path === 'string' ? path__default.extname(this.path) : undefined } function setExtname(extname) { var ext = extname || ''; assertPart(ext, 'extname'); assertPath(this.path, 'extname'); if (ext) { if (ext.charAt(0) !== '.') { throw new Error('`extname` must start with `.`') } if (ext.indexOf('.', 1) !== -1) { throw new Error('`extname` cannot contain multiple dots') } } this.path = replaceExt_1(this.path, ext); } function getStem() { return typeof this.path === 'string' ? path__default.basename(this.path, this.extname) : undefined } function setStem(stem) { assertNonEmpty(stem, 'stem'); assertPart(stem, 'stem'); this.path = path__default.join(this.dirname || '', stem + (this.extname || '')); } // Get the value of the file. function toString(encoding) { var value = this.contents || ''; return isBuffer(value) ? value.toString(encoding) : String(value) } // Assert that `part` is not a path (i.e., does not contain `path.sep`). function assertPart(part, name) { if (part.indexOf(path__default.sep) !== -1) { throw new Error( '`' + name + '` cannot be a path: did not expect `' + path__default.sep + '`' ) } } // Assert that `part` is not empty. function assertNonEmpty(part, name) { if (!part) { throw new Error('`' + name + '` cannot be empty') } } // Assert `path` exists. function assertPath(path, name) { if (!path) { throw new Error('Setting `' + name + '` requires `path` to be set too') } } var vfile = core$1; var proto$4 = core$1.prototype; proto$4.message = message; proto$4.info = info$1; proto$4.fail = fail; // Create a message with `reason` at `position`. // When an error is passed in as `reason`, copies the stack. function message(reason, position, origin) { var filePath = this.path; var message = new vfileMessage(reason, position, origin); if (filePath) { message.name = filePath + ':' + message.name; message.file = filePath; } message.fatal = false; this.messages.push(message); return message } // Fail: creates a vmessage, associates it with the file, and throws it. function fail() { var message = this.message.apply(this, arguments); message.fatal = true; throw message } // Info: creates a vmessage, associates it with the file, and marks the fatality // as null. function info$1() { var message = this.message.apply(this, arguments); message.fatal = null; return message } // Expose a frozen processor. var unified_1$1 = unified$1().freeze(); var slice$1 = [].slice; var own$d = {}.hasOwnProperty; // Process pipeline. var pipeline$1 = trough_1() .use(pipelineParse$1) .use(pipelineRun$1) .use(pipelineStringify$1); function pipelineParse$1(p, ctx) { ctx.tree = p.parse(ctx.file); } function pipelineRun$1(p, ctx, next) { p.run(ctx.tree, ctx.file, done); function done(err, tree, file) { if (err) { next(err); } else { ctx.tree = tree; ctx.file = file; next(); } } } function pipelineStringify$1(p, ctx) { var result = p.stringify(ctx.tree, ctx.file); var file = ctx.file; if (result === undefined || result === null) ; else if (typeof result === 'string' || isBuffer(result)) { file.contents = result; } else { file.result = result; } } // Function to create the first processor. function unified$1() { var attachers = []; var transformers = trough_1(); var namespace = {}; var frozen = false; var freezeIndex = -1; // Data management. processor.data = data; // Lock. processor.freeze = freeze; // Plugins. processor.attachers = attachers; processor.use = use; // API. processor.parse = parse; processor.stringify = stringify; processor.run = run; processor.runSync = runSync; processor.process = process; processor.processSync = processSync; // Expose. return processor // Create a new processor based on the processor in the current scope. function processor() { var destination = unified$1(); var length = attachers.length; var index = -1; while (++index < length) { destination.use.apply(null, attachers[index]); } destination.data(extend$2(true, {}, namespace)); return destination } // Freeze: used to signal a processor that has finished configuration. // // For example, take unified itself: it’s frozen. // Plugins should not be added to it. // Rather, it should be extended, by invoking it, before modifying it. // // In essence, always invoke this when exporting a processor. function freeze() { var values; var plugin; var options; var transformer; if (frozen) { return processor } while (++freezeIndex < attachers.length) { values = attachers[freezeIndex]; plugin = values[0]; options = values[1]; transformer = null; if (options === false) { continue } if (options === true) { values[1] = undefined; } transformer = plugin.apply(processor, values.slice(1)); if (typeof transformer === 'function') { transformers.use(transformer); } } frozen = true; freezeIndex = Infinity; return processor } // Data management. // Getter / setter for processor-specific informtion. function data(key, value) { if (typeof key === 'string') { // Set `key`. if (arguments.length === 2) { assertUnfrozen$1('data', frozen); namespace[key] = value; return processor } // Get `key`. return (own$d.call(namespace, key) && namespace[key]) || null } // Set space. if (key) { assertUnfrozen$1('data', frozen); namespace = key; return processor } // Get space. return namespace } // Plugin management. // // Pass it: // * an attacher and options, // * a preset, // * a list of presets, attachers, and arguments (list of attachers and // options). function use(value) { var settings; assertUnfrozen$1('use', frozen); if (value === null || value === undefined) ; else if (typeof value === 'function') { addPlugin.apply(null, arguments); } else if (typeof value === 'object') { if ('length' in value) { addList(value); } else { addPreset(value); } } else { throw new Error('Expected usable value, not `' + value + '`') } if (settings) { namespace.settings = extend$2(namespace.settings || {}, settings); } return processor function addPreset(result) { addList(result.plugins); if (result.settings) { settings = extend$2(settings || {}, result.settings); } } function add(value) { if (typeof value === 'function') { addPlugin(value); } else if (typeof value === 'object') { if ('length' in value) { addPlugin.apply(null, value); } else { addPreset(value); } } else { throw new Error('Expected usable value, not `' + value + '`') } } function addList(plugins) { var length; var index; if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && 'length' in plugins) { length = plugins.length; index = -1; while (++index < length) { add(plugins[index]); } } else { throw new Error('Expected a list of plugins, not `' + plugins + '`') } } function addPlugin(plugin, value) { var entry = find(plugin); if (entry) { if (isPlainObj(entry[1]) && isPlainObj(value)) { value = extend$2(entry[1], value); } entry[1] = value; } else { attachers.push(slice$1.call(arguments)); } } } function find(plugin) { var length = attachers.length; var index = -1; var entry; while (++index < length) { entry = attachers[index]; if (entry[0] === plugin) { return entry } } } // Parse a file (in string or vfile representation) into a unist node using // the `Parser` on the processor. function parse(doc) { var file = vfile(doc); var Parser; freeze(); Parser = processor.Parser; assertParser$1('parse', Parser); if (newable$1(Parser, 'parse')) { return new Parser(String(file), file).parse() } return Parser(String(file), file) // eslint-disable-line new-cap } // Run transforms on a unist node representation of a file (in string or // vfile representation), async. function run(node, file, cb) { assertNode$1(node); freeze(); if (!cb && typeof file === 'function') { cb = file; file = null; } if (!cb) { return new Promise(executor) } executor(null, cb); function executor(resolve, reject) { transformers.run(node, vfile(file), done); function done(err, tree, file) { tree = tree || node; if (err) { reject(err); } else if (resolve) { resolve(tree); } else { cb(null, tree, file); } } } } // Run transforms on a unist node representation of a file (in string or // vfile representation), sync. function runSync(node, file) { var complete = false; var result; run(node, file, done); assertDone$1('runSync', 'run', complete); return result function done(err, tree) { complete = true; bail_1(err); result = tree; } } // Stringify a unist node representation of a file (in string or vfile // representation) into a string using the `Compiler` on the processor. function stringify(node, doc) { var file = vfile(doc); var Compiler; freeze(); Compiler = processor.Compiler; assertCompiler$1('stringify', Compiler); assertNode$1(node); if (newable$1(Compiler, 'compile')) { return new Compiler(node, file).compile() } return Compiler(node, file) // eslint-disable-line new-cap } // Parse a file (in string or vfile representation) into a unist node using // the `Parser` on the processor, then run transforms on that node, and // compile the resulting node using the `Compiler` on the processor, and // store that result on the vfile. function process(doc, cb) { freeze(); assertParser$1('process', processor.Parser); assertCompiler$1('process', processor.Compiler); if (!cb) { return new Promise(executor) } executor(null, cb); function executor(resolve, reject) { var file = vfile(doc); pipeline$1.run(processor, {file: file}, done); function done(err) { if (err) { reject(err); } else if (resolve) { resolve(file); } else { cb(null, file); } } } } // Process the given document (in string or vfile representation), sync. function processSync(doc) { var complete = false; var file; freeze(); assertParser$1('processSync', processor.Parser); assertCompiler$1('processSync', processor.Compiler); file = vfile(doc); process(file, done); assertDone$1('processSync', 'process', complete); return file function done(err) { complete = true; bail_1(err); } } } // Check if `value` is a constructor. function newable$1(value, name) { return ( typeof value === 'function' && value.prototype && // A function with keys in its prototype is probably a constructor. // Classes’ prototype methods are not enumerable, so we check if some value // exists in the prototype. (keys$2(value.prototype) || name in value.prototype) ) } // Check if `value` is an object with keys. function keys$2(value) { var key; for (key in value) { return true } return false } // Assert a parser is available. function assertParser$1(name, Parser) { if (typeof Parser !== 'function') { throw new Error('Cannot `' + name + '` without `Parser`') } } // Assert a compiler is available. function assertCompiler$1(name, Compiler) { if (typeof Compiler !== 'function') { throw new Error('Cannot `' + name + '` without `Compiler`') } } // Assert the processor is not frozen. function assertUnfrozen$1(name, frozen) { if (frozen) { throw new Error( 'Cannot invoke `' + name + '` on a frozen processor.\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.' ) } } // Assert `node` is a unist node. function assertNode$1(node) { if (!node || typeof node.type !== 'string') { throw new Error('Expected node, got `' + node + '`') } } // Assert that `complete` is `true`. function assertDone$1(name, asyncName, complete) { if (!complete) { throw new Error( '`' + name + '` finished async. Use `' + asyncName + '` instead' ) } } var immutable = extend$1; var hasOwnProperty = Object.prototype.hasOwnProperty; function extend$1() { var target = {}; for (var i = 0; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target } function commonjsRequire () { throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs'); } function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } function getCjsExportFromNamespace (n) { return n && n['default'] || n; } var inherits_browser = createCommonjsModule(function (module) { if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); } }; } else { // old school shim for old browsers module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; var TempCtor = function () {}; TempCtor.prototype = superCtor.prototype; ctor.prototype = new TempCtor(); ctor.prototype.constructor = ctor; } }; } }); var inherits = createCommonjsModule(function (module) { try { var util$1 = util; /* istanbul ignore next */ if (typeof util$1.inherits !== 'function') throw ''; module.exports = util$1.inherits; } catch (e) { /* istanbul ignore next */ module.exports = inherits_browser; } }); var unherit_1 = unherit; // Create a custom constructor which can be modified without affecting the // original class. function unherit(Super) { var result; var key; var value; inherits(Of, Super); inherits(From, Of); // Clone values. result = Of.prototype; for (key in result) { value = result[key]; if (value && typeof value === 'object') { result[key] = 'concat' in value ? value.concat() : immutable(value); } } return Of // Constructor accepting a single argument, which itself is an `arguments` // object. function From(parameters) { return Super.apply(this, parameters) } // Constructor accepting variadic arguments. function Of() { if (!(this instanceof Of)) { return new From(arguments) } return Super.apply(this, arguments) } } var stateToggle = factory$6; // Construct a state `toggler`: a function which inverses `property` in context // based on its current value. // The by `toggler` returned function restores that value. function factory$6(key, state, ctx) { return enter function enter() { var context = ctx || this; var current = context[key]; context[key] = !state; return exit function exit() { context[key] = current; } } } var vfileLocation = factory$5; function factory$5(file) { var contents = indices(String(file)); return { toPosition: offsetToPositionFactory(contents), toOffset: positionToOffsetFactory(contents) } } // Factory to get the line and column-based `position` for `offset` in the bound // indices. function offsetToPositionFactory(indices) { return offsetToPosition // Get the line and column-based `position` for `offset` in the bound indices. function offsetToPosition(offset) { var index = -1; var length = indices.length; if (offset < 0) { return {} } while (++index < length) { if (indices[index] > offset) { return { line: index + 1, column: offset - (indices[index - 1] || 0) + 1, offset: offset } } } return {} } } // Factory to get the `offset` for a line and column-based `position` in the // bound indices. function positionToOffsetFactory(indices) { return positionToOffset // Get the `offset` for a line and column-based `position` in the bound // indices. function positionToOffset(position) { var line = position && position.line; var column = position && position.column; if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { return (indices[line - 2] || 0) + column - 1 || 0 } return -1 } } // Get indices of line-breaks in `value`. function indices(value) { var result = []; var index = value.indexOf('\n'); while (index !== -1) { result.push(index + 1); index = value.indexOf('\n', index + 1); } result.push(value.length + 1); return result } var _unescape = factory$4; var backslash$7 = '\\'; // Factory to de-escape a value, based on a list at `key` in `ctx`. function factory$4(ctx, key) { return unescape // De-escape a string using the expression at `key` in `ctx`. function unescape(value) { var previous = 0; var index = value.indexOf(backslash$7); var escape = ctx[key]; var queue = []; var character; while (index !== -1) { queue.push(value.slice(previous, index)); previous = index + 1; character = value.charAt(previous); // If the following character is not a valid escape, add the slash. if (!character || escape.indexOf(character) === -1) { queue.push(backslash$7); } index = value.indexOf(backslash$7, previous + 1); } queue.push(value.slice(previous)); return queue.join('') } } var AElig$2 = "Æ"; var AMP$2 = "&"; var Aacute$2 = "Á"; var Acirc$2 = "Â"; var Agrave$2 = "À"; var Aring$2 = "Å"; var Atilde$2 = "Ã"; var Auml$2 = "Ä"; var COPY$1 = "©"; var Ccedil$2 = "Ç"; var ETH$2 = "Ð"; var Eacute$2 = "É"; var Ecirc$2 = "Ê"; var Egrave$2 = "È"; var Euml$2 = "Ë"; var GT$2 = ">"; var Iacute$2 = "Í"; var Icirc$2 = "Î"; var Igrave$2 = "Ì"; var Iuml$2 = "Ï"; var LT$2 = "<"; var Ntilde$2 = "Ñ"; var Oacute$2 = "Ó"; var Ocirc$2 = "Ô"; var Ograve$2 = "Ò"; var Oslash$2 = "Ø"; var Otilde$2 = "Õ"; var Ouml$2 = "Ö"; var QUOT$1 = "\""; var REG$1 = "®"; var THORN$2 = "Þ"; var Uacute$2 = "Ú"; var Ucirc$2 = "Û"; var Ugrave$2 = "Ù"; var Uuml$2 = "Ü"; var Yacute$2 = "Ý"; var aacute$2 = "á"; var acirc$2 = "â"; var acute$2 = "´"; var aelig$2 = "æ"; var agrave$2 = "à"; var amp$2 = "&"; var aring$2 = "å"; var atilde$2 = "ã"; var auml$2 = "ä"; var brvbar$2 = "¦"; var ccedil$2 = "ç"; var cedil$2 = "¸"; var cent$2 = "¢"; var copy$2 = "©"; var curren$2 = "¤"; var deg$2 = "°"; var divide$2 = "÷"; var eacute$2 = "é"; var ecirc$2 = "ê"; var egrave$2 = "è"; var eth$2 = "ð"; var euml$2 = "ë"; var frac12$2 = "½"; var frac14$2 = "¼"; var frac34$2 = "¾"; var gt$2 = ">"; var iacute$2 = "í"; var icirc$2 = "î"; var iexcl$2 = "¡"; var igrave$2 = "ì"; var iquest$2 = "¿"; var iuml$2 = "ï"; var laquo$2 = "«"; var lt$2 = "<"; var macr$2 = "¯"; var micro$2 = "µ"; var middot$2 = "·"; var nbsp$2 = " "; var not$2 = "¬"; var ntilde$2 = "ñ"; var oacute$2 = "ó"; var ocirc$2 = "ô"; var ograve$2 = "ò"; var ordf$2 = "ª"; var ordm$2 = "º"; var oslash$2 = "ø"; var otilde$2 = "õ"; var ouml$2 = "ö"; var para$2 = "¶"; var plusmn$2 = "±"; var pound$2 = "£"; var quot$2 = "\""; var raquo$2 = "»"; var reg$2 = "®"; var sect$2 = "§"; var shy$2 = "­"; var sup1$2 = "¹"; var sup2$2 = "²"; var sup3$2 = "³"; var szlig$2 = "ß"; var thorn$2 = "þ"; var times$2 = "×"; var uacute$2 = "ú"; var ucirc$2 = "û"; var ugrave$2 = "ù"; var uml$2 = "¨"; var uuml$2 = "ü"; var yacute$2 = "ý"; var yen$2 = "¥"; var yuml$2 = "ÿ"; var index$5 = { AElig: AElig$2, AMP: AMP$2, Aacute: Aacute$2, Acirc: Acirc$2, Agrave: Agrave$2, Aring: Aring$2, Atilde: Atilde$2, Auml: Auml$2, COPY: COPY$1, Ccedil: Ccedil$2, ETH: ETH$2, Eacute: Eacute$2, Ecirc: Ecirc$2, Egrave: Egrave$2, Euml: Euml$2, GT: GT$2, Iacute: Iacute$2, Icirc: Icirc$2, Igrave: Igrave$2, Iuml: Iuml$2, LT: LT$2, Ntilde: Ntilde$2, Oacute: Oacute$2, Ocirc: Ocirc$2, Ograve: Ograve$2, Oslash: Oslash$2, Otilde: Otilde$2, Ouml: Ouml$2, QUOT: QUOT$1, REG: REG$1, THORN: THORN$2, Uacute: Uacute$2, Ucirc: Ucirc$2, Ugrave: Ugrave$2, Uuml: Uuml$2, Yacute: Yacute$2, aacute: aacute$2, acirc: acirc$2, acute: acute$2, aelig: aelig$2, agrave: agrave$2, amp: amp$2, aring: aring$2, atilde: atilde$2, auml: auml$2, brvbar: brvbar$2, ccedil: ccedil$2, cedil: cedil$2, cent: cent$2, copy: copy$2, curren: curren$2, deg: deg$2, divide: divide$2, eacute: eacute$2, ecirc: ecirc$2, egrave: egrave$2, eth: eth$2, euml: euml$2, frac12: frac12$2, frac14: frac14$2, frac34: frac34$2, gt: gt$2, iacute: iacute$2, icirc: icirc$2, iexcl: iexcl$2, igrave: igrave$2, iquest: iquest$2, iuml: iuml$2, laquo: laquo$2, lt: lt$2, macr: macr$2, micro: micro$2, middot: middot$2, nbsp: nbsp$2, not: not$2, ntilde: ntilde$2, oacute: oacute$2, ocirc: ocirc$2, ograve: ograve$2, ordf: ordf$2, ordm: ordm$2, oslash: oslash$2, otilde: otilde$2, ouml: ouml$2, para: para$2, plusmn: plusmn$2, pound: pound$2, quot: quot$2, raquo: raquo$2, reg: reg$2, sect: sect$2, shy: shy$2, sup1: sup1$2, sup2: sup2$2, sup3: sup3$2, szlig: szlig$2, thorn: thorn$2, times: times$2, uacute: uacute$2, ucirc: ucirc$2, ugrave: ugrave$2, uml: uml$2, uuml: uuml$2, yacute: yacute$2, yen: yen$2, yuml: yuml$2 }; var characterEntitiesLegacy = /*#__PURE__*/Object.freeze({ __proto__: null, AElig: AElig$2, AMP: AMP$2, Aacute: Aacute$2, Acirc: Acirc$2, Agrave: Agrave$2, Aring: Aring$2, Atilde: Atilde$2, Auml: Auml$2, COPY: COPY$1, Ccedil: Ccedil$2, ETH: ETH$2, Eacute: Eacute$2, Ecirc: Ecirc$2, Egrave: Egrave$2, Euml: Euml$2, GT: GT$2, Iacute: Iacute$2, Icirc: Icirc$2, Igrave: Igrave$2, Iuml: Iuml$2, LT: LT$2, Ntilde: Ntilde$2, Oacute: Oacute$2, Ocirc: Ocirc$2, Ograve: Ograve$2, Oslash: Oslash$2, Otilde: Otilde$2, Ouml: Ouml$2, QUOT: QUOT$1, REG: REG$1, THORN: THORN$2, Uacute: Uacute$2, Ucirc: Ucirc$2, Ugrave: Ugrave$2, Uuml: Uuml$2, Yacute: Yacute$2, aacute: aacute$2, acirc: acirc$2, acute: acute$2, aelig: aelig$2, agrave: agrave$2, amp: amp$2, aring: aring$2, atilde: atilde$2, auml: auml$2, brvbar: brvbar$2, ccedil: ccedil$2, cedil: cedil$2, cent: cent$2, copy: copy$2, curren: curren$2, deg: deg$2, divide: divide$2, eacute: eacute$2, ecirc: ecirc$2, egrave: egrave$2, eth: eth$2, euml: euml$2, frac12: frac12$2, frac14: frac14$2, frac34: frac34$2, gt: gt$2, iacute: iacute$2, icirc: icirc$2, iexcl: iexcl$2, igrave: igrave$2, iquest: iquest$2, iuml: iuml$2, laquo: laquo$2, lt: lt$2, macr: macr$2, micro: micro$2, middot: middot$2, nbsp: nbsp$2, not: not$2, ntilde: ntilde$2, oacute: oacute$2, ocirc: ocirc$2, ograve: ograve$2, ordf: ordf$2, ordm: ordm$2, oslash: oslash$2, otilde: otilde$2, ouml: ouml$2, para: para$2, plusmn: plusmn$2, pound: pound$2, quot: quot$2, raquo: raquo$2, reg: reg$2, sect: sect$2, shy: shy$2, sup1: sup1$2, sup2: sup2$2, sup3: sup3$2, szlig: szlig$2, thorn: thorn$2, times: times$2, uacute: uacute$2, ucirc: ucirc$2, ugrave: ugrave$2, uml: uml$2, uuml: uuml$2, yacute: yacute$2, yen: yen$2, yuml: yuml$2, 'default': index$5 }); var index$4 = { "0": "�", "128": "€", "130": "‚", "131": "ƒ", "132": "„", "133": "…", "134": "†", "135": "‡", "136": "ˆ", "137": "‰", "138": "Š", "139": "‹", "140": "Œ", "142": "Ž", "145": "‘", "146": "’", "147": "“", "148": "”", "149": "•", "150": "–", "151": "—", "152": "˜", "153": "™", "154": "š", "155": "›", "156": "œ", "158": "ž", "159": "Ÿ" }; var characterReferenceInvalid = /*#__PURE__*/Object.freeze({ __proto__: null, 'default': index$4 }); var isDecimal = decimal$1; // Check if the given character code, or the character code at the first // character, is decimal. function decimal$1(character) { var code = typeof character === 'string' ? character.charCodeAt(0) : character; return code >= 48 && code <= 57 /* 0-9 */ } var isHexadecimal = hexadecimal; // Check if the given character code, or the character code at the first // character, is hexadecimal. function hexadecimal(character) { var code = typeof character === 'string' ? character.charCodeAt(0) : character; return ( (code >= 97 /* a */ && code <= 102) /* z */ || (code >= 65 /* A */ && code <= 70) /* Z */ || (code >= 48 /* A */ && code <= 57) /* Z */ ) } var isAlphabetical = alphabetical; // Check if the given character code, or the character code at the first // character, is alphabetical. function alphabetical(character) { var code = typeof character === 'string' ? character.charCodeAt(0) : character; return ( (code >= 97 && code <= 122) /* a-z */ || (code >= 65 && code <= 90) /* A-Z */ ) } var isAlphanumerical = alphanumerical; // Check if the given character code, or the character code at the first // character, is alphanumerical. function alphanumerical(character) { return isAlphabetical(character) || isDecimal(character) } var AEli = "Æ"; var AElig$1 = "Æ"; var AM = "&"; var AMP$1 = "&"; var Aacut = "Á"; var Aacute$1 = "Á"; var Abreve = "Ă"; var Acir = "Â"; var Acirc$1 = "Â"; var Acy = "А"; var Afr = "𝔄"; var Agrav = "À"; var Agrave$1 = "À"; var Alpha$1 = "Α"; var Amacr = "Ā"; var And = "⩓"; var Aogon = "Ą"; var Aopf = "𝔸"; var ApplyFunction = "⁡"; var Arin = "Å"; var Aring$1 = "Å"; var Ascr = "𝒜"; var Assign = "≔"; var Atild = "Ã"; var Atilde$1 = "Ã"; var Aum = "Ä"; var Auml$1 = "Ä"; var Backslash = "∖"; var Barv = "⫧"; var Barwed = "⌆"; var Bcy = "Б"; var Because = "∵"; var Bernoullis = "ℬ"; var Beta$1 = "Β"; var Bfr = "𝔅"; var Bopf = "𝔹"; var Breve = "˘"; var Bscr = "ℬ"; var Bumpeq = "≎"; var CHcy = "Ч"; var COP = "©"; var COPY = "©"; var Cacute = "Ć"; var Cap = "⋒"; var CapitalDifferentialD = "ⅅ"; var Cayleys = "ℭ"; var Ccaron = "Č"; var Ccedi = "Ç"; var Ccedil$1 = "Ç"; var Ccirc = "Ĉ"; var Cconint = "∰"; var Cdot = "Ċ"; var Cedilla = "¸"; var CenterDot = "·"; var Cfr = "ℭ"; var Chi$1 = "Χ"; var CircleDot = "⊙"; var CircleMinus = "⊖"; var CirclePlus = "⊕"; var CircleTimes = "⊗"; var ClockwiseContourIntegral = "∲"; var CloseCurlyDoubleQuote = "”"; var CloseCurlyQuote = "’"; var Colon = "∷"; var Colone = "⩴"; var Congruent = "≡"; var Conint = "∯"; var ContourIntegral = "∮"; var Copf = "ℂ"; var Coproduct = "∐"; var CounterClockwiseContourIntegral = "∳"; var Cross = "⨯"; var Cscr = "𝒞"; var Cup = "⋓"; var CupCap = "≍"; var DD = "ⅅ"; var DDotrahd = "⤑"; var DJcy = "Ђ"; var DScy = "Ѕ"; var DZcy = "Џ"; var Dagger$1 = "‡"; var Darr = "↡"; var Dashv = "⫤"; var Dcaron = "Ď"; var Dcy = "Д"; var Del = "∇"; var Delta$1 = "Δ"; var Dfr = "𝔇"; var DiacriticalAcute = "´"; var DiacriticalDot = "˙"; var DiacriticalDoubleAcute = "˝"; var DiacriticalGrave = "`"; var DiacriticalTilde = "˜"; var Diamond = "⋄"; var DifferentialD = "ⅆ"; var Dopf = "𝔻"; var Dot = "¨"; var DotDot = "⃜"; var DotEqual = "≐"; var DoubleContourIntegral = "∯"; var DoubleDot = "¨"; var DoubleDownArrow = "⇓"; var DoubleLeftArrow = "⇐"; var DoubleLeftRightArrow = "⇔"; var DoubleLeftTee = "⫤"; var DoubleLongLeftArrow = "⟸"; var DoubleLongLeftRightArrow = "⟺"; var DoubleLongRightArrow = "⟹"; var DoubleRightArrow = "⇒"; var DoubleRightTee = "⊨"; var DoubleUpArrow = "⇑"; var DoubleUpDownArrow = "⇕"; var DoubleVerticalBar = "∥"; var DownArrow = "↓"; var DownArrowBar = "⤓"; var DownArrowUpArrow = "⇵"; var DownBreve = "̑"; var DownLeftRightVector = "⥐"; var DownLeftTeeVector = "⥞"; var DownLeftVector = "↽"; var DownLeftVectorBar = "⥖"; var DownRightTeeVector = "⥟"; var DownRightVector = "⇁"; var DownRightVectorBar = "⥗"; var DownTee = "⊤"; var DownTeeArrow = "↧"; var Downarrow = "⇓"; var Dscr = "𝒟"; var Dstrok = "Đ"; var ENG = "Ŋ"; var ET = "Ð"; var ETH$1 = "Ð"; var Eacut = "É"; var Eacute$1 = "É"; var Ecaron = "Ě"; var Ecir = "Ê"; var Ecirc$1 = "Ê"; var Ecy = "Э"; var Edot = "Ė"; var Efr = "𝔈"; var Egrav = "È"; var Egrave$1 = "È"; var Element = "∈"; var Emacr = "Ē"; var EmptySmallSquare = "◻"; var EmptyVerySmallSquare = "▫"; var Eogon = "Ę"; var Eopf = "𝔼"; var Epsilon$1 = "Ε"; var Equal = "⩵"; var EqualTilde = "≂"; var Equilibrium = "⇌"; var Escr = "ℰ"; var Esim = "⩳"; var Eta$1 = "Η"; var Eum = "Ë"; var Euml$1 = "Ë"; var Exists = "∃"; var ExponentialE = "ⅇ"; var Fcy = "Ф"; var Ffr = "𝔉"; var FilledSmallSquare = "◼"; var FilledVerySmallSquare = "▪"; var Fopf = "𝔽"; var ForAll = "∀"; var Fouriertrf = "ℱ"; var Fscr = "ℱ"; var GJcy = "Ѓ"; var G = ">"; var GT$1 = ">"; var Gamma$1 = "Γ"; var Gammad = "Ϝ"; var Gbreve = "Ğ"; var Gcedil = "Ģ"; var Gcirc = "Ĝ"; var Gcy = "Г"; var Gdot = "Ġ"; var Gfr = "𝔊"; var Gg = "⋙"; var Gopf = "𝔾"; var GreaterEqual = "≥"; var GreaterEqualLess = "⋛"; var GreaterFullEqual = "≧"; var GreaterGreater = "⪢"; var GreaterLess = "≷"; var GreaterSlantEqual = "⩾"; var GreaterTilde = "≳"; var Gscr = "𝒢"; var Gt = "≫"; var HARDcy = "Ъ"; var Hacek = "ˇ"; var Hat = "^"; var Hcirc = "Ĥ"; var Hfr = "ℌ"; var HilbertSpace = "ℋ"; var Hopf = "ℍ"; var HorizontalLine = "─"; var Hscr = "ℋ"; var Hstrok = "Ħ"; var HumpDownHump = "≎"; var HumpEqual = "≏"; var IEcy = "Е"; var IJlig = "IJ"; var IOcy = "Ё"; var Iacut = "Í"; var Iacute$1 = "Í"; var Icir = "Î"; var Icirc$1 = "Î"; var Icy = "И"; var Idot = "İ"; var Ifr = "ℑ"; var Igrav = "Ì"; var Igrave$1 = "Ì"; var Im = "ℑ"; var Imacr = "Ī"; var ImaginaryI = "ⅈ"; var Implies = "⇒"; var Int = "∬"; var Integral = "∫"; var Intersection = "⋂"; var InvisibleComma = "⁣"; var InvisibleTimes = "⁢"; var Iogon = "Į"; var Iopf = "𝕀"; var Iota$1 = "Ι"; var Iscr = "ℐ"; var Itilde = "Ĩ"; var Iukcy = "І"; var Ium = "Ï"; var Iuml$1 = "Ï"; var Jcirc = "Ĵ"; var Jcy = "Й"; var Jfr = "𝔍"; var Jopf = "𝕁"; var Jscr = "𝒥"; var Jsercy = "Ј"; var Jukcy = "Є"; var KHcy = "Х"; var KJcy = "Ќ"; var Kappa$1 = "Κ"; var Kcedil = "Ķ"; var Kcy = "К"; var Kfr = "𝔎"; var Kopf = "𝕂"; var Kscr = "𝒦"; var LJcy = "Љ"; var L = "<"; var LT$1 = "<"; var Lacute = "Ĺ"; var Lambda$1 = "Λ"; var Lang = "⟪"; var Laplacetrf = "ℒ"; var Larr = "↞"; var Lcaron = "Ľ"; var Lcedil = "Ļ"; var Lcy = "Л"; var LeftAngleBracket = "⟨"; var LeftArrow = "←"; var LeftArrowBar = "⇤"; var LeftArrowRightArrow = "⇆"; var LeftCeiling = "⌈"; var LeftDoubleBracket = "⟦"; var LeftDownTeeVector = "⥡"; var LeftDownVector = "⇃"; var LeftDownVectorBar = "⥙"; var LeftFloor = "⌊"; var LeftRightArrow = "↔"; var LeftRightVector = "⥎"; var LeftTee = "⊣"; var LeftTeeArrow = "↤"; var LeftTeeVector = "⥚"; var LeftTriangle = "⊲"; var LeftTriangleBar = "⧏"; var LeftTriangleEqual = "⊴"; var LeftUpDownVector = "⥑"; var LeftUpTeeVector = "⥠"; var LeftUpVector = "↿"; var LeftUpVectorBar = "⥘"; var LeftVector = "↼"; var LeftVectorBar = "⥒"; var Leftarrow = "⇐"; var Leftrightarrow = "⇔"; var LessEqualGreater = "⋚"; var LessFullEqual = "≦"; var LessGreater = "≶"; var LessLess = "⪡"; var LessSlantEqual = "⩽"; var LessTilde = "≲"; var Lfr = "𝔏"; var Ll = "⋘"; var Lleftarrow = "⇚"; var Lmidot = "Ŀ"; var LongLeftArrow = "⟵"; var LongLeftRightArrow = "⟷"; var LongRightArrow = "⟶"; var Longleftarrow = "⟸"; var Longleftrightarrow = "⟺"; var Longrightarrow = "⟹"; var Lopf = "𝕃"; var LowerLeftArrow = "↙"; var LowerRightArrow = "↘"; var Lscr = "ℒ"; var Lsh = "↰"; var Lstrok = "Ł"; var Lt = "≪"; var Mcy = "М"; var MediumSpace = " "; var Mellintrf = "ℳ"; var Mfr = "𝔐"; var MinusPlus = "∓"; var Mopf = "𝕄"; var Mscr = "ℳ"; var Mu$1 = "Μ"; var NJcy = "Њ"; var Nacute = "Ń"; var Ncaron = "Ň"; var Ncedil = "Ņ"; var Ncy = "Н"; var NegativeMediumSpace = "​"; var NegativeThickSpace = "​"; var NegativeThinSpace = "​"; var NegativeVeryThinSpace = "​"; var NestedGreaterGreater = "≫"; var NestedLessLess = "≪"; var NewLine = "\n"; var Nfr = "𝔑"; var NoBreak = "⁠"; var NonBreakingSpace = " "; var Nopf = "ℕ"; var Not = "⫬"; var NotCongruent = "≢"; var NotCupCap = "≭"; var NotDoubleVerticalBar = "∦"; var NotElement = "∉"; var NotEqual = "≠"; var NotEqualTilde = "≂̸"; var NotExists = "∄"; var NotGreater = "≯"; var NotGreaterEqual = "≱"; var NotGreaterFullEqual = "≧̸"; var NotGreaterGreater = "≫̸"; var NotGreaterLess = "≹"; var NotGreaterSlantEqual = "⩾̸"; var NotGreaterTilde = "≵"; var NotHumpDownHump = "≎̸"; var NotHumpEqual = "≏̸"; var NotLeftTriangle = "⋪"; var NotLeftTriangleBar = "⧏̸"; var NotLeftTriangleEqual = "⋬"; var NotLess = "≮"; var NotLessEqual = "≰"; var NotLessGreater = "≸"; var NotLessLess = "≪̸"; var NotLessSlantEqual = "⩽̸"; var NotLessTilde = "≴"; var NotNestedGreaterGreater = "⪢̸"; var NotNestedLessLess = "⪡̸"; var NotPrecedes = "⊀"; var NotPrecedesEqual = "⪯̸"; var NotPrecedesSlantEqual = "⋠"; var NotReverseElement = "∌"; var NotRightTriangle = "⋫"; var NotRightTriangleBar = "⧐̸"; var NotRightTriangleEqual = "⋭"; var NotSquareSubset = "⊏̸"; var NotSquareSubsetEqual = "⋢"; var NotSquareSuperset = "⊐̸"; var NotSquareSupersetEqual = "⋣"; var NotSubset = "⊂⃒"; var NotSubsetEqual = "⊈"; var NotSucceeds = "⊁"; var NotSucceedsEqual = "⪰̸"; var NotSucceedsSlantEqual = "⋡"; var NotSucceedsTilde = "≿̸"; var NotSuperset = "⊃⃒"; var NotSupersetEqual = "⊉"; var NotTilde = "≁"; var NotTildeEqual = "≄"; var NotTildeFullEqual = "≇"; var NotTildeTilde = "≉"; var NotVerticalBar = "∤"; var Nscr = "𝒩"; var Ntild = "Ñ"; var Ntilde$1 = "Ñ"; var Nu$1 = "Ν"; var OElig$1 = "Œ"; var Oacut = "Ó"; var Oacute$1 = "Ó"; var Ocir = "Ô"; var Ocirc$1 = "Ô"; var Ocy = "О"; var Odblac = "Ő"; var Ofr = "𝔒"; var Ograv = "Ò"; var Ograve$1 = "Ò"; var Omacr = "Ō"; var Omega$1 = "Ω"; var Omicron$1 = "Ο"; var Oopf = "𝕆"; var OpenCurlyDoubleQuote = "“"; var OpenCurlyQuote = "‘"; var Or = "⩔"; var Oscr = "𝒪"; var Oslas = "Ø"; var Oslash$1 = "Ø"; var Otild = "Õ"; var Otilde$1 = "Õ"; var Otimes = "⨷"; var Oum = "Ö"; var Ouml$1 = "Ö"; var OverBar = "‾"; var OverBrace = "⏞"; var OverBracket = "⎴"; var OverParenthesis = "⏜"; var PartialD = "∂"; var Pcy = "П"; var Pfr = "𝔓"; var Phi$1 = "Φ"; var Pi$1 = "Π"; var PlusMinus = "±"; var Poincareplane = "ℌ"; var Popf = "ℙ"; var Pr = "⪻"; var Precedes = "≺"; var PrecedesEqual = "⪯"; var PrecedesSlantEqual = "≼"; var PrecedesTilde = "≾"; var Prime$1 = "″"; var Product = "∏"; var Proportion = "∷"; var Proportional = "∝"; var Pscr = "𝒫"; var Psi$1 = "Ψ"; var QUO = "\""; var QUOT = "\""; var Qfr = "𝔔"; var Qopf = "ℚ"; var Qscr = "𝒬"; var RBarr = "⤐"; var RE = "®"; var REG = "®"; var Racute = "Ŕ"; var Rang = "⟫"; var Rarr = "↠"; var Rarrtl = "⤖"; var Rcaron = "Ř"; var Rcedil = "Ŗ"; var Rcy = "Р"; var Re = "ℜ"; var ReverseElement = "∋"; var ReverseEquilibrium = "⇋"; var ReverseUpEquilibrium = "⥯"; var Rfr = "ℜ"; var Rho$1 = "Ρ"; var RightAngleBracket = "⟩"; var RightArrow = "→"; var RightArrowBar = "⇥"; var RightArrowLeftArrow = "⇄"; var RightCeiling = "⌉"; var RightDoubleBracket = "⟧"; var RightDownTeeVector = "⥝"; var RightDownVector = "⇂"; var RightDownVectorBar = "⥕"; var RightFloor = "⌋"; var RightTee = "⊢"; var RightTeeArrow = "↦"; var RightTeeVector = "⥛"; var RightTriangle = "⊳"; var RightTriangleBar = "⧐"; var RightTriangleEqual = "⊵"; var RightUpDownVector = "⥏"; var RightUpTeeVector = "⥜"; var RightUpVector = "↾"; var RightUpVectorBar = "⥔"; var RightVector = "⇀"; var RightVectorBar = "⥓"; var Rightarrow = "⇒"; var Ropf = "ℝ"; var RoundImplies = "⥰"; var Rrightarrow = "⇛"; var Rscr = "ℛ"; var Rsh = "↱"; var RuleDelayed = "⧴"; var SHCHcy = "Щ"; var SHcy = "Ш"; var SOFTcy = "Ь"; var Sacute = "Ś"; var Sc = "⪼"; var Scaron$1 = "Š"; var Scedil = "Ş"; var Scirc = "Ŝ"; var Scy = "С"; var Sfr = "𝔖"; var ShortDownArrow = "↓"; var ShortLeftArrow = "←"; var ShortRightArrow = "→"; var ShortUpArrow = "↑"; var Sigma$1 = "Σ"; var SmallCircle = "∘"; var Sopf = "𝕊"; var Sqrt = "√"; var Square = "□"; var SquareIntersection = "⊓"; var SquareSubset = "⊏"; var SquareSubsetEqual = "⊑"; var SquareSuperset = "⊐"; var SquareSupersetEqual = "⊒"; var SquareUnion = "⊔"; var Sscr = "𝒮"; var Star = "⋆"; var Sub = "⋐"; var Subset = "⋐"; var SubsetEqual = "⊆"; var Succeeds = "≻"; var SucceedsEqual = "⪰"; var SucceedsSlantEqual = "≽"; var SucceedsTilde = "≿"; var SuchThat = "∋"; var Sum = "∑"; var Sup = "⋑"; var Superset = "⊃"; var SupersetEqual = "⊇"; var Supset = "⋑"; var THOR = "Þ"; var THORN$1 = "Þ"; var TRADE = "™"; var TSHcy = "Ћ"; var TScy = "Ц"; var Tab = "\t"; var Tau$1 = "Τ"; var Tcaron = "Ť"; var Tcedil = "Ţ"; var Tcy = "Т"; var Tfr = "𝔗"; var Therefore = "∴"; var Theta$1 = "Θ"; var ThickSpace = "  "; var ThinSpace = " "; var Tilde = "∼"; var TildeEqual = "≃"; var TildeFullEqual = "≅"; var TildeTilde = "≈"; var Topf = "𝕋"; var TripleDot = "⃛"; var Tscr = "𝒯"; var Tstrok = "Ŧ"; var Uacut = "Ú"; var Uacute$1 = "Ú"; var Uarr = "↟"; var Uarrocir = "⥉"; var Ubrcy = "Ў"; var Ubreve = "Ŭ"; var Ucir = "Û"; var Ucirc$1 = "Û"; var Ucy = "У"; var Udblac = "Ű"; var Ufr = "𝔘"; var Ugrav = "Ù"; var Ugrave$1 = "Ù"; var Umacr = "Ū"; var UnderBar = "_"; var UnderBrace = "⏟"; var UnderBracket = "⎵"; var UnderParenthesis = "⏝"; var Union = "⋃"; var UnionPlus = "⊎"; var Uogon = "Ų"; var Uopf = "𝕌"; var UpArrow = "↑"; var UpArrowBar = "⤒"; var UpArrowDownArrow = "⇅"; var UpDownArrow = "↕"; var UpEquilibrium = "⥮"; var UpTee = "⊥"; var UpTeeArrow = "↥"; var Uparrow = "⇑"; var Updownarrow = "⇕"; var UpperLeftArrow = "↖"; var UpperRightArrow = "↗"; var Upsi = "ϒ"; var Upsilon$1 = "Υ"; var Uring = "Ů"; var Uscr = "𝒰"; var Utilde = "Ũ"; var Uum = "Ü"; var Uuml$1 = "Ü"; var VDash = "⊫"; var Vbar = "⫫"; var Vcy = "В"; var Vdash = "⊩"; var Vdashl = "⫦"; var Vee = "⋁"; var Verbar = "‖"; var Vert = "‖"; var VerticalBar = "∣"; var VerticalLine = "|"; var VerticalSeparator = "❘"; var VerticalTilde = "≀"; var VeryThinSpace = " "; var Vfr = "𝔙"; var Vopf = "𝕍"; var Vscr = "𝒱"; var Vvdash = "⊪"; var Wcirc = "Ŵ"; var Wedge = "⋀"; var Wfr = "𝔚"; var Wopf = "𝕎"; var Wscr = "𝒲"; var Xfr = "𝔛"; var Xi$1 = "Ξ"; var Xopf = "𝕏"; var Xscr = "𝒳"; var YAcy = "Я"; var YIcy = "Ї"; var YUcy = "Ю"; var Yacut = "Ý"; var Yacute$1 = "Ý"; var Ycirc = "Ŷ"; var Ycy = "Ы"; var Yfr = "𝔜"; var Yopf = "𝕐"; var Yscr = "𝒴"; var Yuml$1 = "Ÿ"; var ZHcy = "Ж"; var Zacute = "Ź"; var Zcaron = "Ž"; var Zcy = "З"; var Zdot = "Ż"; var ZeroWidthSpace = "​"; var Zeta$1 = "Ζ"; var Zfr = "ℨ"; var Zopf = "ℤ"; var Zscr = "𝒵"; var aacut = "á"; var aacute$1 = "á"; var abreve = "ă"; var ac = "∾"; var acE = "∾̳"; var acd = "∿"; var acir = "â"; var acirc$1 = "â"; var acut = "´"; var acute$1 = "´"; var acy = "а"; var aeli = "æ"; var aelig$1 = "æ"; var af = "⁡"; var afr = "𝔞"; var agrav = "à"; var agrave$1 = "à"; var alefsym$1 = "ℵ"; var aleph = "ℵ"; var alpha$1 = "α"; var amacr = "ā"; var amalg = "⨿"; var am = "&"; var amp$1 = "&"; var and$1 = "∧"; var andand = "⩕"; var andd = "⩜"; var andslope = "⩘"; var andv = "⩚"; var ang$1 = "∠"; var ange = "⦤"; var angle = "∠"; var angmsd = "∡"; var angmsdaa = "⦨"; var angmsdab = "⦩"; var angmsdac = "⦪"; var angmsdad = "⦫"; var angmsdae = "⦬"; var angmsdaf = "⦭"; var angmsdag = "⦮"; var angmsdah = "⦯"; var angrt = "∟"; var angrtvb = "⊾"; var angrtvbd = "⦝"; var angsph = "∢"; var angst = "Å"; var angzarr = "⍼"; var aogon = "ą"; var aopf = "𝕒"; var ap = "≈"; var apE = "⩰"; var apacir = "⩯"; var ape = "≊"; var apid = "≋"; var apos = "'"; var approx = "≈"; var approxeq = "≊"; var arin = "å"; var aring$1 = "å"; var ascr = "𝒶"; var ast = "*"; var asymp$1 = "≈"; var asympeq = "≍"; var atild = "ã"; var atilde$1 = "ã"; var aum = "ä"; var auml$1 = "ä"; var awconint = "∳"; var awint = "⨑"; var bNot = "⫭"; var backcong = "≌"; var backepsilon = "϶"; var backprime = "‵"; var backsim = "∽"; var backsimeq = "⋍"; var barvee = "⊽"; var barwed = "⌅"; var barwedge = "⌅"; var bbrk = "⎵"; var bbrktbrk = "⎶"; var bcong = "≌"; var bcy = "б"; var bdquo$1 = "„"; var becaus = "∵"; var because = "∵"; var bemptyv = "⦰"; var bepsi = "϶"; var bernou = "ℬ"; var beta$1 = "β"; var beth = "ℶ"; var between = "≬"; var bfr = "𝔟"; var bigcap = "⋂"; var bigcirc = "◯"; var bigcup = "⋃"; var bigodot = "⨀"; var bigoplus = "⨁"; var bigotimes = "⨂"; var bigsqcup = "⨆"; var bigstar = "★"; var bigtriangledown = "▽"; var bigtriangleup = "△"; var biguplus = "⨄"; var bigvee = "⋁"; var bigwedge = "⋀"; var bkarow = "⤍"; var blacklozenge = "⧫"; var blacksquare = "▪"; var blacktriangle = "▴"; var blacktriangledown = "▾"; var blacktriangleleft = "◂"; var blacktriangleright = "▸"; var blank = "␣"; var blk12 = "▒"; var blk14 = "░"; var blk34 = "▓"; var block = "█"; var bne = "=⃥"; var bnequiv = "≡⃥"; var bnot = "⌐"; var bopf = "𝕓"; var bot = "⊥"; var bottom = "⊥"; var bowtie = "⋈"; var boxDL = "╗"; var boxDR = "╔"; var boxDl = "╖"; var boxDr = "╓"; var boxH = "═"; var boxHD = "╦"; var boxHU = "╩"; var boxHd = "╤"; var boxHu = "╧"; var boxUL = "╝"; var boxUR = "╚"; var boxUl = "╜"; var boxUr = "╙"; var boxV = "║"; var boxVH = "╬"; var boxVL = "╣"; var boxVR = "╠"; var boxVh = "╫"; var boxVl = "╢"; var boxVr = "╟"; var boxbox = "⧉"; var boxdL = "╕"; var boxdR = "╒"; var boxdl = "┐"; var boxdr = "┌"; var boxh = "─"; var boxhD = "╥"; var boxhU = "╨"; var boxhd = "┬"; var boxhu = "┴"; var boxminus = "⊟"; var boxplus = "⊞"; var boxtimes = "⊠"; var boxuL = "╛"; var boxuR = "╘"; var boxul = "┘"; var boxur = "└"; var boxv = "│"; var boxvH = "╪"; var boxvL = "╡"; var boxvR = "╞"; var boxvh = "┼"; var boxvl = "┤"; var boxvr = "├"; var bprime = "‵"; var breve = "˘"; var brvba = "¦"; var brvbar$1 = "¦"; var bscr = "𝒷"; var bsemi = "⁏"; var bsim = "∽"; var bsime = "⋍"; var bsol = "\\"; var bsolb = "⧅"; var bsolhsub = "⟈"; var bull$1 = "•"; var bullet = "•"; var bump = "≎"; var bumpE = "⪮"; var bumpe = "≏"; var bumpeq = "≏"; var cacute = "ć"; var cap$2 = "∩"; var capand = "⩄"; var capbrcup = "⩉"; var capcap = "⩋"; var capcup = "⩇"; var capdot = "⩀"; var caps = "∩︀"; var caret = "⁁"; var caron = "ˇ"; var ccaps = "⩍"; var ccaron = "č"; var ccedi = "ç"; var ccedil$1 = "ç"; var ccirc = "ĉ"; var ccups = "⩌"; var ccupssm = "⩐"; var cdot = "ċ"; var cedi = "¸"; var cedil$1 = "¸"; var cemptyv = "⦲"; var cen = "¢"; var cent$1 = "¢"; var centerdot = "·"; var cfr = "𝔠"; var chcy = "ч"; var check = "✓"; var checkmark = "✓"; var chi$1 = "χ"; var cir = "○"; var cirE = "⧃"; var circ$1 = "ˆ"; var circeq = "≗"; var circlearrowleft = "↺"; var circlearrowright = "↻"; var circledR = "®"; var circledS = "Ⓢ"; var circledast = "⊛"; var circledcirc = "⊚"; var circleddash = "⊝"; var cire = "≗"; var cirfnint = "⨐"; var cirmid = "⫯"; var cirscir = "⧂"; var clubs$1 = "♣"; var clubsuit = "♣"; var colon$3 = ":"; var colone = "≔"; var coloneq = "≔"; var comma$2 = ","; var commat = "@"; var comp = "∁"; var compfn = "∘"; var complement = "∁"; var complexes = "ℂ"; var cong$1 = "≅"; var congdot = "⩭"; var conint = "∮"; var copf = "𝕔"; var coprod = "∐"; var cop = "©"; var copy$1 = "©"; var copysr = "℗"; var crarr$1 = "↵"; var cross = "✗"; var cscr = "𝒸"; var csub = "⫏"; var csube = "⫑"; var csup = "⫐"; var csupe = "⫒"; var ctdot = "⋯"; var cudarrl = "⤸"; var cudarrr = "⤵"; var cuepr = "⋞"; var cuesc = "⋟"; var cularr = "↶"; var cularrp = "⤽"; var cup$1 = "∪"; var cupbrcap = "⩈"; var cupcap = "⩆"; var cupcup = "⩊"; var cupdot = "⊍"; var cupor = "⩅"; var cups = "∪︀"; var curarr = "↷"; var curarrm = "⤼"; var curlyeqprec = "⋞"; var curlyeqsucc = "⋟"; var curlyvee = "⋎"; var curlywedge = "⋏"; var curre = "¤"; var curren$1 = "¤"; var curvearrowleft = "↶"; var curvearrowright = "↷"; var cuvee = "⋎"; var cuwed = "⋏"; var cwconint = "∲"; var cwint = "∱"; var cylcty = "⌭"; var dArr$1 = "⇓"; var dHar = "⥥"; var dagger$1 = "†"; var daleth = "ℸ"; var darr$1 = "↓"; var dash$8 = "‐"; var dashv = "⊣"; var dbkarow = "⤏"; var dblac = "˝"; var dcaron = "ď"; var dcy = "д"; var dd$1 = "ⅆ"; var ddagger = "‡"; var ddarr = "⇊"; var ddotseq = "⩷"; var de = "°"; var deg$1 = "°"; var delta$1 = "δ"; var demptyv = "⦱"; var dfisht = "⥿"; var dfr = "𝔡"; var dharl = "⇃"; var dharr = "⇂"; var diam = "⋄"; var diamond = "⋄"; var diamondsuit = "♦"; var diams$1 = "♦"; var die = "¨"; var digamma = "ϝ"; var disin = "⋲"; var div = "÷"; var divid = "÷"; var divide$1 = "÷"; var divideontimes = "⋇"; var divonx = "⋇"; var djcy = "ђ"; var dlcorn = "⌞"; var dlcrop = "⌍"; var dollar = "$"; var dopf = "𝕕"; var dot$4 = "˙"; var doteq = "≐"; var doteqdot = "≑"; var dotminus = "∸"; var dotplus = "∔"; var dotsquare = "⊡"; var doublebarwedge = "⌆"; var downarrow = "↓"; var downdownarrows = "⇊"; var downharpoonleft = "⇃"; var downharpoonright = "⇂"; var drbkarow = "⤐"; var drcorn = "⌟"; var drcrop = "⌌"; var dscr = "𝒹"; var dscy = "ѕ"; var dsol = "⧶"; var dstrok = "đ"; var dtdot = "⋱"; var dtri = "▿"; var dtrif = "▾"; var duarr = "⇵"; var duhar = "⥯"; var dwangle = "⦦"; var dzcy = "џ"; var dzigrarr = "⟿"; var eDDot = "⩷"; var eDot = "≑"; var eacut = "é"; var eacute$1 = "é"; var easter = "⩮"; var ecaron = "ě"; var ecir = "ê"; var ecirc$1 = "ê"; var ecolon = "≕"; var ecy = "э"; var edot = "ė"; var ee = "ⅇ"; var efDot = "≒"; var efr = "𝔢"; var eg = "⪚"; var egrav = "è"; var egrave$1 = "è"; var egs = "⪖"; var egsdot = "⪘"; var el = "⪙"; var elinters = "⏧"; var ell = "ℓ"; var els = "⪕"; var elsdot = "⪗"; var emacr = "ē"; var empty$3 = "∅"; var emptyset = "∅"; var emptyv = "∅"; var emsp13 = " "; var emsp14 = " "; var emsp$1 = " "; var eng = "ŋ"; var ensp$1 = " "; var eogon = "ę"; var eopf = "𝕖"; var epar = "⋕"; var eparsl = "⧣"; var eplus = "⩱"; var epsi = "ε"; var epsilon$1 = "ε"; var epsiv = "ϵ"; var eqcirc = "≖"; var eqcolon = "≕"; var eqsim = "≂"; var eqslantgtr = "⪖"; var eqslantless = "⪕"; var equals = "="; var equest = "≟"; var equiv$1 = "≡"; var equivDD = "⩸"; var eqvparsl = "⧥"; var erDot = "≓"; var erarr = "⥱"; var escr = "ℯ"; var esdot = "≐"; var esim = "≂"; var eta$1 = "η"; var et = "ð"; var eth$1 = "ð"; var eum = "ë"; var euml$1 = "ë"; var euro$1 = "€"; var excl = "!"; var exist$1 = "∃"; var expectation = "ℰ"; var exponentiale = "ⅇ"; var fallingdotseq = "≒"; var fcy = "ф"; var female = "♀"; var ffilig = "ffi"; var fflig = "ff"; var ffllig = "ffl"; var ffr = "𝔣"; var filig = "fi"; var fjlig = "fj"; var flat = "♭"; var fllig = "fl"; var fltns = "▱"; var fnof$1 = "ƒ"; var fopf = "𝕗"; var forall$1 = "∀"; var fork = "⋔"; var forkv = "⫙"; var fpartint = "⨍"; var frac1 = "¼"; var frac12$1 = "½"; var frac13 = "⅓"; var frac14$1 = "¼"; var frac15 = "⅕"; var frac16 = "⅙"; var frac18 = "⅛"; var frac23 = "⅔"; var frac25 = "⅖"; var frac3 = "¾"; var frac34$1 = "¾"; var frac35 = "⅗"; var frac38 = "⅜"; var frac45 = "⅘"; var frac56 = "⅚"; var frac58 = "⅝"; var frac78 = "⅞"; var frasl$1 = "⁄"; var frown = "⌢"; var fscr = "𝒻"; var gE = "≧"; var gEl = "⪌"; var gacute = "ǵ"; var gamma$1 = "γ"; var gammad = "ϝ"; var gap = "⪆"; var gbreve = "ğ"; var gcirc = "ĝ"; var gcy = "г"; var gdot = "ġ"; var ge$1 = "≥"; var gel = "⋛"; var geq = "≥"; var geqq = "≧"; var geqslant = "⩾"; var ges = "⩾"; var gescc = "⪩"; var gesdot = "⪀"; var gesdoto = "⪂"; var gesdotol = "⪄"; var gesl = "⋛︀"; var gesles = "⪔"; var gfr = "𝔤"; var gg = "≫"; var ggg = "⋙"; var gimel = "ℷ"; var gjcy = "ѓ"; var gl = "≷"; var glE = "⪒"; var gla = "⪥"; var glj = "⪤"; var gnE = "≩"; var gnap = "⪊"; var gnapprox = "⪊"; var gne = "⪈"; var gneq = "⪈"; var gneqq = "≩"; var gnsim = "⋧"; var gopf = "𝕘"; var grave = "`"; var gscr = "ℊ"; var gsim = "≳"; var gsime = "⪎"; var gsiml = "⪐"; var g = ">"; var gt$1 = ">"; var gtcc = "⪧"; var gtcir = "⩺"; var gtdot = "⋗"; var gtlPar = "⦕"; var gtquest = "⩼"; var gtrapprox = "⪆"; var gtrarr = "⥸"; var gtrdot = "⋗"; var gtreqless = "⋛"; var gtreqqless = "⪌"; var gtrless = "≷"; var gtrsim = "≳"; var gvertneqq = "≩︀"; var gvnE = "≩︀"; var hArr$1 = "⇔"; var hairsp = " "; var half = "½"; var hamilt = "ℋ"; var hardcy = "ъ"; var harr$1 = "↔"; var harrcir = "⥈"; var harrw = "↭"; var hbar = "ℏ"; var hcirc = "ĥ"; var hearts$1 = "♥"; var heartsuit = "♥"; var hellip$1 = "…"; var hercon = "⊹"; var hfr = "𝔥"; var hksearow = "⤥"; var hkswarow = "⤦"; var hoarr = "⇿"; var homtht = "∻"; var hookleftarrow = "↩"; var hookrightarrow = "↪"; var hopf = "𝕙"; var horbar = "―"; var hscr = "𝒽"; var hslash = "ℏ"; var hstrok = "ħ"; var hybull = "⁃"; var hyphen = "‐"; var iacut = "í"; var iacute$1 = "í"; var ic = "⁣"; var icir = "î"; var icirc$1 = "î"; var icy = "и"; var iecy = "е"; var iexc = "¡"; var iexcl$1 = "¡"; var iff = "⇔"; var ifr = "𝔦"; var igrav = "ì"; var igrave$1 = "ì"; var ii = "ⅈ"; var iiiint = "⨌"; var iiint = "∭"; var iinfin = "⧜"; var iiota = "℩"; var ijlig = "ij"; var imacr = "ī"; var image$3 = "ℑ"; var imagline = "ℐ"; var imagpart = "ℑ"; var imath = "ı"; var imof = "⊷"; var imped = "Ƶ"; var incare = "℅"; var infin$1 = "∞"; var infintie = "⧝"; var inodot = "ı"; var int$1 = "∫"; var intcal = "⊺"; var integers = "ℤ"; var intercal = "⊺"; var intlarhk = "⨗"; var intprod = "⨼"; var iocy = "ё"; var iogon = "į"; var iopf = "𝕚"; var iota$1 = "ι"; var iprod = "⨼"; var iques = "¿"; var iquest$1 = "¿"; var iscr = "𝒾"; var isin$1 = "∈"; var isinE = "⋹"; var isindot = "⋵"; var isins = "⋴"; var isinsv = "⋳"; var isinv = "∈"; var it = "⁢"; var itilde = "ĩ"; var iukcy = "і"; var ium = "ï"; var iuml$1 = "ï"; var jcirc = "ĵ"; var jcy = "й"; var jfr = "𝔧"; var jmath = "ȷ"; var jopf = "𝕛"; var jscr = "𝒿"; var jsercy = "ј"; var jukcy = "є"; var kappa$1 = "κ"; var kappav = "ϰ"; var kcedil = "ķ"; var kcy = "к"; var kfr = "𝔨"; var kgreen = "ĸ"; var khcy = "х"; var kjcy = "ќ"; var kopf = "𝕜"; var kscr = "𝓀"; var lAarr = "⇚"; var lArr$1 = "⇐"; var lAtail = "⤛"; var lBarr = "⤎"; var lE = "≦"; var lEg = "⪋"; var lHar = "⥢"; var lacute = "ĺ"; var laemptyv = "⦴"; var lagran = "ℒ"; var lambda$1 = "λ"; var lang$1 = "⟨"; var langd = "⦑"; var langle = "⟨"; var lap = "⪅"; var laqu = "«"; var laquo$1 = "«"; var larr$1 = "←"; var larrb = "⇤"; var larrbfs = "⤟"; var larrfs = "⤝"; var larrhk = "↩"; var larrlp = "↫"; var larrpl = "⤹"; var larrsim = "⥳"; var larrtl = "↢"; var lat = "⪫"; var latail = "⤙"; var late = "⪭"; var lates = "⪭︀"; var lbarr = "⤌"; var lbbrk = "❲"; var lbrace = "{"; var lbrack = "["; var lbrke = "⦋"; var lbrksld = "⦏"; var lbrkslu = "⦍"; var lcaron = "ľ"; var lcedil = "ļ"; var lceil$1 = "⌈"; var lcub = "{"; var lcy = "л"; var ldca = "⤶"; var ldquo$1 = "“"; var ldquor = "„"; var ldrdhar = "⥧"; var ldrushar = "⥋"; var ldsh = "↲"; var le$1 = "≤"; var leftarrow = "←"; var leftarrowtail = "↢"; var leftharpoondown = "↽"; var leftharpoonup = "↼"; var leftleftarrows = "⇇"; var leftrightarrow = "↔"; var leftrightarrows = "⇆"; var leftrightharpoons = "⇋"; var leftrightsquigarrow = "↭"; var leftthreetimes = "⋋"; var leg = "⋚"; var leq = "≤"; var leqq = "≦"; var leqslant = "⩽"; var les = "⩽"; var lescc = "⪨"; var lesdot = "⩿"; var lesdoto = "⪁"; var lesdotor = "⪃"; var lesg = "⋚︀"; var lesges = "⪓"; var lessapprox = "⪅"; var lessdot = "⋖"; var lesseqgtr = "⋚"; var lesseqqgtr = "⪋"; var lessgtr = "≶"; var lesssim = "≲"; var lfisht = "⥼"; var lfloor$1 = "⌊"; var lfr = "𝔩"; var lg = "≶"; var lgE = "⪑"; var lhard = "↽"; var lharu = "↼"; var lharul = "⥪"; var lhblk = "▄"; var ljcy = "љ"; var ll = "≪"; var llarr = "⇇"; var llcorner = "⌞"; var llhard = "⥫"; var lltri = "◺"; var lmidot = "ŀ"; var lmoust = "⎰"; var lmoustache = "⎰"; var lnE = "≨"; var lnap = "⪉"; var lnapprox = "⪉"; var lne = "⪇"; var lneq = "⪇"; var lneqq = "≨"; var lnsim = "⋦"; var loang = "⟬"; var loarr = "⇽"; var lobrk = "⟦"; var longleftarrow = "⟵"; var longleftrightarrow = "⟷"; var longmapsto = "⟼"; var longrightarrow = "⟶"; var looparrowleft = "↫"; var looparrowright = "↬"; var lopar = "⦅"; var lopf = "𝕝"; var loplus = "⨭"; var lotimes = "⨴"; var lowast$1 = "∗"; var lowbar = "_"; var loz$1 = "◊"; var lozenge = "◊"; var lozf = "⧫"; var lpar = "("; var lparlt = "⦓"; var lrarr = "⇆"; var lrcorner = "⌟"; var lrhar = "⇋"; var lrhard = "⥭"; var lrm$1 = "‎"; var lrtri = "⊿"; var lsaquo$1 = "‹"; var lscr = "𝓁"; var lsh = "↰"; var lsim = "≲"; var lsime = "⪍"; var lsimg = "⪏"; var lsqb = "["; var lsquo$1 = "‘"; var lsquor = "‚"; var lstrok = "ł"; var l = "<"; var lt$1 = "<"; var ltcc = "⪦"; var ltcir = "⩹"; var ltdot = "⋖"; var lthree = "⋋"; var ltimes = "⋉"; var ltlarr = "⥶"; var ltquest = "⩻"; var ltrPar = "⦖"; var ltri = "◃"; var ltrie = "⊴"; var ltrif = "◂"; var lurdshar = "⥊"; var luruhar = "⥦"; var lvertneqq = "≨︀"; var lvnE = "≨︀"; var mDDot = "∺"; var mac = "¯"; var macr$1 = "¯"; var male = "♂"; var malt = "✠"; var maltese = "✠"; var map$1 = "↦"; var mapsto = "↦"; var mapstodown = "↧"; var mapstoleft = "↤"; var mapstoup = "↥"; var marker = "▮"; var mcomma = "⨩"; var mcy = "м"; var mdash$1 = "—"; var measuredangle = "∡"; var mfr = "𝔪"; var mho = "℧"; var micr = "µ"; var micro$1 = "µ"; var mid = "∣"; var midast = "*"; var midcir = "⫰"; var middo = "·"; var middot$1 = "·"; var minus$1 = "−"; var minusb = "⊟"; var minusd = "∸"; var minusdu = "⨪"; var mlcp = "⫛"; var mldr = "…"; var mnplus = "∓"; var models = "⊧"; var mopf = "𝕞"; var mp = "∓"; var mscr = "𝓂"; var mstpos = "∾"; var mu$1 = "μ"; var multimap = "⊸"; var mumap = "⊸"; var nGg = "⋙̸"; var nGt = "≫⃒"; var nGtv = "≫̸"; var nLeftarrow = "⇍"; var nLeftrightarrow = "⇎"; var nLl = "⋘̸"; var nLt = "≪⃒"; var nLtv = "≪̸"; var nRightarrow = "⇏"; var nVDash = "⊯"; var nVdash = "⊮"; var nabla$1 = "∇"; var nacute = "ń"; var nang = "∠⃒"; var nap = "≉"; var napE = "⩰̸"; var napid = "≋̸"; var napos = "ʼn"; var napprox = "≉"; var natur = "♮"; var natural = "♮"; var naturals = "ℕ"; var nbs = " "; var nbsp$1 = " "; var nbump = "≎̸"; var nbumpe = "≏̸"; var ncap = "⩃"; var ncaron = "ň"; var ncedil = "ņ"; var ncong = "≇"; var ncongdot = "⩭̸"; var ncup = "⩂"; var ncy = "н"; var ndash$1 = "–"; var ne$1 = "≠"; var neArr = "⇗"; var nearhk = "⤤"; var nearr = "↗"; var nearrow = "↗"; var nedot = "≐̸"; var nequiv = "≢"; var nesear = "⤨"; var nesim = "≂̸"; var nexist = "∄"; var nexists = "∄"; var nfr = "𝔫"; var ngE = "≧̸"; var nge = "≱"; var ngeq = "≱"; var ngeqq = "≧̸"; var ngeqslant = "⩾̸"; var nges = "⩾̸"; var ngsim = "≵"; var ngt = "≯"; var ngtr = "≯"; var nhArr = "⇎"; var nharr = "↮"; var nhpar = "⫲"; var ni$1 = "∋"; var nis = "⋼"; var nisd = "⋺"; var niv = "∋"; var njcy = "њ"; var nlArr = "⇍"; var nlE = "≦̸"; var nlarr = "↚"; var nldr = "‥"; var nle = "≰"; var nleftarrow = "↚"; var nleftrightarrow = "↮"; var nleq = "≰"; var nleqq = "≦̸"; var nleqslant = "⩽̸"; var nles = "⩽̸"; var nless = "≮"; var nlsim = "≴"; var nlt = "≮"; var nltri = "⋪"; var nltrie = "⋬"; var nmid = "∤"; var nopf = "𝕟"; var no = "¬"; var not$1 = "¬"; var notin$1 = "∉"; var notinE = "⋹̸"; var notindot = "⋵̸"; var notinva = "∉"; var notinvb = "⋷"; var notinvc = "⋶"; var notni = "∌"; var notniva = "∌"; var notnivb = "⋾"; var notnivc = "⋽"; var npar = "∦"; var nparallel = "∦"; var nparsl = "⫽⃥"; var npart = "∂̸"; var npolint = "⨔"; var npr = "⊀"; var nprcue = "⋠"; var npre = "⪯̸"; var nprec = "⊀"; var npreceq = "⪯̸"; var nrArr = "⇏"; var nrarr = "↛"; var nrarrc = "⤳̸"; var nrarrw = "↝̸"; var nrightarrow = "↛"; var nrtri = "⋫"; var nrtrie = "⋭"; var nsc = "⊁"; var nsccue = "⋡"; var nsce = "⪰̸"; var nscr = "𝓃"; var nshortmid = "∤"; var nshortparallel = "∦"; var nsim = "≁"; var nsime = "≄"; var nsimeq = "≄"; var nsmid = "∤"; var nspar = "∦"; var nsqsube = "⋢"; var nsqsupe = "⋣"; var nsub$1 = "⊄"; var nsubE = "⫅̸"; var nsube = "⊈"; var nsubset = "⊂⃒"; var nsubseteq = "⊈"; var nsubseteqq = "⫅̸"; var nsucc = "⊁"; var nsucceq = "⪰̸"; var nsup = "⊅"; var nsupE = "⫆̸"; var nsupe = "⊉"; var nsupset = "⊃⃒"; var nsupseteq = "⊉"; var nsupseteqq = "⫆̸"; var ntgl = "≹"; var ntild = "ñ"; var ntilde$1 = "ñ"; var ntlg = "≸"; var ntriangleleft = "⋪"; var ntrianglelefteq = "⋬"; var ntriangleright = "⋫"; var ntrianglerighteq = "⋭"; var nu$1 = "ν"; var num = "#"; var numero = "№"; var numsp = " "; var nvDash = "⊭"; var nvHarr = "⤄"; var nvap = "≍⃒"; var nvdash = "⊬"; var nvge = "≥⃒"; var nvgt = ">⃒"; var nvinfin = "⧞"; var nvlArr = "⤂"; var nvle = "≤⃒"; var nvlt = "<⃒"; var nvltrie = "⊴⃒"; var nvrArr = "⤃"; var nvrtrie = "⊵⃒"; var nvsim = "∼⃒"; var nwArr = "⇖"; var nwarhk = "⤣"; var nwarr = "↖"; var nwarrow = "↖"; var nwnear = "⤧"; var oS = "Ⓢ"; var oacut = "ó"; var oacute$1 = "ó"; var oast = "⊛"; var ocir = "ô"; var ocirc$1 = "ô"; var ocy = "о"; var odash = "⊝"; var odblac = "ő"; var odiv = "⨸"; var odot = "⊙"; var odsold = "⦼"; var oelig$1 = "œ"; var ofcir = "⦿"; var ofr = "𝔬"; var ogon = "˛"; var ograv = "ò"; var ograve$1 = "ò"; var ogt = "⧁"; var ohbar = "⦵"; var ohm = "Ω"; var oint = "∮"; var olarr = "↺"; var olcir = "⦾"; var olcross = "⦻"; var oline$1 = "‾"; var olt = "⧀"; var omacr = "ō"; var omega$1 = "ω"; var omicron$1 = "ο"; var omid = "⦶"; var ominus = "⊖"; var oopf = "𝕠"; var opar = "⦷"; var operp = "⦹"; var oplus$1 = "⊕"; var or$1 = "∨"; var orarr = "↻"; var ord = "º"; var order = "ℴ"; var orderof = "ℴ"; var ordf$1 = "ª"; var ordm$1 = "º"; var origof = "⊶"; var oror = "⩖"; var orslope = "⩗"; var orv = "⩛"; var oscr = "ℴ"; var oslas = "ø"; var oslash$1 = "ø"; var osol = "⊘"; var otild = "õ"; var otilde$1 = "õ"; var otimes$1 = "⊗"; var otimesas = "⨶"; var oum = "ö"; var ouml$1 = "ö"; var ovbar = "⌽"; var par = "¶"; var para$1 = "¶"; var parallel = "∥"; var parsim = "⫳"; var parsl = "⫽"; var part$1 = "∂"; var pcy = "п"; var percnt = "%"; var period = "."; var permil$1 = "‰"; var perp$1 = "⊥"; var pertenk = "‱"; var pfr = "𝔭"; var phi$1 = "φ"; var phiv = "ϕ"; var phmmat = "ℳ"; var phone = "☎"; var pi$1 = "π"; var pitchfork = "⋔"; var piv$1 = "ϖ"; var planck = "ℏ"; var planckh = "ℎ"; var plankv = "ℏ"; var plus = "+"; var plusacir = "⨣"; var plusb = "⊞"; var pluscir = "⨢"; var plusdo = "∔"; var plusdu = "⨥"; var pluse = "⩲"; var plusm = "±"; var plusmn$1 = "±"; var plussim = "⨦"; var plustwo = "⨧"; var pm = "±"; var pointint = "⨕"; var popf = "𝕡"; var poun = "£"; var pound$1 = "£"; var pr = "≺"; var prE = "⪳"; var prap = "⪷"; var prcue = "≼"; var pre = "⪯"; var prec = "≺"; var precapprox = "⪷"; var preccurlyeq = "≼"; var preceq = "⪯"; var precnapprox = "⪹"; var precneqq = "⪵"; var precnsim = "⋨"; var precsim = "≾"; var prime$1 = "′"; var primes = "ℙ"; var prnE = "⪵"; var prnap = "⪹"; var prnsim = "⋨"; var prod$1 = "∏"; var profalar = "⌮"; var profline = "⌒"; var profsurf = "⌓"; var prop$1 = "∝"; var propto = "∝"; var prsim = "≾"; var prurel = "⊰"; var pscr = "𝓅"; var psi$1 = "ψ"; var puncsp = " "; var qfr = "𝔮"; var qint = "⨌"; var qopf = "𝕢"; var qprime = "⁗"; var qscr = "𝓆"; var quaternions = "ℍ"; var quatint = "⨖"; var quest = "?"; var questeq = "≟"; var quo = "\""; var quot$1 = "\""; var rAarr = "⇛"; var rArr$1 = "⇒"; var rAtail = "⤜"; var rBarr = "⤏"; var rHar = "⥤"; var race = "∽̱"; var racute = "ŕ"; var radic$1 = "√"; var raemptyv = "⦳"; var rang$1 = "⟩"; var rangd = "⦒"; var range = "⦥"; var rangle = "⟩"; var raqu = "»"; var raquo$1 = "»"; var rarr$1 = "→"; var rarrap = "⥵"; var rarrb = "⇥"; var rarrbfs = "⤠"; var rarrc = "⤳"; var rarrfs = "⤞"; var rarrhk = "↪"; var rarrlp = "↬"; var rarrpl = "⥅"; var rarrsim = "⥴"; var rarrtl = "↣"; var rarrw = "↝"; var ratail = "⤚"; var ratio = "∶"; var rationals = "ℚ"; var rbarr = "⤍"; var rbbrk = "❳"; var rbrace = "}"; var rbrack = "]"; var rbrke = "⦌"; var rbrksld = "⦎"; var rbrkslu = "⦐"; var rcaron = "ř"; var rcedil = "ŗ"; var rceil$1 = "⌉"; var rcub = "}"; var rcy = "р"; var rdca = "⤷"; var rdldhar = "⥩"; var rdquo$1 = "”"; var rdquor = "”"; var rdsh = "↳"; var real$1 = "ℜ"; var realine = "ℛ"; var realpart = "ℜ"; var reals = "ℝ"; var rect = "▭"; var re$3 = "®"; var reg$1 = "®"; var rfisht = "⥽"; var rfloor$1 = "⌋"; var rfr = "𝔯"; var rhard = "⇁"; var rharu = "⇀"; var rharul = "⥬"; var rho$1 = "ρ"; var rhov = "ϱ"; var rightarrow = "→"; var rightarrowtail = "↣"; var rightharpoondown = "⇁"; var rightharpoonup = "⇀"; var rightleftarrows = "⇄"; var rightleftharpoons = "⇌"; var rightrightarrows = "⇉"; var rightsquigarrow = "↝"; var rightthreetimes = "⋌"; var ring = "˚"; var risingdotseq = "≓"; var rlarr = "⇄"; var rlhar = "⇌"; var rlm$1 = "‏"; var rmoust = "⎱"; var rmoustache = "⎱"; var rnmid = "⫮"; var roang = "⟭"; var roarr = "⇾"; var robrk = "⟧"; var ropar = "⦆"; var ropf = "𝕣"; var roplus = "⨮"; var rotimes = "⨵"; var rpar = ")"; var rpargt = "⦔"; var rppolint = "⨒"; var rrarr = "⇉"; var rsaquo$1 = "›"; var rscr = "𝓇"; var rsh = "↱"; var rsqb = "]"; var rsquo$1 = "’"; var rsquor = "’"; var rthree = "⋌"; var rtimes = "⋊"; var rtri = "▹"; var rtrie = "⊵"; var rtrif = "▸"; var rtriltri = "⧎"; var ruluhar = "⥨"; var rx = "℞"; var sacute = "ś"; var sbquo$1 = "‚"; var sc = "≻"; var scE = "⪴"; var scap = "⪸"; var scaron$1 = "š"; var sccue = "≽"; var sce = "⪰"; var scedil = "ş"; var scirc = "ŝ"; var scnE = "⪶"; var scnap = "⪺"; var scnsim = "⋩"; var scpolint = "⨓"; var scsim = "≿"; var scy = "с"; var sdot$1 = "⋅"; var sdotb = "⊡"; var sdote = "⩦"; var seArr = "⇘"; var searhk = "⤥"; var searr = "↘"; var searrow = "↘"; var sec = "§"; var sect$1 = "§"; var semi = ";"; var seswar = "⤩"; var setminus = "∖"; var setmn = "∖"; var sext = "✶"; var sfr = "𝔰"; var sfrown = "⌢"; var sharp = "♯"; var shchcy = "щ"; var shcy = "ш"; var shortmid = "∣"; var shortparallel = "∥"; var sh = "­"; var shy$1 = "­"; var sigma$1 = "σ"; var sigmaf$1 = "ς"; var sigmav = "ς"; var sim$1 = "∼"; var simdot = "⩪"; var sime = "≃"; var simeq = "≃"; var simg = "⪞"; var simgE = "⪠"; var siml = "⪝"; var simlE = "⪟"; var simne = "≆"; var simplus = "⨤"; var simrarr = "⥲"; var slarr = "←"; var smallsetminus = "∖"; var smashp = "⨳"; var smeparsl = "⧤"; var smid = "∣"; var smile = "⌣"; var smt = "⪪"; var smte = "⪬"; var smtes = "⪬︀"; var softcy = "ь"; var sol = "/"; var solb = "⧄"; var solbar = "⌿"; var sopf = "𝕤"; var spades$1 = "♠"; var spadesuit = "♠"; var spar = "∥"; var sqcap = "⊓"; var sqcaps = "⊓︀"; var sqcup = "⊔"; var sqcups = "⊔︀"; var sqsub = "⊏"; var sqsube = "⊑"; var sqsubset = "⊏"; var sqsubseteq = "⊑"; var sqsup = "⊐"; var sqsupe = "⊒"; var sqsupset = "⊐"; var sqsupseteq = "⊒"; var squ = "□"; var square = "□"; var squarf = "▪"; var squf = "▪"; var srarr = "→"; var sscr = "𝓈"; var ssetmn = "∖"; var ssmile = "⌣"; var sstarf = "⋆"; var star = "☆"; var starf = "★"; var straightepsilon = "ϵ"; var straightphi = "ϕ"; var strns = "¯"; var sub$1 = "⊂"; var subE = "⫅"; var subdot = "⪽"; var sube$1 = "⊆"; var subedot = "⫃"; var submult = "⫁"; var subnE = "⫋"; var subne = "⊊"; var subplus = "⪿"; var subrarr = "⥹"; var subset = "⊂"; var subseteq = "⊆"; var subseteqq = "⫅"; var subsetneq = "⊊"; var subsetneqq = "⫋"; var subsim = "⫇"; var subsub = "⫕"; var subsup = "⫓"; var succ = "≻"; var succapprox = "⪸"; var succcurlyeq = "≽"; var succeq = "⪰"; var succnapprox = "⪺"; var succneqq = "⪶"; var succnsim = "⋩"; var succsim = "≿"; var sum$1 = "∑"; var sung = "♪"; var sup$1 = "⊃"; var sup1$1 = "¹"; var sup2$1 = "²"; var sup3$1 = "³"; var supE = "⫆"; var supdot = "⪾"; var supdsub = "⫘"; var supe$1 = "⊇"; var supedot = "⫄"; var suphsol = "⟉"; var suphsub = "⫗"; var suplarr = "⥻"; var supmult = "⫂"; var supnE = "⫌"; var supne = "⊋"; var supplus = "⫀"; var supset = "⊃"; var supseteq = "⊇"; var supseteqq = "⫆"; var supsetneq = "⊋"; var supsetneqq = "⫌"; var supsim = "⫈"; var supsub = "⫔"; var supsup = "⫖"; var swArr = "⇙"; var swarhk = "⤦"; var swarr = "↙"; var swarrow = "↙"; var swnwar = "⤪"; var szli = "ß"; var szlig$1 = "ß"; var target = "⌖"; var tau$1 = "τ"; var tbrk = "⎴"; var tcaron = "ť"; var tcedil = "ţ"; var tcy = "т"; var tdot = "⃛"; var telrec = "⌕"; var tfr = "𝔱"; var there4$1 = "∴"; var therefore = "∴"; var theta$1 = "θ"; var thetasym$1 = "ϑ"; var thetav = "ϑ"; var thickapprox = "≈"; var thicksim = "∼"; var thinsp$1 = " "; var thkap = "≈"; var thksim = "∼"; var thor = "þ"; var thorn$1 = "þ"; var tilde$4 = "˜"; var time = "×"; var times$1 = "×"; var timesb = "⊠"; var timesbar = "⨱"; var timesd = "⨰"; var tint = "∭"; var toea = "⤨"; var top = "⊤"; var topbot = "⌶"; var topcir = "⫱"; var topf = "𝕥"; var topfork = "⫚"; var tosa = "⤩"; var tprime = "‴"; var trade$1 = "™"; var triangle = "▵"; var triangledown = "▿"; var triangleleft = "◃"; var trianglelefteq = "⊴"; var triangleq = "≜"; var triangleright = "▹"; var trianglerighteq = "⊵"; var tridot = "◬"; var trie = "≜"; var triminus = "⨺"; var triplus = "⨹"; var trisb = "⧍"; var tritime = "⨻"; var trpezium = "⏢"; var tscr = "𝓉"; var tscy = "ц"; var tshcy = "ћ"; var tstrok = "ŧ"; var twixt = "≬"; var twoheadleftarrow = "↞"; var twoheadrightarrow = "↠"; var uArr$1 = "⇑"; var uHar = "⥣"; var uacut = "ú"; var uacute$1 = "ú"; var uarr$1 = "↑"; var ubrcy = "ў"; var ubreve = "ŭ"; var ucir = "û"; var ucirc$1 = "û"; var ucy = "у"; var udarr = "⇅"; var udblac = "ű"; var udhar = "⥮"; var ufisht = "⥾"; var ufr = "𝔲"; var ugrav = "ù"; var ugrave$1 = "ù"; var uharl = "↿"; var uharr = "↾"; var uhblk = "▀"; var ulcorn = "⌜"; var ulcorner = "⌜"; var ulcrop = "⌏"; var ultri = "◸"; var umacr = "ū"; var um = "¨"; var uml$1 = "¨"; var uogon = "ų"; var uopf = "𝕦"; var uparrow = "↑"; var updownarrow = "↕"; var upharpoonleft = "↿"; var upharpoonright = "↾"; var uplus = "⊎"; var upsi = "υ"; var upsih$1 = "ϒ"; var upsilon$1 = "υ"; var upuparrows = "⇈"; var urcorn = "⌝"; var urcorner = "⌝"; var urcrop = "⌎"; var uring = "ů"; var urtri = "◹"; var uscr = "𝓊"; var utdot = "⋰"; var utilde = "ũ"; var utri = "▵"; var utrif = "▴"; var uuarr = "⇈"; var uum = "ü"; var uuml$1 = "ü"; var uwangle = "⦧"; var vArr = "⇕"; var vBar = "⫨"; var vBarv = "⫩"; var vDash = "⊨"; var vangrt = "⦜"; var varepsilon = "ϵ"; var varkappa = "ϰ"; var varnothing = "∅"; var varphi = "ϕ"; var varpi = "ϖ"; var varpropto = "∝"; var varr = "↕"; var varrho = "ϱ"; var varsigma = "ς"; var varsubsetneq = "⊊︀"; var varsubsetneqq = "⫋︀"; var varsupsetneq = "⊋︀"; var varsupsetneqq = "⫌︀"; var vartheta = "ϑ"; var vartriangleleft = "⊲"; var vartriangleright = "⊳"; var vcy = "в"; var vdash = "⊢"; var vee = "∨"; var veebar = "⊻"; var veeeq = "≚"; var vellip = "⋮"; var verbar = "|"; var vert = "|"; var vfr = "𝔳"; var vltri = "⊲"; var vnsub = "⊂⃒"; var vnsup = "⊃⃒"; var vopf = "𝕧"; var vprop = "∝"; var vrtri = "⊳"; var vscr = "𝓋"; var vsubnE = "⫋︀"; var vsubne = "⊊︀"; var vsupnE = "⫌︀"; var vsupne = "⊋︀"; var vzigzag = "⦚"; var wcirc = "ŵ"; var wedbar = "⩟"; var wedge = "∧"; var wedgeq = "≙"; var weierp$1 = "℘"; var wfr = "𝔴"; var wopf = "𝕨"; var wp = "℘"; var wr = "≀"; var wreath = "≀"; var wscr = "𝓌"; var xcap = "⋂"; var xcirc = "◯"; var xcup = "⋃"; var xdtri = "▽"; var xfr = "𝔵"; var xhArr = "⟺"; var xharr = "⟷"; var xi$1 = "ξ"; var xlArr = "⟸"; var xlarr = "⟵"; var xmap = "⟼"; var xnis = "⋻"; var xodot = "⨀"; var xopf = "𝕩"; var xoplus = "⨁"; var xotime = "⨂"; var xrArr = "⟹"; var xrarr = "⟶"; var xscr = "𝓍"; var xsqcup = "⨆"; var xuplus = "⨄"; var xutri = "△"; var xvee = "⋁"; var xwedge = "⋀"; var yacut = "ý"; var yacute$1 = "ý"; var yacy = "я"; var ycirc = "ŷ"; var ycy = "ы"; var ye = "¥"; var yen$1 = "¥"; var yfr = "𝔶"; var yicy = "ї"; var yopf = "𝕪"; var yscr = "𝓎"; var yucy = "ю"; var yum = "ÿ"; var yuml$1 = "ÿ"; var zacute = "ź"; var zcaron = "ž"; var zcy = "з"; var zdot = "ż"; var zeetrf = "ℨ"; var zeta$1 = "ζ"; var zfr = "𝔷"; var zhcy = "ж"; var zigrarr = "⇝"; var zopf = "𝕫"; var zscr = "𝓏"; var zwj$1 = "‍"; var zwnj$1 = "‌"; var index$3 = { AEli: AEli, AElig: AElig$1, AM: AM, AMP: AMP$1, Aacut: Aacut, Aacute: Aacute$1, Abreve: Abreve, Acir: Acir, Acirc: Acirc$1, Acy: Acy, Afr: Afr, Agrav: Agrav, Agrave: Agrave$1, Alpha: Alpha$1, Amacr: Amacr, And: And, Aogon: Aogon, Aopf: Aopf, ApplyFunction: ApplyFunction, Arin: Arin, Aring: Aring$1, Ascr: Ascr, Assign: Assign, Atild: Atild, Atilde: Atilde$1, Aum: Aum, Auml: Auml$1, Backslash: Backslash, Barv: Barv, Barwed: Barwed, Bcy: Bcy, Because: Because, Bernoullis: Bernoullis, Beta: Beta$1, Bfr: Bfr, Bopf: Bopf, Breve: Breve, Bscr: Bscr, Bumpeq: Bumpeq, CHcy: CHcy, COP: COP, COPY: COPY, Cacute: Cacute, Cap: Cap, CapitalDifferentialD: CapitalDifferentialD, Cayleys: Cayleys, Ccaron: Ccaron, Ccedi: Ccedi, Ccedil: Ccedil$1, Ccirc: Ccirc, Cconint: Cconint, Cdot: Cdot, Cedilla: Cedilla, CenterDot: CenterDot, Cfr: Cfr, Chi: Chi$1, CircleDot: CircleDot, CircleMinus: CircleMinus, CirclePlus: CirclePlus, CircleTimes: CircleTimes, ClockwiseContourIntegral: ClockwiseContourIntegral, CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, CloseCurlyQuote: CloseCurlyQuote, Colon: Colon, Colone: Colone, Congruent: Congruent, Conint: Conint, ContourIntegral: ContourIntegral, Copf: Copf, Coproduct: Coproduct, CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, Cross: Cross, Cscr: Cscr, Cup: Cup, CupCap: CupCap, DD: DD, DDotrahd: DDotrahd, DJcy: DJcy, DScy: DScy, DZcy: DZcy, Dagger: Dagger$1, Darr: Darr, Dashv: Dashv, Dcaron: Dcaron, Dcy: Dcy, Del: Del, Delta: Delta$1, Dfr: Dfr, DiacriticalAcute: DiacriticalAcute, DiacriticalDot: DiacriticalDot, DiacriticalDoubleAcute: DiacriticalDoubleAcute, DiacriticalGrave: DiacriticalGrave, DiacriticalTilde: DiacriticalTilde, Diamond: Diamond, DifferentialD: DifferentialD, Dopf: Dopf, Dot: Dot, DotDot: DotDot, DotEqual: DotEqual, DoubleContourIntegral: DoubleContourIntegral, DoubleDot: DoubleDot, DoubleDownArrow: DoubleDownArrow, DoubleLeftArrow: DoubleLeftArrow, DoubleLeftRightArrow: DoubleLeftRightArrow, DoubleLeftTee: DoubleLeftTee, DoubleLongLeftArrow: DoubleLongLeftArrow, DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, DoubleLongRightArrow: DoubleLongRightArrow, DoubleRightArrow: DoubleRightArrow, DoubleRightTee: DoubleRightTee, DoubleUpArrow: DoubleUpArrow, DoubleUpDownArrow: DoubleUpDownArrow, DoubleVerticalBar: DoubleVerticalBar, DownArrow: DownArrow, DownArrowBar: DownArrowBar, DownArrowUpArrow: DownArrowUpArrow, DownBreve: DownBreve, DownLeftRightVector: DownLeftRightVector, DownLeftTeeVector: DownLeftTeeVector, DownLeftVector: DownLeftVector, DownLeftVectorBar: DownLeftVectorBar, DownRightTeeVector: DownRightTeeVector, DownRightVector: DownRightVector, DownRightVectorBar: DownRightVectorBar, DownTee: DownTee, DownTeeArrow: DownTeeArrow, Downarrow: Downarrow, Dscr: Dscr, Dstrok: Dstrok, ENG: ENG, ET: ET, ETH: ETH$1, Eacut: Eacut, Eacute: Eacute$1, Ecaron: Ecaron, Ecir: Ecir, Ecirc: Ecirc$1, Ecy: Ecy, Edot: Edot, Efr: Efr, Egrav: Egrav, Egrave: Egrave$1, Element: Element, Emacr: Emacr, EmptySmallSquare: EmptySmallSquare, EmptyVerySmallSquare: EmptyVerySmallSquare, Eogon: Eogon, Eopf: Eopf, Epsilon: Epsilon$1, Equal: Equal, EqualTilde: EqualTilde, Equilibrium: Equilibrium, Escr: Escr, Esim: Esim, Eta: Eta$1, Eum: Eum, Euml: Euml$1, Exists: Exists, ExponentialE: ExponentialE, Fcy: Fcy, Ffr: Ffr, FilledSmallSquare: FilledSmallSquare, FilledVerySmallSquare: FilledVerySmallSquare, Fopf: Fopf, ForAll: ForAll, Fouriertrf: Fouriertrf, Fscr: Fscr, GJcy: GJcy, G: G, GT: GT$1, Gamma: Gamma$1, Gammad: Gammad, Gbreve: Gbreve, Gcedil: Gcedil, Gcirc: Gcirc, Gcy: Gcy, Gdot: Gdot, Gfr: Gfr, Gg: Gg, Gopf: Gopf, GreaterEqual: GreaterEqual, GreaterEqualLess: GreaterEqualLess, GreaterFullEqual: GreaterFullEqual, GreaterGreater: GreaterGreater, GreaterLess: GreaterLess, GreaterSlantEqual: GreaterSlantEqual, GreaterTilde: GreaterTilde, Gscr: Gscr, Gt: Gt, HARDcy: HARDcy, Hacek: Hacek, Hat: Hat, Hcirc: Hcirc, Hfr: Hfr, HilbertSpace: HilbertSpace, Hopf: Hopf, HorizontalLine: HorizontalLine, Hscr: Hscr, Hstrok: Hstrok, HumpDownHump: HumpDownHump, HumpEqual: HumpEqual, IEcy: IEcy, IJlig: IJlig, IOcy: IOcy, Iacut: Iacut, Iacute: Iacute$1, Icir: Icir, Icirc: Icirc$1, Icy: Icy, Idot: Idot, Ifr: Ifr, Igrav: Igrav, Igrave: Igrave$1, Im: Im, Imacr: Imacr, ImaginaryI: ImaginaryI, Implies: Implies, Int: Int, Integral: Integral, Intersection: Intersection, InvisibleComma: InvisibleComma, InvisibleTimes: InvisibleTimes, Iogon: Iogon, Iopf: Iopf, Iota: Iota$1, Iscr: Iscr, Itilde: Itilde, Iukcy: Iukcy, Ium: Ium, Iuml: Iuml$1, Jcirc: Jcirc, Jcy: Jcy, Jfr: Jfr, Jopf: Jopf, Jscr: Jscr, Jsercy: Jsercy, Jukcy: Jukcy, KHcy: KHcy, KJcy: KJcy, Kappa: Kappa$1, Kcedil: Kcedil, Kcy: Kcy, Kfr: Kfr, Kopf: Kopf, Kscr: Kscr, LJcy: LJcy, L: L, LT: LT$1, Lacute: Lacute, Lambda: Lambda$1, Lang: Lang, Laplacetrf: Laplacetrf, Larr: Larr, Lcaron: Lcaron, Lcedil: Lcedil, Lcy: Lcy, LeftAngleBracket: LeftAngleBracket, LeftArrow: LeftArrow, LeftArrowBar: LeftArrowBar, LeftArrowRightArrow: LeftArrowRightArrow, LeftCeiling: LeftCeiling, LeftDoubleBracket: LeftDoubleBracket, LeftDownTeeVector: LeftDownTeeVector, LeftDownVector: LeftDownVector, LeftDownVectorBar: LeftDownVectorBar, LeftFloor: LeftFloor, LeftRightArrow: LeftRightArrow, LeftRightVector: LeftRightVector, LeftTee: LeftTee, LeftTeeArrow: LeftTeeArrow, LeftTeeVector: LeftTeeVector, LeftTriangle: LeftTriangle, LeftTriangleBar: LeftTriangleBar, LeftTriangleEqual: LeftTriangleEqual, LeftUpDownVector: LeftUpDownVector, LeftUpTeeVector: LeftUpTeeVector, LeftUpVector: LeftUpVector, LeftUpVectorBar: LeftUpVectorBar, LeftVector: LeftVector, LeftVectorBar: LeftVectorBar, Leftarrow: Leftarrow, Leftrightarrow: Leftrightarrow, LessEqualGreater: LessEqualGreater, LessFullEqual: LessFullEqual, LessGreater: LessGreater, LessLess: LessLess, LessSlantEqual: LessSlantEqual, LessTilde: LessTilde, Lfr: Lfr, Ll: Ll, Lleftarrow: Lleftarrow, Lmidot: Lmidot, LongLeftArrow: LongLeftArrow, LongLeftRightArrow: LongLeftRightArrow, LongRightArrow: LongRightArrow, Longleftarrow: Longleftarrow, Longleftrightarrow: Longleftrightarrow, Longrightarrow: Longrightarrow, Lopf: Lopf, LowerLeftArrow: LowerLeftArrow, LowerRightArrow: LowerRightArrow, Lscr: Lscr, Lsh: Lsh, Lstrok: Lstrok, Lt: Lt, "Map": "⤅", Mcy: Mcy, MediumSpace: MediumSpace, Mellintrf: Mellintrf, Mfr: Mfr, MinusPlus: MinusPlus, Mopf: Mopf, Mscr: Mscr, Mu: Mu$1, NJcy: NJcy, Nacute: Nacute, Ncaron: Ncaron, Ncedil: Ncedil, Ncy: Ncy, NegativeMediumSpace: NegativeMediumSpace, NegativeThickSpace: NegativeThickSpace, NegativeThinSpace: NegativeThinSpace, NegativeVeryThinSpace: NegativeVeryThinSpace, NestedGreaterGreater: NestedGreaterGreater, NestedLessLess: NestedLessLess, NewLine: NewLine, Nfr: Nfr, NoBreak: NoBreak, NonBreakingSpace: NonBreakingSpace, Nopf: Nopf, Not: Not, NotCongruent: NotCongruent, NotCupCap: NotCupCap, NotDoubleVerticalBar: NotDoubleVerticalBar, NotElement: NotElement, NotEqual: NotEqual, NotEqualTilde: NotEqualTilde, NotExists: NotExists, NotGreater: NotGreater, NotGreaterEqual: NotGreaterEqual, NotGreaterFullEqual: NotGreaterFullEqual, NotGreaterGreater: NotGreaterGreater, NotGreaterLess: NotGreaterLess, NotGreaterSlantEqual: NotGreaterSlantEqual, NotGreaterTilde: NotGreaterTilde, NotHumpDownHump: NotHumpDownHump, NotHumpEqual: NotHumpEqual, NotLeftTriangle: NotLeftTriangle, NotLeftTriangleBar: NotLeftTriangleBar, NotLeftTriangleEqual: NotLeftTriangleEqual, NotLess: NotLess, NotLessEqual: NotLessEqual, NotLessGreater: NotLessGreater, NotLessLess: NotLessLess, NotLessSlantEqual: NotLessSlantEqual, NotLessTilde: NotLessTilde, NotNestedGreaterGreater: NotNestedGreaterGreater, NotNestedLessLess: NotNestedLessLess, NotPrecedes: NotPrecedes, NotPrecedesEqual: NotPrecedesEqual, NotPrecedesSlantEqual: NotPrecedesSlantEqual, NotReverseElement: NotReverseElement, NotRightTriangle: NotRightTriangle, NotRightTriangleBar: NotRightTriangleBar, NotRightTriangleEqual: NotRightTriangleEqual, NotSquareSubset: NotSquareSubset, NotSquareSubsetEqual: NotSquareSubsetEqual, NotSquareSuperset: NotSquareSuperset, NotSquareSupersetEqual: NotSquareSupersetEqual, NotSubset: NotSubset, NotSubsetEqual: NotSubsetEqual, NotSucceeds: NotSucceeds, NotSucceedsEqual: NotSucceedsEqual, NotSucceedsSlantEqual: NotSucceedsSlantEqual, NotSucceedsTilde: NotSucceedsTilde, NotSuperset: NotSuperset, NotSupersetEqual: NotSupersetEqual, NotTilde: NotTilde, NotTildeEqual: NotTildeEqual, NotTildeFullEqual: NotTildeFullEqual, NotTildeTilde: NotTildeTilde, NotVerticalBar: NotVerticalBar, Nscr: Nscr, Ntild: Ntild, Ntilde: Ntilde$1, Nu: Nu$1, OElig: OElig$1, Oacut: Oacut, Oacute: Oacute$1, Ocir: Ocir, Ocirc: Ocirc$1, Ocy: Ocy, Odblac: Odblac, Ofr: Ofr, Ograv: Ograv, Ograve: Ograve$1, Omacr: Omacr, Omega: Omega$1, Omicron: Omicron$1, Oopf: Oopf, OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, OpenCurlyQuote: OpenCurlyQuote, Or: Or, Oscr: Oscr, Oslas: Oslas, Oslash: Oslash$1, Otild: Otild, Otilde: Otilde$1, Otimes: Otimes, Oum: Oum, Ouml: Ouml$1, OverBar: OverBar, OverBrace: OverBrace, OverBracket: OverBracket, OverParenthesis: OverParenthesis, PartialD: PartialD, Pcy: Pcy, Pfr: Pfr, Phi: Phi$1, Pi: Pi$1, PlusMinus: PlusMinus, Poincareplane: Poincareplane, Popf: Popf, Pr: Pr, Precedes: Precedes, PrecedesEqual: PrecedesEqual, PrecedesSlantEqual: PrecedesSlantEqual, PrecedesTilde: PrecedesTilde, Prime: Prime$1, Product: Product, Proportion: Proportion, Proportional: Proportional, Pscr: Pscr, Psi: Psi$1, QUO: QUO, QUOT: QUOT, Qfr: Qfr, Qopf: Qopf, Qscr: Qscr, RBarr: RBarr, RE: RE, REG: REG, Racute: Racute, Rang: Rang, Rarr: Rarr, Rarrtl: Rarrtl, Rcaron: Rcaron, Rcedil: Rcedil, Rcy: Rcy, Re: Re, ReverseElement: ReverseElement, ReverseEquilibrium: ReverseEquilibrium, ReverseUpEquilibrium: ReverseUpEquilibrium, Rfr: Rfr, Rho: Rho$1, RightAngleBracket: RightAngleBracket, RightArrow: RightArrow, RightArrowBar: RightArrowBar, RightArrowLeftArrow: RightArrowLeftArrow, RightCeiling: RightCeiling, RightDoubleBracket: RightDoubleBracket, RightDownTeeVector: RightDownTeeVector, RightDownVector: RightDownVector, RightDownVectorBar: RightDownVectorBar, RightFloor: RightFloor, RightTee: RightTee, RightTeeArrow: RightTeeArrow, RightTeeVector: RightTeeVector, RightTriangle: RightTriangle, RightTriangleBar: RightTriangleBar, RightTriangleEqual: RightTriangleEqual, RightUpDownVector: RightUpDownVector, RightUpTeeVector: RightUpTeeVector, RightUpVector: RightUpVector, RightUpVectorBar: RightUpVectorBar, RightVector: RightVector, RightVectorBar: RightVectorBar, Rightarrow: Rightarrow, Ropf: Ropf, RoundImplies: RoundImplies, Rrightarrow: Rrightarrow, Rscr: Rscr, Rsh: Rsh, RuleDelayed: RuleDelayed, SHCHcy: SHCHcy, SHcy: SHcy, SOFTcy: SOFTcy, Sacute: Sacute, Sc: Sc, Scaron: Scaron$1, Scedil: Scedil, Scirc: Scirc, Scy: Scy, Sfr: Sfr, ShortDownArrow: ShortDownArrow, ShortLeftArrow: ShortLeftArrow, ShortRightArrow: ShortRightArrow, ShortUpArrow: ShortUpArrow, Sigma: Sigma$1, SmallCircle: SmallCircle, Sopf: Sopf, Sqrt: Sqrt, Square: Square, SquareIntersection: SquareIntersection, SquareSubset: SquareSubset, SquareSubsetEqual: SquareSubsetEqual, SquareSuperset: SquareSuperset, SquareSupersetEqual: SquareSupersetEqual, SquareUnion: SquareUnion, Sscr: Sscr, Star: Star, Sub: Sub, Subset: Subset, SubsetEqual: SubsetEqual, Succeeds: Succeeds, SucceedsEqual: SucceedsEqual, SucceedsSlantEqual: SucceedsSlantEqual, SucceedsTilde: SucceedsTilde, SuchThat: SuchThat, Sum: Sum, Sup: Sup, Superset: Superset, SupersetEqual: SupersetEqual, Supset: Supset, THOR: THOR, THORN: THORN$1, TRADE: TRADE, TSHcy: TSHcy, TScy: TScy, Tab: Tab, Tau: Tau$1, Tcaron: Tcaron, Tcedil: Tcedil, Tcy: Tcy, Tfr: Tfr, Therefore: Therefore, Theta: Theta$1, ThickSpace: ThickSpace, ThinSpace: ThinSpace, Tilde: Tilde, TildeEqual: TildeEqual, TildeFullEqual: TildeFullEqual, TildeTilde: TildeTilde, Topf: Topf, TripleDot: TripleDot, Tscr: Tscr, Tstrok: Tstrok, Uacut: Uacut, Uacute: Uacute$1, Uarr: Uarr, Uarrocir: Uarrocir, Ubrcy: Ubrcy, Ubreve: Ubreve, Ucir: Ucir, Ucirc: Ucirc$1, Ucy: Ucy, Udblac: Udblac, Ufr: Ufr, Ugrav: Ugrav, Ugrave: Ugrave$1, Umacr: Umacr, UnderBar: UnderBar, UnderBrace: UnderBrace, UnderBracket: UnderBracket, UnderParenthesis: UnderParenthesis, Union: Union, UnionPlus: UnionPlus, Uogon: Uogon, Uopf: Uopf, UpArrow: UpArrow, UpArrowBar: UpArrowBar, UpArrowDownArrow: UpArrowDownArrow, UpDownArrow: UpDownArrow, UpEquilibrium: UpEquilibrium, UpTee: UpTee, UpTeeArrow: UpTeeArrow, Uparrow: Uparrow, Updownarrow: Updownarrow, UpperLeftArrow: UpperLeftArrow, UpperRightArrow: UpperRightArrow, Upsi: Upsi, Upsilon: Upsilon$1, Uring: Uring, Uscr: Uscr, Utilde: Utilde, Uum: Uum, Uuml: Uuml$1, VDash: VDash, Vbar: Vbar, Vcy: Vcy, Vdash: Vdash, Vdashl: Vdashl, Vee: Vee, Verbar: Verbar, Vert: Vert, VerticalBar: VerticalBar, VerticalLine: VerticalLine, VerticalSeparator: VerticalSeparator, VerticalTilde: VerticalTilde, VeryThinSpace: VeryThinSpace, Vfr: Vfr, Vopf: Vopf, Vscr: Vscr, Vvdash: Vvdash, Wcirc: Wcirc, Wedge: Wedge, Wfr: Wfr, Wopf: Wopf, Wscr: Wscr, Xfr: Xfr, Xi: Xi$1, Xopf: Xopf, Xscr: Xscr, YAcy: YAcy, YIcy: YIcy, YUcy: YUcy, Yacut: Yacut, Yacute: Yacute$1, Ycirc: Ycirc, Ycy: Ycy, Yfr: Yfr, Yopf: Yopf, Yscr: Yscr, Yuml: Yuml$1, ZHcy: ZHcy, Zacute: Zacute, Zcaron: Zcaron, Zcy: Zcy, Zdot: Zdot, ZeroWidthSpace: ZeroWidthSpace, Zeta: Zeta$1, Zfr: Zfr, Zopf: Zopf, Zscr: Zscr, aacut: aacut, aacute: aacute$1, abreve: abreve, ac: ac, acE: acE, acd: acd, acir: acir, acirc: acirc$1, acut: acut, acute: acute$1, acy: acy, aeli: aeli, aelig: aelig$1, af: af, afr: afr, agrav: agrav, agrave: agrave$1, alefsym: alefsym$1, aleph: aleph, alpha: alpha$1, amacr: amacr, amalg: amalg, am: am, amp: amp$1, and: and$1, andand: andand, andd: andd, andslope: andslope, andv: andv, ang: ang$1, ange: ange, angle: angle, angmsd: angmsd, angmsdaa: angmsdaa, angmsdab: angmsdab, angmsdac: angmsdac, angmsdad: angmsdad, angmsdae: angmsdae, angmsdaf: angmsdaf, angmsdag: angmsdag, angmsdah: angmsdah, angrt: angrt, angrtvb: angrtvb, angrtvbd: angrtvbd, angsph: angsph, angst: angst, angzarr: angzarr, aogon: aogon, aopf: aopf, ap: ap, apE: apE, apacir: apacir, ape: ape, apid: apid, apos: apos, approx: approx, approxeq: approxeq, arin: arin, aring: aring$1, ascr: ascr, ast: ast, asymp: asymp$1, asympeq: asympeq, atild: atild, atilde: atilde$1, aum: aum, auml: auml$1, awconint: awconint, awint: awint, bNot: bNot, backcong: backcong, backepsilon: backepsilon, backprime: backprime, backsim: backsim, backsimeq: backsimeq, barvee: barvee, barwed: barwed, barwedge: barwedge, bbrk: bbrk, bbrktbrk: bbrktbrk, bcong: bcong, bcy: bcy, bdquo: bdquo$1, becaus: becaus, because: because, bemptyv: bemptyv, bepsi: bepsi, bernou: bernou, beta: beta$1, beth: beth, between: between, bfr: bfr, bigcap: bigcap, bigcirc: bigcirc, bigcup: bigcup, bigodot: bigodot, bigoplus: bigoplus, bigotimes: bigotimes, bigsqcup: bigsqcup, bigstar: bigstar, bigtriangledown: bigtriangledown, bigtriangleup: bigtriangleup, biguplus: biguplus, bigvee: bigvee, bigwedge: bigwedge, bkarow: bkarow, blacklozenge: blacklozenge, blacksquare: blacksquare, blacktriangle: blacktriangle, blacktriangledown: blacktriangledown, blacktriangleleft: blacktriangleleft, blacktriangleright: blacktriangleright, blank: blank, blk12: blk12, blk14: blk14, blk34: blk34, block: block, bne: bne, bnequiv: bnequiv, bnot: bnot, bopf: bopf, bot: bot, bottom: bottom, bowtie: bowtie, boxDL: boxDL, boxDR: boxDR, boxDl: boxDl, boxDr: boxDr, boxH: boxH, boxHD: boxHD, boxHU: boxHU, boxHd: boxHd, boxHu: boxHu, boxUL: boxUL, boxUR: boxUR, boxUl: boxUl, boxUr: boxUr, boxV: boxV, boxVH: boxVH, boxVL: boxVL, boxVR: boxVR, boxVh: boxVh, boxVl: boxVl, boxVr: boxVr, boxbox: boxbox, boxdL: boxdL, boxdR: boxdR, boxdl: boxdl, boxdr: boxdr, boxh: boxh, boxhD: boxhD, boxhU: boxhU, boxhd: boxhd, boxhu: boxhu, boxminus: boxminus, boxplus: boxplus, boxtimes: boxtimes, boxuL: boxuL, boxuR: boxuR, boxul: boxul, boxur: boxur, boxv: boxv, boxvH: boxvH, boxvL: boxvL, boxvR: boxvR, boxvh: boxvh, boxvl: boxvl, boxvr: boxvr, bprime: bprime, breve: breve, brvba: brvba, brvbar: brvbar$1, bscr: bscr, bsemi: bsemi, bsim: bsim, bsime: bsime, bsol: bsol, bsolb: bsolb, bsolhsub: bsolhsub, bull: bull$1, bullet: bullet, bump: bump, bumpE: bumpE, bumpe: bumpe, bumpeq: bumpeq, cacute: cacute, cap: cap$2, capand: capand, capbrcup: capbrcup, capcap: capcap, capcup: capcup, capdot: capdot, caps: caps, caret: caret, caron: caron, ccaps: ccaps, ccaron: ccaron, ccedi: ccedi, ccedil: ccedil$1, ccirc: ccirc, ccups: ccups, ccupssm: ccupssm, cdot: cdot, cedi: cedi, cedil: cedil$1, cemptyv: cemptyv, cen: cen, cent: cent$1, centerdot: centerdot, cfr: cfr, chcy: chcy, check: check, checkmark: checkmark, chi: chi$1, cir: cir, cirE: cirE, circ: circ$1, circeq: circeq, circlearrowleft: circlearrowleft, circlearrowright: circlearrowright, circledR: circledR, circledS: circledS, circledast: circledast, circledcirc: circledcirc, circleddash: circleddash, cire: cire, cirfnint: cirfnint, cirmid: cirmid, cirscir: cirscir, clubs: clubs$1, clubsuit: clubsuit, colon: colon$3, colone: colone, coloneq: coloneq, comma: comma$2, commat: commat, comp: comp, compfn: compfn, complement: complement, complexes: complexes, cong: cong$1, congdot: congdot, conint: conint, copf: copf, coprod: coprod, cop: cop, copy: copy$1, copysr: copysr, crarr: crarr$1, cross: cross, cscr: cscr, csub: csub, csube: csube, csup: csup, csupe: csupe, ctdot: ctdot, cudarrl: cudarrl, cudarrr: cudarrr, cuepr: cuepr, cuesc: cuesc, cularr: cularr, cularrp: cularrp, cup: cup$1, cupbrcap: cupbrcap, cupcap: cupcap, cupcup: cupcup, cupdot: cupdot, cupor: cupor, cups: cups, curarr: curarr, curarrm: curarrm, curlyeqprec: curlyeqprec, curlyeqsucc: curlyeqsucc, curlyvee: curlyvee, curlywedge: curlywedge, curre: curre, curren: curren$1, curvearrowleft: curvearrowleft, curvearrowright: curvearrowright, cuvee: cuvee, cuwed: cuwed, cwconint: cwconint, cwint: cwint, cylcty: cylcty, dArr: dArr$1, dHar: dHar, dagger: dagger$1, daleth: daleth, darr: darr$1, dash: dash$8, dashv: dashv, dbkarow: dbkarow, dblac: dblac, dcaron: dcaron, dcy: dcy, dd: dd$1, ddagger: ddagger, ddarr: ddarr, ddotseq: ddotseq, de: de, deg: deg$1, delta: delta$1, demptyv: demptyv, dfisht: dfisht, dfr: dfr, dharl: dharl, dharr: dharr, diam: diam, diamond: diamond, diamondsuit: diamondsuit, diams: diams$1, die: die, digamma: digamma, disin: disin, div: div, divid: divid, divide: divide$1, divideontimes: divideontimes, divonx: divonx, djcy: djcy, dlcorn: dlcorn, dlcrop: dlcrop, dollar: dollar, dopf: dopf, dot: dot$4, doteq: doteq, doteqdot: doteqdot, dotminus: dotminus, dotplus: dotplus, dotsquare: dotsquare, doublebarwedge: doublebarwedge, downarrow: downarrow, downdownarrows: downdownarrows, downharpoonleft: downharpoonleft, downharpoonright: downharpoonright, drbkarow: drbkarow, drcorn: drcorn, drcrop: drcrop, dscr: dscr, dscy: dscy, dsol: dsol, dstrok: dstrok, dtdot: dtdot, dtri: dtri, dtrif: dtrif, duarr: duarr, duhar: duhar, dwangle: dwangle, dzcy: dzcy, dzigrarr: dzigrarr, eDDot: eDDot, eDot: eDot, eacut: eacut, eacute: eacute$1, easter: easter, ecaron: ecaron, ecir: ecir, ecirc: ecirc$1, ecolon: ecolon, ecy: ecy, edot: edot, ee: ee, efDot: efDot, efr: efr, eg: eg, egrav: egrav, egrave: egrave$1, egs: egs, egsdot: egsdot, el: el, elinters: elinters, ell: ell, els: els, elsdot: elsdot, emacr: emacr, empty: empty$3, emptyset: emptyset, emptyv: emptyv, emsp13: emsp13, emsp14: emsp14, emsp: emsp$1, eng: eng, ensp: ensp$1, eogon: eogon, eopf: eopf, epar: epar, eparsl: eparsl, eplus: eplus, epsi: epsi, epsilon: epsilon$1, epsiv: epsiv, eqcirc: eqcirc, eqcolon: eqcolon, eqsim: eqsim, eqslantgtr: eqslantgtr, eqslantless: eqslantless, equals: equals, equest: equest, equiv: equiv$1, equivDD: equivDD, eqvparsl: eqvparsl, erDot: erDot, erarr: erarr, escr: escr, esdot: esdot, esim: esim, eta: eta$1, et: et, eth: eth$1, eum: eum, euml: euml$1, euro: euro$1, excl: excl, exist: exist$1, expectation: expectation, exponentiale: exponentiale, fallingdotseq: fallingdotseq, fcy: fcy, female: female, ffilig: ffilig, fflig: fflig, ffllig: ffllig, ffr: ffr, filig: filig, fjlig: fjlig, flat: flat, fllig: fllig, fltns: fltns, fnof: fnof$1, fopf: fopf, forall: forall$1, fork: fork, forkv: forkv, fpartint: fpartint, frac1: frac1, frac12: frac12$1, frac13: frac13, frac14: frac14$1, frac15: frac15, frac16: frac16, frac18: frac18, frac23: frac23, frac25: frac25, frac3: frac3, frac34: frac34$1, frac35: frac35, frac38: frac38, frac45: frac45, frac56: frac56, frac58: frac58, frac78: frac78, frasl: frasl$1, frown: frown, fscr: fscr, gE: gE, gEl: gEl, gacute: gacute, gamma: gamma$1, gammad: gammad, gap: gap, gbreve: gbreve, gcirc: gcirc, gcy: gcy, gdot: gdot, ge: ge$1, gel: gel, geq: geq, geqq: geqq, geqslant: geqslant, ges: ges, gescc: gescc, gesdot: gesdot, gesdoto: gesdoto, gesdotol: gesdotol, gesl: gesl, gesles: gesles, gfr: gfr, gg: gg, ggg: ggg, gimel: gimel, gjcy: gjcy, gl: gl, glE: glE, gla: gla, glj: glj, gnE: gnE, gnap: gnap, gnapprox: gnapprox, gne: gne, gneq: gneq, gneqq: gneqq, gnsim: gnsim, gopf: gopf, grave: grave, gscr: gscr, gsim: gsim, gsime: gsime, gsiml: gsiml, g: g, gt: gt$1, gtcc: gtcc, gtcir: gtcir, gtdot: gtdot, gtlPar: gtlPar, gtquest: gtquest, gtrapprox: gtrapprox, gtrarr: gtrarr, gtrdot: gtrdot, gtreqless: gtreqless, gtreqqless: gtreqqless, gtrless: gtrless, gtrsim: gtrsim, gvertneqq: gvertneqq, gvnE: gvnE, hArr: hArr$1, hairsp: hairsp, half: half, hamilt: hamilt, hardcy: hardcy, harr: harr$1, harrcir: harrcir, harrw: harrw, hbar: hbar, hcirc: hcirc, hearts: hearts$1, heartsuit: heartsuit, hellip: hellip$1, hercon: hercon, hfr: hfr, hksearow: hksearow, hkswarow: hkswarow, hoarr: hoarr, homtht: homtht, hookleftarrow: hookleftarrow, hookrightarrow: hookrightarrow, hopf: hopf, horbar: horbar, hscr: hscr, hslash: hslash, hstrok: hstrok, hybull: hybull, hyphen: hyphen, iacut: iacut, iacute: iacute$1, ic: ic, icir: icir, icirc: icirc$1, icy: icy, iecy: iecy, iexc: iexc, iexcl: iexcl$1, iff: iff, ifr: ifr, igrav: igrav, igrave: igrave$1, ii: ii, iiiint: iiiint, iiint: iiint, iinfin: iinfin, iiota: iiota, ijlig: ijlig, imacr: imacr, image: image$3, imagline: imagline, imagpart: imagpart, imath: imath, imof: imof, imped: imped, "in": "∈", incare: incare, infin: infin$1, infintie: infintie, inodot: inodot, int: int$1, intcal: intcal, integers: integers, intercal: intercal, intlarhk: intlarhk, intprod: intprod, iocy: iocy, iogon: iogon, iopf: iopf, iota: iota$1, iprod: iprod, iques: iques, iquest: iquest$1, iscr: iscr, isin: isin$1, isinE: isinE, isindot: isindot, isins: isins, isinsv: isinsv, isinv: isinv, it: it, itilde: itilde, iukcy: iukcy, ium: ium, iuml: iuml$1, jcirc: jcirc, jcy: jcy, jfr: jfr, jmath: jmath, jopf: jopf, jscr: jscr, jsercy: jsercy, jukcy: jukcy, kappa: kappa$1, kappav: kappav, kcedil: kcedil, kcy: kcy, kfr: kfr, kgreen: kgreen, khcy: khcy, kjcy: kjcy, kopf: kopf, kscr: kscr, lAarr: lAarr, lArr: lArr$1, lAtail: lAtail, lBarr: lBarr, lE: lE, lEg: lEg, lHar: lHar, lacute: lacute, laemptyv: laemptyv, lagran: lagran, lambda: lambda$1, lang: lang$1, langd: langd, langle: langle, lap: lap, laqu: laqu, laquo: laquo$1, larr: larr$1, larrb: larrb, larrbfs: larrbfs, larrfs: larrfs, larrhk: larrhk, larrlp: larrlp, larrpl: larrpl, larrsim: larrsim, larrtl: larrtl, lat: lat, latail: latail, late: late, lates: lates, lbarr: lbarr, lbbrk: lbbrk, lbrace: lbrace, lbrack: lbrack, lbrke: lbrke, lbrksld: lbrksld, lbrkslu: lbrkslu, lcaron: lcaron, lcedil: lcedil, lceil: lceil$1, lcub: lcub, lcy: lcy, ldca: ldca, ldquo: ldquo$1, ldquor: ldquor, ldrdhar: ldrdhar, ldrushar: ldrushar, ldsh: ldsh, le: le$1, leftarrow: leftarrow, leftarrowtail: leftarrowtail, leftharpoondown: leftharpoondown, leftharpoonup: leftharpoonup, leftleftarrows: leftleftarrows, leftrightarrow: leftrightarrow, leftrightarrows: leftrightarrows, leftrightharpoons: leftrightharpoons, leftrightsquigarrow: leftrightsquigarrow, leftthreetimes: leftthreetimes, leg: leg, leq: leq, leqq: leqq, leqslant: leqslant, les: les, lescc: lescc, lesdot: lesdot, lesdoto: lesdoto, lesdotor: lesdotor, lesg: lesg, lesges: lesges, lessapprox: lessapprox, lessdot: lessdot, lesseqgtr: lesseqgtr, lesseqqgtr: lesseqqgtr, lessgtr: lessgtr, lesssim: lesssim, lfisht: lfisht, lfloor: lfloor$1, lfr: lfr, lg: lg, lgE: lgE, lhard: lhard, lharu: lharu, lharul: lharul, lhblk: lhblk, ljcy: ljcy, ll: ll, llarr: llarr, llcorner: llcorner, llhard: llhard, lltri: lltri, lmidot: lmidot, lmoust: lmoust, lmoustache: lmoustache, lnE: lnE, lnap: lnap, lnapprox: lnapprox, lne: lne, lneq: lneq, lneqq: lneqq, lnsim: lnsim, loang: loang, loarr: loarr, lobrk: lobrk, longleftarrow: longleftarrow, longleftrightarrow: longleftrightarrow, longmapsto: longmapsto, longrightarrow: longrightarrow, looparrowleft: looparrowleft, looparrowright: looparrowright, lopar: lopar, lopf: lopf, loplus: loplus, lotimes: lotimes, lowast: lowast$1, lowbar: lowbar, loz: loz$1, lozenge: lozenge, lozf: lozf, lpar: lpar, lparlt: lparlt, lrarr: lrarr, lrcorner: lrcorner, lrhar: lrhar, lrhard: lrhard, lrm: lrm$1, lrtri: lrtri, lsaquo: lsaquo$1, lscr: lscr, lsh: lsh, lsim: lsim, lsime: lsime, lsimg: lsimg, lsqb: lsqb, lsquo: lsquo$1, lsquor: lsquor, lstrok: lstrok, l: l, lt: lt$1, ltcc: ltcc, ltcir: ltcir, ltdot: ltdot, lthree: lthree, ltimes: ltimes, ltlarr: ltlarr, ltquest: ltquest, ltrPar: ltrPar, ltri: ltri, ltrie: ltrie, ltrif: ltrif, lurdshar: lurdshar, luruhar: luruhar, lvertneqq: lvertneqq, lvnE: lvnE, mDDot: mDDot, mac: mac, macr: macr$1, male: male, malt: malt, maltese: maltese, map: map$1, mapsto: mapsto, mapstodown: mapstodown, mapstoleft: mapstoleft, mapstoup: mapstoup, marker: marker, mcomma: mcomma, mcy: mcy, mdash: mdash$1, measuredangle: measuredangle, mfr: mfr, mho: mho, micr: micr, micro: micro$1, mid: mid, midast: midast, midcir: midcir, middo: middo, middot: middot$1, minus: minus$1, minusb: minusb, minusd: minusd, minusdu: minusdu, mlcp: mlcp, mldr: mldr, mnplus: mnplus, models: models, mopf: mopf, mp: mp, mscr: mscr, mstpos: mstpos, mu: mu$1, multimap: multimap, mumap: mumap, nGg: nGg, nGt: nGt, nGtv: nGtv, nLeftarrow: nLeftarrow, nLeftrightarrow: nLeftrightarrow, nLl: nLl, nLt: nLt, nLtv: nLtv, nRightarrow: nRightarrow, nVDash: nVDash, nVdash: nVdash, nabla: nabla$1, nacute: nacute, nang: nang, nap: nap, napE: napE, napid: napid, napos: napos, napprox: napprox, natur: natur, natural: natural, naturals: naturals, nbs: nbs, nbsp: nbsp$1, nbump: nbump, nbumpe: nbumpe, ncap: ncap, ncaron: ncaron, ncedil: ncedil, ncong: ncong, ncongdot: ncongdot, ncup: ncup, ncy: ncy, ndash: ndash$1, ne: ne$1, neArr: neArr, nearhk: nearhk, nearr: nearr, nearrow: nearrow, nedot: nedot, nequiv: nequiv, nesear: nesear, nesim: nesim, nexist: nexist, nexists: nexists, nfr: nfr, ngE: ngE, nge: nge, ngeq: ngeq, ngeqq: ngeqq, ngeqslant: ngeqslant, nges: nges, ngsim: ngsim, ngt: ngt, ngtr: ngtr, nhArr: nhArr, nharr: nharr, nhpar: nhpar, ni: ni$1, nis: nis, nisd: nisd, niv: niv, njcy: njcy, nlArr: nlArr, nlE: nlE, nlarr: nlarr, nldr: nldr, nle: nle, nleftarrow: nleftarrow, nleftrightarrow: nleftrightarrow, nleq: nleq, nleqq: nleqq, nleqslant: nleqslant, nles: nles, nless: nless, nlsim: nlsim, nlt: nlt, nltri: nltri, nltrie: nltrie, nmid: nmid, nopf: nopf, no: no, not: not$1, notin: notin$1, notinE: notinE, notindot: notindot, notinva: notinva, notinvb: notinvb, notinvc: notinvc, notni: notni, notniva: notniva, notnivb: notnivb, notnivc: notnivc, npar: npar, nparallel: nparallel, nparsl: nparsl, npart: npart, npolint: npolint, npr: npr, nprcue: nprcue, npre: npre, nprec: nprec, npreceq: npreceq, nrArr: nrArr, nrarr: nrarr, nrarrc: nrarrc, nrarrw: nrarrw, nrightarrow: nrightarrow, nrtri: nrtri, nrtrie: nrtrie, nsc: nsc, nsccue: nsccue, nsce: nsce, nscr: nscr, nshortmid: nshortmid, nshortparallel: nshortparallel, nsim: nsim, nsime: nsime, nsimeq: nsimeq, nsmid: nsmid, nspar: nspar, nsqsube: nsqsube, nsqsupe: nsqsupe, nsub: nsub$1, nsubE: nsubE, nsube: nsube, nsubset: nsubset, nsubseteq: nsubseteq, nsubseteqq: nsubseteqq, nsucc: nsucc, nsucceq: nsucceq, nsup: nsup, nsupE: nsupE, nsupe: nsupe, nsupset: nsupset, nsupseteq: nsupseteq, nsupseteqq: nsupseteqq, ntgl: ntgl, ntild: ntild, ntilde: ntilde$1, ntlg: ntlg, ntriangleleft: ntriangleleft, ntrianglelefteq: ntrianglelefteq, ntriangleright: ntriangleright, ntrianglerighteq: ntrianglerighteq, nu: nu$1, num: num, numero: numero, numsp: numsp, nvDash: nvDash, nvHarr: nvHarr, nvap: nvap, nvdash: nvdash, nvge: nvge, nvgt: nvgt, nvinfin: nvinfin, nvlArr: nvlArr, nvle: nvle, nvlt: nvlt, nvltrie: nvltrie, nvrArr: nvrArr, nvrtrie: nvrtrie, nvsim: nvsim, nwArr: nwArr, nwarhk: nwarhk, nwarr: nwarr, nwarrow: nwarrow, nwnear: nwnear, oS: oS, oacut: oacut, oacute: oacute$1, oast: oast, ocir: ocir, ocirc: ocirc$1, ocy: ocy, odash: odash, odblac: odblac, odiv: odiv, odot: odot, odsold: odsold, oelig: oelig$1, ofcir: ofcir, ofr: ofr, ogon: ogon, ograv: ograv, ograve: ograve$1, ogt: ogt, ohbar: ohbar, ohm: ohm, oint: oint, olarr: olarr, olcir: olcir, olcross: olcross, oline: oline$1, olt: olt, omacr: omacr, omega: omega$1, omicron: omicron$1, omid: omid, ominus: ominus, oopf: oopf, opar: opar, operp: operp, oplus: oplus$1, or: or$1, orarr: orarr, ord: ord, order: order, orderof: orderof, ordf: ordf$1, ordm: ordm$1, origof: origof, oror: oror, orslope: orslope, orv: orv, oscr: oscr, oslas: oslas, oslash: oslash$1, osol: osol, otild: otild, otilde: otilde$1, otimes: otimes$1, otimesas: otimesas, oum: oum, ouml: ouml$1, ovbar: ovbar, par: par, para: para$1, parallel: parallel, parsim: parsim, parsl: parsl, part: part$1, pcy: pcy, percnt: percnt, period: period, permil: permil$1, perp: perp$1, pertenk: pertenk, pfr: pfr, phi: phi$1, phiv: phiv, phmmat: phmmat, phone: phone, pi: pi$1, pitchfork: pitchfork, piv: piv$1, planck: planck, planckh: planckh, plankv: plankv, plus: plus, plusacir: plusacir, plusb: plusb, pluscir: pluscir, plusdo: plusdo, plusdu: plusdu, pluse: pluse, plusm: plusm, plusmn: plusmn$1, plussim: plussim, plustwo: plustwo, pm: pm, pointint: pointint, popf: popf, poun: poun, pound: pound$1, pr: pr, prE: prE, prap: prap, prcue: prcue, pre: pre, prec: prec, precapprox: precapprox, preccurlyeq: preccurlyeq, preceq: preceq, precnapprox: precnapprox, precneqq: precneqq, precnsim: precnsim, precsim: precsim, prime: prime$1, primes: primes, prnE: prnE, prnap: prnap, prnsim: prnsim, prod: prod$1, profalar: profalar, profline: profline, profsurf: profsurf, prop: prop$1, propto: propto, prsim: prsim, prurel: prurel, pscr: pscr, psi: psi$1, puncsp: puncsp, qfr: qfr, qint: qint, qopf: qopf, qprime: qprime, qscr: qscr, quaternions: quaternions, quatint: quatint, quest: quest, questeq: questeq, quo: quo, quot: quot$1, rAarr: rAarr, rArr: rArr$1, rAtail: rAtail, rBarr: rBarr, rHar: rHar, race: race, racute: racute, radic: radic$1, raemptyv: raemptyv, rang: rang$1, rangd: rangd, range: range, rangle: rangle, raqu: raqu, raquo: raquo$1, rarr: rarr$1, rarrap: rarrap, rarrb: rarrb, rarrbfs: rarrbfs, rarrc: rarrc, rarrfs: rarrfs, rarrhk: rarrhk, rarrlp: rarrlp, rarrpl: rarrpl, rarrsim: rarrsim, rarrtl: rarrtl, rarrw: rarrw, ratail: ratail, ratio: ratio, rationals: rationals, rbarr: rbarr, rbbrk: rbbrk, rbrace: rbrace, rbrack: rbrack, rbrke: rbrke, rbrksld: rbrksld, rbrkslu: rbrkslu, rcaron: rcaron, rcedil: rcedil, rceil: rceil$1, rcub: rcub, rcy: rcy, rdca: rdca, rdldhar: rdldhar, rdquo: rdquo$1, rdquor: rdquor, rdsh: rdsh, real: real$1, realine: realine, realpart: realpart, reals: reals, rect: rect, re: re$3, reg: reg$1, rfisht: rfisht, rfloor: rfloor$1, rfr: rfr, rhard: rhard, rharu: rharu, rharul: rharul, rho: rho$1, rhov: rhov, rightarrow: rightarrow, rightarrowtail: rightarrowtail, rightharpoondown: rightharpoondown, rightharpoonup: rightharpoonup, rightleftarrows: rightleftarrows, rightleftharpoons: rightleftharpoons, rightrightarrows: rightrightarrows, rightsquigarrow: rightsquigarrow, rightthreetimes: rightthreetimes, ring: ring, risingdotseq: risingdotseq, rlarr: rlarr, rlhar: rlhar, rlm: rlm$1, rmoust: rmoust, rmoustache: rmoustache, rnmid: rnmid, roang: roang, roarr: roarr, robrk: robrk, ropar: ropar, ropf: ropf, roplus: roplus, rotimes: rotimes, rpar: rpar, rpargt: rpargt, rppolint: rppolint, rrarr: rrarr, rsaquo: rsaquo$1, rscr: rscr, rsh: rsh, rsqb: rsqb, rsquo: rsquo$1, rsquor: rsquor, rthree: rthree, rtimes: rtimes, rtri: rtri, rtrie: rtrie, rtrif: rtrif, rtriltri: rtriltri, ruluhar: ruluhar, rx: rx, sacute: sacute, sbquo: sbquo$1, sc: sc, scE: scE, scap: scap, scaron: scaron$1, sccue: sccue, sce: sce, scedil: scedil, scirc: scirc, scnE: scnE, scnap: scnap, scnsim: scnsim, scpolint: scpolint, scsim: scsim, scy: scy, sdot: sdot$1, sdotb: sdotb, sdote: sdote, seArr: seArr, searhk: searhk, searr: searr, searrow: searrow, sec: sec, sect: sect$1, semi: semi, seswar: seswar, setminus: setminus, setmn: setmn, sext: sext, sfr: sfr, sfrown: sfrown, sharp: sharp, shchcy: shchcy, shcy: shcy, shortmid: shortmid, shortparallel: shortparallel, sh: sh, shy: shy$1, sigma: sigma$1, sigmaf: sigmaf$1, sigmav: sigmav, sim: sim$1, simdot: simdot, sime: sime, simeq: simeq, simg: simg, simgE: simgE, siml: siml, simlE: simlE, simne: simne, simplus: simplus, simrarr: simrarr, slarr: slarr, smallsetminus: smallsetminus, smashp: smashp, smeparsl: smeparsl, smid: smid, smile: smile, smt: smt, smte: smte, smtes: smtes, softcy: softcy, sol: sol, solb: solb, solbar: solbar, sopf: sopf, spades: spades$1, spadesuit: spadesuit, spar: spar, sqcap: sqcap, sqcaps: sqcaps, sqcup: sqcup, sqcups: sqcups, sqsub: sqsub, sqsube: sqsube, sqsubset: sqsubset, sqsubseteq: sqsubseteq, sqsup: sqsup, sqsupe: sqsupe, sqsupset: sqsupset, sqsupseteq: sqsupseteq, squ: squ, square: square, squarf: squarf, squf: squf, srarr: srarr, sscr: sscr, ssetmn: ssetmn, ssmile: ssmile, sstarf: sstarf, star: star, starf: starf, straightepsilon: straightepsilon, straightphi: straightphi, strns: strns, sub: sub$1, subE: subE, subdot: subdot, sube: sube$1, subedot: subedot, submult: submult, subnE: subnE, subne: subne, subplus: subplus, subrarr: subrarr, subset: subset, subseteq: subseteq, subseteqq: subseteqq, subsetneq: subsetneq, subsetneqq: subsetneqq, subsim: subsim, subsub: subsub, subsup: subsup, succ: succ, succapprox: succapprox, succcurlyeq: succcurlyeq, succeq: succeq, succnapprox: succnapprox, succneqq: succneqq, succnsim: succnsim, succsim: succsim, sum: sum$1, sung: sung, sup: sup$1, sup1: sup1$1, sup2: sup2$1, sup3: sup3$1, supE: supE, supdot: supdot, supdsub: supdsub, supe: supe$1, supedot: supedot, suphsol: suphsol, suphsub: suphsub, suplarr: suplarr, supmult: supmult, supnE: supnE, supne: supne, supplus: supplus, supset: supset, supseteq: supseteq, supseteqq: supseteqq, supsetneq: supsetneq, supsetneqq: supsetneqq, supsim: supsim, supsub: supsub, supsup: supsup, swArr: swArr, swarhk: swarhk, swarr: swarr, swarrow: swarrow, swnwar: swnwar, szli: szli, szlig: szlig$1, target: target, tau: tau$1, tbrk: tbrk, tcaron: tcaron, tcedil: tcedil, tcy: tcy, tdot: tdot, telrec: telrec, tfr: tfr, there4: there4$1, therefore: therefore, theta: theta$1, thetasym: thetasym$1, thetav: thetav, thickapprox: thickapprox, thicksim: thicksim, thinsp: thinsp$1, thkap: thkap, thksim: thksim, thor: thor, thorn: thorn$1, tilde: tilde$4, time: time, times: times$1, timesb: timesb, timesbar: timesbar, timesd: timesd, tint: tint, toea: toea, top: top, topbot: topbot, topcir: topcir, topf: topf, topfork: topfork, tosa: tosa, tprime: tprime, trade: trade$1, triangle: triangle, triangledown: triangledown, triangleleft: triangleleft, trianglelefteq: trianglelefteq, triangleq: triangleq, triangleright: triangleright, trianglerighteq: trianglerighteq, tridot: tridot, trie: trie, triminus: triminus, triplus: triplus, trisb: trisb, tritime: tritime, trpezium: trpezium, tscr: tscr, tscy: tscy, tshcy: tshcy, tstrok: tstrok, twixt: twixt, twoheadleftarrow: twoheadleftarrow, twoheadrightarrow: twoheadrightarrow, uArr: uArr$1, uHar: uHar, uacut: uacut, uacute: uacute$1, uarr: uarr$1, ubrcy: ubrcy, ubreve: ubreve, ucir: ucir, ucirc: ucirc$1, ucy: ucy, udarr: udarr, udblac: udblac, udhar: udhar, ufisht: ufisht, ufr: ufr, ugrav: ugrav, ugrave: ugrave$1, uharl: uharl, uharr: uharr, uhblk: uhblk, ulcorn: ulcorn, ulcorner: ulcorner, ulcrop: ulcrop, ultri: ultri, umacr: umacr, um: um, uml: uml$1, uogon: uogon, uopf: uopf, uparrow: uparrow, updownarrow: updownarrow, upharpoonleft: upharpoonleft, upharpoonright: upharpoonright, uplus: uplus, upsi: upsi, upsih: upsih$1, upsilon: upsilon$1, upuparrows: upuparrows, urcorn: urcorn, urcorner: urcorner, urcrop: urcrop, uring: uring, urtri: urtri, uscr: uscr, utdot: utdot, utilde: utilde, utri: utri, utrif: utrif, uuarr: uuarr, uum: uum, uuml: uuml$1, uwangle: uwangle, vArr: vArr, vBar: vBar, vBarv: vBarv, vDash: vDash, vangrt: vangrt, varepsilon: varepsilon, varkappa: varkappa, varnothing: varnothing, varphi: varphi, varpi: varpi, varpropto: varpropto, varr: varr, varrho: varrho, varsigma: varsigma, varsubsetneq: varsubsetneq, varsubsetneqq: varsubsetneqq, varsupsetneq: varsupsetneq, varsupsetneqq: varsupsetneqq, vartheta: vartheta, vartriangleleft: vartriangleleft, vartriangleright: vartriangleright, vcy: vcy, vdash: vdash, vee: vee, veebar: veebar, veeeq: veeeq, vellip: vellip, verbar: verbar, vert: vert, vfr: vfr, vltri: vltri, vnsub: vnsub, vnsup: vnsup, vopf: vopf, vprop: vprop, vrtri: vrtri, vscr: vscr, vsubnE: vsubnE, vsubne: vsubne, vsupnE: vsupnE, vsupne: vsupne, vzigzag: vzigzag, wcirc: wcirc, wedbar: wedbar, wedge: wedge, wedgeq: wedgeq, weierp: weierp$1, wfr: wfr, wopf: wopf, wp: wp, wr: wr, wreath: wreath, wscr: wscr, xcap: xcap, xcirc: xcirc, xcup: xcup, xdtri: xdtri, xfr: xfr, xhArr: xhArr, xharr: xharr, xi: xi$1, xlArr: xlArr, xlarr: xlarr, xmap: xmap, xnis: xnis, xodot: xodot, xopf: xopf, xoplus: xoplus, xotime: xotime, xrArr: xrArr, xrarr: xrarr, xscr: xscr, xsqcup: xsqcup, xuplus: xuplus, xutri: xutri, xvee: xvee, xwedge: xwedge, yacut: yacut, yacute: yacute$1, yacy: yacy, ycirc: ycirc, ycy: ycy, ye: ye, yen: yen$1, yfr: yfr, yicy: yicy, yopf: yopf, yscr: yscr, yucy: yucy, yum: yum, yuml: yuml$1, zacute: zacute, zcaron: zcaron, zcy: zcy, zdot: zdot, zeetrf: zeetrf, zeta: zeta$1, zfr: zfr, zhcy: zhcy, zigrarr: zigrarr, zopf: zopf, zscr: zscr, zwj: zwj$1, zwnj: zwnj$1 }; var characterEntities$1 = /*#__PURE__*/Object.freeze({ __proto__: null, AEli: AEli, AElig: AElig$1, AM: AM, AMP: AMP$1, Aacut: Aacut, Aacute: Aacute$1, Abreve: Abreve, Acir: Acir, Acirc: Acirc$1, Acy: Acy, Afr: Afr, Agrav: Agrav, Agrave: Agrave$1, Alpha: Alpha$1, Amacr: Amacr, And: And, Aogon: Aogon, Aopf: Aopf, ApplyFunction: ApplyFunction, Arin: Arin, Aring: Aring$1, Ascr: Ascr, Assign: Assign, Atild: Atild, Atilde: Atilde$1, Aum: Aum, Auml: Auml$1, Backslash: Backslash, Barv: Barv, Barwed: Barwed, Bcy: Bcy, Because: Because, Bernoullis: Bernoullis, Beta: Beta$1, Bfr: Bfr, Bopf: Bopf, Breve: Breve, Bscr: Bscr, Bumpeq: Bumpeq, CHcy: CHcy, COP: COP, COPY: COPY, Cacute: Cacute, Cap: Cap, CapitalDifferentialD: CapitalDifferentialD, Cayleys: Cayleys, Ccaron: Ccaron, Ccedi: Ccedi, Ccedil: Ccedil$1, Ccirc: Ccirc, Cconint: Cconint, Cdot: Cdot, Cedilla: Cedilla, CenterDot: CenterDot, Cfr: Cfr, Chi: Chi$1, CircleDot: CircleDot, CircleMinus: CircleMinus, CirclePlus: CirclePlus, CircleTimes: CircleTimes, ClockwiseContourIntegral: ClockwiseContourIntegral, CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, CloseCurlyQuote: CloseCurlyQuote, Colon: Colon, Colone: Colone, Congruent: Congruent, Conint: Conint, ContourIntegral: ContourIntegral, Copf: Copf, Coproduct: Coproduct, CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, Cross: Cross, Cscr: Cscr, Cup: Cup, CupCap: CupCap, DD: DD, DDotrahd: DDotrahd, DJcy: DJcy, DScy: DScy, DZcy: DZcy, Dagger: Dagger$1, Darr: Darr, Dashv: Dashv, Dcaron: Dcaron, Dcy: Dcy, Del: Del, Delta: Delta$1, Dfr: Dfr, DiacriticalAcute: DiacriticalAcute, DiacriticalDot: DiacriticalDot, DiacriticalDoubleAcute: DiacriticalDoubleAcute, DiacriticalGrave: DiacriticalGrave, DiacriticalTilde: DiacriticalTilde, Diamond: Diamond, DifferentialD: DifferentialD, Dopf: Dopf, Dot: Dot, DotDot: DotDot, DotEqual: DotEqual, DoubleContourIntegral: DoubleContourIntegral, DoubleDot: DoubleDot, DoubleDownArrow: DoubleDownArrow, DoubleLeftArrow: DoubleLeftArrow, DoubleLeftRightArrow: DoubleLeftRightArrow, DoubleLeftTee: DoubleLeftTee, DoubleLongLeftArrow: DoubleLongLeftArrow, DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, DoubleLongRightArrow: DoubleLongRightArrow, DoubleRightArrow: DoubleRightArrow, DoubleRightTee: DoubleRightTee, DoubleUpArrow: DoubleUpArrow, DoubleUpDownArrow: DoubleUpDownArrow, DoubleVerticalBar: DoubleVerticalBar, DownArrow: DownArrow, DownArrowBar: DownArrowBar, DownArrowUpArrow: DownArrowUpArrow, DownBreve: DownBreve, DownLeftRightVector: DownLeftRightVector, DownLeftTeeVector: DownLeftTeeVector, DownLeftVector: DownLeftVector, DownLeftVectorBar: DownLeftVectorBar, DownRightTeeVector: DownRightTeeVector, DownRightVector: DownRightVector, DownRightVectorBar: DownRightVectorBar, DownTee: DownTee, DownTeeArrow: DownTeeArrow, Downarrow: Downarrow, Dscr: Dscr, Dstrok: Dstrok, ENG: ENG, ET: ET, ETH: ETH$1, Eacut: Eacut, Eacute: Eacute$1, Ecaron: Ecaron, Ecir: Ecir, Ecirc: Ecirc$1, Ecy: Ecy, Edot: Edot, Efr: Efr, Egrav: Egrav, Egrave: Egrave$1, Element: Element, Emacr: Emacr, EmptySmallSquare: EmptySmallSquare, EmptyVerySmallSquare: EmptyVerySmallSquare, Eogon: Eogon, Eopf: Eopf, Epsilon: Epsilon$1, Equal: Equal, EqualTilde: EqualTilde, Equilibrium: Equilibrium, Escr: Escr, Esim: Esim, Eta: Eta$1, Eum: Eum, Euml: Euml$1, Exists: Exists, ExponentialE: ExponentialE, Fcy: Fcy, Ffr: Ffr, FilledSmallSquare: FilledSmallSquare, FilledVerySmallSquare: FilledVerySmallSquare, Fopf: Fopf, ForAll: ForAll, Fouriertrf: Fouriertrf, Fscr: Fscr, GJcy: GJcy, G: G, GT: GT$1, Gamma: Gamma$1, Gammad: Gammad, Gbreve: Gbreve, Gcedil: Gcedil, Gcirc: Gcirc, Gcy: Gcy, Gdot: Gdot, Gfr: Gfr, Gg: Gg, Gopf: Gopf, GreaterEqual: GreaterEqual, GreaterEqualLess: GreaterEqualLess, GreaterFullEqual: GreaterFullEqual, GreaterGreater: GreaterGreater, GreaterLess: GreaterLess, GreaterSlantEqual: GreaterSlantEqual, GreaterTilde: GreaterTilde, Gscr: Gscr, Gt: Gt, HARDcy: HARDcy, Hacek: Hacek, Hat: Hat, Hcirc: Hcirc, Hfr: Hfr, HilbertSpace: HilbertSpace, Hopf: Hopf, HorizontalLine: HorizontalLine, Hscr: Hscr, Hstrok: Hstrok, HumpDownHump: HumpDownHump, HumpEqual: HumpEqual, IEcy: IEcy, IJlig: IJlig, IOcy: IOcy, Iacut: Iacut, Iacute: Iacute$1, Icir: Icir, Icirc: Icirc$1, Icy: Icy, Idot: Idot, Ifr: Ifr, Igrav: Igrav, Igrave: Igrave$1, Im: Im, Imacr: Imacr, ImaginaryI: ImaginaryI, Implies: Implies, Int: Int, Integral: Integral, Intersection: Intersection, InvisibleComma: InvisibleComma, InvisibleTimes: InvisibleTimes, Iogon: Iogon, Iopf: Iopf, Iota: Iota$1, Iscr: Iscr, Itilde: Itilde, Iukcy: Iukcy, Ium: Ium, Iuml: Iuml$1, Jcirc: Jcirc, Jcy: Jcy, Jfr: Jfr, Jopf: Jopf, Jscr: Jscr, Jsercy: Jsercy, Jukcy: Jukcy, KHcy: KHcy, KJcy: KJcy, Kappa: Kappa$1, Kcedil: Kcedil, Kcy: Kcy, Kfr: Kfr, Kopf: Kopf, Kscr: Kscr, LJcy: LJcy, L: L, LT: LT$1, Lacute: Lacute, Lambda: Lambda$1, Lang: Lang, Laplacetrf: Laplacetrf, Larr: Larr, Lcaron: Lcaron, Lcedil: Lcedil, Lcy: Lcy, LeftAngleBracket: LeftAngleBracket, LeftArrow: LeftArrow, LeftArrowBar: LeftArrowBar, LeftArrowRightArrow: LeftArrowRightArrow, LeftCeiling: LeftCeiling, LeftDoubleBracket: LeftDoubleBracket, LeftDownTeeVector: LeftDownTeeVector, LeftDownVector: LeftDownVector, LeftDownVectorBar: LeftDownVectorBar, LeftFloor: LeftFloor, LeftRightArrow: LeftRightArrow, LeftRightVector: LeftRightVector, LeftTee: LeftTee, LeftTeeArrow: LeftTeeArrow, LeftTeeVector: LeftTeeVector, LeftTriangle: LeftTriangle, LeftTriangleBar: LeftTriangleBar, LeftTriangleEqual: LeftTriangleEqual, LeftUpDownVector: LeftUpDownVector, LeftUpTeeVector: LeftUpTeeVector, LeftUpVector: LeftUpVector, LeftUpVectorBar: LeftUpVectorBar, LeftVector: LeftVector, LeftVectorBar: LeftVectorBar, Leftarrow: Leftarrow, Leftrightarrow: Leftrightarrow, LessEqualGreater: LessEqualGreater, LessFullEqual: LessFullEqual, LessGreater: LessGreater, LessLess: LessLess, LessSlantEqual: LessSlantEqual, LessTilde: LessTilde, Lfr: Lfr, Ll: Ll, Lleftarrow: Lleftarrow, Lmidot: Lmidot, LongLeftArrow: LongLeftArrow, LongLeftRightArrow: LongLeftRightArrow, LongRightArrow: LongRightArrow, Longleftarrow: Longleftarrow, Longleftrightarrow: Longleftrightarrow, Longrightarrow: Longrightarrow, Lopf: Lopf, LowerLeftArrow: LowerLeftArrow, LowerRightArrow: LowerRightArrow, Lscr: Lscr, Lsh: Lsh, Lstrok: Lstrok, Lt: Lt, Mcy: Mcy, MediumSpace: MediumSpace, Mellintrf: Mellintrf, Mfr: Mfr, MinusPlus: MinusPlus, Mopf: Mopf, Mscr: Mscr, Mu: Mu$1, NJcy: NJcy, Nacute: Nacute, Ncaron: Ncaron, Ncedil: Ncedil, Ncy: Ncy, NegativeMediumSpace: NegativeMediumSpace, NegativeThickSpace: NegativeThickSpace, NegativeThinSpace: NegativeThinSpace, NegativeVeryThinSpace: NegativeVeryThinSpace, NestedGreaterGreater: NestedGreaterGreater, NestedLessLess: NestedLessLess, NewLine: NewLine, Nfr: Nfr, NoBreak: NoBreak, NonBreakingSpace: NonBreakingSpace, Nopf: Nopf, Not: Not, NotCongruent: NotCongruent, NotCupCap: NotCupCap, NotDoubleVerticalBar: NotDoubleVerticalBar, NotElement: NotElement, NotEqual: NotEqual, NotEqualTilde: NotEqualTilde, NotExists: NotExists, NotGreater: NotGreater, NotGreaterEqual: NotGreaterEqual, NotGreaterFullEqual: NotGreaterFullEqual, NotGreaterGreater: NotGreaterGreater, NotGreaterLess: NotGreaterLess, NotGreaterSlantEqual: NotGreaterSlantEqual, NotGreaterTilde: NotGreaterTilde, NotHumpDownHump: NotHumpDownHump, NotHumpEqual: NotHumpEqual, NotLeftTriangle: NotLeftTriangle, NotLeftTriangleBar: NotLeftTriangleBar, NotLeftTriangleEqual: NotLeftTriangleEqual, NotLess: NotLess, NotLessEqual: NotLessEqual, NotLessGreater: NotLessGreater, NotLessLess: NotLessLess, NotLessSlantEqual: NotLessSlantEqual, NotLessTilde: NotLessTilde, NotNestedGreaterGreater: NotNestedGreaterGreater, NotNestedLessLess: NotNestedLessLess, NotPrecedes: NotPrecedes, NotPrecedesEqual: NotPrecedesEqual, NotPrecedesSlantEqual: NotPrecedesSlantEqual, NotReverseElement: NotReverseElement, NotRightTriangle: NotRightTriangle, NotRightTriangleBar: NotRightTriangleBar, NotRightTriangleEqual: NotRightTriangleEqual, NotSquareSubset: NotSquareSubset, NotSquareSubsetEqual: NotSquareSubsetEqual, NotSquareSuperset: NotSquareSuperset, NotSquareSupersetEqual: NotSquareSupersetEqual, NotSubset: NotSubset, NotSubsetEqual: NotSubsetEqual, NotSucceeds: NotSucceeds, NotSucceedsEqual: NotSucceedsEqual, NotSucceedsSlantEqual: NotSucceedsSlantEqual, NotSucceedsTilde: NotSucceedsTilde, NotSuperset: NotSuperset, NotSupersetEqual: NotSupersetEqual, NotTilde: NotTilde, NotTildeEqual: NotTildeEqual, NotTildeFullEqual: NotTildeFullEqual, NotTildeTilde: NotTildeTilde, NotVerticalBar: NotVerticalBar, Nscr: Nscr, Ntild: Ntild, Ntilde: Ntilde$1, Nu: Nu$1, OElig: OElig$1, Oacut: Oacut, Oacute: Oacute$1, Ocir: Ocir, Ocirc: Ocirc$1, Ocy: Ocy, Odblac: Odblac, Ofr: Ofr, Ograv: Ograv, Ograve: Ograve$1, Omacr: Omacr, Omega: Omega$1, Omicron: Omicron$1, Oopf: Oopf, OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, OpenCurlyQuote: OpenCurlyQuote, Or: Or, Oscr: Oscr, Oslas: Oslas, Oslash: Oslash$1, Otild: Otild, Otilde: Otilde$1, Otimes: Otimes, Oum: Oum, Ouml: Ouml$1, OverBar: OverBar, OverBrace: OverBrace, OverBracket: OverBracket, OverParenthesis: OverParenthesis, PartialD: PartialD, Pcy: Pcy, Pfr: Pfr, Phi: Phi$1, Pi: Pi$1, PlusMinus: PlusMinus, Poincareplane: Poincareplane, Popf: Popf, Pr: Pr, Precedes: Precedes, PrecedesEqual: PrecedesEqual, PrecedesSlantEqual: PrecedesSlantEqual, PrecedesTilde: PrecedesTilde, Prime: Prime$1, Product: Product, Proportion: Proportion, Proportional: Proportional, Pscr: Pscr, Psi: Psi$1, QUO: QUO, QUOT: QUOT, Qfr: Qfr, Qopf: Qopf, Qscr: Qscr, RBarr: RBarr, RE: RE, REG: REG, Racute: Racute, Rang: Rang, Rarr: Rarr, Rarrtl: Rarrtl, Rcaron: Rcaron, Rcedil: Rcedil, Rcy: Rcy, Re: Re, ReverseElement: ReverseElement, ReverseEquilibrium: ReverseEquilibrium, ReverseUpEquilibrium: ReverseUpEquilibrium, Rfr: Rfr, Rho: Rho$1, RightAngleBracket: RightAngleBracket, RightArrow: RightArrow, RightArrowBar: RightArrowBar, RightArrowLeftArrow: RightArrowLeftArrow, RightCeiling: RightCeiling, RightDoubleBracket: RightDoubleBracket, RightDownTeeVector: RightDownTeeVector, RightDownVector: RightDownVector, RightDownVectorBar: RightDownVectorBar, RightFloor: RightFloor, RightTee: RightTee, RightTeeArrow: RightTeeArrow, RightTeeVector: RightTeeVector, RightTriangle: RightTriangle, RightTriangleBar: RightTriangleBar, RightTriangleEqual: RightTriangleEqual, RightUpDownVector: RightUpDownVector, RightUpTeeVector: RightUpTeeVector, RightUpVector: RightUpVector, RightUpVectorBar: RightUpVectorBar, RightVector: RightVector, RightVectorBar: RightVectorBar, Rightarrow: Rightarrow, Ropf: Ropf, RoundImplies: RoundImplies, Rrightarrow: Rrightarrow, Rscr: Rscr, Rsh: Rsh, RuleDelayed: RuleDelayed, SHCHcy: SHCHcy, SHcy: SHcy, SOFTcy: SOFTcy, Sacute: Sacute, Sc: Sc, Scaron: Scaron$1, Scedil: Scedil, Scirc: Scirc, Scy: Scy, Sfr: Sfr, ShortDownArrow: ShortDownArrow, ShortLeftArrow: ShortLeftArrow, ShortRightArrow: ShortRightArrow, ShortUpArrow: ShortUpArrow, Sigma: Sigma$1, SmallCircle: SmallCircle, Sopf: Sopf, Sqrt: Sqrt, Square: Square, SquareIntersection: SquareIntersection, SquareSubset: SquareSubset, SquareSubsetEqual: SquareSubsetEqual, SquareSuperset: SquareSuperset, SquareSupersetEqual: SquareSupersetEqual, SquareUnion: SquareUnion, Sscr: Sscr, Star: Star, Sub: Sub, Subset: Subset, SubsetEqual: SubsetEqual, Succeeds: Succeeds, SucceedsEqual: SucceedsEqual, SucceedsSlantEqual: SucceedsSlantEqual, SucceedsTilde: SucceedsTilde, SuchThat: SuchThat, Sum: Sum, Sup: Sup, Superset: Superset, SupersetEqual: SupersetEqual, Supset: Supset, THOR: THOR, THORN: THORN$1, TRADE: TRADE, TSHcy: TSHcy, TScy: TScy, Tab: Tab, Tau: Tau$1, Tcaron: Tcaron, Tcedil: Tcedil, Tcy: Tcy, Tfr: Tfr, Therefore: Therefore, Theta: Theta$1, ThickSpace: ThickSpace, ThinSpace: ThinSpace, Tilde: Tilde, TildeEqual: TildeEqual, TildeFullEqual: TildeFullEqual, TildeTilde: TildeTilde, Topf: Topf, TripleDot: TripleDot, Tscr: Tscr, Tstrok: Tstrok, Uacut: Uacut, Uacute: Uacute$1, Uarr: Uarr, Uarrocir: Uarrocir, Ubrcy: Ubrcy, Ubreve: Ubreve, Ucir: Ucir, Ucirc: Ucirc$1, Ucy: Ucy, Udblac: Udblac, Ufr: Ufr, Ugrav: Ugrav, Ugrave: Ugrave$1, Umacr: Umacr, UnderBar: UnderBar, UnderBrace: UnderBrace, UnderBracket: UnderBracket, UnderParenthesis: UnderParenthesis, Union: Union, UnionPlus: UnionPlus, Uogon: Uogon, Uopf: Uopf, UpArrow: UpArrow, UpArrowBar: UpArrowBar, UpArrowDownArrow: UpArrowDownArrow, UpDownArrow: UpDownArrow, UpEquilibrium: UpEquilibrium, UpTee: UpTee, UpTeeArrow: UpTeeArrow, Uparrow: Uparrow, Updownarrow: Updownarrow, UpperLeftArrow: UpperLeftArrow, UpperRightArrow: UpperRightArrow, Upsi: Upsi, Upsilon: Upsilon$1, Uring: Uring, Uscr: Uscr, Utilde: Utilde, Uum: Uum, Uuml: Uuml$1, VDash: VDash, Vbar: Vbar, Vcy: Vcy, Vdash: Vdash, Vdashl: Vdashl, Vee: Vee, Verbar: Verbar, Vert: Vert, VerticalBar: VerticalBar, VerticalLine: VerticalLine, VerticalSeparator: VerticalSeparator, VerticalTilde: VerticalTilde, VeryThinSpace: VeryThinSpace, Vfr: Vfr, Vopf: Vopf, Vscr: Vscr, Vvdash: Vvdash, Wcirc: Wcirc, Wedge: Wedge, Wfr: Wfr, Wopf: Wopf, Wscr: Wscr, Xfr: Xfr, Xi: Xi$1, Xopf: Xopf, Xscr: Xscr, YAcy: YAcy, YIcy: YIcy, YUcy: YUcy, Yacut: Yacut, Yacute: Yacute$1, Ycirc: Ycirc, Ycy: Ycy, Yfr: Yfr, Yopf: Yopf, Yscr: Yscr, Yuml: Yuml$1, ZHcy: ZHcy, Zacute: Zacute, Zcaron: Zcaron, Zcy: Zcy, Zdot: Zdot, ZeroWidthSpace: ZeroWidthSpace, Zeta: Zeta$1, Zfr: Zfr, Zopf: Zopf, Zscr: Zscr, aacut: aacut, aacute: aacute$1, abreve: abreve, ac: ac, acE: acE, acd: acd, acir: acir, acirc: acirc$1, acut: acut, acute: acute$1, acy: acy, aeli: aeli, aelig: aelig$1, af: af, afr: afr, agrav: agrav, agrave: agrave$1, alefsym: alefsym$1, aleph: aleph, alpha: alpha$1, amacr: amacr, amalg: amalg, am: am, amp: amp$1, and: and$1, andand: andand, andd: andd, andslope: andslope, andv: andv, ang: ang$1, ange: ange, angle: angle, angmsd: angmsd, angmsdaa: angmsdaa, angmsdab: angmsdab, angmsdac: angmsdac, angmsdad: angmsdad, angmsdae: angmsdae, angmsdaf: angmsdaf, angmsdag: angmsdag, angmsdah: angmsdah, angrt: angrt, angrtvb: angrtvb, angrtvbd: angrtvbd, angsph: angsph, angst: angst, angzarr: angzarr, aogon: aogon, aopf: aopf, ap: ap, apE: apE, apacir: apacir, ape: ape, apid: apid, apos: apos, approx: approx, approxeq: approxeq, arin: arin, aring: aring$1, ascr: ascr, ast: ast, asymp: asymp$1, asympeq: asympeq, atild: atild, atilde: atilde$1, aum: aum, auml: auml$1, awconint: awconint, awint: awint, bNot: bNot, backcong: backcong, backepsilon: backepsilon, backprime: backprime, backsim: backsim, backsimeq: backsimeq, barvee: barvee, barwed: barwed, barwedge: barwedge, bbrk: bbrk, bbrktbrk: bbrktbrk, bcong: bcong, bcy: bcy, bdquo: bdquo$1, becaus: becaus, because: because, bemptyv: bemptyv, bepsi: bepsi, bernou: bernou, beta: beta$1, beth: beth, between: between, bfr: bfr, bigcap: bigcap, bigcirc: bigcirc, bigcup: bigcup, bigodot: bigodot, bigoplus: bigoplus, bigotimes: bigotimes, bigsqcup: bigsqcup, bigstar: bigstar, bigtriangledown: bigtriangledown, bigtriangleup: bigtriangleup, biguplus: biguplus, bigvee: bigvee, bigwedge: bigwedge, bkarow: bkarow, blacklozenge: blacklozenge, blacksquare: blacksquare, blacktriangle: blacktriangle, blacktriangledown: blacktriangledown, blacktriangleleft: blacktriangleleft, blacktriangleright: blacktriangleright, blank: blank, blk12: blk12, blk14: blk14, blk34: blk34, block: block, bne: bne, bnequiv: bnequiv, bnot: bnot, bopf: bopf, bot: bot, bottom: bottom, bowtie: bowtie, boxDL: boxDL, boxDR: boxDR, boxDl: boxDl, boxDr: boxDr, boxH: boxH, boxHD: boxHD, boxHU: boxHU, boxHd: boxHd, boxHu: boxHu, boxUL: boxUL, boxUR: boxUR, boxUl: boxUl, boxUr: boxUr, boxV: boxV, boxVH: boxVH, boxVL: boxVL, boxVR: boxVR, boxVh: boxVh, boxVl: boxVl, boxVr: boxVr, boxbox: boxbox, boxdL: boxdL, boxdR: boxdR, boxdl: boxdl, boxdr: boxdr, boxh: boxh, boxhD: boxhD, boxhU: boxhU, boxhd: boxhd, boxhu: boxhu, boxminus: boxminus, boxplus: boxplus, boxtimes: boxtimes, boxuL: boxuL, boxuR: boxuR, boxul: boxul, boxur: boxur, boxv: boxv, boxvH: boxvH, boxvL: boxvL, boxvR: boxvR, boxvh: boxvh, boxvl: boxvl, boxvr: boxvr, bprime: bprime, breve: breve, brvba: brvba, brvbar: brvbar$1, bscr: bscr, bsemi: bsemi, bsim: bsim, bsime: bsime, bsol: bsol, bsolb: bsolb, bsolhsub: bsolhsub, bull: bull$1, bullet: bullet, bump: bump, bumpE: bumpE, bumpe: bumpe, bumpeq: bumpeq, cacute: cacute, cap: cap$2, capand: capand, capbrcup: capbrcup, capcap: capcap, capcup: capcup, capdot: capdot, caps: caps, caret: caret, caron: caron, ccaps: ccaps, ccaron: ccaron, ccedi: ccedi, ccedil: ccedil$1, ccirc: ccirc, ccups: ccups, ccupssm: ccupssm, cdot: cdot, cedi: cedi, cedil: cedil$1, cemptyv: cemptyv, cen: cen, cent: cent$1, centerdot: centerdot, cfr: cfr, chcy: chcy, check: check, checkmark: checkmark, chi: chi$1, cir: cir, cirE: cirE, circ: circ$1, circeq: circeq, circlearrowleft: circlearrowleft, circlearrowright: circlearrowright, circledR: circledR, circledS: circledS, circledast: circledast, circledcirc: circledcirc, circleddash: circleddash, cire: cire, cirfnint: cirfnint, cirmid: cirmid, cirscir: cirscir, clubs: clubs$1, clubsuit: clubsuit, colon: colon$3, colone: colone, coloneq: coloneq, comma: comma$2, commat: commat, comp: comp, compfn: compfn, complement: complement, complexes: complexes, cong: cong$1, congdot: congdot, conint: conint, copf: copf, coprod: coprod, cop: cop, copy: copy$1, copysr: copysr, crarr: crarr$1, cross: cross, cscr: cscr, csub: csub, csube: csube, csup: csup, csupe: csupe, ctdot: ctdot, cudarrl: cudarrl, cudarrr: cudarrr, cuepr: cuepr, cuesc: cuesc, cularr: cularr, cularrp: cularrp, cup: cup$1, cupbrcap: cupbrcap, cupcap: cupcap, cupcup: cupcup, cupdot: cupdot, cupor: cupor, cups: cups, curarr: curarr, curarrm: curarrm, curlyeqprec: curlyeqprec, curlyeqsucc: curlyeqsucc, curlyvee: curlyvee, curlywedge: curlywedge, curre: curre, curren: curren$1, curvearrowleft: curvearrowleft, curvearrowright: curvearrowright, cuvee: cuvee, cuwed: cuwed, cwconint: cwconint, cwint: cwint, cylcty: cylcty, dArr: dArr$1, dHar: dHar, dagger: dagger$1, daleth: daleth, darr: darr$1, dash: dash$8, dashv: dashv, dbkarow: dbkarow, dblac: dblac, dcaron: dcaron, dcy: dcy, dd: dd$1, ddagger: ddagger, ddarr: ddarr, ddotseq: ddotseq, de: de, deg: deg$1, delta: delta$1, demptyv: demptyv, dfisht: dfisht, dfr: dfr, dharl: dharl, dharr: dharr, diam: diam, diamond: diamond, diamondsuit: diamondsuit, diams: diams$1, die: die, digamma: digamma, disin: disin, div: div, divid: divid, divide: divide$1, divideontimes: divideontimes, divonx: divonx, djcy: djcy, dlcorn: dlcorn, dlcrop: dlcrop, dollar: dollar, dopf: dopf, dot: dot$4, doteq: doteq, doteqdot: doteqdot, dotminus: dotminus, dotplus: dotplus, dotsquare: dotsquare, doublebarwedge: doublebarwedge, downarrow: downarrow, downdownarrows: downdownarrows, downharpoonleft: downharpoonleft, downharpoonright: downharpoonright, drbkarow: drbkarow, drcorn: drcorn, drcrop: drcrop, dscr: dscr, dscy: dscy, dsol: dsol, dstrok: dstrok, dtdot: dtdot, dtri: dtri, dtrif: dtrif, duarr: duarr, duhar: duhar, dwangle: dwangle, dzcy: dzcy, dzigrarr: dzigrarr, eDDot: eDDot, eDot: eDot, eacut: eacut, eacute: eacute$1, easter: easter, ecaron: ecaron, ecir: ecir, ecirc: ecirc$1, ecolon: ecolon, ecy: ecy, edot: edot, ee: ee, efDot: efDot, efr: efr, eg: eg, egrav: egrav, egrave: egrave$1, egs: egs, egsdot: egsdot, el: el, elinters: elinters, ell: ell, els: els, elsdot: elsdot, emacr: emacr, empty: empty$3, emptyset: emptyset, emptyv: emptyv, emsp13: emsp13, emsp14: emsp14, emsp: emsp$1, eng: eng, ensp: ensp$1, eogon: eogon, eopf: eopf, epar: epar, eparsl: eparsl, eplus: eplus, epsi: epsi, epsilon: epsilon$1, epsiv: epsiv, eqcirc: eqcirc, eqcolon: eqcolon, eqsim: eqsim, eqslantgtr: eqslantgtr, eqslantless: eqslantless, equals: equals, equest: equest, equiv: equiv$1, equivDD: equivDD, eqvparsl: eqvparsl, erDot: erDot, erarr: erarr, escr: escr, esdot: esdot, esim: esim, eta: eta$1, et: et, eth: eth$1, eum: eum, euml: euml$1, euro: euro$1, excl: excl, exist: exist$1, expectation: expectation, exponentiale: exponentiale, fallingdotseq: fallingdotseq, fcy: fcy, female: female, ffilig: ffilig, fflig: fflig, ffllig: ffllig, ffr: ffr, filig: filig, fjlig: fjlig, flat: flat, fllig: fllig, fltns: fltns, fnof: fnof$1, fopf: fopf, forall: forall$1, fork: fork, forkv: forkv, fpartint: fpartint, frac1: frac1, frac12: frac12$1, frac13: frac13, frac14: frac14$1, frac15: frac15, frac16: frac16, frac18: frac18, frac23: frac23, frac25: frac25, frac3: frac3, frac34: frac34$1, frac35: frac35, frac38: frac38, frac45: frac45, frac56: frac56, frac58: frac58, frac78: frac78, frasl: frasl$1, frown: frown, fscr: fscr, gE: gE, gEl: gEl, gacute: gacute, gamma: gamma$1, gammad: gammad, gap: gap, gbreve: gbreve, gcirc: gcirc, gcy: gcy, gdot: gdot, ge: ge$1, gel: gel, geq: geq, geqq: geqq, geqslant: geqslant, ges: ges, gescc: gescc, gesdot: gesdot, gesdoto: gesdoto, gesdotol: gesdotol, gesl: gesl, gesles: gesles, gfr: gfr, gg: gg, ggg: ggg, gimel: gimel, gjcy: gjcy, gl: gl, glE: glE, gla: gla, glj: glj, gnE: gnE, gnap: gnap, gnapprox: gnapprox, gne: gne, gneq: gneq, gneqq: gneqq, gnsim: gnsim, gopf: gopf, grave: grave, gscr: gscr, gsim: gsim, gsime: gsime, gsiml: gsiml, g: g, gt: gt$1, gtcc: gtcc, gtcir: gtcir, gtdot: gtdot, gtlPar: gtlPar, gtquest: gtquest, gtrapprox: gtrapprox, gtrarr: gtrarr, gtrdot: gtrdot, gtreqless: gtreqless, gtreqqless: gtreqqless, gtrless: gtrless, gtrsim: gtrsim, gvertneqq: gvertneqq, gvnE: gvnE, hArr: hArr$1, hairsp: hairsp, half: half, hamilt: hamilt, hardcy: hardcy, harr: harr$1, harrcir: harrcir, harrw: harrw, hbar: hbar, hcirc: hcirc, hearts: hearts$1, heartsuit: heartsuit, hellip: hellip$1, hercon: hercon, hfr: hfr, hksearow: hksearow, hkswarow: hkswarow, hoarr: hoarr, homtht: homtht, hookleftarrow: hookleftarrow, hookrightarrow: hookrightarrow, hopf: hopf, horbar: horbar, hscr: hscr, hslash: hslash, hstrok: hstrok, hybull: hybull, hyphen: hyphen, iacut: iacut, iacute: iacute$1, ic: ic, icir: icir, icirc: icirc$1, icy: icy, iecy: iecy, iexc: iexc, iexcl: iexcl$1, iff: iff, ifr: ifr, igrav: igrav, igrave: igrave$1, ii: ii, iiiint: iiiint, iiint: iiint, iinfin: iinfin, iiota: iiota, ijlig: ijlig, imacr: imacr, image: image$3, imagline: imagline, imagpart: imagpart, imath: imath, imof: imof, imped: imped, incare: incare, infin: infin$1, infintie: infintie, inodot: inodot, int: int$1, intcal: intcal, integers: integers, intercal: intercal, intlarhk: intlarhk, intprod: intprod, iocy: iocy, iogon: iogon, iopf: iopf, iota: iota$1, iprod: iprod, iques: iques, iquest: iquest$1, iscr: iscr, isin: isin$1, isinE: isinE, isindot: isindot, isins: isins, isinsv: isinsv, isinv: isinv, it: it, itilde: itilde, iukcy: iukcy, ium: ium, iuml: iuml$1, jcirc: jcirc, jcy: jcy, jfr: jfr, jmath: jmath, jopf: jopf, jscr: jscr, jsercy: jsercy, jukcy: jukcy, kappa: kappa$1, kappav: kappav, kcedil: kcedil, kcy: kcy, kfr: kfr, kgreen: kgreen, khcy: khcy, kjcy: kjcy, kopf: kopf, kscr: kscr, lAarr: lAarr, lArr: lArr$1, lAtail: lAtail, lBarr: lBarr, lE: lE, lEg: lEg, lHar: lHar, lacute: lacute, laemptyv: laemptyv, lagran: lagran, lambda: lambda$1, lang: lang$1, langd: langd, langle: langle, lap: lap, laqu: laqu, laquo: laquo$1, larr: larr$1, larrb: larrb, larrbfs: larrbfs, larrfs: larrfs, larrhk: larrhk, larrlp: larrlp, larrpl: larrpl, larrsim: larrsim, larrtl: larrtl, lat: lat, latail: latail, late: late, lates: lates, lbarr: lbarr, lbbrk: lbbrk, lbrace: lbrace, lbrack: lbrack, lbrke: lbrke, lbrksld: lbrksld, lbrkslu: lbrkslu, lcaron: lcaron, lcedil: lcedil, lceil: lceil$1, lcub: lcub, lcy: lcy, ldca: ldca, ldquo: ldquo$1, ldquor: ldquor, ldrdhar: ldrdhar, ldrushar: ldrushar, ldsh: ldsh, le: le$1, leftarrow: leftarrow, leftarrowtail: leftarrowtail, leftharpoondown: leftharpoondown, leftharpoonup: leftharpoonup, leftleftarrows: leftleftarrows, leftrightarrow: leftrightarrow, leftrightarrows: leftrightarrows, leftrightharpoons: leftrightharpoons, leftrightsquigarrow: leftrightsquigarrow, leftthreetimes: leftthreetimes, leg: leg, leq: leq, leqq: leqq, leqslant: leqslant, les: les, lescc: lescc, lesdot: lesdot, lesdoto: lesdoto, lesdotor: lesdotor, lesg: lesg, lesges: lesges, lessapprox: lessapprox, lessdot: lessdot, lesseqgtr: lesseqgtr, lesseqqgtr: lesseqqgtr, lessgtr: lessgtr, lesssim: lesssim, lfisht: lfisht, lfloor: lfloor$1, lfr: lfr, lg: lg, lgE: lgE, lhard: lhard, lharu: lharu, lharul: lharul, lhblk: lhblk, ljcy: ljcy, ll: ll, llarr: llarr, llcorner: llcorner, llhard: llhard, lltri: lltri, lmidot: lmidot, lmoust: lmoust, lmoustache: lmoustache, lnE: lnE, lnap: lnap, lnapprox: lnapprox, lne: lne, lneq: lneq, lneqq: lneqq, lnsim: lnsim, loang: loang, loarr: loarr, lobrk: lobrk, longleftarrow: longleftarrow, longleftrightarrow: longleftrightarrow, longmapsto: longmapsto, longrightarrow: longrightarrow, looparrowleft: looparrowleft, looparrowright: looparrowright, lopar: lopar, lopf: lopf, loplus: loplus, lotimes: lotimes, lowast: lowast$1, lowbar: lowbar, loz: loz$1, lozenge: lozenge, lozf: lozf, lpar: lpar, lparlt: lparlt, lrarr: lrarr, lrcorner: lrcorner, lrhar: lrhar, lrhard: lrhard, lrm: lrm$1, lrtri: lrtri, lsaquo: lsaquo$1, lscr: lscr, lsh: lsh, lsim: lsim, lsime: lsime, lsimg: lsimg, lsqb: lsqb, lsquo: lsquo$1, lsquor: lsquor, lstrok: lstrok, l: l, lt: lt$1, ltcc: ltcc, ltcir: ltcir, ltdot: ltdot, lthree: lthree, ltimes: ltimes, ltlarr: ltlarr, ltquest: ltquest, ltrPar: ltrPar, ltri: ltri, ltrie: ltrie, ltrif: ltrif, lurdshar: lurdshar, luruhar: luruhar, lvertneqq: lvertneqq, lvnE: lvnE, mDDot: mDDot, mac: mac, macr: macr$1, male: male, malt: malt, maltese: maltese, map: map$1, mapsto: mapsto, mapstodown: mapstodown, mapstoleft: mapstoleft, mapstoup: mapstoup, marker: marker, mcomma: mcomma, mcy: mcy, mdash: mdash$1, measuredangle: measuredangle, mfr: mfr, mho: mho, micr: micr, micro: micro$1, mid: mid, midast: midast, midcir: midcir, middo: middo, middot: middot$1, minus: minus$1, minusb: minusb, minusd: minusd, minusdu: minusdu, mlcp: mlcp, mldr: mldr, mnplus: mnplus, models: models, mopf: mopf, mp: mp, mscr: mscr, mstpos: mstpos, mu: mu$1, multimap: multimap, mumap: mumap, nGg: nGg, nGt: nGt, nGtv: nGtv, nLeftarrow: nLeftarrow, nLeftrightarrow: nLeftrightarrow, nLl: nLl, nLt: nLt, nLtv: nLtv, nRightarrow: nRightarrow, nVDash: nVDash, nVdash: nVdash, nabla: nabla$1, nacute: nacute, nang: nang, nap: nap, napE: napE, napid: napid, napos: napos, napprox: napprox, natur: natur, natural: natural, naturals: naturals, nbs: nbs, nbsp: nbsp$1, nbump: nbump, nbumpe: nbumpe, ncap: ncap, ncaron: ncaron, ncedil: ncedil, ncong: ncong, ncongdot: ncongdot, ncup: ncup, ncy: ncy, ndash: ndash$1, ne: ne$1, neArr: neArr, nearhk: nearhk, nearr: nearr, nearrow: nearrow, nedot: nedot, nequiv: nequiv, nesear: nesear, nesim: nesim, nexist: nexist, nexists: nexists, nfr: nfr, ngE: ngE, nge: nge, ngeq: ngeq, ngeqq: ngeqq, ngeqslant: ngeqslant, nges: nges, ngsim: ngsim, ngt: ngt, ngtr: ngtr, nhArr: nhArr, nharr: nharr, nhpar: nhpar, ni: ni$1, nis: nis, nisd: nisd, niv: niv, njcy: njcy, nlArr: nlArr, nlE: nlE, nlarr: nlarr, nldr: nldr, nle: nle, nleftarrow: nleftarrow, nleftrightarrow: nleftrightarrow, nleq: nleq, nleqq: nleqq, nleqslant: nleqslant, nles: nles, nless: nless, nlsim: nlsim, nlt: nlt, nltri: nltri, nltrie: nltrie, nmid: nmid, nopf: nopf, no: no, not: not$1, notin: notin$1, notinE: notinE, notindot: notindot, notinva: notinva, notinvb: notinvb, notinvc: notinvc, notni: notni, notniva: notniva, notnivb: notnivb, notnivc: notnivc, npar: npar, nparallel: nparallel, nparsl: nparsl, npart: npart, npolint: npolint, npr: npr, nprcue: nprcue, npre: npre, nprec: nprec, npreceq: npreceq, nrArr: nrArr, nrarr: nrarr, nrarrc: nrarrc, nrarrw: nrarrw, nrightarrow: nrightarrow, nrtri: nrtri, nrtrie: nrtrie, nsc: nsc, nsccue: nsccue, nsce: nsce, nscr: nscr, nshortmid: nshortmid, nshortparallel: nshortparallel, nsim: nsim, nsime: nsime, nsimeq: nsimeq, nsmid: nsmid, nspar: nspar, nsqsube: nsqsube, nsqsupe: nsqsupe, nsub: nsub$1, nsubE: nsubE, nsube: nsube, nsubset: nsubset, nsubseteq: nsubseteq, nsubseteqq: nsubseteqq, nsucc: nsucc, nsucceq: nsucceq, nsup: nsup, nsupE: nsupE, nsupe: nsupe, nsupset: nsupset, nsupseteq: nsupseteq, nsupseteqq: nsupseteqq, ntgl: ntgl, ntild: ntild, ntilde: ntilde$1, ntlg: ntlg, ntriangleleft: ntriangleleft, ntrianglelefteq: ntrianglelefteq, ntriangleright: ntriangleright, ntrianglerighteq: ntrianglerighteq, nu: nu$1, num: num, numero: numero, numsp: numsp, nvDash: nvDash, nvHarr: nvHarr, nvap: nvap, nvdash: nvdash, nvge: nvge, nvgt: nvgt, nvinfin: nvinfin, nvlArr: nvlArr, nvle: nvle, nvlt: nvlt, nvltrie: nvltrie, nvrArr: nvrArr, nvrtrie: nvrtrie, nvsim: nvsim, nwArr: nwArr, nwarhk: nwarhk, nwarr: nwarr, nwarrow: nwarrow, nwnear: nwnear, oS: oS, oacut: oacut, oacute: oacute$1, oast: oast, ocir: ocir, ocirc: ocirc$1, ocy: ocy, odash: odash, odblac: odblac, odiv: odiv, odot: odot, odsold: odsold, oelig: oelig$1, ofcir: ofcir, ofr: ofr, ogon: ogon, ograv: ograv, ograve: ograve$1, ogt: ogt, ohbar: ohbar, ohm: ohm, oint: oint, olarr: olarr, olcir: olcir, olcross: olcross, oline: oline$1, olt: olt, omacr: omacr, omega: omega$1, omicron: omicron$1, omid: omid, ominus: ominus, oopf: oopf, opar: opar, operp: operp, oplus: oplus$1, or: or$1, orarr: orarr, ord: ord, order: order, orderof: orderof, ordf: ordf$1, ordm: ordm$1, origof: origof, oror: oror, orslope: orslope, orv: orv, oscr: oscr, oslas: oslas, oslash: oslash$1, osol: osol, otild: otild, otilde: otilde$1, otimes: otimes$1, otimesas: otimesas, oum: oum, ouml: ouml$1, ovbar: ovbar, par: par, para: para$1, parallel: parallel, parsim: parsim, parsl: parsl, part: part$1, pcy: pcy, percnt: percnt, period: period, permil: permil$1, perp: perp$1, pertenk: pertenk, pfr: pfr, phi: phi$1, phiv: phiv, phmmat: phmmat, phone: phone, pi: pi$1, pitchfork: pitchfork, piv: piv$1, planck: planck, planckh: planckh, plankv: plankv, plus: plus, plusacir: plusacir, plusb: plusb, pluscir: pluscir, plusdo: plusdo, plusdu: plusdu, pluse: pluse, plusm: plusm, plusmn: plusmn$1, plussim: plussim, plustwo: plustwo, pm: pm, pointint: pointint, popf: popf, poun: poun, pound: pound$1, pr: pr, prE: prE, prap: prap, prcue: prcue, pre: pre, prec: prec, precapprox: precapprox, preccurlyeq: preccurlyeq, preceq: preceq, precnapprox: precnapprox, precneqq: precneqq, precnsim: precnsim, precsim: precsim, prime: prime$1, primes: primes, prnE: prnE, prnap: prnap, prnsim: prnsim, prod: prod$1, profalar: profalar, profline: profline, profsurf: profsurf, prop: prop$1, propto: propto, prsim: prsim, prurel: prurel, pscr: pscr, psi: psi$1, puncsp: puncsp, qfr: qfr, qint: qint, qopf: qopf, qprime: qprime, qscr: qscr, quaternions: quaternions, quatint: quatint, quest: quest, questeq: questeq, quo: quo, quot: quot$1, rAarr: rAarr, rArr: rArr$1, rAtail: rAtail, rBarr: rBarr, rHar: rHar, race: race, racute: racute, radic: radic$1, raemptyv: raemptyv, rang: rang$1, rangd: rangd, range: range, rangle: rangle, raqu: raqu, raquo: raquo$1, rarr: rarr$1, rarrap: rarrap, rarrb: rarrb, rarrbfs: rarrbfs, rarrc: rarrc, rarrfs: rarrfs, rarrhk: rarrhk, rarrlp: rarrlp, rarrpl: rarrpl, rarrsim: rarrsim, rarrtl: rarrtl, rarrw: rarrw, ratail: ratail, ratio: ratio, rationals: rationals, rbarr: rbarr, rbbrk: rbbrk, rbrace: rbrace, rbrack: rbrack, rbrke: rbrke, rbrksld: rbrksld, rbrkslu: rbrkslu, rcaron: rcaron, rcedil: rcedil, rceil: rceil$1, rcub: rcub, rcy: rcy, rdca: rdca, rdldhar: rdldhar, rdquo: rdquo$1, rdquor: rdquor, rdsh: rdsh, real: real$1, realine: realine, realpart: realpart, reals: reals, rect: rect, re: re$3, reg: reg$1, rfisht: rfisht, rfloor: rfloor$1, rfr: rfr, rhard: rhard, rharu: rharu, rharul: rharul, rho: rho$1, rhov: rhov, rightarrow: rightarrow, rightarrowtail: rightarrowtail, rightharpoondown: rightharpoondown, rightharpoonup: rightharpoonup, rightleftarrows: rightleftarrows, rightleftharpoons: rightleftharpoons, rightrightarrows: rightrightarrows, rightsquigarrow: rightsquigarrow, rightthreetimes: rightthreetimes, ring: ring, risingdotseq: risingdotseq, rlarr: rlarr, rlhar: rlhar, rlm: rlm$1, rmoust: rmoust, rmoustache: rmoustache, rnmid: rnmid, roang: roang, roarr: roarr, robrk: robrk, ropar: ropar, ropf: ropf, roplus: roplus, rotimes: rotimes, rpar: rpar, rpargt: rpargt, rppolint: rppolint, rrarr: rrarr, rsaquo: rsaquo$1, rscr: rscr, rsh: rsh, rsqb: rsqb, rsquo: rsquo$1, rsquor: rsquor, rthree: rthree, rtimes: rtimes, rtri: rtri, rtrie: rtrie, rtrif: rtrif, rtriltri: rtriltri, ruluhar: ruluhar, rx: rx, sacute: sacute, sbquo: sbquo$1, sc: sc, scE: scE, scap: scap, scaron: scaron$1, sccue: sccue, sce: sce, scedil: scedil, scirc: scirc, scnE: scnE, scnap: scnap, scnsim: scnsim, scpolint: scpolint, scsim: scsim, scy: scy, sdot: sdot$1, sdotb: sdotb, sdote: sdote, seArr: seArr, searhk: searhk, searr: searr, searrow: searrow, sec: sec, sect: sect$1, semi: semi, seswar: seswar, setminus: setminus, setmn: setmn, sext: sext, sfr: sfr, sfrown: sfrown, sharp: sharp, shchcy: shchcy, shcy: shcy, shortmid: shortmid, shortparallel: shortparallel, sh: sh, shy: shy$1, sigma: sigma$1, sigmaf: sigmaf$1, sigmav: sigmav, sim: sim$1, simdot: simdot, sime: sime, simeq: simeq, simg: simg, simgE: simgE, siml: siml, simlE: simlE, simne: simne, simplus: simplus, simrarr: simrarr, slarr: slarr, smallsetminus: smallsetminus, smashp: smashp, smeparsl: smeparsl, smid: smid, smile: smile, smt: smt, smte: smte, smtes: smtes, softcy: softcy, sol: sol, solb: solb, solbar: solbar, sopf: sopf, spades: spades$1, spadesuit: spadesuit, spar: spar, sqcap: sqcap, sqcaps: sqcaps, sqcup: sqcup, sqcups: sqcups, sqsub: sqsub, sqsube: sqsube, sqsubset: sqsubset, sqsubseteq: sqsubseteq, sqsup: sqsup, sqsupe: sqsupe, sqsupset: sqsupset, sqsupseteq: sqsupseteq, squ: squ, square: square, squarf: squarf, squf: squf, srarr: srarr, sscr: sscr, ssetmn: ssetmn, ssmile: ssmile, sstarf: sstarf, star: star, starf: starf, straightepsilon: straightepsilon, straightphi: straightphi, strns: strns, sub: sub$1, subE: subE, subdot: subdot, sube: sube$1, subedot: subedot, submult: submult, subnE: subnE, subne: subne, subplus: subplus, subrarr: subrarr, subset: subset, subseteq: subseteq, subseteqq: subseteqq, subsetneq: subsetneq, subsetneqq: subsetneqq, subsim: subsim, subsub: subsub, subsup: subsup, succ: succ, succapprox: succapprox, succcurlyeq: succcurlyeq, succeq: succeq, succnapprox: succnapprox, succneqq: succneqq, succnsim: succnsim, succsim: succsim, sum: sum$1, sung: sung, sup: sup$1, sup1: sup1$1, sup2: sup2$1, sup3: sup3$1, supE: supE, supdot: supdot, supdsub: supdsub, supe: supe$1, supedot: supedot, suphsol: suphsol, suphsub: suphsub, suplarr: suplarr, supmult: supmult, supnE: supnE, supne: supne, supplus: supplus, supset: supset, supseteq: supseteq, supseteqq: supseteqq, supsetneq: supsetneq, supsetneqq: supsetneqq, supsim: supsim, supsub: supsub, supsup: supsup, swArr: swArr, swarhk: swarhk, swarr: swarr, swarrow: swarrow, swnwar: swnwar, szli: szli, szlig: szlig$1, target: target, tau: tau$1, tbrk: tbrk, tcaron: tcaron, tcedil: tcedil, tcy: tcy, tdot: tdot, telrec: telrec, tfr: tfr, there4: there4$1, therefore: therefore, theta: theta$1, thetasym: thetasym$1, thetav: thetav, thickapprox: thickapprox, thicksim: thicksim, thinsp: thinsp$1, thkap: thkap, thksim: thksim, thor: thor, thorn: thorn$1, tilde: tilde$4, time: time, times: times$1, timesb: timesb, timesbar: timesbar, timesd: timesd, tint: tint, toea: toea, top: top, topbot: topbot, topcir: topcir, topf: topf, topfork: topfork, tosa: tosa, tprime: tprime, trade: trade$1, triangle: triangle, triangledown: triangledown, triangleleft: triangleleft, trianglelefteq: trianglelefteq, triangleq: triangleq, triangleright: triangleright, trianglerighteq: trianglerighteq, tridot: tridot, trie: trie, triminus: triminus, triplus: triplus, trisb: trisb, tritime: tritime, trpezium: trpezium, tscr: tscr, tscy: tscy, tshcy: tshcy, tstrok: tstrok, twixt: twixt, twoheadleftarrow: twoheadleftarrow, twoheadrightarrow: twoheadrightarrow, uArr: uArr$1, uHar: uHar, uacut: uacut, uacute: uacute$1, uarr: uarr$1, ubrcy: ubrcy, ubreve: ubreve, ucir: ucir, ucirc: ucirc$1, ucy: ucy, udarr: udarr, udblac: udblac, udhar: udhar, ufisht: ufisht, ufr: ufr, ugrav: ugrav, ugrave: ugrave$1, uharl: uharl, uharr: uharr, uhblk: uhblk, ulcorn: ulcorn, ulcorner: ulcorner, ulcrop: ulcrop, ultri: ultri, umacr: umacr, um: um, uml: uml$1, uogon: uogon, uopf: uopf, uparrow: uparrow, updownarrow: updownarrow, upharpoonleft: upharpoonleft, upharpoonright: upharpoonright, uplus: uplus, upsi: upsi, upsih: upsih$1, upsilon: upsilon$1, upuparrows: upuparrows, urcorn: urcorn, urcorner: urcorner, urcrop: urcrop, uring: uring, urtri: urtri, uscr: uscr, utdot: utdot, utilde: utilde, utri: utri, utrif: utrif, uuarr: uuarr, uum: uum, uuml: uuml$1, uwangle: uwangle, vArr: vArr, vBar: vBar, vBarv: vBarv, vDash: vDash, vangrt: vangrt, varepsilon: varepsilon, varkappa: varkappa, varnothing: varnothing, varphi: varphi, varpi: varpi, varpropto: varpropto, varr: varr, varrho: varrho, varsigma: varsigma, varsubsetneq: varsubsetneq, varsubsetneqq: varsubsetneqq, varsupsetneq: varsupsetneq, varsupsetneqq: varsupsetneqq, vartheta: vartheta, vartriangleleft: vartriangleleft, vartriangleright: vartriangleright, vcy: vcy, vdash: vdash, vee: vee, veebar: veebar, veeeq: veeeq, vellip: vellip, verbar: verbar, vert: vert, vfr: vfr, vltri: vltri, vnsub: vnsub, vnsup: vnsup, vopf: vopf, vprop: vprop, vrtri: vrtri, vscr: vscr, vsubnE: vsubnE, vsubne: vsubne, vsupnE: vsupnE, vsupne: vsupne, vzigzag: vzigzag, wcirc: wcirc, wedbar: wedbar, wedge: wedge, wedgeq: wedgeq, weierp: weierp$1, wfr: wfr, wopf: wopf, wp: wp, wr: wr, wreath: wreath, wscr: wscr, xcap: xcap, xcirc: xcirc, xcup: xcup, xdtri: xdtri, xfr: xfr, xhArr: xhArr, xharr: xharr, xi: xi$1, xlArr: xlArr, xlarr: xlarr, xmap: xmap, xnis: xnis, xodot: xodot, xopf: xopf, xoplus: xoplus, xotime: xotime, xrArr: xrArr, xrarr: xrarr, xscr: xscr, xsqcup: xsqcup, xuplus: xuplus, xutri: xutri, xvee: xvee, xwedge: xwedge, yacut: yacut, yacute: yacute$1, yacy: yacy, ycirc: ycirc, ycy: ycy, ye: ye, yen: yen$1, yfr: yfr, yicy: yicy, yopf: yopf, yscr: yscr, yucy: yucy, yum: yum, yuml: yuml$1, zacute: zacute, zcaron: zcaron, zcy: zcy, zdot: zdot, zeetrf: zeetrf, zeta: zeta$1, zfr: zfr, zhcy: zhcy, zigrarr: zigrarr, zopf: zopf, zscr: zscr, zwj: zwj$1, zwnj: zwnj$1, 'default': index$3 }); var characterEntities = getCjsExportFromNamespace(characterEntities$1); var decodeEntity_1 = decodeEntity; var own$c = {}.hasOwnProperty; function decodeEntity(characters) { return own$c.call(characterEntities, characters) ? characterEntities[characters] : false } var legacy = getCjsExportFromNamespace(characterEntitiesLegacy); var invalid = getCjsExportFromNamespace(characterReferenceInvalid); var parseEntities_1 = parseEntities; var own$b = {}.hasOwnProperty; var fromCharCode = String.fromCharCode; var noop = Function.prototype; // Default settings. var defaults$3 = { warning: null, reference: null, text: null, warningContext: null, referenceContext: null, textContext: null, position: {}, additional: null, attribute: false, nonTerminated: true }; // Characters. var tab$e = 9; // '\t' var lineFeed$j = 10; // '\n' var formFeed = 12; // '\f' var space$j = 32; // ' ' var ampersand$1 = 38; // '&' var semicolon$1 = 59; // ';' var lessThan$8 = 60; // '<' var equalsTo$2 = 61; // '=' var numberSign$1 = 35; // '#' var uppercaseX = 88; // 'X' var lowercaseX$1 = 120; // 'x' var replacementCharacter = 65533; // '�' // Reference types. var name$1 = 'named'; var hexa = 'hexadecimal'; var deci = 'decimal'; // Map of bases. var bases = {}; bases[hexa] = 16; bases[deci] = 10; // Map of types to tests. // Each type of character reference accepts different characters. // This test is used to detect whether a reference has ended (as the semicolon // is not strictly needed). var tests = {}; tests[name$1] = isAlphanumerical; tests[deci] = isDecimal; tests[hexa] = isHexadecimal; // Warning types. var namedNotTerminated = 1; var numericNotTerminated = 2; var namedEmpty = 3; var numericEmpty = 4; var namedUnknown = 5; var numericDisallowed = 6; var numericProhibited = 7; // Warning messages. var messages = {}; messages[namedNotTerminated] = 'Named character references must be terminated by a semicolon'; messages[numericNotTerminated] = 'Numeric character references must be terminated by a semicolon'; messages[namedEmpty] = 'Named character references cannot be empty'; messages[numericEmpty] = 'Numeric character references cannot be empty'; messages[namedUnknown] = 'Named character references must be known'; messages[numericDisallowed] = 'Numeric character references cannot be disallowed'; messages[numericProhibited] = 'Numeric character references cannot be outside the permissible Unicode range'; // Wrap to ensure clean parameters are given to `parse`. function parseEntities(value, options) { var settings = {}; var option; var key; if (!options) { options = {}; } for (key in defaults$3) { option = options[key]; settings[key] = option === null || option === undefined ? defaults$3[key] : option; } if (settings.position.indent || settings.position.start) { settings.indent = settings.position.indent || []; settings.position = settings.position.start; } return parse$7(value, settings) } // Parse entities. // eslint-disable-next-line complexity function parse$7(value, settings) { var additional = settings.additional; var nonTerminated = settings.nonTerminated; var handleText = settings.text; var handleReference = settings.reference; var handleWarning = settings.warning; var textContext = settings.textContext; var referenceContext = settings.referenceContext; var warningContext = settings.warningContext; var pos = settings.position; var indent = settings.indent || []; var length = value.length; var index = 0; var lines = -1; var column = pos.column || 1; var line = pos.line || 1; var queue = ''; var result = []; var entityCharacters; var namedEntity; var terminated; var characters; var character; var reference; var following; var warning; var reason; var output; var entity; var begin; var start; var type; var test; var prev; var next; var diff; var end; if (typeof additional === 'string') { additional = additional.charCodeAt(0); } // Cache the current point. prev = now(); // Wrap `handleWarning`. warning = handleWarning ? parseError : noop; // Ensure the algorithm walks over the first character and the end // (inclusive). index--; length++; while (++index < length) { // If the previous character was a newline. if (character === lineFeed$j) { column = indent[lines] || 1; } character = value.charCodeAt(index); if (character === ampersand$1) { following = value.charCodeAt(index + 1); // The behaviour depends on the identity of the next character. if ( following === tab$e || following === lineFeed$j || following === formFeed || following === space$j || following === ampersand$1 || following === lessThan$8 || following !== following || (additional && following === additional) ) { // Not a character reference. // No characters are consumed, and nothing is returned. // This is not an error, either. queue += fromCharCode(character); column++; continue } start = index + 1; begin = start; end = start; if (following === numberSign$1) { // Numerical entity. end = ++begin; // The behaviour further depends on the next character. following = value.charCodeAt(end); if (following === uppercaseX || following === lowercaseX$1) { // ASCII hex digits. type = hexa; end = ++begin; } else { // ASCII digits. type = deci; } } else { // Named entity. type = name$1; } entityCharacters = ''; entity = ''; characters = ''; test = tests[type]; end--; while (++end < length) { following = value.charCodeAt(end); if (!test(following)) { break } characters += fromCharCode(following); // Check if we can match a legacy named reference. // If so, we cache that as the last viable named reference. // This ensures we do not need to walk backwards later. if (type === name$1 && own$b.call(legacy, characters)) { entityCharacters = characters; entity = legacy[characters]; } } terminated = value.charCodeAt(end) === semicolon$1; if (terminated) { end++; namedEntity = type === name$1 ? decodeEntity_1(characters) : false; if (namedEntity) { entityCharacters = characters; entity = namedEntity; } } diff = 1 + end - start; if (!terminated && !nonTerminated) ; else if (!characters) { // An empty (possible) entity is valid, unless it’s numeric (thus an // ampersand followed by an octothorp). if (type !== name$1) { warning(numericEmpty, diff); } } else if (type === name$1) { // An ampersand followed by anything unknown, and not terminated, is // invalid. if (terminated && !entity) { warning(namedUnknown, 1); } else { // If theres something after an entity name which is not known, cap // the reference. if (entityCharacters !== characters) { end = begin + entityCharacters.length; diff = 1 + end - begin; terminated = false; } // If the reference is not terminated, warn. if (!terminated) { reason = entityCharacters ? namedNotTerminated : namedEmpty; if (settings.attribute) { following = value.charCodeAt(end); if (following === equalsTo$2) { warning(reason, diff); entity = null; } else if (isAlphanumerical(following)) { entity = null; } else { warning(reason, diff); } } else { warning(reason, diff); } } } reference = entity; } else { if (!terminated) { // All non-terminated numeric entities are not rendered, and trigger a // warning. warning(numericNotTerminated, diff); } // When terminated and number, parse as either hexadecimal or decimal. reference = parseInt(characters, bases[type]); // Trigger a warning when the parsed number is prohibited, and replace // with replacement character. if (prohibited(reference)) { warning(numericProhibited, diff); reference = fromCharCode(replacementCharacter); } else if (reference in invalid) { // Trigger a warning when the parsed number is disallowed, and replace // by an alternative. warning(numericDisallowed, diff); reference = invalid[reference]; } else { // Parse the number. output = ''; // Trigger a warning when the parsed number should not be used. if (disallowed(reference)) { warning(numericDisallowed, diff); } // Stringify the number. if (reference > 0xffff) { reference -= 0x10000; output += fromCharCode((reference >>> (10 & 0x3ff)) | 0xd800); reference = 0xdc00 | (reference & 0x3ff); } reference = output + fromCharCode(reference); } } // Found it! // First eat the queued characters as normal text, then eat an entity. if (reference) { flush(); prev = now(); index = end - 1; column += end - start + 1; result.push(reference); next = now(); next.offset++; if (handleReference) { handleReference.call( referenceContext, reference, {start: prev, end: next}, value.slice(start - 1, end) ); } prev = next; } else { // If we could not find a reference, queue the checked characters (as // normal characters), and move the pointer to their end. // This is possible because we can be certain neither newlines nor // ampersands are included. characters = value.slice(start - 1, end); queue += characters; column += characters.length; index = end - 1; } } else { // Handle anything other than an ampersand, including newlines and EOF. if ( character === 10 // Line feed ) { line++; lines++; column = 0; } if (character === character) { queue += fromCharCode(character); column++; } else { flush(); } } } // Return the reduced nodes. return result.join('') // Get current position. function now() { return { line: line, column: column, offset: index + (pos.offset || 0) } } // “Throw” a parse-error: a warning. function parseError(code, offset) { var position = now(); position.column += offset; position.offset += offset; handleWarning.call(warningContext, messages[code], position, code); } // Flush `queue` (normal text). // Macro invoked before each entity and at the end of `value`. // Does nothing when `queue` is empty. function flush() { if (queue) { result.push(queue); if (handleText) { handleText.call(textContext, queue, {start: prev, end: now()}); } queue = ''; } } } // Check if `character` is outside the permissible unicode range. function prohibited(code) { return (code >= 0xd800 && code <= 0xdfff) || code > 0x10ffff } // Check if `character` is disallowed. function disallowed(code) { return ( (code >= 0x0001 && code <= 0x0008) || code === 0x000b || (code >= 0x000d && code <= 0x001f) || (code >= 0x007f && code <= 0x009f) || (code >= 0xfdd0 && code <= 0xfdef) || (code & 0xffff) === 0xffff || (code & 0xffff) === 0xfffe ) } var decode = factory$3; // Factory to create an entity decoder. function factory$3(ctx) { decoder.raw = decodeRaw; return decoder // Normalize `position` to add an `indent`. function normalize(position) { var offsets = ctx.offset; var line = position.line; var result = []; while (++line) { if (!(line in offsets)) { break } result.push((offsets[line] || 0) + 1); } return {start: position, indent: result} } // Decode `value` (at `position`) into text-nodes. function decoder(value, position, handler) { parseEntities_1(value, { position: normalize(position), warning: handleWarning, text: handler, reference: handler, textContext: ctx, referenceContext: ctx }); } // Decode `value` (at `position`) into a string. function decodeRaw(value, position, options) { return parseEntities_1( value, immutable(options, {position: normalize(position), warning: handleWarning}) ) } // Handle a warning. // See for the warnings. function handleWarning(reason, position, code) { if (code !== 3) { ctx.file.message(reason, position); } } } var tokenizer$1 = factory$2; // Construct a tokenizer. This creates both `tokenizeInline` and `tokenizeBlock`. function factory$2(type) { return tokenize // Tokenizer for a bound `type`. function tokenize(value, location) { var self = this; var offset = self.offset; var tokens = []; var methods = self[type + 'Methods']; var tokenizers = self[type + 'Tokenizers']; var line = location.line; var column = location.column; var index; var length; var method; var name; var matched; var valueLength; // Trim white space only lines. if (!value) { return tokens } // Expose on `eat`. eat.now = now; eat.file = self.file; // Sync initial offset. updatePosition(''); // Iterate over `value`, and iterate over all tokenizers. When one eats // something, re-iterate with the remaining value. If no tokenizer eats, // something failed (should not happen) and an exception is thrown. while (value) { index = -1; length = methods.length; matched = false; while (++index < length) { name = methods[index]; method = tokenizers[name]; // Previously, we had constructs such as footnotes and YAML that used // these properties. // Those are now external (plus there are userland extensions), that may // still use them. if ( method && /* istanbul ignore next */ (!method.onlyAtStart || self.atStart) && /* istanbul ignore next */ (!method.notInList || !self.inList) && /* istanbul ignore next */ (!method.notInBlock || !self.inBlock) && (!method.notInLink || !self.inLink) ) { valueLength = value.length; method.apply(self, [eat, value]); matched = valueLength !== value.length; if (matched) { break } } } /* istanbul ignore if */ if (!matched) { self.file.fail(new Error('Infinite loop'), eat.now()); } } self.eof = now(); return tokens // Update line, column, and offset based on `value`. function updatePosition(subvalue) { var lastIndex = -1; var index = subvalue.indexOf('\n'); while (index !== -1) { line++; lastIndex = index; index = subvalue.indexOf('\n', index + 1); } if (lastIndex === -1) { column += subvalue.length; } else { column = subvalue.length - lastIndex; } if (line in offset) { if (lastIndex !== -1) { column += offset[line]; } else if (column <= offset[line]) { column = offset[line] + 1; } } } // Get offset. Called before the first character is eaten to retrieve the // range’s offsets. function getOffset() { var indentation = []; var pos = line + 1; // Done. Called when the last character is eaten to retrieve the range’s // offsets. return function () { var last = line + 1; while (pos < last) { indentation.push((offset[pos] || 0) + 1); pos++; } return indentation } } // Get the current position. function now() { var pos = {line: line, column: column}; pos.offset = self.toOffset(pos); return pos } // Store position information for a node. function Position(start) { this.start = start; this.end = now(); } // Throw when a value is incorrectly eaten. This shouldn’t happen but will // throw on new, incorrect rules. function validateEat(subvalue) { /* istanbul ignore if */ if (value.slice(0, subvalue.length) !== subvalue) { // Capture stack-trace. self.file.fail( new Error( 'Incorrectly eaten value: please report this warning on https://git.io/vg5Ft' ), now() ); } } // Mark position and patch `node.position`. function position() { var before = now(); return update // Add the position to a node. function update(node, indent) { var previous = node.position; var start = previous ? previous.start : before; var combined = []; var n = previous && previous.end.line; var l = before.line; node.position = new Position(start); // If there was already a `position`, this node was merged. Fixing // `start` wasn’t hard, but the indent is different. Especially // because some information, the indent between `n` and `l` wasn’t // tracked. Luckily, that space is (should be?) empty, so we can // safely check for it now. if (previous && indent && previous.indent) { combined = previous.indent; if (n < l) { while (++n < l) { combined.push((offset[n] || 0) + 1); } combined.push(before.column); } indent = combined.concat(indent); } node.position.indent = indent || []; return node } } // Add `node` to `parent`s children or to `tokens`. Performs merges where // possible. function add(node, parent) { var children = parent ? parent.children : tokens; var previous = children[children.length - 1]; var fn; if ( previous && node.type === previous.type && (node.type === 'text' || node.type === 'blockquote') && mergeable(previous) && mergeable(node) ) { fn = node.type === 'text' ? mergeText : mergeBlockquote; node = fn.call(self, previous, node); } if (node !== previous) { children.push(node); } if (self.atStart && tokens.length !== 0) { self.exitStart(); } return node } // Remove `subvalue` from `value`. `subvalue` must be at the start of // `value`. function eat(subvalue) { var indent = getOffset(); var pos = position(); var current = now(); validateEat(subvalue); apply.reset = reset; reset.test = test; apply.test = test; value = value.slice(subvalue.length); updatePosition(subvalue); indent = indent(); return apply // Add the given arguments, add `position` to the returned node, and // return the node. function apply(node, parent) { return pos(add(pos(node), parent), indent) } // Functions just like apply, but resets the content: the line and // column are reversed, and the eaten value is re-added. This is // useful for nodes with a single type of content, such as lists and // tables. See `apply` above for what parameters are expected. function reset() { var node = apply.apply(null, arguments); line = current.line; column = current.column; value = subvalue + value; return node } // Test the position, after eating, and reverse to a not-eaten state. function test() { var result = pos({}); line = current.line; column = current.column; value = subvalue + value; return result.position } } } } // Check whether a node is mergeable with adjacent nodes. function mergeable(node) { var start; var end; if (node.type !== 'text' || !node.position) { return true } start = node.position.start; end = node.position.end; // Only merge nodes which occupy the same size as their `value`. return ( start.line !== end.line || end.column - start.column === node.value.length ) } // Merge two text nodes: `node` into `prev`. function mergeText(previous, node) { previous.value += node.value; return previous } // Merge two blockquotes: `node` into `prev`, unless in CommonMark or gfm modes. function mergeBlockquote(previous, node) { if (this.options.commonmark || this.options.gfm) { return node } previous.children = previous.children.concat(node.children); return previous } var markdownEscapes = escapes$1; var defaults$2 = [ '\\', '`', '*', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!', '_', '>' ]; var gfm = defaults$2.concat(['~', '|']); var commonmark = gfm.concat([ '\n', '"', '$', '%', '&', "'", ',', '/', ':', ';', '<', '=', '?', '@', '^' ]); escapes$1.default = defaults$2; escapes$1.gfm = gfm; escapes$1.commonmark = commonmark; // Get markdown escapes. function escapes$1(options) { var settings = options || {}; if (settings.commonmark) { return commonmark } return settings.gfm ? gfm : defaults$2 } var blockElements = [ 'address', 'article', 'aside', 'base', 'basefont', 'blockquote', 'body', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dialog', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'legend', 'li', 'link', 'main', 'menu', 'menuitem', 'meta', 'nav', 'noframes', 'ol', 'optgroup', 'option', 'p', 'param', 'pre', 'section', 'source', 'title', 'summary', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul' ]; var defaults$1 = { position: true, gfm: true, commonmark: false, pedantic: false, blocks: blockElements }; var setOptions_1 = setOptions; function setOptions(options) { var self = this; var current = self.options; var key; var value; if (options == null) { options = {}; } else if (typeof options === 'object') { options = immutable(options); } else { throw new Error('Invalid value `' + options + '` for setting `options`') } for (key in defaults$1) { value = options[key]; if (value == null) { value = current[key]; } if ( (key !== 'blocks' && typeof value !== 'boolean') || (key === 'blocks' && typeof value !== 'object') ) { throw new Error( 'Invalid value `' + value + '` for setting `options.' + key + '`' ) } options[key] = value; } self.options = options; self.escape = markdownEscapes(options); return self } var convert_1 = convert$1; function convert$1(test) { if (test == null) { return ok$1 } if (typeof test === 'string') { return typeFactory$1(test) } if (typeof test === 'object') { return 'length' in test ? anyFactory$1(test) : allFactory(test) } if (typeof test === 'function') { return test } throw new Error('Expected function, string, or object as test') } // Utility assert each property in `test` is represented in `node`, and each // values are strictly equal. function allFactory(test) { return all function all(node) { var key; for (key in test) { if (node[key] !== test[key]) return false } return true } } function anyFactory$1(tests) { var checks = []; var index = -1; while (++index < tests.length) { checks[index] = convert$1(tests[index]); } return any function any() { var index = -1; while (++index < checks.length) { if (checks[index].apply(this, arguments)) { return true } } return false } } // Utility to convert a string into a function which checks a given node’s type // for said string. function typeFactory$1(test) { return type function type(node) { return Boolean(node && node.type === test) } } // Utility to return true. function ok$1() { return true } var color_1 = color; function color(d) { return '\u001B[33m' + d + '\u001B[39m' } var unistUtilVisitParents = visitParents; var CONTINUE$1 = true; var SKIP$1 = 'skip'; var EXIT$1 = false; visitParents.CONTINUE = CONTINUE$1; visitParents.SKIP = SKIP$1; visitParents.EXIT = EXIT$1; function visitParents(tree, test, visitor, reverse) { var step; var is; if (typeof test === 'function' && typeof visitor !== 'function') { reverse = visitor; visitor = test; test = null; } is = convert_1(test); step = reverse ? -1 : 1; factory(tree, null, [])(); function factory(node, index, parents) { var value = typeof node === 'object' && node !== null ? node : {}; var name; if (typeof value.type === 'string') { name = typeof value.tagName === 'string' ? value.tagName : typeof value.name === 'string' ? value.name : undefined; visit.displayName = 'node (' + color_1(value.type + (name ? '<' + name + '>' : '')) + ')'; } return visit function visit() { var grandparents = parents.concat(node); var result = []; var subresult; var offset; if (!test || is(node, index, parents[parents.length - 1] || null)) { result = toResult(visitor(node, parents)); if (result[0] === EXIT$1) { return result } } if (node.children && result[0] !== SKIP$1) { offset = (reverse ? node.children.length : -1) + step; while (offset > -1 && offset < node.children.length) { subresult = factory(node.children[offset], offset, grandparents)(); if (subresult[0] === EXIT$1) { return subresult } offset = typeof subresult[1] === 'number' ? subresult[1] : offset + step; } } return result } } } function toResult(value) { if (value !== null && typeof value === 'object' && 'length' in value) { return value } if (typeof value === 'number') { return [CONTINUE$1, value] } return [value] } var unistUtilVisit = visit; var CONTINUE = unistUtilVisitParents.CONTINUE; var SKIP = unistUtilVisitParents.SKIP; var EXIT = unistUtilVisitParents.EXIT; visit.CONTINUE = CONTINUE; visit.SKIP = SKIP; visit.EXIT = EXIT; function visit(tree, test, visitor, reverse) { if (typeof test === 'function' && typeof visitor !== 'function') { reverse = visitor; visitor = test; test = null; } unistUtilVisitParents(tree, test, overload, reverse); function overload(node, parents) { var parent = parents[parents.length - 1]; var index = parent ? parent.children.indexOf(node) : null; return visitor(node, index, parent) } } var unistUtilRemovePosition = removePosition; function removePosition(node, force) { unistUtilVisit(node, force ? hard : soft); return node } function hard(node) { delete node.position; } function soft(node) { node.position = undefined; } var parse_1$2 = parse$6; var lineFeed$i = '\n'; var lineBreaksExpression = /\r\n|\r/g; // Parse the bound file. function parse$6() { var self = this; var value = String(self.file); var start = {line: 1, column: 1, offset: 0}; var content = immutable(start); var node; // Clean non-unix newlines: `\r\n` and `\r` are all changed to `\n`. // This should not affect positional information. value = value.replace(lineBreaksExpression, lineFeed$i); // BOM. if (value.charCodeAt(0) === 0xfeff) { value = value.slice(1); content.column++; content.offset++; } node = { type: 'root', children: self.tokenizeBlock(value, content), position: {start: start, end: self.eof || immutable(start)} }; if (!self.options.position) { unistUtilRemovePosition(node, true); } return node } // A line containing no characters, or a line containing only spaces (U+0020) or // tabs (U+0009), is called a blank line. // See . var reBlankLine = /^[ \t]*(\n|$)/; // Note that though blank lines play a special role in lists to determine // whether the list is tight or loose // (), it’s done by the list // tokenizer and this blank line tokenizer does not have to be responsible for // that. // Therefore, configs such as `blankLine.notInList` do not have to be set here. var blankLine_1 = blankLine; function blankLine(eat, value, silent) { var match; var subvalue = ''; var index = 0; var length = value.length; while (index < length) { match = reBlankLine.exec(value.slice(index)); if (match == null) { break } index += match[0].length; subvalue += match[0]; } if (subvalue === '') { return } /* istanbul ignore if - never used (yet) */ if (silent) { return true } eat(subvalue); } /*! * repeat-string * * Copyright (c) 2014-2015, Jon Schlinkert. * Licensed under the MIT License. */ /** * Results cache */ var res = ''; var cache; /** * Expose `repeat` */ var repeatString = repeat$1; /** * Repeat the given `string` the specified `number` * of times. * * **Example:** * * ```js * var repeat = require('repeat-string'); * repeat('A', 5); * //=> AAAAA * ``` * * @param {String} `string` The string to repeat * @param {Number} `number` The number of times to repeat the string * @return {String} Repeated string * @api public */ function repeat$1(str, num) { if (typeof str !== 'string') { throw new TypeError('expected a string'); } // cover common, quick use cases if (num === 1) return str; if (num === 2) return str + str; var max = str.length * num; if (cache !== str || typeof cache === 'undefined') { cache = str; res = ''; } else if (res.length >= max) { return res.substr(0, max); } while (max > res.length && num > 1) { if (num & 1) { res += str; } num >>= 1; str += str; } res += str; res = res.substr(0, max); return res; } var trimTrailingLines_1 = trimTrailingLines; var line = '\n'; // Remove final newline characters from `value`. function trimTrailingLines(value) { var val = String(value); var index = val.length; while (val.charAt(--index) === line) { // Empty } return val.slice(0, index + 1) } var codeIndented = indentedCode$1; var lineFeed$h = '\n'; var tab$d = '\t'; var space$i = ' '; var tabSize$4 = 4; var codeIndent = repeatString(space$i, tabSize$4); function indentedCode$1(eat, value, silent) { var index = -1; var length = value.length; var subvalue = ''; var content = ''; var subvalueQueue = ''; var contentQueue = ''; var character; var blankQueue; var indent; while (++index < length) { character = value.charAt(index); if (indent) { indent = false; subvalue += subvalueQueue; content += contentQueue; subvalueQueue = ''; contentQueue = ''; if (character === lineFeed$h) { subvalueQueue = character; contentQueue = character; } else { subvalue += character; content += character; while (++index < length) { character = value.charAt(index); if (!character || character === lineFeed$h) { contentQueue = character; subvalueQueue = character; break } subvalue += character; content += character; } } } else if ( character === space$i && value.charAt(index + 1) === character && value.charAt(index + 2) === character && value.charAt(index + 3) === character ) { subvalueQueue += codeIndent; index += 3; indent = true; } else if (character === tab$d) { subvalueQueue += character; indent = true; } else { blankQueue = ''; while (character === tab$d || character === space$i) { blankQueue += character; character = value.charAt(++index); } if (character !== lineFeed$h) { break } subvalueQueue += blankQueue + character; contentQueue += character; } } if (content) { if (silent) { return true } return eat(subvalue)({ type: 'code', lang: null, meta: null, value: trimTrailingLines_1(content) }) } } var codeFenced = fencedCode; var lineFeed$g = '\n'; var tab$c = '\t'; var space$h = ' '; var tilde$3 = '~'; var graveAccent$2 = '`'; var minFenceCount = 3; var tabSize$3 = 4; function fencedCode(eat, value, silent) { var self = this; var gfm = self.options.gfm; var length = value.length + 1; var index = 0; var subvalue = ''; var fenceCount; var marker; var character; var flag; var lang; var meta; var queue; var content; var exdentedContent; var closing; var exdentedClosing; var indent; var now; if (!gfm) { return } // Eat initial spacing. while (index < length) { character = value.charAt(index); if (character !== space$h && character !== tab$c) { break } subvalue += character; index++; } indent = index; // Eat the fence. character = value.charAt(index); if (character !== tilde$3 && character !== graveAccent$2) { return } index++; marker = character; fenceCount = 1; subvalue += character; while (index < length) { character = value.charAt(index); if (character !== marker) { break } subvalue += character; fenceCount++; index++; } if (fenceCount < minFenceCount) { return } // Eat spacing before flag. while (index < length) { character = value.charAt(index); if (character !== space$h && character !== tab$c) { break } subvalue += character; index++; } // Eat flag. flag = ''; queue = ''; while (index < length) { character = value.charAt(index); if ( character === lineFeed$g || (marker === graveAccent$2 && character === marker) ) { break } if (character === space$h || character === tab$c) { queue += character; } else { flag += queue + character; queue = ''; } index++; } character = value.charAt(index); if (character && character !== lineFeed$g) { return } if (silent) { return true } now = eat.now(); now.column += subvalue.length; now.offset += subvalue.length; subvalue += flag; flag = self.decode.raw(self.unescape(flag), now); if (queue) { subvalue += queue; } queue = ''; closing = ''; exdentedClosing = ''; content = ''; exdentedContent = ''; var skip = true; // Eat content. while (index < length) { character = value.charAt(index); content += closing; exdentedContent += exdentedClosing; closing = ''; exdentedClosing = ''; if (character !== lineFeed$g) { content += character; exdentedClosing += character; index++; continue } // The first line feed is ignored. Others aren’t. if (skip) { subvalue += character; skip = false; } else { closing += character; exdentedClosing += character; } queue = ''; index++; while (index < length) { character = value.charAt(index); if (character !== space$h) { break } queue += character; index++; } closing += queue; exdentedClosing += queue.slice(indent); if (queue.length >= tabSize$3) { continue } queue = ''; while (index < length) { character = value.charAt(index); if (character !== marker) { break } queue += character; index++; } closing += queue; exdentedClosing += queue; if (queue.length < fenceCount) { continue } queue = ''; while (index < length) { character = value.charAt(index); if (character !== space$h && character !== tab$c) { break } closing += character; exdentedClosing += character; index++; } if (!character || character === lineFeed$g) { break } } subvalue += content + closing; // Get lang and meta from the flag. index = -1; length = flag.length; while (++index < length) { character = flag.charAt(index); if (character === space$h || character === tab$c) { if (!lang) { lang = flag.slice(0, index); } } else if (lang) { meta = flag.slice(index); break } } return eat(subvalue)({ type: 'code', lang: lang || flag || null, meta: meta || null, value: exdentedContent }) } var trim_1 = createCommonjsModule(function (module, exports) { exports = module.exports = trim; function trim(str){ return str.replace(/^\s*|\s*$/g, ''); } exports.left = function(str){ return str.replace(/^\s*/, ''); }; exports.right = function(str){ return str.replace(/\s*$/, ''); }; }); trim_1.left; trim_1.right; var interrupt_1 = interrupt; function interrupt(interruptors, tokenizers, ctx, parameters) { var length = interruptors.length; var index = -1; var interruptor; var config; while (++index < length) { interruptor = interruptors[index]; config = interruptor[1] || {}; if ( config.pedantic !== undefined && config.pedantic !== ctx.options.pedantic ) { continue } if ( config.commonmark !== undefined && config.commonmark !== ctx.options.commonmark ) { continue } if (tokenizers[interruptor[0]].apply(ctx, parameters)) { return true } } return false } var blockquote_1$1 = blockquote$1; var lineFeed$f = '\n'; var tab$b = '\t'; var space$g = ' '; var greaterThan$4 = '>'; function blockquote$1(eat, value, silent) { var self = this; var offsets = self.offset; var tokenizers = self.blockTokenizers; var interruptors = self.interruptBlockquote; var now = eat.now(); var currentLine = now.line; var length = value.length; var values = []; var contents = []; var indents = []; var add; var index = 0; var character; var rest; var nextIndex; var content; var line; var startIndex; var prefixed; var exit; while (index < length) { character = value.charAt(index); if (character !== space$g && character !== tab$b) { break } index++; } if (value.charAt(index) !== greaterThan$4) { return } if (silent) { return true } index = 0; while (index < length) { nextIndex = value.indexOf(lineFeed$f, index); startIndex = index; prefixed = false; if (nextIndex === -1) { nextIndex = length; } while (index < length) { character = value.charAt(index); if (character !== space$g && character !== tab$b) { break } index++; } if (value.charAt(index) === greaterThan$4) { index++; prefixed = true; if (value.charAt(index) === space$g) { index++; } } else { index = startIndex; } content = value.slice(index, nextIndex); if (!prefixed && !trim_1(content)) { index = startIndex; break } if (!prefixed) { rest = value.slice(index); // Check if the following code contains a possible block. if (interrupt_1(interruptors, tokenizers, self, [eat, rest, true])) { break } } line = startIndex === index ? content : value.slice(startIndex, nextIndex); indents.push(index - startIndex); values.push(line); contents.push(content); index = nextIndex + 1; } index = -1; length = indents.length; add = eat(values.join(lineFeed$f)); while (++index < length) { offsets[currentLine] = (offsets[currentLine] || 0) + indents[index]; currentLine++; } exit = self.enterBlock(); contents = self.tokenizeBlock(contents.join(lineFeed$f), now); exit(); return add({type: 'blockquote', children: contents}) } var headingAtx = atxHeading; var lineFeed$e = '\n'; var tab$a = '\t'; var space$f = ' '; var numberSign = '#'; var maxFenceCount = 6; function atxHeading(eat, value, silent) { var self = this; var pedantic = self.options.pedantic; var length = value.length + 1; var index = -1; var now = eat.now(); var subvalue = ''; var content = ''; var character; var queue; var depth; // Eat initial spacing. while (++index < length) { character = value.charAt(index); if (character !== space$f && character !== tab$a) { index--; break } subvalue += character; } // Eat hashes. depth = 0; while (++index <= length) { character = value.charAt(index); if (character !== numberSign) { index--; break } subvalue += character; depth++; } if (depth > maxFenceCount) { return } if (!depth || (!pedantic && value.charAt(index + 1) === numberSign)) { return } length = value.length + 1; // Eat intermediate white-space. queue = ''; while (++index < length) { character = value.charAt(index); if (character !== space$f && character !== tab$a) { index--; break } queue += character; } // Exit when not in pedantic mode without spacing. if (!pedantic && queue.length === 0 && character && character !== lineFeed$e) { return } if (silent) { return true } // Eat content. subvalue += queue; queue = ''; content = ''; while (++index < length) { character = value.charAt(index); if (!character || character === lineFeed$e) { break } if (character !== space$f && character !== tab$a && character !== numberSign) { content += queue + character; queue = ''; continue } while (character === space$f || character === tab$a) { queue += character; character = value.charAt(++index); } // `#` without a queue is part of the content. if (!pedantic && content && !queue && character === numberSign) { content += character; continue } while (character === numberSign) { queue += character; character = value.charAt(++index); } while (character === space$f || character === tab$a) { queue += character; character = value.charAt(++index); } index--; } now.column += subvalue.length; now.offset += subvalue.length; subvalue += content + queue; return eat(subvalue)({ type: 'heading', depth: depth, children: self.tokenizeInline(content, now) }) } var thematicBreak_1$1 = thematicBreak$1; var tab$9 = '\t'; var lineFeed$d = '\n'; var space$e = ' '; var asterisk$4 = '*'; var dash$7 = '-'; var underscore$6 = '_'; var maxCount = 3; function thematicBreak$1(eat, value, silent) { var index = -1; var length = value.length + 1; var subvalue = ''; var character; var marker; var markerCount; var queue; while (++index < length) { character = value.charAt(index); if (character !== tab$9 && character !== space$e) { break } subvalue += character; } if ( character !== asterisk$4 && character !== dash$7 && character !== underscore$6 ) { return } marker = character; subvalue += character; markerCount = 1; queue = ''; while (++index < length) { character = value.charAt(index); if (character === marker) { markerCount++; subvalue += queue + marker; queue = ''; } else if (character === space$e) { queue += character; } else if ( markerCount >= maxCount && (!character || character === lineFeed$d) ) { subvalue += queue; if (silent) { return true } return eat(subvalue)({type: 'thematicBreak'}) } else { return } } } var getIndentation = indentation$1; var tab$8 = '\t'; var space$d = ' '; var spaceSize = 1; var tabSize$2 = 4; // Gets indentation information for a line. function indentation$1(value) { var index = 0; var indent = 0; var character = value.charAt(index); var stops = {}; var size; var lastIndent = 0; while (character === tab$8 || character === space$d) { size = character === tab$8 ? tabSize$2 : spaceSize; indent += size; if (size > 1) { indent = Math.floor(indent / size) * size; } while (lastIndent < indent) { stops[++lastIndent] = index; } character = value.charAt(++index); } return {indent: indent, stops: stops} } var removeIndentation = indentation; var lineFeed$c = '\n'; var space$c = ' '; var exclamationMark$4 = '!'; // Remove the minimum indent from every line in `value`. Supports both tab, // spaced, and mixed indentation (as well as possible). function indentation(value, maximum) { var values = value.split(lineFeed$c); var position = values.length + 1; var minIndent = Infinity; var matrix = []; var index; var indentation; var stops; values.unshift(repeatString(space$c, maximum) + exclamationMark$4); while (position--) { indentation = getIndentation(values[position]); matrix[position] = indentation.stops; if (trim_1(values[position]).length === 0) { continue } if (indentation.indent) { if (indentation.indent > 0 && indentation.indent < minIndent) { minIndent = indentation.indent; } } else { minIndent = Infinity; break } } if (minIndent !== Infinity) { position = values.length; while (position--) { stops = matrix[position]; index = minIndent; while (index && !(index in stops)) { index--; } values[position] = values[position].slice(stops[index] + 1); } } values.shift(); return values.join(lineFeed$c) } var list_1$1 = list$1; var asterisk$3 = '*'; var underscore$5 = '_'; var plusSign$2 = '+'; var dash$6 = '-'; var dot$3 = '.'; var space$b = ' '; var lineFeed$b = '\n'; var tab$7 = '\t'; var rightParenthesis$3 = ')'; var lowercaseX = 'x'; var tabSize$1 = 4; var looseListItemExpression = /\n\n(?!\s*$)/; var taskItemExpression = /^\[([ X\tx])][ \t]/; var bulletExpression = /^([ \t]*)([*+-]|\d+[.)])( {1,4}(?! )| |\t|$|(?=\n))([^\n]*)/; var pedanticBulletExpression = /^([ \t]*)([*+-]|\d+[.)])([ \t]+)/; var initialIndentExpression = /^( {1,4}|\t)?/gm; function list$1(eat, value, silent) { var self = this; var commonmark = self.options.commonmark; var pedantic = self.options.pedantic; var tokenizers = self.blockTokenizers; var interuptors = self.interruptList; var index = 0; var length = value.length; var start = null; var size; var queue; var ordered; var character; var marker; var nextIndex; var startIndex; var prefixed; var currentMarker; var content; var line; var previousEmpty; var empty; var items; var allLines; var emptyLines; var item; var enterTop; var exitBlockquote; var spread = false; var node; var now; var end; var indented; while (index < length) { character = value.charAt(index); if (character !== tab$7 && character !== space$b) { break } index++; } character = value.charAt(index); if (character === asterisk$3 || character === plusSign$2 || character === dash$6) { marker = character; ordered = false; } else { ordered = true; queue = ''; while (index < length) { character = value.charAt(index); if (!isDecimal(character)) { break } queue += character; index++; } character = value.charAt(index); if ( !queue || !(character === dot$3 || (commonmark && character === rightParenthesis$3)) ) { return } /* Slightly abusing `silent` mode, whose goal is to make interrupting * paragraphs work. * Well, that’s exactly what we want to do here: don’t interrupt: * 2. here, because the “list” doesn’t start with `1`. */ if (silent && queue !== '1') { return } start = parseInt(queue, 10); marker = character; } character = value.charAt(++index); if ( character !== space$b && character !== tab$7 && (pedantic || (character !== lineFeed$b && character !== '')) ) { return } if (silent) { return true } index = 0; items = []; allLines = []; emptyLines = []; while (index < length) { nextIndex = value.indexOf(lineFeed$b, index); startIndex = index; prefixed = false; indented = false; if (nextIndex === -1) { nextIndex = length; } size = 0; while (index < length) { character = value.charAt(index); if (character === tab$7) { size += tabSize$1 - (size % tabSize$1); } else if (character === space$b) { size++; } else { break } index++; } if (item && size >= item.indent) { indented = true; } character = value.charAt(index); currentMarker = null; if (!indented) { if ( character === asterisk$3 || character === plusSign$2 || character === dash$6 ) { currentMarker = character; index++; size++; } else { queue = ''; while (index < length) { character = value.charAt(index); if (!isDecimal(character)) { break } queue += character; index++; } character = value.charAt(index); index++; if ( queue && (character === dot$3 || (commonmark && character === rightParenthesis$3)) ) { currentMarker = character; size += queue.length + 1; } } if (currentMarker) { character = value.charAt(index); if (character === tab$7) { size += tabSize$1 - (size % tabSize$1); index++; } else if (character === space$b) { end = index + tabSize$1; while (index < end) { if (value.charAt(index) !== space$b) { break } index++; size++; } if (index === end && value.charAt(index) === space$b) { index -= tabSize$1 - 1; size -= tabSize$1 - 1; } } else if (character !== lineFeed$b && character !== '') { currentMarker = null; } } } if (currentMarker) { if (!pedantic && marker !== currentMarker) { break } prefixed = true; } else { if (!commonmark && !indented && value.charAt(startIndex) === space$b) { indented = true; } else if (commonmark && item) { indented = size >= item.indent || size > tabSize$1; } prefixed = false; index = startIndex; } line = value.slice(startIndex, nextIndex); content = startIndex === index ? line : value.slice(index, nextIndex); if ( currentMarker === asterisk$3 || currentMarker === underscore$5 || currentMarker === dash$6 ) { if (tokenizers.thematicBreak.call(self, eat, line, true)) { break } } previousEmpty = empty; empty = !prefixed && !trim_1(content).length; if (indented && item) { item.value = item.value.concat(emptyLines, line); allLines = allLines.concat(emptyLines, line); emptyLines = []; } else if (prefixed) { if (emptyLines.length !== 0) { spread = true; item.value.push(''); item.trail = emptyLines.concat(); } item = { value: [line], indent: size, trail: [] }; items.push(item); allLines = allLines.concat(emptyLines, line); emptyLines = []; } else if (empty) { if (previousEmpty && !commonmark) { break } emptyLines.push(line); } else { if (previousEmpty) { break } if (interrupt_1(interuptors, tokenizers, self, [eat, line, true])) { break } item.value = item.value.concat(emptyLines, line); allLines = allLines.concat(emptyLines, line); emptyLines = []; } index = nextIndex + 1; } node = eat(allLines.join(lineFeed$b)).reset({ type: 'list', ordered: ordered, start: start, spread: spread, children: [] }); enterTop = self.enterList(); exitBlockquote = self.enterBlock(); index = -1; length = items.length; while (++index < length) { item = items[index].value.join(lineFeed$b); now = eat.now(); eat(item)(listItem$2(self, item, now), node); item = items[index].trail.join(lineFeed$b); if (index !== length - 1) { item += lineFeed$b; } eat(item); } enterTop(); exitBlockquote(); return node } function listItem$2(ctx, value, position) { var offsets = ctx.offset; var fn = ctx.options.pedantic ? pedanticListItem : normalListItem; var checked = null; var task; var indent; value = fn.apply(null, arguments); if (ctx.options.gfm) { task = value.match(taskItemExpression); if (task) { indent = task[0].length; checked = task[1].toLowerCase() === lowercaseX; offsets[position.line] += indent; value = value.slice(indent); } } return { type: 'listItem', spread: looseListItemExpression.test(value), checked: checked, children: ctx.tokenizeBlock(value, position) } } // Create a list-item using overly simple mechanics. function pedanticListItem(ctx, value, position) { var offsets = ctx.offset; var line = position.line; // Remove the list-item’s bullet. value = value.replace(pedanticBulletExpression, replacer); // The initial line was also matched by the below, so we reset the `line`. line = position.line; return value.replace(initialIndentExpression, replacer) // A simple replacer which removed all matches, and adds their length to // `offset`. function replacer($0) { offsets[line] = (offsets[line] || 0) + $0.length; line++; return '' } } // Create a list-item using sane mechanics. function normalListItem(ctx, value, position) { var offsets = ctx.offset; var line = position.line; var max; var bullet; var rest; var lines; var trimmedLines; var index; var length; // Remove the list-item’s bullet. value = value.replace(bulletExpression, replacer); lines = value.split(lineFeed$b); trimmedLines = removeIndentation(value, getIndentation(max).indent).split(lineFeed$b); // We replaced the initial bullet with something else above, which was used // to trick `removeIndentation` into removing some more characters when // possible. However, that could result in the initial line to be stripped // more than it should be. trimmedLines[0] = rest; offsets[line] = (offsets[line] || 0) + bullet.length; line++; index = 0; length = lines.length; while (++index < length) { offsets[line] = (offsets[line] || 0) + lines[index].length - trimmedLines[index].length; line++; } return trimmedLines.join(lineFeed$b) /* eslint-disable-next-line max-params */ function replacer($0, $1, $2, $3, $4) { bullet = $1 + $2 + $3; rest = $4; // Make sure that the first nine numbered list items can indent with an // extra space. That is, when the bullet did not receive an extra final // space. if (Number($2) < 10 && bullet.length % 2 === 1) { $2 = space$b + $2; } max = $1 + repeatString(space$b, $2.length) + $3; return max + rest } } var headingSetext = setextHeading; var lineFeed$a = '\n'; var tab$6 = '\t'; var space$a = ' '; var equalsTo$1 = '='; var dash$5 = '-'; var maxIndent = 3; var equalsToDepth = 1; var dashDepth = 2; function setextHeading(eat, value, silent) { var self = this; var now = eat.now(); var length = value.length; var index = -1; var subvalue = ''; var content; var queue; var character; var marker; var depth; // Eat initial indentation. while (++index < length) { character = value.charAt(index); if (character !== space$a || index >= maxIndent) { index--; break } subvalue += character; } // Eat content. content = ''; queue = ''; while (++index < length) { character = value.charAt(index); if (character === lineFeed$a) { index--; break } if (character === space$a || character === tab$6) { queue += character; } else { content += queue + character; queue = ''; } } now.column += subvalue.length; now.offset += subvalue.length; subvalue += content + queue; // Ensure the content is followed by a newline and a valid marker. character = value.charAt(++index); marker = value.charAt(++index); if (character !== lineFeed$a || (marker !== equalsTo$1 && marker !== dash$5)) { return } subvalue += character; // Eat Setext-line. queue = marker; depth = marker === equalsTo$1 ? equalsToDepth : dashDepth; while (++index < length) { character = value.charAt(index); if (character !== marker) { if (character !== lineFeed$a) { return } index--; break } queue += character; } if (silent) { return true } return eat(subvalue + queue)({ type: 'heading', depth: depth, children: self.tokenizeInline(content, now) }) } var attributeName$2 = '[a-zA-Z_:][a-zA-Z0-9:._-]*'; var unquoted$2 = '[^"\'=<>`\\u0000-\\u0020]+'; var singleQuoted$2 = "'[^']*'"; var doubleQuoted$2 = '"[^"]*"'; var attributeValue$2 = '(?:' + unquoted$2 + '|' + singleQuoted$2 + '|' + doubleQuoted$2 + ')'; var attribute$2 = '(?:\\s+' + attributeName$2 + '(?:\\s*=\\s*' + attributeValue$2 + ')?)'; var openTag$1 = '<[A-Za-z][A-Za-z0-9\\-]*' + attribute$2 + '*\\s*\\/?>'; var closeTag$1 = '<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>'; var comment$1 = '|'; var processing = '<[?].*?[?]>'; var declaration = ']*>'; var cdata = ''; var openCloseTag$2 = new RegExp('^(?:' + openTag$1 + '|' + closeTag$1 + ')'); var tag$2 = new RegExp( '^(?:' + openTag$1 + '|' + closeTag$1 + '|' + comment$1 + '|' + processing + '|' + declaration + '|' + cdata + ')' ); var html$4 = { openCloseTag: openCloseTag$2, tag: tag$2 }; var openCloseTag$1 = html$4.openCloseTag; var htmlBlock = blockHtml$1; var tab$5 = '\t'; var space$9 = ' '; var lineFeed$9 = '\n'; var lessThan$7 = '<'; var rawOpenExpression$1 = /^<(script|pre|style)(?=(\s|>|$))/i; var rawCloseExpression$1 = /<\/(script|pre|style)>/i; var commentOpenExpression$1 = /^/; var instructionOpenExpression$1 = /^<\?/; var instructionCloseExpression$1 = /\?>/; var directiveOpenExpression$1 = /^/; var cdataOpenExpression$1 = /^/; var elementCloseExpression$1 = /^$/; var otherElementOpenExpression$1 = new RegExp(openCloseTag$1.source + '\\s*$'); function blockHtml$1(eat, value, silent) { var self = this; var blocks = self.options.blocks.join('|'); var elementOpenExpression = new RegExp( '^|$))', 'i' ); var length = value.length; var index = 0; var next; var line; var offset; var character; var count; var sequence; var subvalue; var sequences = [ [rawOpenExpression$1, rawCloseExpression$1, true], [commentOpenExpression$1, commentCloseExpression$1, true], [instructionOpenExpression$1, instructionCloseExpression$1, true], [directiveOpenExpression$1, directiveCloseExpression$1, true], [cdataOpenExpression$1, cdataCloseExpression$1, true], [elementOpenExpression, elementCloseExpression$1, true], [otherElementOpenExpression$1, elementCloseExpression$1, false] ]; // Eat initial spacing. while (index < length) { character = value.charAt(index); if (character !== tab$5 && character !== space$9) { break } index++; } if (value.charAt(index) !== lessThan$7) { return } next = value.indexOf(lineFeed$9, index + 1); next = next === -1 ? length : next; line = value.slice(index, next); offset = -1; count = sequences.length; while (++offset < count) { if (sequences[offset][0].test(line)) { sequence = sequences[offset]; break } } if (!sequence) { return } if (silent) { return sequence[2] } index = next; if (!sequence[1].test(line)) { while (index < length) { next = value.indexOf(lineFeed$9, index + 1); next = next === -1 ? length : next; line = value.slice(index + 1, next); if (sequence[1].test(line)) { if (line) { index = next; } break } index = next; } } subvalue = value.slice(0, index); return eat(subvalue)({type: 'html', value: subvalue}) } var isWhitespaceCharacter = whitespace$1; var fromCode$1 = String.fromCharCode; var re$2 = /\s/; // Check if the given character code, or the character code at the first // character, is a whitespace character. function whitespace$1(character) { return re$2.test( typeof character === 'number' ? fromCode$1(character) : character.charAt(0) ) } var collapseWhiteSpace = collapse; // `collapse(' \t\nbar \nbaz\t') // ' bar baz '` function collapse(value) { return String(value).replace(/\s+/g, ' ') } var normalize_1$1 = normalize$1; // Normalize an identifier. Collapses multiple white space characters into a // single space, and removes casing. function normalize$1(value) { return collapseWhiteSpace(value).toLowerCase() } var definition_1 = definition; var quotationMark$2 = '"'; var apostrophe$3 = "'"; var backslash$6 = '\\'; var lineFeed$8 = '\n'; var tab$4 = '\t'; var space$8 = ' '; var leftSquareBracket$2 = '['; var rightSquareBracket$2 = ']'; var leftParenthesis$1 = '('; var rightParenthesis$2 = ')'; var colon$2 = ':'; var lessThan$6 = '<'; var greaterThan$3 = '>'; function definition(eat, value, silent) { var self = this; var commonmark = self.options.commonmark; var index = 0; var length = value.length; var subvalue = ''; var beforeURL; var beforeTitle; var queue; var character; var test; var identifier; var url; var title; while (index < length) { character = value.charAt(index); if (character !== space$8 && character !== tab$4) { break } subvalue += character; index++; } character = value.charAt(index); if (character !== leftSquareBracket$2) { return } index++; subvalue += character; queue = ''; while (index < length) { character = value.charAt(index); if (character === rightSquareBracket$2) { break } else if (character === backslash$6) { queue += character; index++; character = value.charAt(index); } queue += character; index++; } if ( !queue || value.charAt(index) !== rightSquareBracket$2 || value.charAt(index + 1) !== colon$2 ) { return } identifier = queue; subvalue += queue + rightSquareBracket$2 + colon$2; index = subvalue.length; queue = ''; while (index < length) { character = value.charAt(index); if (character !== tab$4 && character !== space$8 && character !== lineFeed$8) { break } subvalue += character; index++; } character = value.charAt(index); queue = ''; beforeURL = subvalue; if (character === lessThan$6) { index++; while (index < length) { character = value.charAt(index); if (!isEnclosedURLCharacter(character)) { break } queue += character; index++; } character = value.charAt(index); if (character === isEnclosedURLCharacter.delimiter) { subvalue += lessThan$6 + queue + character; index++; } else { if (commonmark) { return } index -= queue.length + 1; queue = ''; } } if (!queue) { while (index < length) { character = value.charAt(index); if (!isUnclosedURLCharacter(character)) { break } queue += character; index++; } subvalue += queue; } if (!queue) { return } url = queue; queue = ''; while (index < length) { character = value.charAt(index); if (character !== tab$4 && character !== space$8 && character !== lineFeed$8) { break } queue += character; index++; } character = value.charAt(index); test = null; if (character === quotationMark$2) { test = quotationMark$2; } else if (character === apostrophe$3) { test = apostrophe$3; } else if (character === leftParenthesis$1) { test = rightParenthesis$2; } if (!test) { queue = ''; index = subvalue.length; } else if (queue) { subvalue += queue + character; index = subvalue.length; queue = ''; while (index < length) { character = value.charAt(index); if (character === test) { break } if (character === lineFeed$8) { index++; character = value.charAt(index); if (character === lineFeed$8 || character === test) { return } queue += lineFeed$8; } queue += character; index++; } character = value.charAt(index); if (character !== test) { return } beforeTitle = subvalue; subvalue += queue + character; index++; title = queue; queue = ''; } else { return } while (index < length) { character = value.charAt(index); if (character !== tab$4 && character !== space$8) { break } subvalue += character; index++; } character = value.charAt(index); if (!character || character === lineFeed$8) { if (silent) { return true } beforeURL = eat(beforeURL).test().end; url = self.decode.raw(self.unescape(url), beforeURL, {nonTerminated: false}); if (title) { beforeTitle = eat(beforeTitle).test().end; title = self.decode.raw(self.unescape(title), beforeTitle); } return eat(subvalue)({ type: 'definition', identifier: normalize_1$1(identifier), label: identifier, title: title || null, url: url }) } } // Check if `character` can be inside an enclosed URI. function isEnclosedURLCharacter(character) { return ( character !== greaterThan$3 && character !== leftSquareBracket$2 && character !== rightSquareBracket$2 ) } isEnclosedURLCharacter.delimiter = greaterThan$3; // Check if `character` can be inside an unclosed URI. function isUnclosedURLCharacter(character) { return ( character !== leftSquareBracket$2 && character !== rightSquareBracket$2 && !isWhitespaceCharacter(character) ) } var table_1$1 = table$1; var tab$3 = '\t'; var lineFeed$7 = '\n'; var space$7 = ' '; var dash$4 = '-'; var colon$1 = ':'; var backslash$5 = '\\'; var verticalBar = '|'; var minColumns = 1; var minRows = 2; var left = 'left'; var center = 'center'; var right = 'right'; function table$1(eat, value, silent) { var self = this; var index; var alignments; var alignment; var subvalue; var row; var length; var lines; var queue; var character; var hasDash; var align; var cell; var preamble; var now; var position; var lineCount; var line; var rows; var table; var lineIndex; var pipeIndex; var first; // Exit when not in gfm-mode. if (!self.options.gfm) { return } // Get the rows. // Detecting tables soon is hard, so there are some checks for performance // here, such as the minimum number of rows, and allowed characters in the // alignment row. index = 0; lineCount = 0; length = value.length + 1; lines = []; while (index < length) { lineIndex = value.indexOf(lineFeed$7, index); pipeIndex = value.indexOf(verticalBar, index + 1); if (lineIndex === -1) { lineIndex = value.length; } if (pipeIndex === -1 || pipeIndex > lineIndex) { if (lineCount < minRows) { return } break } lines.push(value.slice(index, lineIndex)); lineCount++; index = lineIndex + 1; } // Parse the alignment row. subvalue = lines.join(lineFeed$7); alignments = lines.splice(1, 1)[0] || []; index = 0; length = alignments.length; lineCount--; alignment = false; align = []; while (index < length) { character = alignments.charAt(index); if (character === verticalBar) { hasDash = null; if (alignment === false) { if (first === false) { return } } else { align.push(alignment); alignment = false; } first = false; } else if (character === dash$4) { hasDash = true; alignment = alignment || null; } else if (character === colon$1) { if (alignment === left) { alignment = center; } else if (hasDash && alignment === null) { alignment = right; } else { alignment = left; } } else if (!isWhitespaceCharacter(character)) { return } index++; } if (alignment !== false) { align.push(alignment); } // Exit when without enough columns. if (align.length < minColumns) { return } /* istanbul ignore if - never used (yet) */ if (silent) { return true } // Parse the rows. position = -1; rows = []; table = eat(subvalue).reset({type: 'table', align: align, children: rows}); while (++position < lineCount) { line = lines[position]; row = {type: 'tableRow', children: []}; // Eat a newline character when this is not the first row. if (position) { eat(lineFeed$7); } // Eat the row. eat(line).reset(row, table); length = line.length + 1; index = 0; queue = ''; cell = ''; preamble = true; while (index < length) { character = line.charAt(index); if (character === tab$3 || character === space$7) { if (cell) { queue += character; } else { eat(character); } index++; continue } if (character === '' || character === verticalBar) { if (preamble) { eat(character); } else { if ((cell || character) && !preamble) { subvalue = cell; if (queue.length > 1) { if (character) { subvalue += queue.slice(0, -1); queue = queue.charAt(queue.length - 1); } else { subvalue += queue; queue = ''; } } now = eat.now(); eat(subvalue)( {type: 'tableCell', children: self.tokenizeInline(cell, now)}, row ); } eat(queue + character); queue = ''; cell = ''; } } else { if (queue) { cell += queue; queue = ''; } cell += character; if (character === backslash$5 && index !== length - 2) { cell += line.charAt(index + 1); index++; } } preamble = false; index++; } // Eat the alignment row. if (!position) { eat(lineFeed$7 + alignments); } } return table } var paragraph_1$1 = paragraph$1; var tab$2 = '\t'; var lineFeed$6 = '\n'; var space$6 = ' '; var tabSize = 4; // Tokenise paragraph. function paragraph$1(eat, value, silent) { var self = this; var settings = self.options; var commonmark = settings.commonmark; var tokenizers = self.blockTokenizers; var interruptors = self.interruptParagraph; var index = value.indexOf(lineFeed$6); var length = value.length; var position; var subvalue; var character; var size; var now; while (index < length) { // Eat everything if there’s no following newline. if (index === -1) { index = length; break } // Stop if the next character is NEWLINE. if (value.charAt(index + 1) === lineFeed$6) { break } // In commonmark-mode, following indented lines are part of the paragraph. if (commonmark) { size = 0; position = index + 1; while (position < length) { character = value.charAt(position); if (character === tab$2) { size = tabSize; break } else if (character === space$6) { size++; } else { break } position++; } if (size >= tabSize && character !== lineFeed$6) { index = value.indexOf(lineFeed$6, index + 1); continue } } subvalue = value.slice(index + 1); // Check if the following code contains a possible block. if (interrupt_1(interruptors, tokenizers, self, [eat, subvalue, true])) { break } position = index; index = value.indexOf(lineFeed$6, index + 1); if (index !== -1 && trim_1(value.slice(position, index)) === '') { index = position; break } } subvalue = value.slice(0, index); /* istanbul ignore if - never used (yet) */ if (silent) { return true } now = eat.now(); subvalue = trimTrailingLines_1(subvalue); return eat(subvalue)({ type: 'paragraph', children: self.tokenizeInline(subvalue, now) }) } var _escape$1 = locate$9; function locate$9(value, fromIndex) { return value.indexOf('\\', fromIndex) } var _escape = escape$1; escape$1.locator = _escape$1; var lineFeed$5 = '\n'; var backslash$4 = '\\'; function escape$1(eat, value, silent) { var self = this; var character; var node; if (value.charAt(0) === backslash$4) { character = value.charAt(1); if (self.escape.indexOf(character) !== -1) { /* istanbul ignore if - never used (yet) */ if (silent) { return true } if (character === lineFeed$5) { node = {type: 'break'}; } else { node = {type: 'text', value: character}; } return eat(backslash$4 + character)(node) } } } var tag$1 = locate$8; function locate$8(value, fromIndex) { return value.indexOf('<', fromIndex) } var autoLink_1 = autoLink; autoLink.locator = tag$1; autoLink.notInLink = true; var lessThan$5 = '<'; var greaterThan$2 = '>'; var atSign$1 = '@'; var slash$3 = '/'; var mailto = 'mailto:'; var mailtoLength = mailto.length; function autoLink(eat, value, silent) { var self = this; var subvalue = ''; var length = value.length; var index = 0; var queue = ''; var hasAtCharacter = false; var link = ''; var character; var now; var content; var tokenizers; var exit; if (value.charAt(0) !== lessThan$5) { return } index++; subvalue = lessThan$5; while (index < length) { character = value.charAt(index); if ( isWhitespaceCharacter(character) || character === greaterThan$2 || character === atSign$1 || (character === ':' && value.charAt(index + 1) === slash$3) ) { break } queue += character; index++; } if (!queue) { return } link += queue; queue = ''; character = value.charAt(index); link += character; index++; if (character === atSign$1) { hasAtCharacter = true; } else { if (character !== ':' || value.charAt(index + 1) !== slash$3) { return } link += slash$3; index++; } while (index < length) { character = value.charAt(index); if (isWhitespaceCharacter(character) || character === greaterThan$2) { break } queue += character; index++; } character = value.charAt(index); if (!queue || character !== greaterThan$2) { return } /* istanbul ignore if - never used (yet) */ if (silent) { return true } link += queue; content = link; subvalue += link + character; now = eat.now(); now.column++; now.offset++; if (hasAtCharacter) { if (link.slice(0, mailtoLength).toLowerCase() === mailto) { content = content.slice(mailtoLength); now.column += mailtoLength; now.offset += mailtoLength; } else { link = mailto + link; } } // Temporarily remove all tokenizers except text in autolinks. tokenizers = self.inlineTokenizers; self.inlineTokenizers = {text: tokenizers.text}; exit = self.enterLink(); content = self.tokenizeInline(content, now); self.inlineTokenizers = tokenizers; exit(); return eat(subvalue)({ type: 'link', title: null, url: parseEntities_1(link, {nonTerminated: false}), children: content }) } var ccount_1 = ccount; function ccount(value, character) { var val = String(value); var count = 0; var index; if (typeof character !== 'string' || character.length !== 1) { throw new Error('Expected character') } index = val.indexOf(character); while (index !== -1) { count++; index = val.indexOf(character, index + 1); } return count } var url$1 = locate$7; var values = ['www.', 'http://', 'https://']; function locate$7(value, fromIndex) { var min = -1; var index; var length; var position; if (!this.options.gfm) { return min } length = values.length; index = -1; while (++index < length) { position = value.indexOf(values[index], fromIndex); if (position !== -1 && (min === -1 || position < min)) { min = position; } } return min } var url_1 = url; url.locator = url$1; url.notInLink = true; var exclamationMark$3 = 33; // '!' var ampersand = 38; // '&' var rightParenthesis$1 = 41; // ')' var asterisk$2 = 42; // '*' var comma$1 = 44; // ',' var dash$3 = 45; // '-' var dot$2 = 46; // '.' var colon = 58; // ':' var semicolon = 59; // ';' var questionMark$1 = 63; // '?' var lessThan$4 = 60; // '<' var underscore$4 = 95; // '_' var tilde$2 = 126; // '~' var leftParenthesisCharacter = '('; var rightParenthesisCharacter = ')'; function url(eat, value, silent) { var self = this; var gfm = self.options.gfm; var tokenizers = self.inlineTokenizers; var length = value.length; var previousDot = -1; var protocolless = false; var dots; var lastTwoPartsStart; var start; var index; var pathStart; var path; var code; var end; var leftCount; var rightCount; var content; var children; var url; var exit; if (!gfm) { return } // `WWW.` doesn’t work. if (value.slice(0, 4) === 'www.') { protocolless = true; index = 4; } else if (value.slice(0, 7).toLowerCase() === 'http://') { index = 7; } else if (value.slice(0, 8).toLowerCase() === 'https://') { index = 8; } else { return } // Act as if the starting boundary is a dot. previousDot = index - 1; // Parse a valid domain. start = index; dots = []; while (index < length) { code = value.charCodeAt(index); if (code === dot$2) { // Dots may not appear after each other. if (previousDot === index - 1) { break } dots.push(index); previousDot = index; index++; continue } if ( isDecimal(code) || isAlphabetical(code) || code === dash$3 || code === underscore$4 ) { index++; continue } break } // Ignore a final dot: if (code === dot$2) { dots.pop(); index--; } // If there are not dots, exit. if (dots[0] === undefined) { return } // If there is an underscore in the last two domain parts, exit: // `www.example.c_m` and `www.ex_ample.com` are not OK, but // `www.sub_domain.example.com` is. lastTwoPartsStart = dots.length < 2 ? start : dots[dots.length - 2] + 1; if (value.slice(lastTwoPartsStart, index).indexOf('_') !== -1) { return } /* istanbul ignore if - never used (yet) */ if (silent) { return true } end = index; pathStart = index; // Parse a path. while (index < length) { code = value.charCodeAt(index); if (isWhitespaceCharacter(code) || code === lessThan$4) { break } index++; if ( code === exclamationMark$3 || code === asterisk$2 || code === comma$1 || code === dot$2 || code === colon || code === questionMark$1 || code === underscore$4 || code === tilde$2 ) ; else { end = index; } } index = end; // If the path ends in a closing paren, and the count of closing parens is // higher than the opening count, then remove the supefluous closing parens. if (value.charCodeAt(index - 1) === rightParenthesis$1) { path = value.slice(pathStart, index); leftCount = ccount_1(path, leftParenthesisCharacter); rightCount = ccount_1(path, rightParenthesisCharacter); while (rightCount > leftCount) { index = pathStart + path.lastIndexOf(rightParenthesisCharacter); path = value.slice(pathStart, index); rightCount--; } } if (value.charCodeAt(index - 1) === semicolon) { // GitHub doesn’t document this, but final semicolons aren’t paret of the // URL either. index--; // // If the path ends in what looks like an entity, it’s not part of the path. if (isAlphabetical(value.charCodeAt(index - 1))) { end = index - 2; while (isAlphabetical(value.charCodeAt(end))) { end--; } if (value.charCodeAt(end) === ampersand) { index = end; } } } content = value.slice(0, index); url = parseEntities_1(content, {nonTerminated: false}); if (protocolless) { url = 'http://' + url; } exit = self.enterLink(); // Temporarily remove all tokenizers except text in url. self.inlineTokenizers = {text: tokenizers.text}; children = self.tokenizeInline(content, eat.now()); self.inlineTokenizers = tokenizers; exit(); return eat(content)({type: 'link', title: null, url: url, children: children}) } var plusSign$1 = 43; // '+' var dash$2 = 45; // '-' var dot$1 = 46; // '.' var underscore$3 = 95; // '_' var email$1 = locate$6; // See: function locate$6(value, fromIndex) { var self = this; var at; var position; if (!this.options.gfm) { return -1 } at = value.indexOf('@', fromIndex); if (at === -1) { return -1 } position = at; if (position === fromIndex || !isGfmAtext(value.charCodeAt(position - 1))) { return locate$6.call(self, value, at + 1) } while (position > fromIndex && isGfmAtext(value.charCodeAt(position - 1))) { position--; } return position } function isGfmAtext(code) { return ( isDecimal(code) || isAlphabetical(code) || code === plusSign$1 || code === dash$2 || code === dot$1 || code === underscore$3 ) } var email_1 = email; email.locator = email$1; email.notInLink = true; var plusSign = 43; // '+' var dash$1 = 45; // '-' var dot = 46; // '.' var atSign = 64; // '@' var underscore$2 = 95; // '_' function email(eat, value, silent) { var self = this; var gfm = self.options.gfm; var tokenizers = self.inlineTokenizers; var index = 0; var length = value.length; var firstDot = -1; var code; var content; var children; var exit; if (!gfm) { return } code = value.charCodeAt(index); while ( isDecimal(code) || isAlphabetical(code) || code === plusSign || code === dash$1 || code === dot || code === underscore$2 ) { code = value.charCodeAt(++index); } if (index === 0) { return } if (code !== atSign) { return } index++; while (index < length) { code = value.charCodeAt(index); if ( isDecimal(code) || isAlphabetical(code) || code === dash$1 || code === dot || code === underscore$2 ) { index++; if (firstDot === -1 && code === dot) { firstDot = index; } continue } break } if ( firstDot === -1 || firstDot === index || code === dash$1 || code === underscore$2 ) { return } if (code === dot) { index--; } content = value.slice(0, index); /* istanbul ignore if - never used (yet) */ if (silent) { return true } exit = self.enterLink(); // Temporarily remove all tokenizers except text in url. self.inlineTokenizers = {text: tokenizers.text}; children = self.tokenizeInline(content, eat.now()); self.inlineTokenizers = tokenizers; exit(); return eat(content)({ type: 'link', title: null, url: 'mailto:' + parseEntities_1(content, {nonTerminated: false}), children: children }) } var tag = html$4.tag; var htmlInline = inlineHTML; inlineHTML.locator = tag$1; var lessThan$3 = '<'; var questionMark = '?'; var exclamationMark$2 = '!'; var slash$2 = '/'; var htmlLinkOpenExpression = /^/i; function inlineHTML(eat, value, silent) { var self = this; var length = value.length; var character; var subvalue; if (value.charAt(0) !== lessThan$3 || length < 3) { return } character = value.charAt(1); if ( !isAlphabetical(character) && character !== questionMark && character !== exclamationMark$2 && character !== slash$2 ) { return } subvalue = value.match(tag); if (!subvalue) { return } /* istanbul ignore if - not used yet. */ if (silent) { return true } subvalue = subvalue[0]; if (!self.inLink && htmlLinkOpenExpression.test(subvalue)) { self.inLink = true; } else if (self.inLink && htmlLinkCloseExpression.test(subvalue)) { self.inLink = false; } return eat(subvalue)({type: 'html', value: subvalue}) } var link$3 = locate$5; function locate$5(value, fromIndex) { var link = value.indexOf('[', fromIndex); var image = value.indexOf('![', fromIndex); if (image === -1) { return link } // Link can never be `-1` if an image is found, so we don’t need to check // for that :) return link < image ? link : image } var link_1$1 = link$2; link$2.locator = link$3; var lineFeed$4 = '\n'; var exclamationMark$1 = '!'; var quotationMark$1 = '"'; var apostrophe$2 = "'"; var leftParenthesis = '('; var rightParenthesis = ')'; var lessThan$2 = '<'; var greaterThan$1 = '>'; var leftSquareBracket$1 = '['; var backslash$3 = '\\'; var rightSquareBracket$1 = ']'; var graveAccent$1 = '`'; function link$2(eat, value, silent) { var self = this; var subvalue = ''; var index = 0; var character = value.charAt(0); var pedantic = self.options.pedantic; var commonmark = self.options.commonmark; var gfm = self.options.gfm; var closed; var count; var opening; var beforeURL; var beforeTitle; var subqueue; var hasMarker; var isImage; var content; var marker; var length; var title; var depth; var queue; var url; var now; var exit; var node; // Detect whether this is an image. if (character === exclamationMark$1) { isImage = true; subvalue = character; character = value.charAt(++index); } // Eat the opening. if (character !== leftSquareBracket$1) { return } // Exit when this is a link and we’re already inside a link. if (!isImage && self.inLink) { return } subvalue += character; queue = ''; index++; // Eat the content. length = value.length; now = eat.now(); depth = 0; now.column += index; now.offset += index; while (index < length) { character = value.charAt(index); subqueue = character; if (character === graveAccent$1) { // Inline-code in link content. count = 1; while (value.charAt(index + 1) === graveAccent$1) { subqueue += character; index++; count++; } if (!opening) { opening = count; } else if (count >= opening) { opening = 0; } } else if (character === backslash$3) { // Allow brackets to be escaped. index++; subqueue += value.charAt(index); } else if ((!opening || gfm) && character === leftSquareBracket$1) { // In GFM mode, brackets in code still count. In all other modes, // they don’t. depth++; } else if ((!opening || gfm) && character === rightSquareBracket$1) { if (depth) { depth--; } else { if (value.charAt(index + 1) !== leftParenthesis) { return } subqueue += leftParenthesis; closed = true; index++; break } } queue += subqueue; subqueue = ''; index++; } // Eat the content closing. if (!closed) { return } content = queue; subvalue += queue + subqueue; index++; // Eat white-space. while (index < length) { character = value.charAt(index); if (!isWhitespaceCharacter(character)) { break } subvalue += character; index++; } // Eat the URL. character = value.charAt(index); queue = ''; beforeURL = subvalue; if (character === lessThan$2) { index++; beforeURL += lessThan$2; while (index < length) { character = value.charAt(index); if (character === greaterThan$1) { break } if (commonmark && character === lineFeed$4) { return } queue += character; index++; } if (value.charAt(index) !== greaterThan$1) { return } subvalue += lessThan$2 + queue + greaterThan$1; url = queue; index++; } else { character = null; subqueue = ''; while (index < length) { character = value.charAt(index); if ( subqueue && (character === quotationMark$1 || character === apostrophe$2 || (commonmark && character === leftParenthesis)) ) { break } if (isWhitespaceCharacter(character)) { if (!pedantic) { break } subqueue += character; } else { if (character === leftParenthesis) { depth++; } else if (character === rightParenthesis) { if (depth === 0) { break } depth--; } queue += subqueue; subqueue = ''; if (character === backslash$3) { queue += backslash$3; character = value.charAt(++index); } queue += character; } index++; } subvalue += queue; url = queue; index = subvalue.length; } // Eat white-space. queue = ''; while (index < length) { character = value.charAt(index); if (!isWhitespaceCharacter(character)) { break } queue += character; index++; } character = value.charAt(index); subvalue += queue; // Eat the title. if ( queue && (character === quotationMark$1 || character === apostrophe$2 || (commonmark && character === leftParenthesis)) ) { index++; subvalue += character; queue = ''; marker = character === leftParenthesis ? rightParenthesis : character; beforeTitle = subvalue; // In commonmark-mode, things are pretty easy: the marker cannot occur // inside the title. Non-commonmark does, however, support nested // delimiters. if (commonmark) { while (index < length) { character = value.charAt(index); if (character === marker) { break } if (character === backslash$3) { queue += backslash$3; character = value.charAt(++index); } index++; queue += character; } character = value.charAt(index); if (character !== marker) { return } title = queue; subvalue += queue + character; index++; while (index < length) { character = value.charAt(index); if (!isWhitespaceCharacter(character)) { break } subvalue += character; index++; } } else { subqueue = ''; while (index < length) { character = value.charAt(index); if (character === marker) { if (hasMarker) { queue += marker + subqueue; subqueue = ''; } hasMarker = true; } else if (!hasMarker) { queue += character; } else if (character === rightParenthesis) { subvalue += queue + marker + subqueue; title = queue; break } else if (isWhitespaceCharacter(character)) { subqueue += character; } else { queue += marker + subqueue + character; subqueue = ''; hasMarker = false; } index++; } } } if (value.charAt(index) !== rightParenthesis) { return } /* istanbul ignore if - never used (yet) */ if (silent) { return true } subvalue += rightParenthesis; url = self.decode.raw(self.unescape(url), eat(beforeURL).test().end, { nonTerminated: false }); if (title) { beforeTitle = eat(beforeTitle).test().end; title = self.decode.raw(self.unescape(title), beforeTitle); } node = { type: isImage ? 'image' : 'link', title: title || null, url: url }; if (isImage) { node.alt = self.decode.raw(self.unescape(content), now) || null; } else { exit = self.enterLink(); node.children = self.tokenizeInline(content, now); exit(); } return eat(subvalue)(node) } var reference_1 = reference; reference.locator = link$3; var link$1 = 'link'; var image$2 = 'image'; var shortcut = 'shortcut'; var collapsed = 'collapsed'; var full = 'full'; var exclamationMark = '!'; var leftSquareBracket = '['; var backslash$2 = '\\'; var rightSquareBracket = ']'; function reference(eat, value, silent) { var self = this; var commonmark = self.options.commonmark; var character = value.charAt(0); var index = 0; var length = value.length; var subvalue = ''; var intro = ''; var type = link$1; var referenceType = shortcut; var content; var identifier; var now; var node; var exit; var queue; var bracketed; var depth; // Check whether we’re eating an image. if (character === exclamationMark) { type = image$2; intro = character; character = value.charAt(++index); } if (character !== leftSquareBracket) { return } index++; intro += character; queue = ''; // Eat the text. depth = 0; while (index < length) { character = value.charAt(index); if (character === leftSquareBracket) { bracketed = true; depth++; } else if (character === rightSquareBracket) { if (!depth) { break } depth--; } if (character === backslash$2) { queue += backslash$2; character = value.charAt(++index); } queue += character; index++; } subvalue = queue; content = queue; character = value.charAt(index); if (character !== rightSquareBracket) { return } index++; subvalue += character; queue = ''; if (!commonmark) { // The original markdown syntax definition explicitly allows for whitespace // between the link text and link label; commonmark departs from this, in // part to improve support for shortcut reference links while (index < length) { character = value.charAt(index); if (!isWhitespaceCharacter(character)) { break } queue += character; index++; } } character = value.charAt(index); if (character === leftSquareBracket) { identifier = ''; queue += character; index++; while (index < length) { character = value.charAt(index); if (character === leftSquareBracket || character === rightSquareBracket) { break } if (character === backslash$2) { identifier += backslash$2; character = value.charAt(++index); } identifier += character; index++; } character = value.charAt(index); if (character === rightSquareBracket) { referenceType = identifier ? full : collapsed; queue += identifier + character; index++; } else { identifier = ''; } subvalue += queue; queue = ''; } else { if (!content) { return } identifier = content; } // Brackets cannot be inside the identifier. if (referenceType !== full && bracketed) { return } subvalue = intro + subvalue; if (type === link$1 && self.inLink) { return null } /* istanbul ignore if - never used (yet) */ if (silent) { return true } now = eat.now(); now.column += intro.length; now.offset += intro.length; identifier = referenceType === full ? identifier : content; node = { type: type + 'Reference', identifier: normalize_1$1(identifier), label: identifier, referenceType: referenceType }; if (type === link$1) { exit = self.enterLink(); node.children = self.tokenizeInline(content, now); exit(); } else { node.alt = self.decode.raw(self.unescape(content), now) || null; } return eat(subvalue)(node) } var strong$2 = locate$4; function locate$4(value, fromIndex) { var asterisk = value.indexOf('**', fromIndex); var underscore = value.indexOf('__', fromIndex); if (underscore === -1) { return asterisk } if (asterisk === -1) { return underscore } return underscore < asterisk ? underscore : asterisk } var strong_1$1 = strong$1; strong$1.locator = strong$2; var backslash$1 = '\\'; var asterisk$1 = '*'; var underscore$1 = '_'; function strong$1(eat, value, silent) { var self = this; var index = 0; var character = value.charAt(index); var now; var pedantic; var marker; var queue; var subvalue; var length; var previous; if ( (character !== asterisk$1 && character !== underscore$1) || value.charAt(++index) !== character ) { return } pedantic = self.options.pedantic; marker = character; subvalue = marker + marker; length = value.length; index++; queue = ''; character = ''; if (pedantic && isWhitespaceCharacter(value.charAt(index))) { return } while (index < length) { previous = character; character = value.charAt(index); if ( character === marker && value.charAt(index + 1) === marker && (!pedantic || !isWhitespaceCharacter(previous)) ) { character = value.charAt(index + 2); if (character !== marker) { if (!trim_1(queue)) { return } /* istanbul ignore if - never used (yet) */ if (silent) { return true } now = eat.now(); now.column += 2; now.offset += 2; return eat(subvalue + queue + subvalue)({ type: 'strong', children: self.tokenizeInline(queue, now) }) } } if (!pedantic && character === backslash$1) { queue += character; character = value.charAt(++index); } queue += character; index++; } } var isWordCharacter = wordCharacter; var fromCode = String.fromCharCode; var re$1 = /\w/; // Check if the given character code, or the character code at the first // character, is a word character. function wordCharacter(character) { return re$1.test( typeof character === 'number' ? fromCode(character) : character.charAt(0) ) } var emphasis$2 = locate$3; function locate$3(value, fromIndex) { var asterisk = value.indexOf('*', fromIndex); var underscore = value.indexOf('_', fromIndex); if (underscore === -1) { return asterisk } if (asterisk === -1) { return underscore } return underscore < asterisk ? underscore : asterisk } var emphasis_1$1 = emphasis$1; emphasis$1.locator = emphasis$2; var asterisk = '*'; var underscore = '_'; var backslash = '\\'; function emphasis$1(eat, value, silent) { var self = this; var index = 0; var character = value.charAt(index); var now; var pedantic; var marker; var queue; var subvalue; var length; var previous; if (character !== asterisk && character !== underscore) { return } pedantic = self.options.pedantic; subvalue = character; marker = character; length = value.length; index++; queue = ''; character = ''; if (pedantic && isWhitespaceCharacter(value.charAt(index))) { return } while (index < length) { previous = character; character = value.charAt(index); if (character === marker && (!pedantic || !isWhitespaceCharacter(previous))) { character = value.charAt(++index); if (character !== marker) { if (!trim_1(queue) || previous === marker) { return } if (!pedantic && marker === underscore && isWordCharacter(character)) { queue += marker; continue } /* istanbul ignore if - never used (yet) */ if (silent) { return true } now = eat.now(); now.column++; now.offset++; return eat(subvalue + queue + marker)({ type: 'emphasis', children: self.tokenizeInline(queue, now) }) } queue += marker; } if (!pedantic && character === backslash) { queue += character; character = value.charAt(++index); } queue += character; index++; } } var _delete$2 = locate$2; function locate$2(value, fromIndex) { return value.indexOf('~~', fromIndex) } var _delete$1 = strikethrough$1; strikethrough$1.locator = _delete$2; var tilde$1 = '~'; var fence$1 = '~~'; function strikethrough$1(eat, value, silent) { var self = this; var character = ''; var previous = ''; var preceding = ''; var subvalue = ''; var index; var length; var now; if ( !self.options.gfm || value.charAt(0) !== tilde$1 || value.charAt(1) !== tilde$1 || isWhitespaceCharacter(value.charAt(2)) ) { return } index = 1; length = value.length; now = eat.now(); now.column += 2; now.offset += 2; while (++index < length) { character = value.charAt(index); if ( character === tilde$1 && previous === tilde$1 && (!preceding || !isWhitespaceCharacter(preceding)) ) { /* istanbul ignore if - never used (yet) */ if (silent) { return true } return eat(fence$1 + subvalue + fence$1)({ type: 'delete', children: self.tokenizeInline(subvalue, now) }) } subvalue += previous; preceding = previous; previous = character; } } var codeInline$1 = locate$1; function locate$1(value, fromIndex) { return value.indexOf('`', fromIndex) } var codeInline = inlineCode$1; inlineCode$1.locator = codeInline$1; var lineFeed$3 = 10; // '\n' var space$5 = 32; // ' ' var graveAccent = 96; // '`' function inlineCode$1(eat, value, silent) { var length = value.length; var index = 0; var openingFenceEnd; var closingFenceStart; var closingFenceEnd; var code; var next; var found; while (index < length) { if (value.charCodeAt(index) !== graveAccent) { break } index++; } if (index === 0 || index === length) { return } openingFenceEnd = index; next = value.charCodeAt(index); while (index < length) { code = next; next = value.charCodeAt(index + 1); if (code === graveAccent) { if (closingFenceStart === undefined) { closingFenceStart = index; } closingFenceEnd = index + 1; if ( next !== graveAccent && closingFenceEnd - closingFenceStart === openingFenceEnd ) { found = true; break } } else if (closingFenceStart !== undefined) { closingFenceStart = undefined; closingFenceEnd = undefined; } index++; } if (!found) { return } /* istanbul ignore if - never used (yet) */ if (silent) { return true } // Remove the initial and final space (or line feed), iff they exist and there // are non-space characters in the content. index = openingFenceEnd; length = closingFenceStart; code = value.charCodeAt(index); next = value.charCodeAt(length - 1); found = false; if ( length - index > 2 && (code === space$5 || code === lineFeed$3) && (next === space$5 || next === lineFeed$3) ) { index++; length--; while (index < length) { code = value.charCodeAt(index); if (code !== space$5 && code !== lineFeed$3) { found = true; break } index++; } if (found === true) { openingFenceEnd++; closingFenceStart--; } } return eat(value.slice(0, closingFenceEnd))({ type: 'inlineCode', value: value.slice(openingFenceEnd, closingFenceStart) }) } var _break$2 = locate; function locate(value, fromIndex) { var index = value.indexOf('\n', fromIndex); while (index > fromIndex) { if (value.charAt(index - 1) !== ' ') { break } index--; } return index } var _break$1 = hardBreak$1; hardBreak$1.locator = _break$2; var space$4 = ' '; var lineFeed$2 = '\n'; var minBreakLength = 2; function hardBreak$1(eat, value, silent) { var length = value.length; var index = -1; var queue = ''; var character; while (++index < length) { character = value.charAt(index); if (character === lineFeed$2) { if (index < minBreakLength) { return } /* istanbul ignore if - never used (yet) */ if (silent) { return true } queue += character; return eat(queue)({type: 'break'}) } if (character !== space$4) { return } queue += character; } } var text_1$2 = text$3; function text$3(eat, value, silent) { var self = this; var methods; var tokenizers; var index; var length; var subvalue; var position; var tokenizer; var name; var min; var now; /* istanbul ignore if - never used (yet) */ if (silent) { return true } methods = self.inlineMethods; length = methods.length; tokenizers = self.inlineTokenizers; index = -1; min = value.length; while (++index < length) { name = methods[index]; if (name === 'text' || !tokenizers[name]) { continue } tokenizer = tokenizers[name].locator; if (!tokenizer) { eat.file.fail('Missing locator: `' + name + '`'); } position = tokenizer.call(self, value, 1); if (position !== -1 && position < min) { min = position; } } subvalue = value.slice(0, min); now = eat.now(); self.decode(subvalue, now, handler); function handler(content, position, source) { eat(source || content)({type: 'text', value: content}); } } var parser$1 = Parser; function Parser(doc, file) { this.file = file; this.offset = {}; this.options = immutable(this.options); this.setOptions({}); this.inList = false; this.inBlock = false; this.inLink = false; this.atStart = true; this.toOffset = vfileLocation(file).toOffset; this.unescape = _unescape(this, 'escape'); this.decode = decode(this); } var proto$3 = Parser.prototype; // Expose core. proto$3.setOptions = setOptions_1; proto$3.parse = parse_1$2; // Expose `defaults`. proto$3.options = defaults$1; // Enter and exit helpers. proto$3.exitStart = stateToggle('atStart', true); proto$3.enterList = stateToggle('inList', false); proto$3.enterLink = stateToggle('inLink', false); proto$3.enterBlock = stateToggle('inBlock', false); // Nodes that can interupt a paragraph: // // ```markdown // A paragraph, followed by a thematic break. // ___ // ``` // // In the above example, the thematic break “interupts” the paragraph. proto$3.interruptParagraph = [ ['thematicBreak'], ['list'], ['atxHeading'], ['fencedCode'], ['blockquote'], ['html'], ['setextHeading', {commonmark: false}], ['definition', {commonmark: false}] ]; // Nodes that can interupt a list: // // ```markdown // - One // ___ // ``` // // In the above example, the thematic break “interupts” the list. proto$3.interruptList = [ ['atxHeading', {pedantic: false}], ['fencedCode', {pedantic: false}], ['thematicBreak', {pedantic: false}], ['definition', {commonmark: false}] ]; // Nodes that can interupt a blockquote: // // ```markdown // > A paragraph. // ___ // ``` // // In the above example, the thematic break “interupts” the blockquote. proto$3.interruptBlockquote = [ ['indentedCode', {commonmark: true}], ['fencedCode', {commonmark: true}], ['atxHeading', {commonmark: true}], ['setextHeading', {commonmark: true}], ['thematicBreak', {commonmark: true}], ['html', {commonmark: true}], ['list', {commonmark: true}], ['definition', {commonmark: false}] ]; // Handlers. proto$3.blockTokenizers = { blankLine: blankLine_1, indentedCode: codeIndented, fencedCode: codeFenced, blockquote: blockquote_1$1, atxHeading: headingAtx, thematicBreak: thematicBreak_1$1, list: list_1$1, setextHeading: headingSetext, html: htmlBlock, definition: definition_1, table: table_1$1, paragraph: paragraph_1$1 }; proto$3.inlineTokenizers = { escape: _escape, autoLink: autoLink_1, url: url_1, email: email_1, html: htmlInline, link: link_1$1, reference: reference_1, strong: strong_1$1, emphasis: emphasis_1$1, deletion: _delete$1, code: codeInline, break: _break$1, text: text_1$2 }; // Expose precedence. proto$3.blockMethods = keys$1(proto$3.blockTokenizers); proto$3.inlineMethods = keys$1(proto$3.inlineTokenizers); // Tokenizers. proto$3.tokenizeBlock = tokenizer$1('block'); proto$3.tokenizeInline = tokenizer$1('inline'); proto$3.tokenizeFactory = tokenizer$1; // Get all keys in `value`. function keys$1(value) { var result = []; var key; for (key in value) { result.push(key); } return result } var remarkParse = parse$5; parse$5.Parser = parser$1; function parse$5(options) { var settings = this.data('settings'); var Local = unherit_1(parser$1); Local.prototype.options = immutable(Local.prototype.options, settings, options); this.Parser = Local; } var mdastUtilDefinitions$1 = getDefinitionFactory$1; var own$a = {}.hasOwnProperty; // Get a definition in `node` by `identifier`. function getDefinitionFactory$1(node, options) { return getterFactory$1(gather$1(node, options)) } // Gather all definitions in `node` function gather$1(node, options) { var cache = {}; if (!node || !node.type) { throw new Error('mdast-util-definitions expected node') } unistUtilVisit(node, 'definition', options && options.commonmark ? commonmark : normal); return cache function commonmark(definition) { var id = normalise$1(definition.identifier); if (!own$a.call(cache, id)) { cache[id] = definition; } } function normal(definition) { cache[normalise$1(definition.identifier)] = definition; } } // Factory to get a node from the given definition-cache. function getterFactory$1(cache) { return getter // Get a node from the bound definition-cache. function getter(identifier) { var id = identifier && normalise$1(identifier); return id && own$a.call(cache, id) ? cache[id] : null } } function normalise$1(identifier) { return identifier.toUpperCase() } var parse_1$1 = parse$4; var stringify_1$1 = stringify$3; var empty$2 = ''; var space$3 = ' '; var whiteSpace$1 = /[ \t\n\r\f]+/g; function parse$4(value) { var input = String(value || empty$2).trim(); return input === empty$2 ? [] : input.split(whiteSpace$1) } function stringify$3(values) { return values.join(space$3).trim() } var spaceSeparatedTokens = { parse: parse_1$1, stringify: stringify_1$1 }; var isAbsoluteUrl = url => { if (typeof url !== 'string') { throw new TypeError(`Expected a \`string\`, got \`${typeof url}\``); } // Don't match Windows paths `c:\` if (/^[a-zA-Z]:\\/.test(url)) { return false; } // Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 // Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 return /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(url); }; var spaceSeparated$4 = spaceSeparatedTokens.parse; var remarkExternalLinks = externalLinks; var defaultTarget = '_blank'; var defaultRel = ['nofollow', 'noopener', 'noreferrer']; var defaultProtocols = ['http', 'https']; function externalLinks(options) { var settings = options || {}; var target = settings.target; var rel = settings.rel; var protocols = settings.protocols || defaultProtocols; var content = settings.content; var contentProperties = settings.contentProperties || {}; if (typeof rel === 'string') { rel = spaceSeparated$4(rel); } if (content && typeof content === 'object' && !('length' in content)) { content = [content]; } return transform function transform(tree) { var definition = mdastUtilDefinitions$1(tree); unistUtilVisit(tree, ['link', 'linkReference'], visitor); function visitor(node) { var ctx = node.type === 'link' ? node : definition(node.identifier); var protocol; var data; var props; if (!ctx) return protocol = ctx.url.slice(0, ctx.url.indexOf(':')); if (isAbsoluteUrl(ctx.url) && protocols.indexOf(protocol) !== -1) { data = node.data || (node.data = {}); props = data.hProperties || (data.hProperties = {}); if (target !== false) { props.target = target || defaultTarget; } if (rel !== false) { props.rel = (rel || defaultRel).concat(); } if (content) { // `fragment` is not a known mdast node, but unknown nodes with // children are handled as elements by `mdast-util-to-hast`: // See: . node.children.push({ type: 'fragment', children: [], data: { hName: 'span', hProperties: extend$2(true, contentProperties), hChildren: extend$2(true, content) } }); } } } } } var format = createCommonjsModule(function (module) { (function() { //// Export the API var namespace; // CommonJS / Node module { namespace = module.exports = format; } namespace.format = format; namespace.vsprintf = vsprintf; if (typeof console !== 'undefined' && typeof console.log === 'function') { namespace.printf = printf; } function printf(/* ... */) { console.log(format.apply(null, arguments)); } function vsprintf(fmt, replacements) { return format.apply(null, [fmt].concat(replacements)); } function format(fmt) { var argIndex = 1 // skip initial format argument , args = [].slice.call(arguments) , i = 0 , n = fmt.length , result = '' , c , escaped = false , arg , tmp , leadingZero = false , precision , nextArg = function() { return args[argIndex++]; } , slurpNumber = function() { var digits = ''; while (/\d/.test(fmt[i])) { digits += fmt[i++]; c = fmt[i]; } return digits.length > 0 ? parseInt(digits) : null; } ; for (; i < n; ++i) { c = fmt[i]; if (escaped) { escaped = false; if (c == '.') { leadingZero = false; c = fmt[++i]; } else if (c == '0' && fmt[i + 1] == '.') { leadingZero = true; i += 2; c = fmt[i]; } else { leadingZero = true; } precision = slurpNumber(); switch (c) { case 'b': // number in binary result += parseInt(nextArg(), 10).toString(2); break; case 'c': // character arg = nextArg(); if (typeof arg === 'string' || arg instanceof String) result += arg; else result += String.fromCharCode(parseInt(arg, 10)); break; case 'd': // number in decimal result += parseInt(nextArg(), 10); break; case 'f': // floating point number tmp = String(parseFloat(nextArg()).toFixed(precision || 6)); result += leadingZero ? tmp : tmp.replace(/^0/, ''); break; case 'j': // JSON result += JSON.stringify(nextArg()); break; case 'o': // number in octal result += '0' + parseInt(nextArg(), 10).toString(8); break; case 's': // string result += nextArg(); break; case 'x': // lowercase hexadecimal result += '0x' + parseInt(nextArg(), 10).toString(16); break; case 'X': // uppercase hexadecimal result += '0x' + parseInt(nextArg(), 10).toString(16).toUpperCase(); break; default: result += c; break; } } else if (c === '%') { escaped = true; } else { result += c; } } return result; } }()); }); var fault = create$3(Error); var fault_1 = fault; fault.eval = create$3(EvalError); fault.range = create$3(RangeError); fault.reference = create$3(ReferenceError); fault.syntax = create$3(SyntaxError); fault.type = create$3(TypeError); fault.uri = create$3(URIError); fault.create = create$3; // Create a new `EConstructor`, with the formatted `format` as a first argument. function create$3(EConstructor) { FormattedError.displayName = EConstructor.displayName || EConstructor.name; return FormattedError function FormattedError(format$1) { if (format$1) { format$1 = format.apply(null, arguments); } return new EConstructor(format$1) } } var matters_1 = matters; var own$9 = {}.hasOwnProperty; var markers = { yaml: '-', toml: '+' }; function matters(options) { var results = []; var index = -1; var length; // One preset or matter. if (typeof options === 'string' || !('length' in options)) { options = [options]; } length = options.length; while (++index < length) { results[index] = matter(options[index]); } return results } function matter(option) { var result = option; if (typeof result === 'string') { if (!own$9.call(markers, result)) { throw fault_1('Missing matter definition for `%s`', result) } result = {type: result, marker: markers[result]}; } else if (typeof result !== 'object') { throw fault_1('Expected matter to be an object, not `%j`', result) } if (!own$9.call(result, 'type')) { throw fault_1('Missing `type` in matter `%j`', result) } if (!own$9.call(result, 'fence') && !own$9.call(result, 'marker')) { throw fault_1('Missing `marker` or `fence` in matter `%j`', result) } return result } var fence_1 = fence; function fence(matter, prop) { var marker; if (matter.marker) { marker = pick(matter.marker, prop); return marker + marker + marker } return pick(matter.fence, prop) } function pick(schema, prop) { return typeof schema === 'string' ? schema : schema[prop] } var parse$3 = create$2; function create$2(matter) { var name = matter.type + 'FrontMatter'; var open = fence_1(matter, 'open'); var close = fence_1(matter, 'close'); var newline = '\n'; var anywhere = matter.anywhere; frontmatter.displayName = name; frontmatter.onlyAtStart = typeof anywhere === 'boolean' ? !anywhere : true; return [name, frontmatter] function frontmatter(eat, value, silent) { var index = open.length; var offset; if (value.slice(0, index) !== open || value.charAt(index) !== newline) { return } offset = value.indexOf(close, index); while (offset !== -1 && value.charAt(offset - 1) !== newline) { index = offset + close.length; offset = value.indexOf(close, index); } if (offset !== -1) { /* istanbul ignore if - never used (yet) */ if (silent) { return true } return eat(value.slice(0, offset + close.length))({ type: matter.type, value: value.slice(open.length + 1, offset - 1) }) } } } var compile = create$1; function create$1(matter) { var type = matter.type; var open = fence_1(matter, 'open'); var close = fence_1(matter, 'close'); frontmatter.displayName = type + 'FrontMatter'; return [type, frontmatter] function frontmatter(node) { return open + (node.value ? '\n' + node.value : '') + '\n' + close } } var remarkFrontmatter = frontmatter; function frontmatter(options) { var parser = this.Parser; var compiler = this.Compiler; var config = matters_1(options || ['yaml']); if (isRemarkParser(parser)) { attachParser(parser, config); } if (isRemarkCompiler(compiler)) { attachCompiler(compiler, config); } } function attachParser(parser, matters) { var proto = parser.prototype; var tokenizers = wrap$1(parse$3, matters); var names = []; var key; for (key in tokenizers) { names.push(key); } proto.blockMethods = names.concat(proto.blockMethods); proto.blockTokenizers = Object.assign({}, tokenizers, proto.blockTokenizers); } function attachCompiler(compiler, matters) { var proto = compiler.prototype; proto.visitors = Object.assign({}, wrap$1(compile, matters), proto.visitors); } function wrap$1(func, matters) { var result = {}; var length = matters.length; var index = -1; var tuple; while (++index < length) { tuple = func(matters[index]); result[tuple[0]] = tuple[1]; } return result } function isRemarkParser(parser) { return Boolean(parser && parser.prototype && parser.prototype.blockTokenizers) } function isRemarkCompiler(compiler) { return Boolean(compiler && compiler.prototype && compiler.prototype.visitors) } var unistBuilder = u; function u(type, props, value) { var node; if ( (value === null || value === undefined) && (typeof props !== 'object' || Array.isArray(props)) ) { value = props; props = {}; } node = Object.assign({type: String(type)}, props); if (Array.isArray(value)) { node.children = value; } else if (value !== null && value !== undefined) { node.value = String(value); } return node } var start = factory$1('start'); var end = factory$1('end'); var unistUtilPosition = position; position.start = start; position.end = end; function position(node) { return {start: start(node), end: end(node)} } function factory$1(type) { point.displayName = type; return point function point(node) { var point = (node && node.position && node.position[type]) || {}; return { line: point.line || null, column: point.column || null, offset: isNaN(point.offset) ? null : point.offset } } } var unistUtilGenerated = generated; function generated(node) { var position = optional(optional(node).position); var start = optional(position.start); var end = optional(position.end); return !start.line || !start.column || !end.line || !end.column } function optional(value) { return value && typeof value === 'object' ? value : {} } var mdastUtilDefinitions = getDefinitionFactory; var own$8 = {}.hasOwnProperty; // Get a definition in `node` by `identifier`. function getDefinitionFactory(node, options) { return getterFactory(gather(node, options)) } // Gather all definitions in `node` function gather(node, options) { var cache = {}; if (!node || !node.type) { throw new Error('mdast-util-definitions expected node') } unistUtilVisit(node, 'definition', options && options.commonmark ? commonmark : normal); return cache function commonmark(definition) { var id = normalise(definition.identifier); if (!own$8.call(cache, id)) { cache[id] = definition; } } function normal(definition) { cache[normalise(definition.identifier)] = definition; } } // Factory to get a node from the given definition-cache. function getterFactory(cache) { return getter // Get a node from the bound definition-cache. function getter(identifier) { var id = identifier && normalise(identifier); return id && own$8.call(cache, id) ? cache[id] : null } } function normalise(identifier) { return identifier.toUpperCase() } var all_1$1 = all$2; function all$2(h, parent) { var nodes = parent.children || []; var length = nodes.length; var values = []; var index = -1; var result; var head; while (++index < length) { result = one_1$1(h, nodes[index], parent); if (result) { if (index && nodes[index - 1].type === 'break') { if (result.value) { result.value = result.value.replace(/^\s+/, ''); } head = result.children && result.children[0]; if (head && head.value) { head.value = head.value.replace(/^\s+/, ''); } } values = values.concat(result); } } return values } var one_1$1 = one$2; var own$7 = {}.hasOwnProperty; // Transform an unknown node. function unknown(h, node) { if (text$2(node)) { return h.augment(node, unistBuilder('text', node.value)) } return h(node, 'div', all_1$1(h, node)) } // Visit a node. function one$2(h, node, parent) { var type = node && node.type; var fn = own$7.call(h.handlers, type) ? h.handlers[type] : h.unknownHandler; // Fail on non-nodes. if (!type) { throw new Error('Expected node, got `' + node + '`') } return (typeof fn === 'function' ? fn : unknown)(h, node, parent) } // Check if the node should be renderered as a text node. function text$2(node) { var data = node.data || {}; if ( own$7.call(data, 'hName') || own$7.call(data, 'hProperties') || own$7.call(data, 'hChildren') ) { return false } return 'value' in node } var thematicBreak_1 = thematicBreak; function thematicBreak(h, node) { return h(node, 'hr') } var wrap_1 = wrap; // Wrap `nodes` with line feeds between each entry. // Optionally adds line feeds at the start and end. function wrap(nodes, loose) { var result = []; var index = -1; var length = nodes.length; if (loose) { result.push(unistBuilder('text', '\n')); } while (++index < length) { if (index) { result.push(unistBuilder('text', '\n')); } result.push(nodes[index]); } if (loose && nodes.length !== 0) { result.push(unistBuilder('text', '\n')); } return result } var list_1 = list; function list(h, node) { var props = {}; var name = node.ordered ? 'ol' : 'ul'; var items; var index = -1; var length; if (typeof node.start === 'number' && node.start !== 1) { props.start = node.start; } items = all_1$1(h, node); length = items.length; // Like GitHub, add a class for custom styling. while (++index < length) { if ( items[index].properties.className && items[index].properties.className.indexOf('task-list-item') !== -1 ) { props.className = ['contains-task-list']; break } } return h(node, name, props, wrap_1(items, true)) } var footer = generateFootnotes; function generateFootnotes(h) { var footnoteById = h.footnoteById; var footnoteOrder = h.footnoteOrder; var length = footnoteOrder.length; var index = -1; var listItems = []; var def; var backReference; var content; var tail; while (++index < length) { def = footnoteById[footnoteOrder[index].toUpperCase()]; if (!def) { continue } content = def.children.concat(); tail = content[content.length - 1]; backReference = { type: 'link', url: '#fnref-' + def.identifier, data: {hProperties: {className: ['footnote-backref']}}, children: [{type: 'text', value: '↩'}] }; if (!tail || tail.type !== 'paragraph') { tail = {type: 'paragraph', children: []}; content.push(tail); } tail.children.push(backReference); listItems.push({ type: 'listItem', data: {hProperties: {id: 'fn-' + def.identifier}}, children: content, position: def.position }); } if (listItems.length === 0) { return null } return h( null, 'div', {className: ['footnotes']}, wrap_1( [ thematicBreak_1(h), list_1(h, {type: 'list', ordered: true, children: listItems}) ], true ) ) } var blockquote_1 = blockquote; function blockquote(h, node) { return h(node, 'blockquote', wrap_1(all_1$1(h, node), true)) } var _break = hardBreak; function hardBreak(h, node) { return [h(node, 'br'), unistBuilder('text', '\n')] } var detab_1 = detab; var tab$1 = 0x09; var lineFeed$1 = 0x0a; var carriageReturn = 0x0d; // Replace tabs with spaces, being smart about which column the tab is at and // which size should be used. function detab(value, size) { var string = typeof value === 'string'; var length = string && value.length; var start = 0; var index = -1; var column = -1; var tabSize = size || 4; var results = []; var code; var add; if (!string) { throw new Error('detab expected string') } while (++index < length) { code = value.charCodeAt(index); if (code === tab$1) { add = tabSize - ((column + 1) % tabSize); column += add; results.push(value.slice(start, index) + repeatString(' ', add)); start = index + 1; } else if (code === lineFeed$1 || code === carriageReturn) { column = -1; } else { column++; } } results.push(value.slice(start)); return results.join('') } var code_1 = code; function code(h, node) { var value = node.value ? detab_1(node.value + '\n') : ''; var lang = node.lang && node.lang.match(/^[^ \t]+(?=[ \t]|$)/); var props = {}; if (lang) { props.className = ['language-' + lang]; } return h(node.position, 'pre', [h(node, 'code', props, [unistBuilder('text', value)])]) } var _delete = strikethrough; function strikethrough(h, node) { return h(node, 'del', all_1$1(h, node)) } var emphasis_1 = emphasis; function emphasis(h, node) { return h(node, 'em', all_1$1(h, node)) } var footnoteReference_1 = footnoteReference; function footnoteReference(h, node) { var footnoteOrder = h.footnoteOrder; var identifier = String(node.identifier); if (footnoteOrder.indexOf(identifier) === -1) { footnoteOrder.push(identifier); } return h(node.position, 'sup', {id: 'fnref-' + identifier}, [ h(node, 'a', {href: '#fn-' + identifier, className: ['footnote-ref']}, [ unistBuilder('text', node.label || identifier) ]) ]) } var footnote_1 = footnote; function footnote(h, node) { var footnoteById = h.footnoteById; var footnoteOrder = h.footnoteOrder; var identifier = 1; while (identifier in footnoteById) { identifier++; } identifier = String(identifier); // No need to check if `identifier` exists in `footnoteOrder`, it’s guaranteed // to not exist because we just generated it. footnoteOrder.push(identifier); footnoteById[identifier] = { type: 'footnoteDefinition', identifier: identifier, children: [{type: 'paragraph', children: node.children}], position: node.position }; return footnoteReference_1(h, { type: 'footnoteReference', identifier: identifier, position: node.position }) } var heading_1 = heading; function heading(h, node) { return h(node, 'h' + node.depth, all_1$1(h, node)) } var html_1$1 = html$3; // Return either a `raw` node in dangerous mode, otherwise nothing. function html$3(h, node) { return h.dangerous ? h.augment(node, unistBuilder('raw', node.value)) : null } var encodeCache = {}; // Create a lookup array where anything but characters in `chars` string // and alphanumeric chars is percent-encoded. // function getEncodeCache(exclude) { var i, ch, cache = encodeCache[exclude]; if (cache) { return cache; } cache = encodeCache[exclude] = []; for (i = 0; i < 128; i++) { ch = String.fromCharCode(i); if (/^[0-9a-z]$/i.test(ch)) { // always allow unencoded alphanumeric characters cache.push(ch); } else { cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2)); } } for (i = 0; i < exclude.length; i++) { cache[exclude.charCodeAt(i)] = exclude[i]; } return cache; } // Encode unsafe characters with percent-encoding, skipping already // encoded sequences. // // - string - string to encode // - exclude - list of characters to ignore (in addition to a-zA-Z0-9) // - keepEscaped - don't encode '%' in a correct escape sequence (default: true) // function encode$1(string, exclude, keepEscaped) { var i, l, code, nextCode, cache, result = ''; if (typeof exclude !== 'string') { // encode(string, keepEscaped) keepEscaped = exclude; exclude = encode$1.defaultChars; } if (typeof keepEscaped === 'undefined') { keepEscaped = true; } cache = getEncodeCache(exclude); for (i = 0, l = string.length; i < l; i++) { code = string.charCodeAt(i); if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) { if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) { result += string.slice(i, i + 3); i += 2; continue; } } if (code < 128) { result += cache[code]; continue; } if (code >= 0xD800 && code <= 0xDFFF) { if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { nextCode = string.charCodeAt(i + 1); if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { result += encodeURIComponent(string[i] + string[i + 1]); i++; continue; } } result += '%EF%BF%BD'; continue; } result += encodeURIComponent(string[i]); } return result; } encode$1.defaultChars = ";/?:@&=+$,-_.!~*'()#"; encode$1.componentChars = "-_.!~*'()"; var encode_1 = encode$1; var revert_1 = revert; // Return the content of a reference without definition as Markdown. function revert(h, node) { var subtype = node.referenceType; var suffix = ']'; var contents; var head; var tail; if (subtype === 'collapsed') { suffix += '[]'; } else if (subtype === 'full') { suffix += '[' + (node.label || node.identifier) + ']'; } if (node.type === 'imageReference') { return unistBuilder('text', '![' + node.alt + suffix) } contents = all_1$1(h, node); head = contents[0]; if (head && head.type === 'text') { head.value = '[' + head.value; } else { contents.unshift(unistBuilder('text', '[')); } tail = contents[contents.length - 1]; if (tail && tail.type === 'text') { tail.value += suffix; } else { contents.push(unistBuilder('text', suffix)); } return contents } var imageReference_1 = imageReference; function imageReference(h, node) { var def = h.definition(node.identifier); var props; if (!def) { return revert_1(h, node) } props = {src: encode_1(def.url || ''), alt: node.alt}; if (def.title !== null && def.title !== undefined) { props.title = def.title; } return h(node, 'img', props) } var image_1 = image$1; function image$1(h, node) { var props = {src: encode_1(node.url), alt: node.alt}; if (node.title !== null && node.title !== undefined) { props.title = node.title; } return h(node, 'img', props) } var inlineCode_1 = inlineCode; function inlineCode(h, node) { return h(node, 'code', [unistBuilder('text', collapseWhiteSpace(node.value))]) } var linkReference_1 = linkReference; function linkReference(h, node) { var def = h.definition(node.identifier); var props; if (!def) { return revert_1(h, node) } props = {href: encode_1(def.url || '')}; if (def.title !== null && def.title !== undefined) { props.title = def.title; } return h(node, 'a', props, all_1$1(h, node)) } var link_1 = link; function link(h, node) { var props = {href: encode_1(node.url)}; if (node.title !== null && node.title !== undefined) { props.title = node.title; } return h(node, 'a', props, all_1$1(h, node)) } var listItem_1 = listItem$1; function listItem$1(h, node, parent) { var children = node.children; var head = children[0]; var raw = all_1$1(h, node); var loose = parent ? listLoose(parent) : listItemLoose(node); var props = {}; var result; var container; var index; var length; var child; // Tight lists should not render `paragraph` nodes as `p` elements. if (loose) { result = raw; } else { result = []; length = raw.length; index = -1; while (++index < length) { child = raw[index]; if (child.tagName === 'p') { result = result.concat(child.children); } else { result.push(child); } } } if (typeof node.checked === 'boolean') { if (loose && (!head || head.type !== 'paragraph')) { result.unshift(h(null, 'p', [])); } container = loose ? result[0].children : result; if (container.length !== 0) { container.unshift(unistBuilder('text', ' ')); } container.unshift( h(null, 'input', { type: 'checkbox', checked: node.checked, disabled: true }) ); // According to github-markdown-css, this class hides bullet. // See: . props.className = ['task-list-item']; } if (loose && result.length !== 0) { result = wrap_1(result, true); } return h(node, 'li', props, result) } function listLoose(node) { var loose = node.spread; var children = node.children; var length = children.length; var index = -1; while (!loose && ++index < length) { loose = listItemLoose(children[index]); } return loose } function listItemLoose(node) { var spread = node.spread; return spread === undefined || spread === null ? node.children.length > 1 : spread } var paragraph_1 = paragraph; function paragraph(h, node) { return h(node, 'p', all_1$1(h, node)) } var root_1 = root; function root(h, node) { return h.augment(node, unistBuilder('root', wrap_1(all_1$1(h, node)))) } var strong_1 = strong; function strong(h, node) { return h(node, 'strong', all_1$1(h, node)) } var table_1 = table; function table(h, node) { var rows = node.children; var index = rows.length; var align = node.align; var alignLength = align.length; var result = []; var pos; var row; var out; var name; var cell; while (index--) { row = rows[index].children; name = index === 0 ? 'th' : 'td'; pos = alignLength; out = []; while (pos--) { cell = row[pos]; out[pos] = h(cell, name, {align: align[pos]}, cell ? all_1$1(h, cell) : []); } result[index] = h(rows[index], 'tr', wrap_1(out, true)); } return h( node, 'table', wrap_1( [ h(result[0].position, 'thead', wrap_1([result[0]], true)), h( { start: unistUtilPosition.start(result[1]), end: unistUtilPosition.end(result[result.length - 1]) }, 'tbody', wrap_1(result.slice(1), true) ) ], true ) ) } var trimLines_1 = trimLines; var ws = /[ \t]*\n+[ \t]*/g; var newline$1 = '\n'; function trimLines(value) { return String(value).replace(ws, newline$1) } var text_1$1 = text$1; function text$1(h, node) { return h.augment(node, unistBuilder('text', trimLines_1(node.value))) } var handlers$1 = { blockquote: blockquote_1, break: _break, code: code_1, delete: _delete, emphasis: emphasis_1, footnoteReference: footnoteReference_1, footnote: footnote_1, heading: heading_1, html: html_1$1, imageReference: imageReference_1, image: image_1, inlineCode: inlineCode_1, linkReference: linkReference_1, link: link_1, listItem: listItem_1, list: list_1, paragraph: paragraph_1, root: root_1, strong: strong_1, table: table_1, text: text_1$1, thematicBreak: thematicBreak_1, toml: ignore, yaml: ignore, definition: ignore, footnoteDefinition: ignore }; // Return nothing for nodes that are ignored. function ignore() { return null } var lib$2 = toHast; var own$6 = {}.hasOwnProperty; var deprecationWarningIssued = false; // Factory to transform. function factory(tree, options) { var settings = options || {}; // Issue a warning if the deprecated tag 'allowDangerousHTML' is used if (settings.allowDangerousHTML !== undefined && !deprecationWarningIssued) { deprecationWarningIssued = true; console.warn( 'mdast-util-to-hast: deprecation: `allowDangerousHTML` is nonstandard, use `allowDangerousHtml` instead' ); } var dangerous = settings.allowDangerousHtml || settings.allowDangerousHTML; var footnoteById = {}; h.dangerous = dangerous; h.definition = mdastUtilDefinitions(tree, settings); h.footnoteById = footnoteById; h.footnoteOrder = []; h.augment = augment; h.handlers = Object.assign({}, handlers$1, settings.handlers); h.unknownHandler = settings.unknownHandler; unistUtilVisit(tree, 'footnoteDefinition', onfootnotedefinition); return h // Finalise the created `right`, a hast node, from `left`, an mdast node. function augment(left, right) { var data; var ctx; // Handle `data.hName`, `data.hProperties, `data.hChildren`. if (left && 'data' in left) { data = left.data; if (right.type === 'element' && data.hName) { right.tagName = data.hName; } if (right.type === 'element' && data.hProperties) { right.properties = Object.assign({}, right.properties, data.hProperties); } if (right.children && data.hChildren) { right.children = data.hChildren; } } ctx = left && left.position ? left : {position: left}; if (!unistUtilGenerated(ctx)) { right.position = { start: unistUtilPosition.start(ctx), end: unistUtilPosition.end(ctx) }; } return right } // Create an element for `node`. function h(node, tagName, props, children) { if ( (children === undefined || children === null) && typeof props === 'object' && 'length' in props ) { children = props; props = {}; } return augment(node, { type: 'element', tagName: tagName, properties: props || {}, children: children || [] }) } function onfootnotedefinition(definition) { var id = String(definition.identifier).toUpperCase(); // Mimick CM behavior of link definitions. // See: . if (!own$6.call(footnoteById, id)) { footnoteById[id] = definition; } } } // Transform `tree`, which is an mdast node, to a hast node. function toHast(tree, options) { var h = factory(tree, options); var node = one_1$1(h, tree); var foot = footer(h); if (foot) { node.children = node.children.concat(unistBuilder('text', '\n'), foot); } return node } var mdastUtilToHast = lib$2; var remarkRehype = remark2rehype; // Attacher. // If a destination is given, runs the destination with the new hast tree // (bridge mode). // Without destination, returns the tree: further plugins run on that tree // (mutate mode). function remark2rehype(destination, options) { if (destination && !destination.process) { options = destination; destination = null; } return destination ? bridge(destination, options) : mutate(options) } // Bridge mode. // Runs the destination with the new hast tree. function bridge(destination, options) { return transformer function transformer(node, file, next) { destination.run(mdastUtilToHast(node, options), file, done); function done(err) { next(err); } } } // Mutate-mode. // Further transformers run on the hast tree. function mutate(options) { return transformer function transformer(node) { return mdastUtilToHast(node, options) } } var schema$1 = Schema$2; var proto$2 = Schema$2.prototype; proto$2.space = null; proto$2.normal = {}; proto$2.property = {}; function Schema$2(property, normal, space) { this.property = property; this.normal = normal; if (space) { this.space = space; } } var merge_1 = merge$1; function merge$1(definitions) { var length = definitions.length; var property = []; var normal = []; var index = -1; var info; var space; while (++index < length) { info = definitions[index]; property.push(info.property); normal.push(info.normal); space = info.space; } return new schema$1( immutable.apply(null, property), immutable.apply(null, normal), space ) } var normalize_1 = normalize; function normalize(value) { return value.toLowerCase() } var info = Info; var proto$1 = Info.prototype; proto$1.space = null; proto$1.attribute = null; proto$1.property = null; proto$1.boolean = false; proto$1.booleanish = false; proto$1.overloadedBoolean = false; proto$1.number = false; proto$1.commaSeparated = false; proto$1.spaceSeparated = false; proto$1.commaOrSpaceSeparated = false; proto$1.mustUseProperty = false; proto$1.defined = false; function Info(property, attribute) { this.property = property; this.attribute = attribute; } var powers = 0; var boolean_1 = increment(); var booleanish$2 = increment(); var overloadedBoolean$1 = increment(); var number$3 = increment(); var spaceSeparated$3 = increment(); var commaSeparated$2 = increment(); var commaOrSpaceSeparated$1 = increment(); function increment() { return Math.pow(2, ++powers) } var types = { boolean: boolean_1, booleanish: booleanish$2, overloadedBoolean: overloadedBoolean$1, number: number$3, spaceSeparated: spaceSeparated$3, commaSeparated: commaSeparated$2, commaOrSpaceSeparated: commaOrSpaceSeparated$1 }; var definedInfo = DefinedInfo; DefinedInfo.prototype = new info(); DefinedInfo.prototype.defined = true; var checks = [ 'boolean', 'booleanish', 'overloadedBoolean', 'number', 'commaSeparated', 'spaceSeparated', 'commaOrSpaceSeparated' ]; var checksLength = checks.length; function DefinedInfo(property, attribute, mask, space) { var index = -1; var check; mark$1(this, 'space', space); info.call(this, property, attribute); while (++index < checksLength) { check = checks[index]; mark$1(this, check, (mask & types[check]) === types[check]); } } function mark$1(values, key, value) { if (value) { values[key] = value; } } var create_1 = create; function create(definition) { var space = definition.space; var mustUseProperty = definition.mustUseProperty || []; var attributes = definition.attributes || {}; var props = definition.properties; var transform = definition.transform; var property = {}; var normal = {}; var prop; var info; for (prop in props) { info = new definedInfo( prop, transform(attributes, prop), props[prop], space ); if (mustUseProperty.indexOf(prop) !== -1) { info.mustUseProperty = true; } property[prop] = info; normal[normalize_1(prop)] = prop; normal[normalize_1(info.attribute)] = prop; } return new schema$1(property, normal, space) } var xlink = create_1({ space: 'xlink', transform: xlinkTransform, properties: { xLinkActuate: null, xLinkArcRole: null, xLinkHref: null, xLinkRole: null, xLinkShow: null, xLinkTitle: null, xLinkType: null } }); function xlinkTransform(_, prop) { return 'xlink:' + prop.slice(5).toLowerCase() } var xml = create_1({ space: 'xml', transform: xmlTransform, properties: { xmlLang: null, xmlBase: null, xmlSpace: null } }); function xmlTransform(_, prop) { return 'xml:' + prop.slice(3).toLowerCase() } var caseSensitiveTransform_1 = caseSensitiveTransform; function caseSensitiveTransform(attributes, attribute) { return attribute in attributes ? attributes[attribute] : attribute } var caseInsensitiveTransform_1 = caseInsensitiveTransform; function caseInsensitiveTransform(attributes, property) { return caseSensitiveTransform_1(attributes, property.toLowerCase()) } var xmlns = create_1({ space: 'xmlns', attributes: { xmlnsxlink: 'xmlns:xlink' }, transform: caseInsensitiveTransform_1, properties: { xmlns: null, xmlnsXLink: null } }); var booleanish$1 = types.booleanish; var number$2 = types.number; var spaceSeparated$2 = types.spaceSeparated; var aria = create_1({ transform: ariaTransform, properties: { ariaActiveDescendant: null, ariaAtomic: booleanish$1, ariaAutoComplete: null, ariaBusy: booleanish$1, ariaChecked: booleanish$1, ariaColCount: number$2, ariaColIndex: number$2, ariaColSpan: number$2, ariaControls: spaceSeparated$2, ariaCurrent: null, ariaDescribedBy: spaceSeparated$2, ariaDetails: null, ariaDisabled: booleanish$1, ariaDropEffect: spaceSeparated$2, ariaErrorMessage: null, ariaExpanded: booleanish$1, ariaFlowTo: spaceSeparated$2, ariaGrabbed: booleanish$1, ariaHasPopup: null, ariaHidden: booleanish$1, ariaInvalid: null, ariaKeyShortcuts: null, ariaLabel: null, ariaLabelledBy: spaceSeparated$2, ariaLevel: number$2, ariaLive: null, ariaModal: booleanish$1, ariaMultiLine: booleanish$1, ariaMultiSelectable: booleanish$1, ariaOrientation: null, ariaOwns: spaceSeparated$2, ariaPlaceholder: null, ariaPosInSet: number$2, ariaPressed: booleanish$1, ariaReadOnly: booleanish$1, ariaRelevant: null, ariaRequired: booleanish$1, ariaRoleDescription: spaceSeparated$2, ariaRowCount: number$2, ariaRowIndex: number$2, ariaRowSpan: number$2, ariaSelected: booleanish$1, ariaSetSize: number$2, ariaSort: null, ariaValueMax: number$2, ariaValueMin: number$2, ariaValueNow: number$2, ariaValueText: null, role: null } }); function ariaTransform(_, prop) { return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase() } var boolean$1 = types.boolean; var overloadedBoolean = types.overloadedBoolean; var booleanish = types.booleanish; var number$1 = types.number; var spaceSeparated$1 = types.spaceSeparated; var commaSeparated$1 = types.commaSeparated; var html$2 = create_1({ space: 'html', attributes: { acceptcharset: 'accept-charset', classname: 'class', htmlfor: 'for', httpequiv: 'http-equiv' }, transform: caseInsensitiveTransform_1, mustUseProperty: ['checked', 'multiple', 'muted', 'selected'], properties: { // Standard Properties. abbr: null, accept: commaSeparated$1, acceptCharset: spaceSeparated$1, accessKey: spaceSeparated$1, action: null, allow: null, allowFullScreen: boolean$1, allowPaymentRequest: boolean$1, allowUserMedia: boolean$1, alt: null, as: null, async: boolean$1, autoCapitalize: null, autoComplete: spaceSeparated$1, autoFocus: boolean$1, autoPlay: boolean$1, capture: boolean$1, charSet: null, checked: boolean$1, cite: null, className: spaceSeparated$1, cols: number$1, colSpan: null, content: null, contentEditable: booleanish, controls: boolean$1, controlsList: spaceSeparated$1, coords: number$1 | commaSeparated$1, crossOrigin: null, data: null, dateTime: null, decoding: null, default: boolean$1, defer: boolean$1, dir: null, dirName: null, disabled: boolean$1, download: overloadedBoolean, draggable: booleanish, encType: null, enterKeyHint: null, form: null, formAction: null, formEncType: null, formMethod: null, formNoValidate: boolean$1, formTarget: null, headers: spaceSeparated$1, height: number$1, hidden: boolean$1, high: number$1, href: null, hrefLang: null, htmlFor: spaceSeparated$1, httpEquiv: spaceSeparated$1, id: null, imageSizes: null, imageSrcSet: commaSeparated$1, inputMode: null, integrity: null, is: null, isMap: boolean$1, itemId: null, itemProp: spaceSeparated$1, itemRef: spaceSeparated$1, itemScope: boolean$1, itemType: spaceSeparated$1, kind: null, label: null, lang: null, language: null, list: null, loop: boolean$1, low: number$1, manifest: null, max: null, maxLength: number$1, media: null, method: null, min: null, minLength: number$1, multiple: boolean$1, muted: boolean$1, name: null, nonce: null, noModule: boolean$1, noValidate: boolean$1, onAbort: null, onAfterPrint: null, onAuxClick: null, onBeforePrint: null, onBeforeUnload: null, onBlur: null, onCancel: null, onCanPlay: null, onCanPlayThrough: null, onChange: null, onClick: null, onClose: null, onContextMenu: null, onCopy: null, onCueChange: null, onCut: null, onDblClick: null, onDrag: null, onDragEnd: null, onDragEnter: null, onDragExit: null, onDragLeave: null, onDragOver: null, onDragStart: null, onDrop: null, onDurationChange: null, onEmptied: null, onEnded: null, onError: null, onFocus: null, onFormData: null, onHashChange: null, onInput: null, onInvalid: null, onKeyDown: null, onKeyPress: null, onKeyUp: null, onLanguageChange: null, onLoad: null, onLoadedData: null, onLoadedMetadata: null, onLoadEnd: null, onLoadStart: null, onMessage: null, onMessageError: null, onMouseDown: null, onMouseEnter: null, onMouseLeave: null, onMouseMove: null, onMouseOut: null, onMouseOver: null, onMouseUp: null, onOffline: null, onOnline: null, onPageHide: null, onPageShow: null, onPaste: null, onPause: null, onPlay: null, onPlaying: null, onPopState: null, onProgress: null, onRateChange: null, onRejectionHandled: null, onReset: null, onResize: null, onScroll: null, onSecurityPolicyViolation: null, onSeeked: null, onSeeking: null, onSelect: null, onSlotChange: null, onStalled: null, onStorage: null, onSubmit: null, onSuspend: null, onTimeUpdate: null, onToggle: null, onUnhandledRejection: null, onUnload: null, onVolumeChange: null, onWaiting: null, onWheel: null, open: boolean$1, optimum: number$1, pattern: null, ping: spaceSeparated$1, placeholder: null, playsInline: boolean$1, poster: null, preload: null, readOnly: boolean$1, referrerPolicy: null, rel: spaceSeparated$1, required: boolean$1, reversed: boolean$1, rows: number$1, rowSpan: number$1, sandbox: spaceSeparated$1, scope: null, scoped: boolean$1, seamless: boolean$1, selected: boolean$1, shape: null, size: number$1, sizes: null, slot: null, span: number$1, spellCheck: booleanish, src: null, srcDoc: null, srcLang: null, srcSet: commaSeparated$1, start: number$1, step: null, style: null, tabIndex: number$1, target: null, title: null, translate: null, type: null, typeMustMatch: boolean$1, useMap: null, value: booleanish, width: number$1, wrap: null, // Legacy. // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis align: null, // Several. Use CSS `text-align` instead, aLink: null, // ``. Use CSS `a:active {color}` instead archive: spaceSeparated$1, // ``. List of URIs to archives axis: null, // `` and ``. Use `scope` on `` background: null, // ``. Use CSS `background-image` instead bgColor: null, // `` and table elements. Use CSS `background-color` instead border: number$1, // ``. Use CSS `border-width` instead, borderColor: null, // `
`. Use CSS `border-color` instead, bottomMargin: number$1, // `` cellPadding: null, // `
` cellSpacing: null, // `
` char: null, // Several table elements. When `align=char`, sets the character to align on charOff: null, // Several table elements. When `char`, offsets the alignment classId: null, // `` clear: null, // `
`. Use CSS `clear` instead code: null, // `` codeBase: null, // `` codeType: null, // `` color: null, // `` and `
`. Use CSS instead compact: boolean$1, // Lists. Use CSS to reduce space between items instead declare: boolean$1, // `` event: null, // `${newline}`, }); } else if (import_script) { instance[0].value = (instance[0].value ).replace( RE_SCRIPT, `$1${newline}\t${import_script}` ); } // inject the frontmatter into the module script if there is any, reusing the existing module script if one exists if (!_module[0] && fm) { _module.push({ type: 'raw', value: ``, }); } else if (fm) { // @ts-ignore _module[0].value = _module[0].value.replace( RE_MODULE_SCRIPT, `$1${newline}\t${fm}` ); } // smoosh it all together in an order that makes sense, // if using a layout we only wrap the html and nothing else //@ts-ignore node.children = [ //@ts-ignore ..._module, //@ts-ignore { type: 'raw', value: _module[0] ? newline : '' }, //@ts-ignore ...instance, //@ts-ignore { type: 'raw', value: instance[0] ? newline : '' }, //@ts-ignore ...css, //@ts-ignore { type: 'raw', value: css[0] ? newline : '' }, //@ts-ignore ...special, //@ts-ignore { type: 'raw', value: special[0] ? newline : '' }, { //@ts-ignore type: 'raw', value: import_script ? `` : '', }, //@ts-ignore { type: 'raw', value: newline }, //@ts-ignore ...html, //@ts-ignore { type: 'raw', value: newline }, //@ts-ignore { type: 'raw', value: import_script ? '' : '' }, ]; }); }; } // highlighting stuff // { [lang]: { path, deps: pointer to key } } const langs = {}; let Prism; const make_path = (base_path, id) => base_path.replace('{id}', id); // we need to get all language metadata // also track if they depend on other languages so we can autoload without breaking // i don't actually know what the require key means but it sounds important function get_lang_info( name, lang_meta, base_path ) { const _lang_meta = { name, path: `prismjs/${make_path(base_path, name)}`, deps: new Set(), }; const aliases = new Set(); // TODO: DRY this up, it is literally identical if (lang_meta.require) { if (Array.isArray(lang_meta.require)) { lang_meta.require.forEach((id) => _lang_meta.deps.add(id)); } else { _lang_meta.deps.add(lang_meta.require); } } if (lang_meta.peerDependencies) { if (Array.isArray(lang_meta.peerDependencies)) { lang_meta.peerDependencies.forEach((id) => _lang_meta.deps.add(id)); } else { _lang_meta.deps.add(lang_meta.peerDependencies); } } if (lang_meta.alias) { if (Array.isArray(lang_meta.alias)) { lang_meta.alias.forEach((id) => aliases.add(id)); } else { aliases.add(lang_meta.alias); } } return [{ ..._lang_meta, aliases }, aliases]; } // workaround for ts weirdness - intersection types work better with interfaces vs object literals function load_language_metadata() { if (!(process ).browser) { const { meta, ...languages } = require('prismjs/components.json').languages; for (const lang in languages) { const [lang_info, aliases] = get_lang_info( lang, languages[lang], meta.path ); langs[lang] = lang_info; aliases.forEach((_n) => { langs[_n] = langs[lang]; }); } const svelte_meta = { name: 'svelte', aliases: new Set(['sv']), path: 'prism-svelte', deps: new Set(['javscript', 'css']), }; langs.svelte = svelte_meta; langs.sv = svelte_meta; } } function load_language(lang) { if (!(process ).browser) { if (!langs[lang]) return; langs[lang].deps.forEach((name) => load_language(name)); require(langs[lang].path); } } function highlight_blocks({ highlighter: highlight_fn, alias, } = {}) { if (highlight_fn && !(process ).browser) { load_language_metadata(); if (alias) { for (const lang in alias) { langs[lang] = langs[alias[lang]]; } } } return async function (tree) { if (highlight_fn) { const nodes = []; unistUtilVisit(tree, 'code', (node) => { nodes.push(node); }); await Promise.all( nodes.map(async (node) => { (node ).type = 'html'; node.value = await highlight_fn( node.value, (node ).lang, (node ).meta ); }) ); } }; } // escape curlies, backtick, \t, \r, \n to avoid breaking output of {@html `here`} in .svelte const escape_svelty = (str) => str .replace( /[{}`]/g, //@ts-ignore (c) => ({ '{': '{', '}': '}', '`': '`' }[c]) ) .replace(/\\([trn])/g, '\$1'); const code_highlight = (code, lang) => { const normalised_lang = _optionalChain([lang, 'optionalAccess', _ => _.toLowerCase, 'call', _2 => _2()]); if (!(process ).browser) { let _lang = !!normalised_lang && langs[normalised_lang]; if (!Prism) Prism = require('prismjs'); if (_lang && !Prism.languages[_lang.name]) { load_language(_lang.name); } if (!_lang && normalised_lang && Prism.languages[normalised_lang]) { langs[normalised_lang] = { name: lang } ; _lang = langs[normalised_lang]; } const highlighted = escape_svelty( _lang ? Prism.highlight(code, Prism.languages[_lang.name], _lang.name) : escapeHtml_1(code) ); return `
{@html \`${highlighted}\`}
`; } else { const highlighted = escape_svelty(escapeHtml_1(code)); return `
{@html \`${highlighted}\`}
`; } }; function stringify( options = {}) { this.Compiler = compiler; function compiler(tree) { return prettyhtmlHastToHtml(tree, options); } } const apply_plugins = (plugins, parser) => { (plugins ).forEach((plugin) => { if (Array.isArray(plugin)) { if (plugin[1] && plugin[1]) parser.use(plugin[0], plugin[1]); else parser.use(plugin[0]); } else { parser.use(plugin); } }); return parser; }; function transform( { remarkPlugins = [], rehypePlugins = [], frontmatter, smartypants, layout, layout_mode, highlight, } = { layout_mode: 'single' } ) { const fm_opts = frontmatter ? frontmatter : { parse: default_frontmatter, type: 'yaml', marker: '-' }; const toMDAST = unified_1$1() .use(remarkParse) .use(mdsvex_parser) .use(remarkExternalLinks, { target: false, rel: ['nofollow'] }) .use(escape_code, { blocks: !!highlight }) .use(remarkFrontmatter, [{ type: fm_opts.type, marker: fm_opts.marker }]) .use(parse_frontmatter, { parse: fm_opts.parse, type: fm_opts.type }); if (smartypants) { toMDAST.use( smartypants_transformer, typeof smartypants === 'boolean' ? {} : smartypants ); } apply_plugins(remarkPlugins, toMDAST).use(highlight_blocks, highlight || {}); const toHAST = toMDAST .use(remarkRehype, { // @ts-ignore allowDangerousHtml: true, allowDangerousCharacters: true, }) .use(transform_hast, { layout, layout_mode }); apply_plugins(rehypePlugins, toHAST); const processor = toHAST.use(stringify, { allowDangerousHtml: true, allowDangerousCharacters: true, }); return processor; } const defaults = { remarkPlugins: [], rehypePlugins: [], smartypants: true, extension: '.svx', highlight: { highlighter: code_highlight }, }; function to_posix(_path) { const isExtendedLengthPath = /^\\\\\?\\/.test(_path); const hasNonAscii = /[^\u0000-\u0080]+/.test(_path); if (isExtendedLengthPath || hasNonAscii) { return _path; } return _path.replace(/\\/g, '/'); } function resolve_layout(layout_path) { try { return to_posix(require.resolve(layout_path)); } catch (e) { try { const _path = join(process.cwd(), layout_path); return to_posix(require.resolve(_path)); } catch (e) { throw new Error( `The layout path you provided couldn't be found at either ${layout_path} or ${join( process.cwd(), layout_path )}. Please double-check it and try again.` ); } } } // handle custom components function process_layouts(layouts) { const _layouts = layouts; for (const key in _layouts) { const layout = fs.readFileSync(_layouts[key].path, { encoding: 'utf8' }); let ast; try { ast = parse$8(layout); } catch (e) { throw new Error(e.toString() + `\n at ${_layouts[key].path}`); } if (ast.module) { const component_exports = ast.module.content.body.filter( (node) => node.type === 'ExportNamedDeclaration' ) ; if (component_exports.length) { _layouts[key].components = []; for (let i = 0; i < component_exports.length; i++) { if ( component_exports[i].specifiers && component_exports[i].specifiers.length ) { for (let j = 0; j < component_exports[i].specifiers.length; j++) { _layouts[key].components.push( component_exports[i].specifiers[j].exported.name ); } //@ts-ignore } else if (component_exports[i].declaration.declarations) { //@ts-ignore const declarations = component_exports[i].declaration.declarations; for (let j = 0; j < declarations.length; j++) { _layouts[key].components.push(declarations[j].id.name); } } else if (component_exports[i].declaration) { _layouts[key].components.push( //@ts-ignore component_exports[i].declaration.id.name ); } } } } } return _layouts; } /** * The svelte preprocessor for use with svelte.preprocess * * **options** - An options object with the following properties, all are optional. * * - `extension` - The extension to use for mdsvex files * - `extensions` - The extensions to use for mdsvex files * - `layout` - Layouts to apply to mdsvex documents * - `frontmatter` - frontmatter options for documents * - `highlight` - syntax highlighting options * - `smartypants` - smart typography options * - `remarkPlugins` - remark plugins to apply to the markdown * - `rehypePlugins` - rehype plugins to apply to the rendered html * */ const mdsvex = (options = defaults) => { const { remarkPlugins = [], rehypePlugins = [], smartypants = true, extension = '.svx', extensions, layout = false, highlight = { highlighter: code_highlight }, frontmatter, } = options; //@ts-ignore if (options.layouts) { throw new Error( `mdsvex: "layouts" is not a valid option. Did you mean "layout"?` ); } const unknown_opts = []; const known_opts = [ 'filename', 'remarkPlugins', 'rehypePlugins', 'smartypants', 'extension', 'extensions', 'layout', 'highlight', 'frontmatter', ]; for (const opt in options) { if (!known_opts.includes(opt)) unknown_opts.push(opt); } if (unknown_opts.length) { console.warn( `mdsvex: Received unknown options: ${unknown_opts.join( ', ' )}. Valid options are: ${known_opts.join(', ')}.` ); } let _layout = {}; let layout_mode = 'single'; if (typeof layout === 'string') { _layout.__mdsvex_default = { path: resolve_layout(layout), components: [] }; } else if (typeof layout === 'object') { layout_mode = 'named'; for (const name in layout) { _layout[name] = { path: resolve_layout(layout[name]), components: [] }; } } if (highlight && highlight.highlighter === undefined) { highlight.highlighter = code_highlight; } _layout = process_layouts(_layout); const parser = transform({ remarkPlugins, rehypePlugins, smartypants, layout: _layout, layout_mode, highlight, frontmatter, }); return { markup: async ({ content, filename }) => { const extensionsParts = (extensions || [extension]).map((ext) => ext.split('.').pop() ); if (!extensionsParts.includes(filename.split('.').pop())) return; const parsed = await parser.process({ contents: content, filename }); return { code: parsed.contents , data: parsed.data , map: '', }; }, }; }; /** * The standalone compile function. * * - **source** - the source code to convert. * - **options** - An options object with the following properties, all are optional. * * - `filename` - The filename of the generated file * - `extension` - The extension to use for mdsvex files * - `extensions` - The extensions to use for mdsvex files * - `layout` - Layouts to apply to mdsvex documents * - `frontmatter` - frontmatter options for documents * - `highlight` - syntax highlighting options * - `smartypants` - smart typography options * - `remarkPlugins` - remark plugins to apply to the markdown * - `rehypePlugins` - rehype plugins to apply to the rendered html */ const _compile = ( source, opts ) => mdsvex(opts).markup({ content: source, filename: (opts && opts.filename) || `file${ (opts && ((opts.extensions && opts.extensions[0]) || opts.extension)) || '.svx' }`, }); export { _compile as compile, defineConfig as defineMDSveXConfig, escape_svelty as escapeSvelte, mdsvex };