ember-source 5.4.0 → 5.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["license.js","loader.js","@ember/-internals/browser-environment/index.js","@ember/-internals/environment/index.js","@ember/-internals/utils/index.js","@ember/canary-features/index.js","@ember/debug/container-debug-adapter.js","@ember/debug/data-adapter.js","@ember/debug/index.js","@ember/debug/lib/capture-render-tree.js","@ember/debug/lib/deprecate.js","@ember/debug/lib/handlers.js","@ember/debug/lib/inspect.js","@ember/debug/lib/testing.js","@ember/debug/lib/warn.js","@ember/deprecated-features/index.js","@glimmer/compiler.js","@glimmer/env.js","@glimmer/syntax.js","@glimmer/util.js","@glimmer/wire-format.js","@handlebars/parser/index.js","ember-babel.js","ember-template-compiler/index.js","ember-template-compiler/lib/plugins/assert-against-attrs.js","ember-template-compiler/lib/plugins/assert-against-named-outlets.js","ember-template-compiler/lib/plugins/assert-input-helper-without-block.js","ember-template-compiler/lib/plugins/assert-reserved-named-arguments.js","ember-template-compiler/lib/plugins/assert-splattribute-expression.js","ember-template-compiler/lib/plugins/index.js","ember-template-compiler/lib/plugins/transform-action-syntax.js","ember-template-compiler/lib/plugins/transform-each-in-into-each.js","ember-template-compiler/lib/plugins/transform-each-track-array.js","ember-template-compiler/lib/plugins/transform-in-element.js","ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js","ember-template-compiler/lib/plugins/transform-resolutions.js","ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet.js","ember-template-compiler/lib/plugins/utils.js","ember-template-compiler/lib/system/bootstrap.js","ember-template-compiler/lib/system/calculate-location-display.js","ember-template-compiler/lib/system/compile-options.js","ember-template-compiler/lib/system/compile.js","ember-template-compiler/lib/system/dasherize-component-name.js","ember-template-compiler/lib/system/initializer.js","ember-template-compiler/lib/system/precompile.js","ember-template-compiler/lib/types.js","ember/version.js","simple-html-tokenizer.js"],"sourcesContent":["/*!\n * @overview Ember - JavaScript Application Framework\n * @copyright Copyright 2011 Tilde Inc. and contributors\n * Portions Copyright 2006-2011 Strobe Inc.\n * Portions Copyright 2008-2011 Apple Inc. All rights reserved.\n * @license Licensed under MIT license\n * See https://raw.github.com/emberjs/ember.js/master/LICENSE\n * @version 5.4.0\n */\n","/* eslint-disable no-var */\n/* globals global globalThis self */\n/* eslint-disable-next-line no-unused-vars */\nvar define, require;\n\n(function () {\n var globalObj =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : null;\n\n if (globalObj === null) {\n throw new Error('unable to locate global object');\n }\n\n if (typeof globalObj.define === 'function' && typeof globalObj.require === 'function') {\n define = globalObj.define;\n require = globalObj.require;\n\n return;\n }\n\n var registry = Object.create(null);\n var seen = Object.create(null);\n\n function missingModule(name, referrerName) {\n if (referrerName) {\n throw new Error('Could not find module ' + name + ' required by: ' + referrerName);\n } else {\n throw new Error('Could not find module ' + name);\n }\n }\n\n function internalRequire(_name, referrerName) {\n var name = _name;\n var mod = registry[name];\n\n if (!mod) {\n name = name + '/index';\n mod = registry[name];\n }\n\n var exports = seen[name];\n\n if (exports !== undefined) {\n return exports;\n }\n\n exports = seen[name] = {};\n\n if (!mod) {\n missingModule(_name, referrerName);\n }\n\n var deps = mod.deps;\n var callback = mod.callback;\n var reified = new Array(deps.length);\n\n for (var i = 0; i < deps.length; i++) {\n if (deps[i] === 'exports') {\n reified[i] = exports;\n } else if (deps[i] === 'require') {\n reified[i] = require;\n } else {\n reified[i] = require(deps[i], name);\n }\n }\n\n callback.apply(this, reified);\n\n return exports;\n }\n\n require = function (name) {\n return internalRequire(name, null);\n };\n\n define = function (name, deps, callback) {\n registry[name] = { deps: deps, callback: callback };\n };\n\n // setup `require` module\n require['default'] = require;\n\n require.has = function registryHas(moduleName) {\n return Boolean(registry[moduleName]) || Boolean(registry[moduleName + '/index']);\n };\n\n require._eak_seen = require.entries = registry;\n})();\n","define(\"@ember/-internals/browser-environment/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.window = _exports.userAgent = _exports.location = _exports.isFirefox = _exports.isChrome = _exports.history = _exports.hasDOM = void 0;\n // check if window exists and actually is the global\n var hasDom = typeof self === 'object' && self !== null && self.Object === Object && typeof Window !== 'undefined' && self.constructor === Window && typeof document === 'object' && document !== null && self.document === document && typeof location === 'object' && location !== null && self.location === location && typeof history === 'object' && history !== null && self.history === history && typeof navigator === 'object' && navigator !== null && self.navigator === navigator && typeof navigator.userAgent === 'string';\n _exports.hasDOM = hasDom;\n var window = hasDom ? self : null;\n _exports.window = window;\n var location$1 = hasDom ? self.location : null;\n _exports.location = location$1;\n var history$1 = hasDom ? self.history : null;\n _exports.history = history$1;\n var userAgent = hasDom ? self.navigator.userAgent : 'Lynx (textmode)';\n _exports.userAgent = userAgent;\n var isChrome = hasDom ? typeof chrome === 'object' && !(typeof opera === 'object') : false;\n _exports.isChrome = isChrome;\n var isFirefox = hasDom ? /Firefox|FxiOS/.test(userAgent) : false;\n _exports.isFirefox = isFirefox;\n});","define(\"@ember/-internals/environment/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.context = _exports.ENV = void 0;\n _exports.getENV = getENV;\n _exports.getLookup = getLookup;\n _exports.global = void 0;\n _exports.setLookup = setLookup;\n // from lodash to catch fake globals\n function checkGlobal(value) {\n return value && value.Object === Object ? value : undefined;\n }\n // element ids can ruin global miss checks\n function checkElementIdShadowing(value) {\n return value && value.nodeType === undefined ? value : undefined;\n }\n // export real global\n var global$1 = checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) || checkGlobal(typeof self === 'object' && self) || checkGlobal(typeof window === 'object' && window) || typeof mainContext !== 'undefined' && mainContext ||\n // set before strict mode in Ember loader/wrapper\n new Function('return this')(); // eval outside of strict mode\n\n // legacy imports/exports/lookup stuff (should we keep this??)\n _exports.global = global$1;\n var context = function (global, Ember) {\n return Ember === undefined ? {\n imports: global,\n exports: global,\n lookup: global\n } : {\n // import jQuery\n imports: Ember.imports || global,\n // export Ember\n exports: Ember.exports || global,\n // search for Namespaces\n lookup: Ember.lookup || global\n };\n }(global$1, global$1.Ember);\n _exports.context = context;\n function getLookup() {\n return context.lookup;\n }\n function setLookup(value) {\n context.lookup = value;\n }\n\n /**\n The hash of environment variables used to control various configuration\n settings. To specify your own or override default settings, add the\n desired properties to a global hash named `EmberENV` (or `ENV` for\n backwards compatibility with earlier versions of Ember). The `EmberENV`\n hash must be created before loading Ember.\n \n @class EmberENV\n @type Object\n @public\n */\n var ENV = {\n ENABLE_OPTIONAL_FEATURES: false,\n /**\n Determines whether Ember should add to `Array`\n native object prototypes, a few extra methods in order to provide a more\n friendly API.\n We generally recommend leaving this option set to true however, if you need\n to turn it off, you can add the configuration property\n `EXTEND_PROTOTYPES` to `EmberENV` and set it to `false`.\n Note, when disabled (the default configuration for Ember Addons), you will\n instead have to access all methods and functions from the Ember\n namespace.\n @property EXTEND_PROTOTYPES\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n EXTEND_PROTOTYPES: {\n Array: true\n },\n /**\n The `LOG_STACKTRACE_ON_DEPRECATION` property, when true, tells Ember to log\n a full stack trace during deprecation warnings.\n @property LOG_STACKTRACE_ON_DEPRECATION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_STACKTRACE_ON_DEPRECATION: true,\n /**\n The `LOG_VERSION` property, when true, tells Ember to log versions of all\n dependent libraries in use.\n @property LOG_VERSION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_VERSION: true,\n RAISE_ON_DEPRECATION: false,\n STRUCTURED_PROFILE: false,\n /**\n Whether to insert a `<div class=\"ember-view\" />` wrapper around the\n application template. See RFC #280.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _APPLICATION_TEMPLATE_WRAPPER\n @for EmberENV\n @type Boolean\n @default true\n @private\n */\n _APPLICATION_TEMPLATE_WRAPPER: true,\n /**\n Whether to use Glimmer Component semantics (as opposed to the classic \"Curly\"\n components semantics) for template-only components. See RFC #278.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _TEMPLATE_ONLY_GLIMMER_COMPONENTS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _TEMPLATE_ONLY_GLIMMER_COMPONENTS: false,\n /**\n Whether to perform extra bookkeeping needed to make the `captureRenderTree`\n API work.\n This has to be set before the ember JavaScript code is evaluated. This is\n usually done by setting `window.EmberENV = { _DEBUG_RENDER_TREE: true };`\n before the \"vendor\" `<script>` tag in `index.html`.\n Setting the flag after Ember is already loaded will not work correctly. It\n may appear to work somewhat, but fundamentally broken.\n This is not intended to be set directly. Ember Inspector will enable the\n flag on behalf of the user as needed.\n This flag is always on in development mode.\n The flag is off by default in production mode, due to the cost associated\n with the the bookkeeping work.\n The expected flow is that Ember Inspector will ask the user to refresh the\n page after enabling the feature. It could also offer a feature where the\n user add some domains to the \"always on\" list. In either case, Ember\n Inspector will inject the code on the page to set the flag if needed.\n @property _DEBUG_RENDER_TREE\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _DEBUG_RENDER_TREE: true /* DEBUG */,\n /**\n Whether the app defaults to using async observers.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _DEFAULT_ASYNC_OBSERVERS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _DEFAULT_ASYNC_OBSERVERS: false,\n /**\n Controls the maximum number of scheduled rerenders without \"settling\". In general,\n applications should not need to modify this environment variable, but please\n open an issue so that we can determine if a better default value is needed.\n @property _RERENDER_LOOP_LIMIT\n @for EmberENV\n @type number\n @default 1000\n @private\n */\n _RERENDER_LOOP_LIMIT: 1000,\n EMBER_LOAD_HOOKS: {},\n FEATURES: {}\n };\n _exports.ENV = ENV;\n (EmberENV => {\n if (typeof EmberENV !== 'object' || EmberENV === null) return;\n for (var flag in EmberENV) {\n if (!Object.prototype.hasOwnProperty.call(EmberENV, flag) || flag === 'EXTEND_PROTOTYPES' || flag === 'EMBER_LOAD_HOOKS') continue;\n var defaultValue = ENV[flag];\n if (defaultValue === true) {\n ENV[flag] = EmberENV[flag] !== false;\n } else if (defaultValue === false) {\n ENV[flag] = EmberENV[flag] === true;\n }\n }\n var {\n EXTEND_PROTOTYPES\n } = EmberENV;\n if (EXTEND_PROTOTYPES !== undefined) {\n if (typeof EXTEND_PROTOTYPES === 'object' && EXTEND_PROTOTYPES !== null) {\n ENV.EXTEND_PROTOTYPES.Array = EXTEND_PROTOTYPES.Array !== false;\n } else {\n ENV.EXTEND_PROTOTYPES.Array = EXTEND_PROTOTYPES !== false;\n }\n }\n // TODO this does not seem to be used by anything,\n // can we remove it? do we need to deprecate it?\n var {\n EMBER_LOAD_HOOKS\n } = EmberENV;\n if (typeof EMBER_LOAD_HOOKS === 'object' && EMBER_LOAD_HOOKS !== null) {\n for (var hookName in EMBER_LOAD_HOOKS) {\n if (!Object.prototype.hasOwnProperty.call(EMBER_LOAD_HOOKS, hookName)) continue;\n var hooks = EMBER_LOAD_HOOKS[hookName];\n if (Array.isArray(hooks)) {\n ENV.EMBER_LOAD_HOOKS[hookName] = hooks.filter(hook => typeof hook === 'function');\n }\n }\n }\n var {\n FEATURES\n } = EmberENV;\n if (typeof FEATURES === 'object' && FEATURES !== null) {\n for (var feature in FEATURES) {\n if (!Object.prototype.hasOwnProperty.call(FEATURES, feature)) continue;\n ENV.FEATURES[feature] = FEATURES[feature] === true;\n }\n }\n if (true /* DEBUG */) {\n ENV._DEBUG_RENDER_TREE = true;\n }\n })(global$1.EmberENV);\n function getENV() {\n return ENV;\n }\n});","define(\"@ember/-internals/utils/index\", [\"exports\", \"@glimmer/util\", \"@ember/debug\"], function (_exports, _util, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.ROOT = _exports.GUID_KEY = _exports.Cache = void 0;\n _exports.canInvoke = canInvoke;\n _exports.checkHasSuper = void 0;\n _exports.dictionary = makeDictionary;\n _exports.enumerableSymbol = enumerableSymbol;\n _exports.generateGuid = generateGuid;\n _exports.getDebugName = void 0;\n _exports.getName = getName;\n _exports.guidFor = guidFor;\n _exports.intern = intern;\n _exports.isInternalSymbol = isInternalSymbol;\n _exports.isObject = isObject;\n _exports.isProxy = isProxy;\n _exports.lookupDescriptor = lookupDescriptor;\n _exports.observerListenerMetaFor = observerListenerMetaFor;\n _exports.setListeners = setListeners;\n _exports.setName = setName;\n _exports.setObservers = setObservers;\n _exports.setProxy = setProxy;\n _exports.teardownMandatorySetter = _exports.symbol = _exports.setupMandatorySetter = _exports.setWithMandatorySetter = void 0;\n _exports.toString = toString;\n _exports.uuid = uuid;\n _exports.wrap = wrap;\n /**\n Strongly hint runtimes to intern the provided string.\n \n When do I need to use this function?\n \n For the most part, never. Pre-mature optimization is bad, and often the\n runtime does exactly what you need it to, and more often the trade-off isn't\n worth it.\n \n Why?\n \n Runtimes store strings in at least 2 different representations:\n Ropes and Symbols (interned strings). The Rope provides a memory efficient\n data-structure for strings created from concatenation or some other string\n manipulation like splitting.\n \n Unfortunately checking equality of different ropes can be quite costly as\n runtimes must resort to clever string comparison algorithms. These\n algorithms typically cost in proportion to the length of the string.\n Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n unique by their string content, equality checks can be done by pointer\n comparison.\n \n How do I know if my string is a rope or symbol?\n \n Typically (warning general sweeping statement, but truthy in runtimes at\n present) static strings created as part of the JS source are interned.\n Strings often used for comparisons can be interned at runtime if some\n criteria are met. One of these criteria can be the size of the entire rope.\n For example, in chrome 38 a rope longer then 12 characters will not\n intern, nor will segments of that rope.\n \n Some numbers: http://jsperf.com/eval-vs-keys/8\n \n Known Trick™\n \n @private\n @return {String} interned version of the provided string\n */\n function intern(str) {\n var obj = Object.create(null);\n obj[str] = 1;\n for (var key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n }\n\n /**\n Returns whether Type(value) is Object.\n \n Useful for checking whether a value is a valid WeakMap key.\n \n Refs: https://tc39.github.io/ecma262/#sec-typeof-operator-runtime-semantics-evaluation\n https://tc39.github.io/ecma262/#sec-weakmap.prototype.set\n \n @private\n @function isObject\n */\n function isObject(value) {\n return value !== null && (typeof value === 'object' || typeof value === 'function');\n }\n\n /**\n @module @ember/object\n */\n /**\n @private\n @return {Number} the uuid\n */\n var _uuid = 0;\n /**\n Generates a universally unique identifier. This method\n is used internally by Ember for assisting with\n the generation of GUID's and other unique identifiers.\n \n @public\n @return {Number} [description]\n */\n function uuid() {\n return ++_uuid;\n }\n /**\n Prefix used for guids through out Ember.\n @private\n @property GUID_PREFIX\n @for Ember\n @type String\n @final\n */\n var GUID_PREFIX = 'ember';\n // Used for guid generation...\n var OBJECT_GUIDS = new WeakMap();\n var NON_OBJECT_GUIDS = new Map();\n /**\n A unique key used to assign guids and other private metadata to objects.\n If you inspect an object in your browser debugger you will often see these.\n They can be safely ignored.\n \n On browsers that support it, these properties are added with enumeration\n disabled so they won't show up when you iterate over your properties.\n \n @private\n @property GUID_KEY\n @for Ember\n @type String\n @final\n */\n var GUID_KEY = intern(\"__ember\" + Date.now());\n /**\n Generates a new guid, optionally saving the guid to the object that you\n pass in. You will rarely need to use this method. Instead you should\n call `guidFor(obj)`, which return an existing guid if available.\n \n @private\n @method generateGuid\n @static\n @for @ember/object/internals\n @param {Object} [obj] Object the guid will be used for. If passed in, the guid will\n be saved on the object and reused whenever you pass the same object\n again.\n \n If no object is passed, just generate a new guid.\n @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to\n separate the guid into separate namespaces.\n @return {String} the guid\n */\n _exports.GUID_KEY = GUID_KEY;\n function generateGuid(obj, prefix) {\n if (prefix === void 0) {\n prefix = GUID_PREFIX;\n }\n var guid = prefix + uuid().toString();\n if (isObject(obj)) {\n OBJECT_GUIDS.set(obj, guid);\n }\n return guid;\n }\n /**\n Returns a unique id for the object. If the object does not yet have a guid,\n one will be assigned to it. You can call this on any object,\n `EmberObject`-based or not.\n \n You can also use this method on DOM Element objects.\n \n @public\n @static\n @method guidFor\n @for @ember/object/internals\n @param {Object} obj any object, string, number, Element, or primitive\n @return {String} the unique guid for this instance.\n */\n function guidFor(value) {\n var guid;\n if (isObject(value)) {\n guid = OBJECT_GUIDS.get(value);\n if (guid === undefined) {\n guid = \"\" + GUID_PREFIX + uuid();\n OBJECT_GUIDS.set(value, guid);\n }\n } else {\n guid = NON_OBJECT_GUIDS.get(value);\n if (guid === undefined) {\n var type = typeof value;\n if (type === 'string') {\n guid = \"st\" + uuid();\n } else if (type === 'number') {\n guid = \"nu\" + uuid();\n } else if (type === 'symbol') {\n guid = \"sy\" + uuid();\n } else {\n guid = \"(\" + value + \")\";\n }\n NON_OBJECT_GUIDS.set(value, guid);\n }\n }\n return guid;\n }\n var GENERATED_SYMBOLS = [];\n function isInternalSymbol(possibleSymbol) {\n return GENERATED_SYMBOLS.indexOf(possibleSymbol) !== -1;\n }\n // Some legacy symbols still need to be enumerable for a variety of reasons.\n // This code exists for that, and as a fallback in IE11. In general, prefer\n // `symbol` below when creating a new symbol.\n function enumerableSymbol(debugName) {\n // TODO: Investigate using platform symbols, but we do not\n // want to require non-enumerability for this API, which\n // would introduce a large cost.\n var id = GUID_KEY + Math.floor(Math.random() * Date.now()).toString();\n var symbol = intern(\"__\" + debugName + id + \"__\");\n if (true /* DEBUG */) {\n GENERATED_SYMBOLS.push(symbol);\n }\n return symbol;\n }\n var symbol = Symbol;\n\n // the delete is meant to hint at runtimes that this object should remain in\n // dictionary mode. This is clearly a runtime specific hack, but currently it\n // appears worthwhile in some usecases. Please note, these deletes do increase\n // the cost of creation dramatically over a plain Object.create. And as this\n // only makes sense for long-lived dictionaries that aren't instantiated often.\n _exports.symbol = symbol;\n function makeDictionary(parent) {\n var dict = Object.create(parent);\n dict['_dict'] = null;\n delete dict['_dict'];\n return dict;\n }\n var getDebugName;\n if (true /* DEBUG */) {\n var getFunctionName = fn => {\n var functionName = fn.name;\n if (functionName === undefined) {\n var match = Function.prototype.toString.call(fn).match(/function (\\w+)\\s*\\(/);\n functionName = match && match[1] || '';\n }\n return functionName.replace(/^bound /, '');\n };\n var getObjectName = obj => {\n var name;\n var className;\n if (obj.constructor && obj.constructor !== Object) {\n className = getFunctionName(obj.constructor);\n }\n if ('toString' in obj && obj.toString !== Object.prototype.toString && obj.toString !== Function.prototype.toString) {\n name = obj.toString();\n }\n // If the class has a decent looking name, and the `toString` is one of the\n // default Ember toStrings, replace the constructor portion of the toString\n // with the class name. We check the length of the class name to prevent doing\n // this when the value is minified.\n if (name && name.match(/<.*:ember\\d+>/) && className && className[0] !== '_' && className.length > 2 && className !== 'Class') {\n return name.replace(/<.*:/, \"<\" + className + \":\");\n }\n return name || className;\n };\n var getPrimitiveName = value => {\n return String(value);\n };\n getDebugName = value => {\n if (typeof value === 'function') {\n return getFunctionName(value) || \"(unknown function)\";\n } else if (typeof value === 'object' && value !== null) {\n return getObjectName(value) || \"(unknown object)\";\n } else {\n return getPrimitiveName(value);\n }\n };\n }\n var getDebugName$1 = getDebugName;\n _exports.getDebugName = getDebugName$1;\n var HAS_SUPER_PATTERN = /\\.(_super|call\\(this|apply\\(this)/;\n var fnToString = Function.prototype.toString;\n var checkHasSuper = (() => {\n var sourceAvailable = fnToString.call(function () {\n return this;\n }).indexOf('return this') > -1;\n if (sourceAvailable) {\n return function checkHasSuper(func) {\n return HAS_SUPER_PATTERN.test(fnToString.call(func));\n };\n }\n return function checkHasSuper() {\n return true;\n };\n })();\n _exports.checkHasSuper = checkHasSuper;\n var HAS_SUPER_MAP = new WeakMap();\n var ROOT = Object.freeze(function () {});\n _exports.ROOT = ROOT;\n HAS_SUPER_MAP.set(ROOT, false);\n function hasSuper(func) {\n var hasSuper = HAS_SUPER_MAP.get(func);\n if (hasSuper === undefined) {\n hasSuper = checkHasSuper(func);\n HAS_SUPER_MAP.set(func, hasSuper);\n }\n return hasSuper;\n }\n class ObserverListenerMeta {\n constructor() {\n this.listeners = undefined;\n this.observers = undefined;\n }\n }\n var OBSERVERS_LISTENERS_MAP = new WeakMap();\n function createObserverListenerMetaFor(fn) {\n var meta = OBSERVERS_LISTENERS_MAP.get(fn);\n if (meta === undefined) {\n meta = new ObserverListenerMeta();\n OBSERVERS_LISTENERS_MAP.set(fn, meta);\n }\n return meta;\n }\n function observerListenerMetaFor(fn) {\n return OBSERVERS_LISTENERS_MAP.get(fn);\n }\n function setObservers(func, observers) {\n var meta = createObserverListenerMetaFor(func);\n meta.observers = observers;\n }\n function setListeners(func, listeners) {\n var meta = createObserverListenerMetaFor(func);\n meta.listeners = listeners;\n }\n var IS_WRAPPED_FUNCTION_SET = new _util._WeakSet();\n /**\n Wraps the passed function so that `this._super` will point to the superFunc\n when the function is invoked. This is the primitive we use to implement\n calls to super.\n \n @private\n @method wrap\n @for Ember\n @param {Function} func The function to call\n @param {Function} superFunc The super function.\n @return {Function} wrapped function.\n */\n function wrap(func, superFunc) {\n if (!hasSuper(func)) {\n return func;\n }\n // ensure an unwrapped super that calls _super is wrapped with a terminal _super\n if (!IS_WRAPPED_FUNCTION_SET.has(superFunc) && hasSuper(superFunc)) {\n return _wrap(func, _wrap(superFunc, ROOT));\n }\n return _wrap(func, superFunc);\n }\n function _wrap(func, superFunc) {\n function superWrapper() {\n var orig = this._super;\n this._super = superFunc;\n var ret = func.apply(this, arguments);\n this._super = orig;\n return ret;\n }\n IS_WRAPPED_FUNCTION_SET.add(superWrapper);\n var meta = OBSERVERS_LISTENERS_MAP.get(func);\n if (meta !== undefined) {\n OBSERVERS_LISTENERS_MAP.set(superWrapper, meta);\n }\n return superWrapper;\n }\n function lookupDescriptor(obj, keyName) {\n var current = obj;\n do {\n var descriptor = Object.getOwnPropertyDescriptor(current, keyName);\n if (descriptor !== undefined) {\n return descriptor;\n }\n current = Object.getPrototypeOf(current);\n } while (current !== null);\n return null;\n }\n\n /**\n Checks to see if the `methodName` exists on the `obj`.\n \n ```javascript\n let foo = { bar: function() { return 'bar'; }, baz: null };\n \n Ember.canInvoke(foo, 'bar'); // true\n Ember.canInvoke(foo, 'baz'); // false\n Ember.canInvoke(foo, 'bat'); // false\n ```\n \n @method canInvoke\n @for Ember\n @param {Object} obj The object to check for the method\n @param {String} methodName The method name to check for\n @return {Boolean}\n @private\n */\n function canInvoke(obj, methodName) {\n return obj != null && typeof obj[methodName] === 'function';\n }\n /**\n @module @ember/utils\n */\n\n var NAMES = new WeakMap();\n function setName(obj, name) {\n if (isObject(obj)) NAMES.set(obj, name);\n }\n function getName(obj) {\n return NAMES.get(obj);\n }\n var objectToString = Object.prototype.toString;\n function isNone(obj) {\n return obj === null || obj === undefined;\n }\n /*\n A `toString` util function that supports objects without a `toString`\n method, e.g. an object created with `Object.create(null)`.\n */\n function toString(obj) {\n if (typeof obj === 'string') {\n return obj;\n }\n if (null === obj) return 'null';\n if (undefined === obj) return 'undefined';\n if (Array.isArray(obj)) {\n // Reimplement Array.prototype.join according to spec (22.1.3.13)\n // Changing ToString(element) with this safe version of ToString.\n var r = '';\n for (var k = 0; k < obj.length; k++) {\n if (k > 0) {\n r += ',';\n }\n if (!isNone(obj[k])) {\n r += toString(obj[k]);\n }\n }\n return r;\n }\n if (typeof obj.toString === 'function') {\n return obj.toString();\n }\n return objectToString.call(obj);\n }\n var PROXIES = new _util._WeakSet();\n function isProxy(value) {\n if (isObject(value)) {\n return PROXIES.has(value);\n }\n return false;\n }\n function setProxy(object) {\n if (isObject(object)) {\n PROXIES.add(object);\n }\n }\n class Cache {\n constructor(limit, func, store) {\n if (store === void 0) {\n store = new Map();\n }\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.size = 0;\n this.misses = 0;\n this.hits = 0;\n }\n get(key) {\n if (this.store.has(key)) {\n this.hits++;\n // SAFETY: we know the value is present because `.has(key)` was `true`.\n return this.store.get(key);\n } else {\n this.misses++;\n return this.set(key, this.func(key));\n }\n }\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n return value;\n }\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n }\n _exports.Cache = Cache;\n var setupMandatorySetter;\n _exports.setupMandatorySetter = setupMandatorySetter;\n var teardownMandatorySetter;\n _exports.teardownMandatorySetter = teardownMandatorySetter;\n var setWithMandatorySetter;\n _exports.setWithMandatorySetter = setWithMandatorySetter;\n function isElementKey(key) {\n return typeof key === 'number' ? isPositiveInt(key) : isStringInt(key);\n }\n function isStringInt(str) {\n var num = parseInt(str, 10);\n return isPositiveInt(num) && str === String(num);\n }\n function isPositiveInt(num) {\n return num >= 0 && num % 1 === 0;\n }\n if (true /* DEBUG */) {\n var SEEN_TAGS = new _util._WeakSet();\n var MANDATORY_SETTERS = new WeakMap();\n var _propertyIsEnumerable = function (obj, key) {\n return Object.prototype.propertyIsEnumerable.call(obj, key);\n };\n _exports.setupMandatorySetter = setupMandatorySetter = function (tag, obj, keyName) {\n if (SEEN_TAGS.has(tag)) {\n return;\n }\n SEEN_TAGS.add(tag);\n if (Array.isArray(obj) && isElementKey(keyName)) {\n return;\n }\n var desc = lookupDescriptor(obj, keyName) || {};\n if (desc.get || desc.set) {\n // if it has a getter or setter, we can't install the mandatory setter.\n // native setters are allowed, we have to assume that they will resolve\n // to tracked properties.\n return;\n }\n if (desc && (!desc.configurable || !desc.writable)) {\n // if it isn't writable anyways, so we shouldn't provide the setter.\n // if it isn't configurable, we can't overwrite it anyways.\n return;\n }\n var setters = MANDATORY_SETTERS.get(obj);\n if (setters === undefined) {\n setters = {};\n MANDATORY_SETTERS.set(obj, setters);\n }\n desc.hadOwnProperty = Object.hasOwnProperty.call(obj, keyName);\n setters[keyName] = desc;\n Object.defineProperty(obj, keyName, {\n configurable: true,\n enumerable: _propertyIsEnumerable(obj, keyName),\n get() {\n if (desc.get) {\n return desc.get.call(this);\n } else {\n return desc.value;\n }\n },\n set(value) {\n (true && !(false) && (0, _debug.assert)(\"You attempted to update \" + this + \".\" + String(keyName) + \" to \\\"\" + String(value) + \"\\\", but it is being tracked by a tracking context, such as a template, computed property, or observer. In order to make sure the context updates properly, you must invalidate the property when updating it. You can mark the property as `@tracked`, or use `@ember/object#set` to do this.\"));\n }\n });\n };\n _exports.teardownMandatorySetter = teardownMandatorySetter = function (obj, keyName) {\n var setters = MANDATORY_SETTERS.get(obj);\n if (setters !== undefined && setters[keyName] !== undefined) {\n Object.defineProperty(obj, keyName, setters[keyName]);\n delete setters[keyName];\n }\n };\n _exports.setWithMandatorySetter = setWithMandatorySetter = function (obj, keyName, value) {\n var setters = MANDATORY_SETTERS.get(obj);\n if (setters !== undefined && setters[keyName] !== undefined) {\n var setter = setters[keyName];\n if (setter.set) {\n setter.set.call(obj, value);\n } else {\n setter.value = value;\n // If the object didn't have own property before, it would have changed\n // the enumerability after setting the value the first time.\n if (!setter.hadOwnProperty) {\n var desc = lookupDescriptor(obj, keyName);\n desc.enumerable = true;\n Object.defineProperty(obj, keyName, desc);\n }\n }\n } else {\n obj[keyName] = value;\n }\n };\n }\n});","define(\"@ember/canary-features/index\", [\"exports\", \"@ember/-internals/environment\"], function (_exports, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.FEATURES = _exports.DEFAULT_FEATURES = void 0;\n _exports.isEnabled = isEnabled;\n /**\n Set `EmberENV.FEATURES` in your application's `config/environment.js` file\n to enable canary features in your application.\n \n See the [feature flag guide](https://guides.emberjs.com/release/configuring-ember/feature-flags/)\n for more details.\n \n @module @ember/canary-features\n @public\n */\n var DEFAULT_FEATURES = {\n // FLAG_NAME: true/false\n };\n /**\n The hash of enabled Canary features. Add to this, any canary features\n before creating your application.\n \n @class FEATURES\n @static\n @since 1.1.0\n @public\n */\n _exports.DEFAULT_FEATURES = DEFAULT_FEATURES;\n var FEATURES = Object.assign(DEFAULT_FEATURES, _environment.ENV.FEATURES);\n /**\n Determine whether the specified `feature` is enabled. Used by Ember's\n build tools to exclude experimental features from beta/stable builds.\n \n You can define the following configuration options:\n \n * `EmberENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly\n enabled/disabled.\n \n @method isEnabled\n @param {String} feature The feature to check\n @return {Boolean}\n @since 1.1.0\n @public\n */\n _exports.FEATURES = FEATURES;\n function isEnabled(feature) {\n var value = FEATURES[feature];\n if (value === true || value === false) {\n return value;\n } else if (_environment.ENV.ENABLE_OPTIONAL_FEATURES) {\n return true;\n } else {\n return false;\n }\n }\n // Uncomment the below when features are present:\n // function featureValue(value: null | boolean) {\n // if (ENV.ENABLE_OPTIONAL_FEATURES && value === null) {\n // return true;\n // }\n // return value;\n // }\n // export const FLAG_NAME = featureValue(FEATURES.FLAG_NAME);\n});","define(\"@ember/debug/container-debug-adapter\", [\"exports\", \"@ember/-internals/string\", \"@ember/object\", \"@ember/utils\", \"@ember/-internals/owner\", \"@ember/application/namespace\"], function (_exports, _string, _object, _utils, _owner, _namespace) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /**\n @module @ember/debug/container-debug-adapter\n */\n /**\n The `ContainerDebugAdapter` helps the container and resolver interface\n with tools that debug Ember such as the\n [Ember Inspector](https://github.com/emberjs/ember-inspector)\n for Chrome and Firefox.\n \n This class can be extended by a custom resolver implementer\n to override some of the methods with library-specific code.\n \n The methods likely to be overridden are:\n \n * `canCatalogEntriesByType`\n * `catalogEntriesByType`\n \n The adapter will need to be registered\n in the application's container as `container-debug-adapter:main`.\n \n Example:\n \n ```javascript\n Application.initializer({\n name: \"containerDebugAdapter\",\n \n initialize(application) {\n application.register('container-debug-adapter:main', require('app/container-debug-adapter'));\n }\n });\n ```\n \n @class ContainerDebugAdapter\n @extends EmberObject\n @since 1.5.0\n @public\n */\n class ContainerDebugAdapter extends _object.default {\n constructor(owner) {\n super(owner);\n this.resolver = (0, _owner.getOwner)(this).lookup('resolver-for-debugging:main');\n }\n /**\n Returns true if it is possible to catalog a list of available\n classes in the resolver for a given type.\n @method canCatalogEntriesByType\n @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n @return {boolean} whether a list is available for this type.\n @public\n */\n canCatalogEntriesByType(type) {\n if (type === 'model' || type === 'template') {\n return false;\n }\n return true;\n }\n /**\n Returns the available classes a given type.\n @method catalogEntriesByType\n @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n @return {Array} An array of strings.\n @public\n */\n catalogEntriesByType(type) {\n var namespaces = _namespace.default.NAMESPACES;\n var types = [];\n var typeSuffixRegex = new RegExp((0, _string.classify)(type) + \"$\");\n namespaces.forEach(namespace => {\n for (var key in namespace) {\n if (!Object.prototype.hasOwnProperty.call(namespace, key)) {\n continue;\n }\n if (typeSuffixRegex.test(key)) {\n var klass = namespace[key];\n if ((0, _utils.typeOf)(klass) === 'class') {\n types.push((0, _string.dasherize)(key.replace(typeSuffixRegex, '')));\n }\n }\n }\n });\n return types;\n }\n }\n _exports.default = ContainerDebugAdapter;\n});","define(\"@ember/debug/data-adapter\", [\"exports\", \"@ember/-internals/owner\", \"@ember/runloop\", \"@ember/object\", \"@ember/-internals/string\", \"@ember/application/namespace\", \"@ember/array\", \"@glimmer/validator\", \"@ember/debug\"], function (_exports, _owner, _runloop, _object, _string, _namespace, _array, _validator, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n function iterate(arr, fn) {\n if (Symbol.iterator in arr) {\n for (var item of arr) {\n fn(item);\n }\n } else {\n // SAFETY: this cast required to work this way to interop between TS 4.8\n // and 4.9. When we drop support for 4.8, it will narrow correctly via the\n // use of the `in` operator above. (Preferably we will solve this by just\n // switching to require `Symbol.iterator` instead.)\n (0, _debug.assert)('', typeof arr.forEach === 'function');\n arr.forEach(fn);\n }\n }\n class RecordsWatcher {\n getCacheForItem(record) {\n var recordCache = this.recordCaches.get(record);\n if (!recordCache) {\n var hasBeenAdded = false;\n recordCache = (0, _validator.createCache)(() => {\n if (!hasBeenAdded) {\n this.added.push(this.wrapRecord(record));\n hasBeenAdded = true;\n } else {\n this.updated.push(this.wrapRecord(record));\n }\n });\n this.recordCaches.set(record, recordCache);\n }\n return recordCache;\n }\n constructor(records, recordsAdded, recordsUpdated, recordsRemoved, wrapRecord, release) {\n this.wrapRecord = wrapRecord;\n this.release = release;\n this.recordCaches = new Map();\n this.added = [];\n this.updated = [];\n this.removed = [];\n this.recordArrayCache = (0, _validator.createCache)(() => {\n var seen = new Set();\n // Track `[]` for legacy support\n (0, _validator.consumeTag)((0, _validator.tagFor)(records, '[]'));\n iterate(records, record => {\n (0, _validator.getValue)(this.getCacheForItem(record));\n seen.add(record);\n });\n // Untrack this operation because these records are being removed, they\n // should not be polled again in the future\n (0, _validator.untrack)(() => {\n this.recordCaches.forEach((_cache, record) => {\n if (!seen.has(record)) {\n this.removed.push(wrapRecord(record));\n this.recordCaches.delete(record);\n }\n });\n });\n if (this.added.length > 0) {\n recordsAdded(this.added);\n this.added = [];\n }\n if (this.updated.length > 0) {\n recordsUpdated(this.updated);\n this.updated = [];\n }\n if (this.removed.length > 0) {\n recordsRemoved(this.removed);\n this.removed = [];\n }\n });\n }\n revalidate() {\n (0, _validator.getValue)(this.recordArrayCache);\n }\n }\n class TypeWatcher {\n constructor(records, onChange, release) {\n this.release = release;\n var hasBeenAccessed = false;\n this.cache = (0, _validator.createCache)(() => {\n // Empty iteration, we're doing this just\n // to track changes to the records array\n iterate(records, () => {});\n // Also track `[]` for legacy support\n (0, _validator.consumeTag)((0, _validator.tagFor)(records, '[]'));\n if (hasBeenAccessed === true) {\n (0, _runloop.next)(onChange);\n } else {\n hasBeenAccessed = true;\n }\n });\n this.release = release;\n }\n revalidate() {\n (0, _validator.getValue)(this.cache);\n }\n }\n /**\n The `DataAdapter` helps a data persistence library\n interface with tools that debug Ember such\n as the [Ember Inspector](https://github.com/emberjs/ember-inspector)\n for Chrome and Firefox.\n \n This class will be extended by a persistence library\n which will override some of the methods with\n library-specific code.\n \n The methods likely to be overridden are:\n \n * `getFilters`\n * `detect`\n * `columnsForType`\n * `getRecords`\n * `getRecordColumnValues`\n * `getRecordKeywords`\n * `getRecordFilterValues`\n * `getRecordColor`\n \n The adapter will need to be registered\n in the application's container as `dataAdapter:main`.\n \n Example:\n \n ```javascript\n Application.initializer({\n name: \"data-adapter\",\n \n initialize: function(application) {\n application.register('data-adapter:main', DS.DataAdapter);\n }\n });\n ```\n \n @class DataAdapter\n @extends EmberObject\n @public\n */\n class DataAdapter extends _object.default {\n constructor(owner) {\n super(owner);\n this.releaseMethods = (0, _array.A)();\n this.recordsWatchers = new Map();\n this.typeWatchers = new Map();\n this.flushWatchers = null;\n /**\n The container-debug-adapter which is used\n to list all models.\n @property containerDebugAdapter\n @default undefined\n @since 1.5.0\n @public\n **/\n /**\n The number of attributes to send\n as columns. (Enough to make the record\n identifiable).\n @private\n @property attributeLimit\n @default 3\n @since 1.3.0\n */\n this.attributeLimit = 3;\n /**\n Ember Data > v1.0.0-beta.18\n requires string model names to be passed\n around instead of the actual factories.\n This is a stamp for the Ember Inspector\n to differentiate between the versions\n to be able to support older versions too.\n @public\n @property acceptsModelName\n */\n this.acceptsModelName = true;\n this.containerDebugAdapter = (0, _owner.getOwner)(this).lookup('container-debug-adapter:main');\n }\n /**\n Map from records arrays to RecordsWatcher instances\n @private\n @property recordsWatchers\n @since 3.26.0\n */\n /**\n Map from records arrays to TypeWatcher instances\n @private\n @property typeWatchers\n @since 3.26.0\n */\n /**\n Callback that is currently scheduled on backburner end to flush and check\n all active watchers.\n @private\n @property flushWatchers\n @since 3.26.0\n */\n /**\n Stores all methods that clear observers.\n These methods will be called on destruction.\n @private\n @property releaseMethods\n @since 1.3.0\n */\n /**\n Specifies how records can be filtered.\n Records returned will need to have a `filterValues`\n property with a key for every name in the returned array.\n @public\n @method getFilters\n @return {Array} List of objects defining filters.\n The object should have a `name` and `desc` property.\n */\n getFilters() {\n return (0, _array.A)();\n }\n /**\n Fetch the model types and observe them for changes.\n @public\n @method watchModelTypes\n @param {Function} typesAdded Callback to call to add types.\n Takes an array of objects containing wrapped types (returned from `wrapModelType`).\n @param {Function} typesUpdated Callback to call when a type has changed.\n Takes an array of objects containing wrapped types.\n @return {Function} Method to call to remove all observers\n */\n watchModelTypes(typesAdded, typesUpdated) {\n var modelTypes = this.getModelTypes();\n var releaseMethods = (0, _array.A)();\n var typesToSend;\n typesToSend = modelTypes.map(type => {\n var klass = type.klass;\n var wrapped = this.wrapModelType(klass, type.name);\n releaseMethods.push(this.observeModelType(type.name, typesUpdated));\n return wrapped;\n });\n typesAdded(typesToSend);\n var release = () => {\n releaseMethods.forEach(fn => fn());\n this.releaseMethods.removeObject(release);\n };\n this.releaseMethods.pushObject(release);\n return release;\n }\n _nameToClass(type) {\n if (typeof type === 'string') {\n var owner = (0, _owner.getOwner)(this);\n var Factory = owner.factoryFor(\"model:\" + type);\n type = Factory && Factory.class;\n }\n return type;\n }\n /**\n Fetch the records of a given type and observe them for changes.\n @public\n @method watchRecords\n @param {String} modelName The model name.\n @param {Function} recordsAdded Callback to call to add records.\n Takes an array of objects containing wrapped records.\n The object should have the following properties:\n columnValues: {Object} The key and value of a table cell.\n object: {Object} The actual record object.\n @param {Function} recordsUpdated Callback to call when a record has changed.\n Takes an array of objects containing wrapped records.\n @param {Function} recordsRemoved Callback to call when a record has removed.\n Takes an array of objects containing wrapped records.\n @return {Function} Method to call to remove all observers.\n */\n watchRecords(modelName, recordsAdded, recordsUpdated, recordsRemoved) {\n var klass = this._nameToClass(modelName);\n var records = this.getRecords(klass, modelName);\n var {\n recordsWatchers\n } = this;\n var recordsWatcher = recordsWatchers.get(records);\n if (!recordsWatcher) {\n recordsWatcher = new RecordsWatcher(records, recordsAdded, recordsUpdated, recordsRemoved, record => this.wrapRecord(record), () => {\n recordsWatchers.delete(records);\n this.updateFlushWatchers();\n });\n recordsWatchers.set(records, recordsWatcher);\n this.updateFlushWatchers();\n recordsWatcher.revalidate();\n }\n return recordsWatcher.release;\n }\n updateFlushWatchers() {\n if (this.flushWatchers === null) {\n if (this.typeWatchers.size > 0 || this.recordsWatchers.size > 0) {\n this.flushWatchers = () => {\n this.typeWatchers.forEach(watcher => watcher.revalidate());\n this.recordsWatchers.forEach(watcher => watcher.revalidate());\n };\n _runloop._backburner.on('end', this.flushWatchers);\n }\n } else if (this.typeWatchers.size === 0 && this.recordsWatchers.size === 0) {\n _runloop._backburner.off('end', this.flushWatchers);\n this.flushWatchers = null;\n }\n }\n /**\n Clear all observers before destruction\n @private\n @method willDestroy\n */\n willDestroy() {\n this._super(...arguments);\n this.typeWatchers.forEach(watcher => watcher.release());\n this.recordsWatchers.forEach(watcher => watcher.release());\n this.releaseMethods.forEach(fn => fn());\n if (this.flushWatchers) {\n _runloop._backburner.off('end', this.flushWatchers);\n }\n }\n /**\n Detect whether a class is a model.\n Test that against the model class\n of your persistence library.\n @public\n @method detect\n @return boolean Whether the class is a model class or not.\n */\n detect(_klass) {\n return false;\n }\n /**\n Get the columns for a given model type.\n @public\n @method columnsForType\n @return {Array} An array of columns of the following format:\n name: {String} The name of the column.\n desc: {String} Humanized description (what would show in a table column name).\n */\n columnsForType(_klass) {\n return (0, _array.A)();\n }\n /**\n Adds observers to a model type class.\n @private\n @method observeModelType\n @param {String} modelName The model type name.\n @param {Function} typesUpdated Called when a type is modified.\n @return {Function} The function to call to remove observers.\n */\n observeModelType(modelName, typesUpdated) {\n var klass = this._nameToClass(modelName);\n var records = this.getRecords(klass, modelName);\n var onChange = () => {\n typesUpdated([this.wrapModelType(klass, modelName)]);\n };\n var {\n typeWatchers\n } = this;\n var typeWatcher = typeWatchers.get(records);\n if (!typeWatcher) {\n typeWatcher = new TypeWatcher(records, onChange, () => {\n typeWatchers.delete(records);\n this.updateFlushWatchers();\n });\n typeWatchers.set(records, typeWatcher);\n this.updateFlushWatchers();\n typeWatcher.revalidate();\n }\n return typeWatcher.release;\n }\n /**\n Wraps a given model type and observes changes to it.\n @private\n @method wrapModelType\n @param {Class} klass A model class.\n @param {String} modelName Name of the class.\n @return {Object} The wrapped type has the following format:\n name: {String} The name of the type.\n count: {Integer} The number of records available.\n columns: {Columns} An array of columns to describe the record.\n object: {Class} The actual Model type class.\n */\n wrapModelType(klass, name) {\n var records = this.getRecords(klass, name);\n return {\n name,\n count: (0, _object.get)(records, 'length'),\n columns: this.columnsForType(klass),\n object: klass\n };\n }\n /**\n Fetches all models defined in the application.\n @private\n @method getModelTypes\n @return {Array} Array of model types.\n */\n getModelTypes() {\n var containerDebugAdapter = this.containerDebugAdapter;\n var stringTypes = containerDebugAdapter.canCatalogEntriesByType('model') ? containerDebugAdapter.catalogEntriesByType('model') : this._getObjectsOnNamespaces();\n // New adapters return strings instead of classes.\n var klassTypes = stringTypes.map(name => {\n return {\n klass: this._nameToClass(name),\n name\n };\n });\n return klassTypes.filter(type => this.detect(type.klass));\n }\n /**\n Loops over all namespaces and all objects\n attached to them.\n @private\n @method _getObjectsOnNamespaces\n @return {Array} Array of model type strings.\n */\n _getObjectsOnNamespaces() {\n var namespaces = _namespace.default.NAMESPACES;\n var types = [];\n namespaces.forEach(namespace => {\n for (var key in namespace) {\n if (!Object.prototype.hasOwnProperty.call(namespace, key)) {\n continue;\n }\n // Even though we will filter again in `getModelTypes`,\n // we should not call `lookupFactory` on non-models\n if (!this.detect(namespace[key])) {\n continue;\n }\n var name = (0, _string.dasherize)(key);\n types.push(name);\n }\n });\n return types;\n }\n /**\n Fetches all loaded records for a given type.\n @public\n @method getRecords\n @return {Array} An array of records.\n This array will be observed for changes,\n so it should update when new records are added/removed.\n */\n getRecords(_klass, _name) {\n return (0, _array.A)();\n }\n /**\n Wraps a record and observers changes to it.\n @private\n @method wrapRecord\n @param {Object} record The record instance.\n @return {Object} The wrapped record. Format:\n columnValues: {Array}\n searchKeywords: {Array}\n */\n wrapRecord(record) {\n return {\n object: record,\n columnValues: this.getRecordColumnValues(record),\n searchKeywords: this.getRecordKeywords(record),\n filterValues: this.getRecordFilterValues(record),\n color: this.getRecordColor(record)\n };\n }\n /**\n Gets the values for each column.\n @public\n @method getRecordColumnValues\n @return {Object} Keys should match column names defined\n by the model type.\n */\n getRecordColumnValues(_record) {\n return {};\n }\n /**\n Returns keywords to match when searching records.\n @public\n @method getRecordKeywords\n @return {Array} Relevant keywords for search.\n */\n getRecordKeywords(_record) {\n return (0, _array.A)();\n }\n /**\n Returns the values of filters defined by `getFilters`.\n @public\n @method getRecordFilterValues\n @param {Object} record The record instance.\n @return {Object} The filter values.\n */\n getRecordFilterValues(_record) {\n return {};\n }\n /**\n Each record can have a color that represents its state.\n @public\n @method getRecordColor\n @param {Object} record The record instance\n @return {String} The records color.\n Possible options: black, red, blue, green.\n */\n getRecordColor(_record) {\n return null;\n }\n }\n _exports.default = DataAdapter;\n});","define(\"@ember/debug/index\", [\"exports\", \"@ember/-internals/browser-environment\", \"@ember/debug/lib/deprecate\", \"@ember/debug/lib/testing\", \"@ember/debug/lib/warn\", \"@ember/debug/lib/inspect\", \"@ember/debug/lib/capture-render-tree\"], function (_exports, _browserEnvironment, _deprecate2, _testing, _warn2, _inspect, _captureRenderTree) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.assert = _exports._warnIfUsingStrippedFeatureFlags = void 0;\n Object.defineProperty(_exports, \"captureRenderTree\", {\n enumerable: true,\n get: function () {\n return _captureRenderTree.default;\n }\n });\n _exports.info = _exports.getDebugFunction = _exports.deprecateFunc = _exports.deprecate = _exports.debugSeal = _exports.debugFreeze = _exports.debug = void 0;\n Object.defineProperty(_exports, \"inspect\", {\n enumerable: true,\n get: function () {\n return _inspect.default;\n }\n });\n Object.defineProperty(_exports, \"isTesting\", {\n enumerable: true,\n get: function () {\n return _testing.isTesting;\n }\n });\n Object.defineProperty(_exports, \"registerDeprecationHandler\", {\n enumerable: true,\n get: function () {\n return _deprecate2.registerHandler;\n }\n });\n Object.defineProperty(_exports, \"registerWarnHandler\", {\n enumerable: true,\n get: function () {\n return _warn2.registerHandler;\n }\n });\n _exports.setDebugFunction = _exports.runInDebug = void 0;\n Object.defineProperty(_exports, \"setTesting\", {\n enumerable: true,\n get: function () {\n return _testing.setTesting;\n }\n });\n _exports.warn = void 0;\n // These are the default production build versions:\n var noop = () => {};\n // SAFETY: these casts are just straight-up lies, but the point is that they do\n // not do anything in production builds.\n var assert = noop;\n _exports.assert = assert;\n var info = noop;\n _exports.info = info;\n var warn = noop;\n _exports.warn = warn;\n var debug = noop;\n _exports.debug = debug;\n var deprecate = noop;\n _exports.deprecate = deprecate;\n var debugSeal = noop;\n _exports.debugSeal = debugSeal;\n var debugFreeze = noop;\n _exports.debugFreeze = debugFreeze;\n var runInDebug = noop;\n _exports.runInDebug = runInDebug;\n var setDebugFunction = noop;\n _exports.setDebugFunction = setDebugFunction;\n var getDebugFunction = noop;\n _exports.getDebugFunction = getDebugFunction;\n var deprecateFunc = function () {\n return arguments[arguments.length - 1];\n };\n _exports.deprecateFunc = deprecateFunc;\n if (true /* DEBUG */) {\n _exports.setDebugFunction = setDebugFunction = function (type, callback) {\n switch (type) {\n case 'assert':\n return _exports.assert = assert = callback;\n case 'info':\n return _exports.info = info = callback;\n case 'warn':\n return _exports.warn = warn = callback;\n case 'debug':\n return _exports.debug = debug = callback;\n case 'deprecate':\n return _exports.deprecate = deprecate = callback;\n case 'debugSeal':\n return _exports.debugSeal = debugSeal = callback;\n case 'debugFreeze':\n return _exports.debugFreeze = debugFreeze = callback;\n case 'runInDebug':\n return _exports.runInDebug = runInDebug = callback;\n case 'deprecateFunc':\n return _exports.deprecateFunc = deprecateFunc = callback;\n }\n };\n _exports.getDebugFunction = getDebugFunction = function (type) {\n switch (type) {\n case 'assert':\n return assert;\n case 'info':\n return info;\n case 'warn':\n return warn;\n case 'debug':\n return debug;\n case 'deprecate':\n return deprecate;\n case 'debugSeal':\n return debugSeal;\n case 'debugFreeze':\n return debugFreeze;\n case 'runInDebug':\n return runInDebug;\n case 'deprecateFunc':\n return deprecateFunc;\n }\n };\n }\n /**\n @module @ember/debug\n */\n if (true /* DEBUG */) {\n // eslint-disable-next-line no-inner-declarations\n function _assert(desc, test) {\n if (!test) {\n throw new Error(\"Assertion Failed: \" + desc);\n }\n }\n setDebugFunction('assert', _assert);\n /**\n Display a debug notice.\n Calls to this function are not invoked in production builds.\n ```javascript\n import { debug } from '@ember/debug';\n debug('I\\'m a debug notice!');\n ```\n @method debug\n @for @ember/debug\n @static\n @param {String} message A debug message to display.\n @public\n */\n setDebugFunction('debug', function debug(message) {\n console.debug(\"DEBUG: \" + message); /* eslint-disable-line no-console */\n });\n /**\n Display an info notice.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n @method info\n @private\n */\n setDebugFunction('info', function info() {\n console.info(...arguments); /* eslint-disable-line no-console */\n });\n /**\n @module @ember/debug\n @public\n */\n /**\n Alias an old, deprecated method with its new counterpart.\n Display a deprecation warning with the provided message and a stack trace\n (Chrome and Firefox only) when the assigned method is called.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n ```javascript\n import { deprecateFunc } from '@ember/debug';\n Ember.oldMethod = deprecateFunc('Please use the new, updated method', options, Ember.newMethod);\n ```\n @method deprecateFunc\n @static\n @for @ember/debug\n @param {String} message A description of the deprecation.\n @param {Object} [options] The options object for `deprecate`.\n @param {Function} func The new function called to replace its deprecated counterpart.\n @return {Function} A new function that wraps the original function with a deprecation warning\n @private\n */\n setDebugFunction('deprecateFunc', function deprecateFunc() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 3) {\n var [message, options, func] = args;\n return function () {\n deprecate(message, false, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return func.apply(this, args);\n };\n } else {\n var [_message, _func] = args;\n return function () {\n deprecate(_message);\n return _func.apply(this, arguments);\n };\n }\n });\n /**\n @module @ember/debug\n @public\n */\n /**\n Run a function meant for debugging.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n ```javascript\n import Component from '@ember/component';\n import { runInDebug } from '@ember/debug';\n runInDebug(() => {\n Component.reopen({\n didInsertElement() {\n console.log(\"I'm happy\");\n }\n });\n });\n ```\n @method runInDebug\n @for @ember/debug\n @static\n @param {Function} func The function to be executed.\n @since 1.5.0\n @public\n */\n setDebugFunction('runInDebug', function runInDebug(func) {\n func();\n });\n setDebugFunction('debugSeal', function debugSeal(obj) {\n Object.seal(obj);\n });\n setDebugFunction('debugFreeze', function debugFreeze(obj) {\n // re-freezing an already frozen object introduces a significant\n // performance penalty on Chrome (tested through 59).\n //\n // See: https://bugs.chromium.org/p/v8/issues/detail?id=6450\n if (!Object.isFrozen(obj)) {\n Object.freeze(obj);\n }\n });\n setDebugFunction('deprecate', _deprecate2.default);\n setDebugFunction('warn', _warn2.default);\n }\n var _warnIfUsingStrippedFeatureFlags;\n _exports._warnIfUsingStrippedFeatureFlags = _warnIfUsingStrippedFeatureFlags;\n if (true /* DEBUG */ && !(0, _testing.isTesting)()) {\n if (typeof window !== 'undefined' && (_browserEnvironment.isFirefox || _browserEnvironment.isChrome) && window.addEventListener) {\n window.addEventListener('load', () => {\n if (document.documentElement && document.documentElement.dataset && !document.documentElement.dataset['emberExtension']) {\n var downloadURL;\n if (_browserEnvironment.isChrome) {\n downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi';\n } else if (_browserEnvironment.isFirefox) {\n downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/';\n }\n debug(\"For more advanced debugging, install the Ember Inspector from \" + downloadURL);\n }\n }, false);\n }\n }\n});","define(\"@ember/debug/lib/capture-render-tree\", [\"exports\", \"@glimmer/util\"], function (_exports, _util) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = captureRenderTree;\n /**\n @module @ember/debug\n */\n /**\n Ember Inspector calls this function to capture the current render tree.\n \n In production mode, this requires turning on `ENV._DEBUG_RENDER_TREE`\n before loading Ember.\n \n @private\n @static\n @method captureRenderTree\n @for @ember/debug\n @param app {ApplicationInstance} An `ApplicationInstance`.\n @since 3.14.0\n */\n function captureRenderTree(app) {\n // SAFETY: Ideally we'd assert here but that causes awkward circular requires since this is also in @ember/debug.\n // This is only for debug stuff so not very risky.\n var renderer = (0, _util.expect)(app.lookup('renderer:-dom'), \"BUG: owner is missing renderer\");\n return renderer.debugRenderTree.capture();\n }\n});","define(\"@ember/debug/lib/deprecate\", [\"exports\", \"@ember/-internals/environment\", \"@ember/debug/index\", \"@ember/debug/lib/handlers\"], function (_exports, _environment, _index, _handlers) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.missingOptionsIdDeprecation = _exports.missingOptionsDeprecation = _exports.missingOptionDeprecation = _exports.default = void 0;\n /**\n @module @ember/debug\n @public\n */\n /**\n Allows for runtime registration of handler functions that override the default deprecation behavior.\n Deprecations are invoked by calls to [@ember/debug/deprecate](/ember/release/classes/@ember%2Fdebug/methods/deprecate?anchor=deprecate).\n The following example demonstrates its usage by registering a handler that throws an error if the\n message contains the word \"should\", otherwise defers to the default handler.\n \n ```javascript\n import { registerDeprecationHandler } from '@ember/debug';\n \n registerDeprecationHandler((message, options, next) => {\n if (message.indexOf('should') !== -1) {\n throw new Error(`Deprecation message with should: ${message}`);\n } else {\n // defer to whatever handler was registered before this one\n next(message, options);\n }\n });\n ```\n \n The handler function takes the following arguments:\n \n <ul>\n <li> <code>message</code> - The message received from the deprecation call.</li>\n <li> <code>options</code> - An object passed in with the deprecation call containing additional information including:</li>\n <ul>\n <li> <code>id</code> - An id of the deprecation in the form of <code>package-name.specific-deprecation</code>.</li>\n <li> <code>until</code> - The Ember version number the feature and deprecation will be removed in.</li>\n </ul>\n <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n </ul>\n \n @public\n @static\n @method registerDeprecationHandler\n @for @ember/debug\n @param handler {Function} A function to handle deprecation calls.\n @since 2.1.0\n */\n var registerHandler = () => {};\n _exports.registerHandler = registerHandler;\n var missingOptionsDeprecation;\n _exports.missingOptionsDeprecation = missingOptionsDeprecation;\n var missingOptionsIdDeprecation;\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation;\n var missingOptionDeprecation = () => '';\n _exports.missingOptionDeprecation = missingOptionDeprecation;\n var deprecate = () => {};\n if (true /* DEBUG */) {\n _exports.registerHandler = registerHandler = function registerHandler(handler) {\n (0, _handlers.registerHandler)('deprecate', handler);\n };\n var formatMessage = function formatMessage(_message, options) {\n var message = _message;\n if (options != null && options.id) {\n message = message + (\" [deprecation id: \" + options.id + \"]\");\n }\n if (options != null && options.until) {\n message = message + (\" This will be removed in \" + options.for + \" \" + options.until + \".\");\n }\n if (options != null && options.url) {\n message += \" See \" + options.url + \" for more details.\";\n }\n return message;\n };\n registerHandler(function logDeprecationToConsole(message, options) {\n var updatedMessage = formatMessage(message, options);\n console.warn(\"DEPRECATION: \" + updatedMessage); // eslint-disable-line no-console\n });\n\n var captureErrorForStack;\n if (new Error().stack) {\n captureErrorForStack = () => new Error();\n } else {\n captureErrorForStack = () => {\n try {\n __fail__.fail();\n return;\n } catch (e) {\n return e;\n }\n };\n }\n registerHandler(function logDeprecationStackTrace(message, options, next) {\n if (_environment.ENV.LOG_STACKTRACE_ON_DEPRECATION) {\n var stackStr = '';\n var error = captureErrorForStack();\n var stack;\n if (error instanceof Error) {\n if (error.stack) {\n if (error['arguments']) {\n // Chrome\n stack = error.stack.replace(/^\\s+at\\s+/gm, '').replace(/^([^(]+?)([\\n$])/gm, '{anonymous}($1)$2').replace(/^Object.<anonymous>\\s*\\(([^)]+)\\)/gm, '{anonymous}($1)').split('\\n');\n stack.shift();\n } else {\n // Firefox\n stack = error.stack.replace(/(?:\\n@:0)?\\s+$/m, '').replace(/^\\(/gm, '{anonymous}(').split('\\n');\n }\n stackStr = \"\\n \" + stack.slice(2).join('\\n ');\n }\n }\n var updatedMessage = formatMessage(message, options);\n console.warn(\"DEPRECATION: \" + updatedMessage + stackStr); // eslint-disable-line no-console\n } else {\n next(message, options);\n }\n });\n registerHandler(function raiseOnDeprecation(message, options, next) {\n if (_environment.ENV.RAISE_ON_DEPRECATION) {\n var updatedMessage = formatMessage(message);\n throw new Error(updatedMessage);\n } else {\n next(message, options);\n }\n });\n _exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `deprecate` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include `id` and `until` properties.';\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `deprecate` you must provide `id` in options.';\n _exports.missingOptionDeprecation = missingOptionDeprecation = (id, missingOption) => {\n return \"When calling `deprecate` you must provide `\" + missingOption + \"` in options. Missing options.\" + missingOption + \" in \\\"\" + id + \"\\\" deprecation\";\n };\n /**\n @module @ember/debug\n @public\n */\n /**\n Display a deprecation warning with the provided message and a stack trace\n (Chrome and Firefox only).\n Ember itself leverages [Semantic Versioning](https://semver.org) to aid\n projects in keeping up with changes to the framework. Before any\n functionality or API is removed, it first flows linearly through a\n deprecation staging process. The staging process currently contains two\n stages: available and enabled.\n Deprecations are initially released into the 'available' stage.\n Deprecations will stay in this stage until the replacement API has been\n marked as a recommended practice via the RFC process and the addon\n ecosystem has generally adopted the change.\n Once a deprecation meets the above criteria, it will move into the\n 'enabled' stage where it will remain until the functionality or API is\n eventually removed.\n For application and addon developers, \"available\" deprecations are not\n urgent and \"enabled\" deprecations require action.\n * In a production build, this method is defined as an empty function (NOP).\n Uses of this method in Ember itself are stripped from the ember.prod.js build.\n ```javascript\n import { deprecate } from '@ember/debug';\n deprecate(\n 'Use of `assign` has been deprecated. Please use `Object.assign` or the spread operator instead.',\n false,\n {\n id: 'ember-polyfills.deprecate-assign',\n until: '5.0.0',\n url: 'https://deprecations.emberjs.com/v4.x/#toc_ember-polyfills-deprecate-assign',\n for: 'ember-source',\n since: {\n available: '4.0.0',\n enabled: '4.0.0',\n },\n }\n );\n ```\n @method deprecate\n @for @ember/debug\n @param {String} message A description of the deprecation.\n @param {Boolean} test A boolean. If falsy, the deprecation will be displayed.\n @param {Object} options\n @param {String} options.id A unique id for this deprecation. The id can be\n used by Ember debugging tools to change the behavior (raise, log or silence)\n for that specific deprecation. The id should be namespaced by dots, e.g.\n \"view.helper.select\".\n @param {string} options.until The version of Ember when this deprecation\n warning will be removed.\n @param {String} options.for A namespace for the deprecation, usually the package name\n @param {Object} options.since Describes when the deprecation became available and enabled.\n @param {String} [options.url] An optional url to the transition guide on the\n emberjs.com website.\n @static\n @public\n @since 1.0.0\n */\n deprecate = function deprecate(message, test, options) {\n (0, _index.assert)(missingOptionsDeprecation, Boolean(options && (options.id || options.until)));\n (0, _index.assert)(missingOptionsIdDeprecation, Boolean(options.id));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'until'), Boolean(options.until));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'for'), Boolean(options.for));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'since'), Boolean(options.since));\n (0, _handlers.invoke)('deprecate', message, test, options);\n };\n }\n var _default = deprecate;\n _exports.default = _default;\n});","define(\"@ember/debug/lib/handlers\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.invoke = _exports.HANDLERS = void 0;\n var HANDLERS = {};\n _exports.HANDLERS = HANDLERS;\n var registerHandler = function registerHandler(_type, _callback) {};\n _exports.registerHandler = registerHandler;\n var invoke = () => {};\n _exports.invoke = invoke;\n if (true /* DEBUG */) {\n _exports.registerHandler = registerHandler = function registerHandler(type, callback) {\n var nextHandler = HANDLERS[type] || (() => {});\n HANDLERS[type] = (message, options) => {\n callback(message, options, nextHandler);\n };\n };\n _exports.invoke = invoke = function invoke(type, message, test, options) {\n if (test) {\n return;\n }\n var handlerForType = HANDLERS[type];\n if (handlerForType) {\n handlerForType(message, options);\n }\n };\n }\n});","define(\"@ember/debug/lib/inspect\", [\"exports\", \"@glimmer/util\", \"@ember/debug\"], function (_exports, _util, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = inspect;\n var {\n toString: objectToString\n } = Object.prototype;\n var {\n toString: functionToString\n } = Function.prototype;\n var {\n isArray\n } = Array;\n var {\n keys: objectKeys\n } = Object;\n var {\n stringify\n } = JSON;\n var LIST_LIMIT = 100;\n var DEPTH_LIMIT = 4;\n var SAFE_KEY = /^[\\w$]+$/;\n /**\n @module @ember/debug\n */\n /**\n Convenience method to inspect an object. This method will attempt to\n convert the object into a useful string description.\n \n It is a pretty simple implementation. If you want something more robust,\n use something like JSDump: https://github.com/NV/jsDump\n \n @method inspect\n @static\n @param {Object} obj The object you want to inspect.\n @return {String} A description of the object\n @since 1.4.0\n @private\n */\n function inspect(obj) {\n // detect Node util.inspect call inspect(depth: number, opts: object)\n if (typeof obj === 'number' && arguments.length === 2) {\n return this;\n }\n return inspectValue(obj, 0);\n }\n function inspectValue(value, depth, seen) {\n var valueIsArray = false;\n switch (typeof value) {\n case 'undefined':\n return 'undefined';\n case 'object':\n if (value === null) return 'null';\n if (isArray(value)) {\n valueIsArray = true;\n break;\n }\n // is toString Object.prototype.toString or undefined then traverse\n if (value.toString === objectToString || value.toString === undefined) {\n break;\n }\n // custom toString\n return value.toString();\n case 'function':\n return value.toString === functionToString ? value.name ? \"[Function:\" + value.name + \"]\" : \"[Function]\" : value.toString();\n case 'string':\n return stringify(value);\n case 'symbol':\n case 'boolean':\n case 'number':\n default:\n return value.toString();\n }\n if (seen === undefined) {\n seen = new _util._WeakSet();\n } else {\n if (seen.has(value)) return \"[Circular]\";\n }\n seen.add(value);\n return valueIsArray ? inspectArray(value, depth + 1, seen) : inspectObject(value, depth + 1, seen);\n }\n function inspectKey(key) {\n return SAFE_KEY.test(key) ? key : stringify(key);\n }\n function inspectObject(obj, depth, seen) {\n if (depth > DEPTH_LIMIT) {\n return '[Object]';\n }\n var s = '{';\n var keys = objectKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n s += i === 0 ? ' ' : ', ';\n if (i >= LIST_LIMIT) {\n s += \"... \" + (keys.length - LIST_LIMIT) + \" more keys\";\n break;\n }\n var key = keys[i];\n (true && !(key) && (0, _debug.assert)('has key', key)); // Looping over array\n s += inspectKey(String(key)) + \": \" + inspectValue(obj[key], depth, seen);\n }\n s += ' }';\n return s;\n }\n function inspectArray(arr, depth, seen) {\n if (depth > DEPTH_LIMIT) {\n return '[Array]';\n }\n var s = '[';\n for (var i = 0; i < arr.length; i++) {\n s += i === 0 ? ' ' : ', ';\n if (i >= LIST_LIMIT) {\n s += \"... \" + (arr.length - LIST_LIMIT) + \" more items\";\n break;\n }\n s += inspectValue(arr[i], depth, seen);\n }\n s += ' ]';\n return s;\n }\n});","define(\"@ember/debug/lib/testing\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.isTesting = isTesting;\n _exports.setTesting = setTesting;\n var testing = false;\n function isTesting() {\n return testing;\n }\n function setTesting(value) {\n testing = Boolean(value);\n }\n});","define(\"@ember/debug/lib/warn\", [\"exports\", \"@ember/debug/index\", \"@ember/debug/lib/handlers\"], function (_exports, _index, _handlers) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.missingOptionsIdDeprecation = _exports.missingOptionsDeprecation = _exports.default = void 0;\n var registerHandler = () => {};\n _exports.registerHandler = registerHandler;\n var warn = () => {};\n var missingOptionsDeprecation;\n _exports.missingOptionsDeprecation = missingOptionsDeprecation;\n var missingOptionsIdDeprecation;\n /**\n @module @ember/debug\n */\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation;\n if (true /* DEBUG */) {\n /**\n Allows for runtime registration of handler functions that override the default warning behavior.\n Warnings are invoked by calls made to [@ember/debug/warn](/ember/release/classes/@ember%2Fdebug/methods/warn?anchor=warn).\n The following example demonstrates its usage by registering a handler that does nothing overriding Ember's\n default warning behavior.\n ```javascript\n import { registerWarnHandler } from '@ember/debug';\n // next is not called, so no warnings get the default behavior\n registerWarnHandler(() => {});\n ```\n The handler function takes the following arguments:\n <ul>\n <li> <code>message</code> - The message received from the warn call. </li>\n <li> <code>options</code> - An object passed in with the warn call containing additional information including:</li>\n <ul>\n <li> <code>id</code> - An id of the warning in the form of <code>package-name.specific-warning</code>.</li>\n </ul>\n <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n </ul>\n @public\n @static\n @method registerWarnHandler\n @for @ember/debug\n @param handler {Function} A function to handle warnings.\n @since 2.1.0\n */\n _exports.registerHandler = registerHandler = function registerHandler(handler) {\n (0, _handlers.registerHandler)('warn', handler);\n };\n registerHandler(function logWarning(message) {\n /* eslint-disable no-console */\n console.warn(\"WARNING: \" + message);\n /* eslint-enable no-console */\n });\n\n _exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `warn` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include an `id` property.';\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `warn` you must provide `id` in options.';\n /**\n Display a warning with the provided message.\n * In a production build, this method is defined as an empty function (NOP).\n Uses of this method in Ember itself are stripped from the ember.prod.js build.\n ```javascript\n import { warn } from '@ember/debug';\n import tomsterCount from './tomster-counter'; // a module in my project\n // Log a warning if we have more than 3 tomsters\n warn('Too many tomsters!', tomsterCount <= 3, {\n id: 'ember-debug.too-many-tomsters'\n });\n ```\n @method warn\n @for @ember/debug\n @static\n @param {String} message A warning to display.\n @param {Boolean} test An optional boolean. If falsy, the warning\n will be displayed.\n @param {Object} options An object that can be used to pass a unique\n `id` for this warning. The `id` can be used by Ember debugging tools\n to change the behavior (raise, log, or silence) for that specific warning.\n The `id` should be namespaced by dots, e.g. \"ember-debug.feature-flag-with-features-stripped\"\n @public\n @since 1.0.0\n */\n warn = function warn(message, test, options) {\n if (arguments.length === 2 && typeof test === 'object') {\n options = test;\n test = false;\n }\n (0, _index.assert)(missingOptionsDeprecation, Boolean(options));\n (0, _index.assert)(missingOptionsIdDeprecation, Boolean(options && options.id));\n // SAFETY: we checked this by way of the `arguments` check above.\n (0, _handlers.invoke)('warn', message, test, options);\n };\n }\n var _default = warn;\n _exports.default = _default;\n});","define(\"@ember/deprecated-features/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.ASSIGN = void 0;\n /* eslint-disable no-implicit-coercion */\n // These versions should be the version that the deprecation was _introduced_,\n // not the version that the feature will be removed.\n var ASSIGN = !!'4.0.0-beta.1';\n _exports.ASSIGN = ASSIGN;\n});","define(\"@glimmer/compiler\", [\"exports\", \"@glimmer/syntax\", \"@glimmer/util\"], function (_exports, _syntax, _util) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.WireFormatDebugger = _exports.ProgramSymbols = _exports.NEWLINE = void 0;\n _exports.buildStatement = buildStatement;\n _exports.buildStatements = buildStatements;\n _exports.c = c;\n _exports.defaultId = void 0;\n _exports.precompile = precompile;\n _exports.precompileJSON = precompileJSON;\n _exports.s = s;\n _exports.unicode = unicode;\n class Template extends (0, _syntax.node)('Template').fields() {}\n class InElement extends (0, _syntax.node)('InElement').fields() {}\n class Not extends (0, _syntax.node)('Not').fields() {}\n class If extends (0, _syntax.node)('If').fields() {}\n class IfInline extends (0, _syntax.node)('IfInline').fields() {}\n class Each extends (0, _syntax.node)('Each').fields() {}\n class With extends (0, _syntax.node)('With').fields() {}\n class Let extends (0, _syntax.node)('Let').fields() {}\n class WithDynamicVars extends (0, _syntax.node)('WithDynamicVars').fields() {}\n class GetDynamicVar extends (0, _syntax.node)('GetDynamicVar').fields() {}\n class Log extends (0, _syntax.node)('Log').fields() {}\n class InvokeComponent extends (0, _syntax.node)('InvokeComponent').fields() {}\n class NamedBlocks extends (0, _syntax.node)('NamedBlocks').fields() {}\n class NamedBlock extends (0, _syntax.node)('NamedBlock').fields() {}\n class EndBlock extends (0, _syntax.node)('EndBlock').fields() {}\n class AppendTrustedHTML extends (0, _syntax.node)('AppendTrustedHTML').fields() {}\n class AppendTextNode extends (0, _syntax.node)('AppendTextNode').fields() {}\n class AppendComment extends (0, _syntax.node)('AppendComment').fields() {}\n class Component extends (0, _syntax.node)('Component').fields() {}\n class StaticAttr extends (0, _syntax.node)('StaticAttr').fields() {}\n class DynamicAttr extends (0, _syntax.node)('DynamicAttr').fields() {}\n class SimpleElement extends (0, _syntax.node)('SimpleElement').fields() {}\n class ElementParameters extends (0, _syntax.node)('ElementParameters').fields() {}\n class Yield extends (0, _syntax.node)('Yield').fields() {}\n class Debugger extends (0, _syntax.node)('Debugger').fields() {}\n class CallExpression extends (0, _syntax.node)('CallExpression').fields() {}\n class DeprecatedCallExpression extends (0, _syntax.node)('DeprecatedCallExpression').fields() {}\n class Modifier extends (0, _syntax.node)('Modifier').fields() {}\n class InvokeBlock extends (0, _syntax.node)('InvokeBlock').fields() {}\n class SplatAttr extends (0, _syntax.node)('SplatAttr').fields() {}\n class PathExpression extends (0, _syntax.node)('PathExpression').fields() {}\n class GetWithResolver extends (0, _syntax.node)('GetWithResolver').fields() {}\n class GetSymbol extends (0, _syntax.node)('GetSymbol').fields() {}\n class GetFreeWithContext extends (0, _syntax.node)('GetFreeWithContext').fields() {}\n /** strict mode */\n\n class GetFree extends (0, _syntax.node)('GetFree').fields() {}\n class Missing extends (0, _syntax.node)('Missing').fields() {}\n class InterpolateExpression extends (0, _syntax.node)('InterpolateExpression').fields() {}\n class HasBlock extends (0, _syntax.node)('HasBlock').fields() {}\n class HasBlockParams extends (0, _syntax.node)('HasBlockParams').fields() {}\n class Curry extends (0, _syntax.node)('Curry').fields() {}\n class Positional extends (0, _syntax.node)('Positional').fields() {}\n class NamedArguments extends (0, _syntax.node)('NamedArguments').fields() {}\n class NamedArgument extends (0, _syntax.node)('NamedArgument').fields() {}\n class Args extends (0, _syntax.node)('Args').fields() {}\n class Tail extends (0, _syntax.node)('Tail').fields() {}\n class PresentList {\n constructor(list) {\n this.list = list;\n }\n toArray() {\n return this.list;\n }\n map(callback) {\n var result = (0, _util.mapPresent)(this.list, callback);\n return new PresentList(result);\n }\n filter(predicate) {\n var out = [];\n for (var item of this.list) {\n if (predicate(item)) {\n out.push(item);\n }\n }\n return OptionalList(out);\n }\n toPresentArray() {\n return this.list;\n }\n into(_ref) {\n var {\n ifPresent\n } = _ref;\n return ifPresent(this);\n }\n }\n class EmptyList {\n constructor() {\n this.list = [];\n }\n map(_callback) {\n return new EmptyList();\n }\n filter(_predicate) {\n return new EmptyList();\n }\n toArray() {\n return this.list;\n }\n toPresentArray() {\n return null;\n }\n into(_ref2) {\n var {\n ifEmpty\n } = _ref2;\n return ifEmpty();\n }\n } // export type OptionalList<T> = PresentList<T> | EmptyList<T>;\n\n function OptionalList(value) {\n if ((0, _util.isPresent)(value)) {\n return new PresentList(value);\n } else {\n return new EmptyList();\n }\n }\n class ResultImpl {\n static all() {\n var out = [];\n for (var _len = arguments.length, results = new Array(_len), _key = 0; _key < _len; _key++) {\n results[_key] = arguments[_key];\n }\n for (var result of results) {\n if (result.isErr) {\n return result.cast();\n } else {\n out.push(result.value);\n }\n }\n return Ok(out);\n }\n }\n var Result = ResultImpl;\n class OkImpl extends ResultImpl {\n constructor(value) {\n super();\n this.value = value;\n this.isOk = true;\n this.isErr = false;\n }\n expect(_message) {\n return this.value;\n }\n ifOk(callback) {\n callback(this.value);\n return this;\n }\n andThen(callback) {\n return callback(this.value);\n }\n mapOk(callback) {\n return Ok(callback(this.value));\n }\n ifErr(_callback) {\n return this;\n }\n mapErr(_callback) {\n return this;\n }\n }\n class ErrImpl extends ResultImpl {\n constructor(reason) {\n super();\n this.reason = reason;\n this.isOk = false;\n this.isErr = true;\n }\n expect(message) {\n throw new Error(message || 'expected an Ok, got Err');\n }\n andThen(_callback) {\n return this.cast();\n }\n mapOk(_callback) {\n return this.cast();\n }\n ifOk(_callback) {\n return this;\n }\n mapErr(callback) {\n return Err(callback(this.reason));\n }\n ifErr(callback) {\n callback(this.reason);\n return this;\n }\n cast() {\n return this;\n }\n }\n function Ok(value) {\n return new OkImpl(value);\n }\n function Err(reason) {\n return new ErrImpl(reason);\n }\n class ResultArray {\n constructor(items) {\n if (items === void 0) {\n items = [];\n }\n this.items = items;\n }\n add(item) {\n this.items.push(item);\n }\n toArray() {\n var err = this.items.filter(item => item instanceof ErrImpl)[0];\n if (err !== undefined) {\n return err.cast();\n } else {\n return Ok(this.items.map(item => item.value));\n }\n }\n toOptionalList() {\n return this.toArray().mapOk(arr => OptionalList(arr));\n }\n }\n class KeywordImpl {\n constructor(keyword, type, delegate) {\n this.keyword = keyword;\n this.delegate = delegate;\n var nodes = new Set();\n for (var nodeType of KEYWORD_NODES[type]) {\n nodes.add(nodeType);\n }\n this.types = nodes;\n }\n match(node) {\n if (!this.types.has(node.type)) {\n return false;\n }\n var path = getCalleeExpression(node);\n if (path !== null && path.type === 'Path' && path.ref.type === 'Free') {\n if (path.tail.length > 0) {\n if (path.ref.resolution.serialize() === 'Loose') {\n // cannot be a keyword reference, keywords do not allow paths (must be\n // relying on implicit this fallback)\n return false;\n }\n }\n return path.ref.name === this.keyword;\n } else {\n return false;\n }\n }\n translate(node, state) {\n if (this.match(node)) {\n var path = getCalleeExpression(node);\n if (path !== null && path.type === 'Path' && path.tail.length > 0) {\n return Err((0, _syntax.generateSyntaxError)(\"The `\" + this.keyword + \"` keyword was used incorrectly. It was used as `\" + path.loc.asString() + \"`, but it cannot be used with additional path segments. \\n\\nError caused by\", node.loc));\n }\n var param = this.delegate.assert(node, state);\n return param.andThen(param => this.delegate.translate({\n node,\n state\n }, param));\n } else {\n return null;\n }\n }\n }\n var KEYWORD_NODES = {\n Call: ['Call'],\n Block: ['InvokeBlock'],\n Append: ['AppendContent'],\n Modifier: ['ElementModifier']\n };\n function keyword(keyword, type, delegate) {\n return new KeywordImpl(keyword, type, delegate);\n }\n function getCalleeExpression(node) {\n switch (node.type) {\n // This covers the inside of attributes and expressions, as well as the callee\n // of call nodes\n case 'Path':\n return node;\n case 'AppendContent':\n return getCalleeExpression(node.value);\n case 'Call':\n case 'InvokeBlock':\n case 'ElementModifier':\n return node.callee;\n default:\n return null;\n }\n }\n class Keywords {\n constructor(type) {\n this._keywords = [];\n this._type = type;\n }\n kw(name, delegate) {\n this._keywords.push(keyword(name, this._type, delegate));\n return this;\n }\n translate(node, state) {\n for (var _keyword of this._keywords) {\n var result = _keyword.translate(node, state);\n if (result !== null) {\n return result;\n }\n }\n var path = getCalleeExpression(node);\n if (path && path.type === 'Path' && path.ref.type === 'Free' && (0, _syntax.isKeyword)(path.ref.name)) {\n var {\n name\n } = path.ref;\n var usedType = this._type;\n var validTypes = _syntax.KEYWORDS_TYPES[name];\n if (validTypes.indexOf(usedType) === -1) {\n return Err((0, _syntax.generateSyntaxError)(\"The `\" + name + \"` keyword was used incorrectly. It was used as \" + typesToReadableName[usedType] + \", but its valid usages are:\\n\\n\" + generateTypesMessage(name, validTypes) + \"\\n\\nError caused by\", node.loc));\n }\n }\n return null;\n }\n }\n var typesToReadableName = {\n Append: 'an append statement',\n Block: 'a block statement',\n Call: 'a call expression',\n Modifier: 'a modifier'\n };\n function generateTypesMessage(name, types) {\n return types.map(type => {\n switch (type) {\n case 'Append':\n return \"- As an append statement, as in: {{\" + name + \"}}\";\n case 'Block':\n return \"- As a block statement, as in: {{#\" + name + \"}}{{/\" + name + \"}}\";\n case 'Call':\n return \"- As an expression, as in: (\" + name + \")\";\n case 'Modifier':\n return \"- As a modifier, as in: <div {{\" + name + \"}}></div>\";\n default:\n return (0, _util.exhausted)(type);\n }\n }).join('\\n\\n');\n }\n /**\n * This function builds keyword definitions for a particular type of AST node (`KeywordType`).\n *\n * You can build keyword definitions for:\n *\n * - `Expr`: A `SubExpression` or `PathExpression`\n * - `Block`: A `BlockStatement`\n * - A `BlockStatement` is a keyword candidate if its head is a\n * `PathExpression`\n * - `Append`: An `AppendStatement`\n *\n * A node is a keyword candidate if:\n *\n * - A `PathExpression` is a keyword candidate if it has no tail, and its\n * head expression is a `LocalVarHead` or `FreeVarHead` whose name is\n * the keyword's name.\n * - A `SubExpression`, `AppendStatement`, or `BlockStatement` is a keyword\n * candidate if its head is a keyword candidate.\n *\n * The keyword infrastructure guarantees that:\n *\n * - If a node is not a keyword candidate, it is never passed to any keyword's\n * `assert` method.\n * - If a node is not the `KeywordType` for a particular keyword, it will not\n * be passed to the keyword's `assert` method.\n *\n * `Expr` keywords are used in expression positions and should return HIR\n * expressions. `Block` and `Append` keywords are used in statement\n * positions and should return HIR statements.\n *\n * A keyword definition has two parts:\n *\n * - `match`, which determines whether an AST node matches the keyword, and can\n * optionally return some information extracted from the AST node.\n * - `translate`, which takes a matching AST node as well as the extracted\n * information and returns an appropriate HIR instruction.\n *\n * # Example\n *\n * This keyword:\n *\n * - turns `(hello)` into `\"hello\"`\n * - as long as `hello` is not in scope\n * - makes it an error to pass any arguments (such as `(hello world)`)\n *\n * ```ts\n * keywords('SubExpr').kw('hello', {\n * assert(node: ExprKeywordNode): Result<void> | false {\n * // we don't want to transform `hello` as a `PathExpression`\n * if (node.type !== 'SubExpression') {\n * return false;\n * }\n *\n * // node.head would be `LocalVarHead` if `hello` was in scope\n * if (node.head.type !== 'FreeVarHead') {\n * return false;\n * }\n *\n * if (node.params.length || node.hash) {\n * return Err(generateSyntaxError(`(hello) does not take any arguments`), node.loc);\n * } else {\n * return Ok();\n * }\n * },\n *\n * translate(node: ASTv2.SubExpression): hir.Expression {\n * return ASTv2.builders.literal(\"hello\", node.loc)\n * }\n * })\n * ```\n *\n * The keyword infrastructure checks to make sure that the node is the right\n * type before calling `assert`, so you only need to consider `SubExpression`\n * and `PathExpression` here. It also checks to make sure that the node passed\n * to `assert` has the keyword name in the right place.\n *\n * Note the important difference between returning `false` from `assert`,\n * which just means that the node didn't match, and returning `Err`, which\n * means that the node matched, but there was a keyword-specific syntax\n * error.\n */\n\n function keywords(type) {\n return new Keywords(type);\n }\n function hasPath(node) {\n return node.callee.type === 'Path';\n }\n function isHelperInvocation(node) {\n if (!hasPath(node)) {\n return false;\n }\n return !node.args.isEmpty();\n }\n function isSimplePath(path) {\n if (path.type === 'Path') {\n var {\n ref: head,\n tail: parts\n } = path;\n return head.type === 'Free' && head.resolution !== _syntax.ASTv2.STRICT_RESOLUTION && parts.length === 0;\n } else {\n return false;\n }\n }\n function isStrictHelper(expr) {\n if (expr.callee.type !== 'Path') {\n return true;\n }\n if (expr.callee.ref.type !== 'Free') {\n return true;\n }\n return expr.callee.ref.resolution === _syntax.ASTv2.STRICT_RESOLUTION;\n }\n function assertIsValidModifier(helper) {\n if (isStrictHelper(helper) || isSimplePath(helper.callee)) {\n return;\n }\n throw (0, _syntax.generateSyntaxError)(\"`\" + printPath(helper.callee) + \"` is not a valid name for a modifier\", helper.loc);\n }\n function printPath(path) {\n switch (path.type) {\n case 'Literal':\n return JSON.stringify(path.value);\n case 'Path':\n {\n var printedPath = [printPathHead(path.ref)];\n printedPath.push(...path.tail.map(t => t.chars));\n return printedPath.join('.');\n }\n case 'Call':\n return \"(\" + printPath(path.callee) + \" ...)\";\n case 'DeprecatedCall':\n return \"\" + path.callee.name;\n case 'Interpolate':\n throw (0, _util.unreachable)('a concat statement cannot appear as the head of an expression');\n }\n }\n function printPathHead(head) {\n switch (head.type) {\n case 'Arg':\n return head.name.chars;\n case 'Free':\n case 'Local':\n return head.name;\n case 'This':\n return 'this';\n }\n }\n class NormalizeExpressions {\n visit(node, state) {\n switch (node.type) {\n case 'Literal':\n return Ok(this.Literal(node));\n case 'Interpolate':\n return this.Interpolate(node, state);\n case 'Path':\n return this.PathExpression(node);\n case 'Call':\n var translated = CALL_KEYWORDS.translate(node, state);\n if (translated !== null) {\n return translated;\n }\n return this.CallExpression(node, state);\n case 'DeprecatedCall':\n return this.DeprecaedCallExpression(node, state);\n }\n }\n visitList(nodes, state) {\n return new ResultArray(nodes.map(e => VISIT_EXPRS.visit(e, state))).toOptionalList();\n }\n /**\n * Normalize paths into `hir.Path` or a `hir.Expr` that corresponds to the ref.\n *\n * TODO since keywords don't support tails anyway, distinguish PathExpression from\n * VariableReference in ASTv2.\n */\n\n PathExpression(path) {\n var ref = this.VariableReference(path.ref);\n var {\n tail\n } = path;\n if ((0, _util.isPresent)(tail)) {\n var tailLoc = tail[0].loc.extend(tail[tail.length - 1].loc);\n return Ok(new PathExpression({\n loc: path.loc,\n head: ref,\n tail: new Tail({\n loc: tailLoc,\n members: tail\n })\n }));\n } else {\n return Ok(ref);\n }\n }\n VariableReference(ref) {\n return ref;\n }\n Literal(literal) {\n return literal;\n }\n Interpolate(expr, state) {\n var parts = expr.parts.map(convertPathToCallIfKeyword);\n return VISIT_EXPRS.visitList(parts, state).mapOk(parts => new InterpolateExpression({\n loc: expr.loc,\n parts: parts\n }));\n }\n CallExpression(expr, state) {\n if (!hasPath(expr)) {\n throw new Error(\"unimplemented subexpression at the head of a subexpression\");\n } else {\n return Result.all(VISIT_EXPRS.visit(expr.callee, state), VISIT_EXPRS.Args(expr.args, state)).mapOk(_ref3 => {\n var [callee, args] = _ref3;\n return new CallExpression({\n loc: expr.loc,\n callee,\n args\n });\n });\n }\n }\n DeprecaedCallExpression(_ref4, _state) {\n var {\n arg,\n callee,\n loc\n } = _ref4;\n return Ok(new DeprecatedCallExpression({\n loc,\n arg,\n callee\n }));\n }\n Args(_ref5, state) {\n var {\n positional,\n named,\n loc\n } = _ref5;\n return Result.all(this.Positional(positional, state), this.NamedArguments(named, state)).mapOk(_ref6 => {\n var [positional, named] = _ref6;\n return new Args({\n loc,\n positional,\n named\n });\n });\n }\n Positional(positional, state) {\n return VISIT_EXPRS.visitList(positional.exprs, state).mapOk(list => new Positional({\n loc: positional.loc,\n list\n }));\n }\n NamedArguments(named, state) {\n var pairs = named.entries.map(arg => {\n var value = convertPathToCallIfKeyword(arg.value);\n return VISIT_EXPRS.visit(value, state).mapOk(value => new NamedArgument({\n loc: arg.loc,\n key: arg.name,\n value\n }));\n });\n return new ResultArray(pairs).toOptionalList().mapOk(pairs => new NamedArguments({\n loc: named.loc,\n entries: pairs\n }));\n }\n }\n function convertPathToCallIfKeyword(path) {\n if (path.type === 'Path' && path.ref.type === 'Free' && path.ref.name in _syntax.KEYWORDS_TYPES) {\n return new _syntax.ASTv2.CallExpression({\n callee: path,\n args: _syntax.ASTv2.Args.empty(path.loc),\n loc: path.loc\n });\n }\n return path;\n }\n var VISIT_EXPRS = new NormalizeExpressions();\n var CurriedTypeToReadableType = {\n [0\n /* Component */]: 'component',\n [1\n /* Helper */]: 'helper',\n [2\n /* Modifier */]: 'modifier'\n };\n function assertCurryKeyword(curriedType) {\n return (node, state) => {\n var readableType = CurriedTypeToReadableType[curriedType];\n var stringsAllowed = curriedType === 0\n /* Component */;\n\n var {\n args\n } = node;\n var definition = args.nth(0);\n if (definition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") requires a \" + readableType + \" definition or identifier as its first positional parameter, did not receive any parameters.\", args.loc));\n }\n if (definition.type === 'Literal') {\n if (stringsAllowed && state.isStrict) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") cannot resolve string values in strict mode templates\", node.loc));\n } else if (!stringsAllowed) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") cannot resolve string values, you must pass a \" + readableType + \" definition directly\", node.loc));\n }\n }\n args = new _syntax.ASTv2.Args({\n positional: new _syntax.ASTv2.PositionalArguments({\n exprs: args.positional.exprs.slice(1),\n loc: args.positional.loc\n }),\n named: args.named,\n loc: args.loc\n });\n return Ok({\n definition,\n args\n });\n };\n }\n function translateCurryKeyword(curriedType) {\n return (_ref7, _ref8) => {\n var {\n node,\n state\n } = _ref7;\n var {\n definition,\n args\n } = _ref8;\n var definitionResult = VISIT_EXPRS.visit(definition, state);\n var argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref9 => {\n var [definition, args] = _ref9;\n return new Curry({\n loc: node.loc,\n curriedType,\n definition,\n args\n });\n });\n };\n }\n function curryKeyword(curriedType) {\n return {\n assert: assertCurryKeyword(curriedType),\n translate: translateCurryKeyword(curriedType)\n };\n }\n function assertGetDynamicVarKeyword(node) {\n var call = node.type === 'AppendContent' ? node.value : node;\n var named = call.type === 'Call' ? call.args.named : null;\n var positionals = call.type === 'Call' ? call.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) does not take any named arguments\", node.loc));\n }\n var varName = positionals === null || positionals === void 0 ? void 0 : positionals.nth(0);\n if (!varName) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) requires a var name to get\", node.loc));\n }\n if (positionals && positionals.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) only receives one positional arg\", node.loc));\n }\n return Ok(varName);\n }\n function translateGetDynamicVarKeyword(_ref10, name) {\n var {\n node,\n state\n } = _ref10;\n return VISIT_EXPRS.visit(name, state).mapOk(name => new GetDynamicVar({\n name,\n loc: node.loc\n }));\n }\n var getDynamicVarKeyword = {\n assert: assertGetDynamicVarKeyword,\n translate: translateGetDynamicVarKeyword\n };\n function assertHasBlockKeyword(type) {\n return node => {\n var call = node.type === 'AppendContent' ? node.value : node;\n var named = call.type === 'Call' ? call.args.named : null;\n var positionals = call.type === 'Call' ? call.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") does not take any named arguments\", call.loc));\n }\n if (!positionals || positionals.isEmpty()) {\n return Ok(_syntax.SourceSlice.synthetic('default'));\n } else if (positionals.exprs.length === 1) {\n var positional = positionals.exprs[0];\n if (_syntax.ASTv2.isLiteral(positional, 'string')) {\n return Ok(positional.toSlice());\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") can only receive a string literal as its first argument\", call.loc));\n }\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") only takes a single positional argument\", call.loc));\n }\n };\n }\n function translateHasBlockKeyword(type) {\n return (_ref11, target) => {\n var {\n node,\n state: {\n scope\n }\n } = _ref11;\n var block = type === 'has-block' ? new HasBlock({\n loc: node.loc,\n target,\n symbol: scope.allocateBlock(target.chars)\n }) : new HasBlockParams({\n loc: node.loc,\n target,\n symbol: scope.allocateBlock(target.chars)\n });\n return Ok(block);\n };\n }\n function hasBlockKeyword(type) {\n return {\n assert: assertHasBlockKeyword(type),\n translate: translateHasBlockKeyword(type)\n };\n }\n function assertIfUnlessInlineKeyword(type) {\n return originalNode => {\n var _a;\n var inverted = type === 'unless';\n var node = originalNode.type === 'AppendContent' ? originalNode.value : originalNode;\n var named = node.type === 'Call' ? node.args.named : null;\n var positional = node.type === 'Call' ? node.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") cannot receive named parameters, received \" + named.entries.map(e => e.name.chars).join(', '), originalNode.loc));\n }\n var condition = positional === null || positional === void 0 ? void 0 : positional.nth(0);\n if (!positional || !condition) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") requires at least two parameters 1. the condition that determines the state of the (\" + type + \"), and 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \". Did not receive any parameters\", originalNode.loc));\n }\n var truthy = positional.nth(1);\n var falsy = positional.nth(2);\n if (truthy === null) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") requires at least two parameters 1. the condition that determines the state of the (\" + type + \"), and 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \". Received only one parameter, the condition\", originalNode.loc));\n }\n if (positional.size > 3) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") can receive a maximum of three positional parameters 1. the condition that determines the state of the (\" + type + \"), 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \", and 3. the value to return if the condition is \" + (inverted ? 'true' : 'false') + \". Received \" + ((_a = positional === null || positional === void 0 ? void 0 : positional.size) !== null && _a !== void 0 ? _a : 0) + \" parameters\", originalNode.loc));\n }\n return Ok({\n condition,\n truthy,\n falsy\n });\n };\n }\n function translateIfUnlessInlineKeyword(type) {\n var inverted = type === 'unless';\n return (_ref12, _ref13) => {\n var {\n node,\n state\n } = _ref12;\n var {\n condition,\n truthy,\n falsy\n } = _ref13;\n var conditionResult = VISIT_EXPRS.visit(condition, state);\n var truthyResult = VISIT_EXPRS.visit(truthy, state);\n var falsyResult = falsy ? VISIT_EXPRS.visit(falsy, state) : Ok(null);\n return Result.all(conditionResult, truthyResult, falsyResult).mapOk(_ref14 => {\n var [condition, truthy, falsy] = _ref14;\n if (inverted) {\n condition = new Not({\n value: condition,\n loc: node.loc\n });\n }\n return new IfInline({\n loc: node.loc,\n condition,\n truthy,\n falsy\n });\n });\n };\n }\n function ifUnlessInlineKeyword(type) {\n return {\n assert: assertIfUnlessInlineKeyword(type),\n translate: translateIfUnlessInlineKeyword(type)\n };\n }\n function assertLogKeyword(node) {\n var {\n args: {\n named,\n positional\n }\n } = node;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(log) does not take any named arguments\", node.loc));\n }\n return Ok(positional);\n }\n function translateLogKeyword(_ref15, positional) {\n var {\n node,\n state\n } = _ref15;\n return VISIT_EXPRS.Positional(positional, state).mapOk(positional => new Log({\n positional,\n loc: node.loc\n }));\n }\n var logKeyword = {\n assert: assertLogKeyword,\n translate: translateLogKeyword\n };\n var CALL_KEYWORDS = keywords('Call').kw('has-block', hasBlockKeyword('has-block')).kw('has-block-params', hasBlockKeyword('has-block-params')).kw('-get-dynamic-var', getDynamicVarKeyword).kw('log', logKeyword).kw('if', ifUnlessInlineKeyword('if')).kw('unless', ifUnlessInlineKeyword('unless')).kw('component', curryKeyword(0\n /* Component */)).kw('helper', curryKeyword(1\n /* Helper */)).kw('modifier', curryKeyword(2\n /* Modifier */));\n\n function toAppend(_ref16) {\n var {\n assert,\n translate\n } = _ref16;\n return {\n assert,\n translate(_ref17, value) {\n var {\n node,\n state\n } = _ref17;\n var result = translate({\n node,\n state\n }, value);\n return result.mapOk(text => new AppendTextNode({\n text,\n loc: node.loc\n }));\n }\n };\n }\n var APPEND_KEYWORDS = keywords('Append').kw('has-block', toAppend(hasBlockKeyword('has-block'))).kw('has-block-params', toAppend(hasBlockKeyword('has-block-params'))).kw('-get-dynamic-var', toAppend(getDynamicVarKeyword)).kw('log', toAppend(logKeyword)).kw('if', toAppend(ifUnlessInlineKeyword('if'))).kw('unless', toAppend(ifUnlessInlineKeyword('unless'))).kw('yield', {\n assert(node) {\n var {\n args\n } = node;\n if (args.named.isEmpty()) {\n return Ok({\n target: _syntax.SourceSpan.synthetic('default').toSlice(),\n positional: args.positional\n });\n } else {\n var target = args.named.get('to');\n if (args.named.size > 1 || target === null) {\n return Err((0, _syntax.generateSyntaxError)(\"yield only takes a single named argument: 'to'\", args.named.loc));\n }\n if (_syntax.ASTv2.isLiteral(target, 'string')) {\n return Ok({\n target: target.toSlice(),\n positional: args.positional\n });\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"you can only yield to a literal string value\", target.loc));\n }\n }\n },\n translate(_ref18, _ref19) {\n var {\n node,\n state\n } = _ref18;\n var {\n target,\n positional\n } = _ref19;\n return VISIT_EXPRS.Positional(positional, state).mapOk(positional => new Yield({\n loc: node.loc,\n target,\n to: state.scope.allocateBlock(target.chars),\n positional\n }));\n }\n }).kw('debugger', {\n assert(node) {\n var {\n args\n } = node;\n var {\n positional\n } = args;\n if (args.isEmpty()) {\n return Ok(undefined);\n } else {\n if (positional.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"debugger does not take any named arguments\", node.loc));\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"debugger does not take any positional arguments\", node.loc));\n }\n }\n },\n translate(_ref20) {\n var {\n node,\n state: {\n scope\n }\n } = _ref20;\n scope.setHasEval();\n return Ok(new Debugger({\n loc: node.loc,\n scope\n }));\n }\n }).kw('component', {\n assert: assertCurryKeyword(0\n /* Component */),\n\n translate(_ref21, _ref22) {\n var {\n node,\n state\n } = _ref21;\n var {\n definition,\n args\n } = _ref22;\n var definitionResult = VISIT_EXPRS.visit(definition, state);\n var argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref23 => {\n var [definition, args] = _ref23;\n return new InvokeComponent({\n loc: node.loc,\n definition,\n args,\n blocks: null\n });\n });\n }\n }).kw('helper', {\n assert: assertCurryKeyword(1\n /* Helper */),\n\n translate(_ref24, _ref25) {\n var {\n node,\n state\n } = _ref24;\n var {\n definition,\n args\n } = _ref25;\n var definitionResult = VISIT_EXPRS.visit(definition, state);\n var argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref26 => {\n var [definition, args] = _ref26;\n var text = new CallExpression({\n callee: definition,\n args,\n loc: node.loc\n });\n return new AppendTextNode({\n loc: node.loc,\n text\n });\n });\n }\n });\n var BLOCK_KEYWORDS = keywords('Block').kw('in-element', {\n assert(node) {\n var {\n args\n } = node;\n var guid = args.get('guid');\n if (guid) {\n return Err((0, _syntax.generateSyntaxError)(\"Cannot pass `guid` to `{{#in-element}}`\", guid.loc));\n }\n var insertBefore = args.get('insertBefore');\n var destination = args.nth(0);\n if (destination === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#in-element}} requires a target element as its first positional parameter\", args.loc));\n } // TODO Better syntax checks\n\n return Ok({\n insertBefore,\n destination\n });\n },\n translate(_ref27, _ref28) {\n var {\n node,\n state\n } = _ref27;\n var {\n insertBefore,\n destination\n } = _ref28;\n var named = node.blocks.get('default');\n var body = VISIT_STMTS.NamedBlock(named, state);\n var destinationResult = VISIT_EXPRS.visit(destination, state);\n return Result.all(body, destinationResult).andThen(_ref29 => {\n var [body, destination] = _ref29;\n if (insertBefore) {\n return VISIT_EXPRS.visit(insertBefore, state).mapOk(insertBefore => ({\n body,\n destination,\n insertBefore\n }));\n } else {\n return Ok({\n body,\n destination,\n insertBefore: new Missing({\n loc: node.callee.loc.collapse('end')\n })\n });\n }\n }).mapOk(_ref30 => {\n var {\n body,\n destination,\n insertBefore\n } = _ref30;\n return new InElement({\n loc: node.loc,\n block: body,\n insertBefore,\n guid: state.generateUniqueCursor(),\n destination\n });\n });\n }\n }).kw('if', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), node.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} can only receive one positional parameter in block form, the conditional value. Received \" + args.positional.size + \" parameters\", node.loc));\n }\n var condition = args.nth(0);\n if (condition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} requires a condition as its first positional parameter, did not receive any parameters\", node.loc));\n }\n return Ok({\n condition\n });\n },\n translate(_ref31, _ref32) {\n var {\n node,\n state\n } = _ref31;\n var {\n condition\n } = _ref32;\n var block = node.blocks.get('default');\n var inverse = node.blocks.get('else');\n var conditionResult = VISIT_EXPRS.visit(condition, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n var inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(conditionResult, blockResult, inverseResult).mapOk(_ref33 => {\n var [condition, block, inverse] = _ref33;\n return new If({\n loc: node.loc,\n condition,\n block,\n inverse\n });\n });\n }\n }).kw('unless', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), node.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} can only receive one positional parameter in block form, the conditional value. Received \" + args.positional.size + \" parameters\", node.loc));\n }\n var condition = args.nth(0);\n if (condition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} requires a condition as its first positional parameter, did not receive any parameters\", node.loc));\n }\n return Ok({\n condition\n });\n },\n translate(_ref34, _ref35) {\n var {\n node,\n state\n } = _ref34;\n var {\n condition\n } = _ref35;\n var block = node.blocks.get('default');\n var inverse = node.blocks.get('else');\n var conditionResult = VISIT_EXPRS.visit(condition, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n var inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(conditionResult, blockResult, inverseResult).mapOk(_ref36 => {\n var [condition, block, inverse] = _ref36;\n return new If({\n loc: node.loc,\n condition: new Not({\n value: condition,\n loc: node.loc\n }),\n block,\n inverse\n });\n });\n }\n }).kw('each', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.entries.every(e => e.name.chars === 'key')) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} can only receive the 'key' named parameter, received \" + args.named.entries.filter(e => e.name.chars !== 'key').map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} can only receive one positional parameter, the collection being iterated. Received \" + args.positional.size + \" parameters\", args.positional.loc));\n }\n var value = args.nth(0);\n var key = args.get('key');\n if (value === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} requires an iterable value to be passed as its first positional parameter, did not receive any parameters\", args.loc));\n }\n return Ok({\n value,\n key\n });\n },\n translate(_ref37, _ref38) {\n var {\n node,\n state\n } = _ref37;\n var {\n value,\n key\n } = _ref38;\n var block = node.blocks.get('default');\n var inverse = node.blocks.get('else');\n var valueResult = VISIT_EXPRS.visit(value, state);\n var keyResult = key ? VISIT_EXPRS.visit(key, state) : Ok(null);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n var inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(valueResult, keyResult, blockResult, inverseResult).mapOk(_ref39 => {\n var [value, key, block, inverse] = _ref39;\n return new Each({\n loc: node.loc,\n value,\n key,\n block,\n inverse\n });\n });\n }\n }).kw('with', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} can only receive one positional parameter. Received \" + args.positional.size + \" parameters\", args.positional.loc));\n }\n var value = args.nth(0);\n if (value === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} requires a value as its first positional parameter, did not receive any parameters\", args.loc));\n }\n return Ok({\n value\n });\n },\n translate(_ref40, _ref41) {\n var {\n node,\n state\n } = _ref40;\n var {\n value\n } = _ref41;\n var block = node.blocks.get('default');\n var inverse = node.blocks.get('else');\n var valueResult = VISIT_EXPRS.visit(value, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n var inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(valueResult, blockResult, inverseResult).mapOk(_ref42 => {\n var [value, block, inverse] = _ref42;\n return new With({\n loc: node.loc,\n value,\n block,\n inverse\n });\n });\n }\n }).kw('let', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size === 0) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} requires at least one value as its first positional parameter, did not receive any parameters\", args.positional.loc));\n }\n if (node.blocks.get('else')) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} cannot receive an {{else}} block\", args.positional.loc));\n }\n return Ok({\n positional: args.positional\n });\n },\n translate(_ref43, _ref44) {\n var {\n node,\n state\n } = _ref43;\n var {\n positional\n } = _ref44;\n var block = node.blocks.get('default');\n var positionalResult = VISIT_EXPRS.Positional(positional, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n return Result.all(positionalResult, blockResult).mapOk(_ref45 => {\n var [positional, block] = _ref45;\n return new Let({\n loc: node.loc,\n positional,\n block\n });\n });\n }\n }).kw('-with-dynamic-vars', {\n assert(node) {\n return Ok({\n named: node.args.named\n });\n },\n translate(_ref46, _ref47) {\n var {\n node,\n state\n } = _ref46;\n var {\n named\n } = _ref47;\n var block = node.blocks.get('default');\n var namedResult = VISIT_EXPRS.NamedArguments(named, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n return Result.all(namedResult, blockResult).mapOk(_ref48 => {\n var [named, block] = _ref48;\n return new WithDynamicVars({\n loc: node.loc,\n named,\n block\n });\n });\n }\n }).kw('component', {\n assert: assertCurryKeyword(0\n /* Component */),\n\n translate(_ref49, _ref50) {\n var {\n node,\n state\n } = _ref49;\n var {\n definition,\n args\n } = _ref50;\n var definitionResult = VISIT_EXPRS.visit(definition, state);\n var argsResult = VISIT_EXPRS.Args(args, state);\n var blocksResult = VISIT_STMTS.NamedBlocks(node.blocks, state);\n return Result.all(definitionResult, argsResult, blocksResult).mapOk(_ref51 => {\n var [definition, args, blocks] = _ref51;\n return new InvokeComponent({\n loc: node.loc,\n definition,\n args,\n blocks\n });\n });\n }\n });\n var MODIFIER_KEYWORDS = keywords('Modifier');\n\n // There is a small whitelist of namespaced attributes specially\n // enumerated in\n // https://www.w3.org/TR/html/syntax.html#attributes-0\n //\n // > When a foreign element has one of the namespaced attributes given by\n // > the local name and namespace of the first and second cells of a row\n // > from the following table, it must be written using the name given by\n // > the third cell from the same row.\n //\n // In all other cases, colons are interpreted as a regular character\n // with no special meaning:\n //\n // > No other namespaced attribute can be expressed in the HTML syntax.\n var XLINK = 'http://www.w3.org/1999/xlink';\n var XML = 'http://www.w3.org/XML/1998/namespace';\n var XMLNS = 'http://www.w3.org/2000/xmlns/';\n var WHITELIST = {\n 'xlink:actuate': XLINK,\n 'xlink:arcrole': XLINK,\n 'xlink:href': XLINK,\n 'xlink:role': XLINK,\n 'xlink:show': XLINK,\n 'xlink:title': XLINK,\n 'xlink:type': XLINK,\n 'xml:base': XML,\n 'xml:lang': XML,\n 'xml:space': XML,\n xmlns: XMLNS,\n 'xmlns:xlink': XMLNS\n };\n function getAttrNamespace(attrName) {\n return WHITELIST[attrName];\n }\n var DEFLATE_TAG_TABLE = {\n div: 0\n /* div */,\n\n span: 1\n /* span */,\n\n p: 2\n /* p */,\n\n a: 3\n /* a */\n };\n\n var INFLATE_TAG_TABLE = ['div', 'span', 'p', 'a'];\n function deflateTagName(tagName) {\n var _a;\n return (_a = DEFLATE_TAG_TABLE[tagName]) !== null && _a !== void 0 ? _a : tagName;\n }\n function inflateTagName(tagName) {\n return typeof tagName === 'string' ? tagName : INFLATE_TAG_TABLE[tagName];\n }\n var DEFLATE_ATTR_TABLE = {\n class: 0\n /* class */,\n\n id: 1\n /* id */,\n\n value: 2\n /* value */,\n\n name: 3\n /* name */,\n\n type: 4\n /* type */,\n\n style: 5\n /* style */,\n\n href: 6\n /* href */\n };\n\n var INFLATE_ATTR_TABLE = ['class', 'id', 'value', 'name', 'type', 'style', 'href'];\n function deflateAttrName(attrName) {\n var _a;\n return (_a = DEFLATE_ATTR_TABLE[attrName]) !== null && _a !== void 0 ? _a : attrName;\n }\n function inflateAttrName(attrName) {\n return typeof attrName === 'string' ? attrName : INFLATE_ATTR_TABLE[attrName];\n }\n class ClassifiedElement {\n constructor(element, delegate, state) {\n this.element = element;\n this.state = state;\n this.delegate = delegate;\n }\n toStatement() {\n return this.prepare().andThen(prepared => this.delegate.toStatement(this, prepared));\n }\n attr(attr) {\n var name = attr.name;\n var rawValue = attr.value;\n var namespace = getAttrNamespace(name.chars) || undefined;\n if (_syntax.ASTv2.isLiteral(rawValue, 'string')) {\n return Ok(new StaticAttr({\n loc: attr.loc,\n name,\n value: rawValue.toSlice(),\n namespace,\n kind: {\n component: this.delegate.dynamicFeatures\n }\n }));\n }\n return VISIT_EXPRS.visit(convertPathToCallIfKeyword(rawValue), this.state).mapOk(value => {\n var isTrusting = attr.trusting;\n return new DynamicAttr({\n loc: attr.loc,\n name,\n value: value,\n namespace,\n kind: {\n trusting: isTrusting,\n component: this.delegate.dynamicFeatures\n }\n });\n });\n }\n modifier(modifier) {\n if (isHelperInvocation(modifier)) {\n assertIsValidModifier(modifier);\n }\n var translated = MODIFIER_KEYWORDS.translate(modifier, this.state);\n if (translated !== null) {\n return translated;\n }\n var head = VISIT_EXPRS.visit(modifier.callee, this.state);\n var args = VISIT_EXPRS.Args(modifier.args, this.state);\n return Result.all(head, args).mapOk(_ref52 => {\n var [head, args] = _ref52;\n return new Modifier({\n loc: modifier.loc,\n callee: head,\n args\n });\n });\n }\n attrs() {\n var attrs = new ResultArray();\n var args = new ResultArray(); // Unlike most attributes, the `type` attribute can change how\n // subsequent attributes are interpreted by the browser. To address\n // this, in simple cases, we special case the `type` attribute to be set\n // last. For elements with splattributes, where attribute order affects\n // precedence, this re-ordering happens at runtime instead.\n // See https://github.com/glimmerjs/glimmer-vm/pull/726\n\n var typeAttr = null;\n var simple = this.element.attrs.filter(attr => attr.type === 'SplatAttr').length === 0;\n for (var attr of this.element.attrs) {\n if (attr.type === 'SplatAttr') {\n attrs.add(Ok(new SplatAttr({\n loc: attr.loc,\n symbol: this.state.scope.allocateBlock('attrs')\n })));\n } else if (attr.name.chars === 'type' && simple) {\n typeAttr = attr;\n } else {\n attrs.add(this.attr(attr));\n }\n }\n for (var arg of this.element.componentArgs) {\n args.add(this.delegate.arg(arg, this));\n }\n if (typeAttr) {\n attrs.add(this.attr(typeAttr));\n }\n return Result.all(args.toArray(), attrs.toArray()).mapOk(_ref53 => {\n var [args, attrs] = _ref53;\n return {\n attrs,\n args: new NamedArguments({\n loc: (0, _syntax.maybeLoc)(args, _syntax.SourceSpan.NON_EXISTENT),\n entries: OptionalList(args)\n })\n };\n });\n }\n prepare() {\n var attrs = this.attrs();\n var modifiers = new ResultArray(this.element.modifiers.map(m => this.modifier(m))).toArray();\n return Result.all(attrs, modifiers).mapOk(_ref54 => {\n var [result, modifiers] = _ref54;\n var {\n attrs,\n args\n } = result;\n var elementParams = [...attrs, ...modifiers];\n var params = new ElementParameters({\n loc: (0, _syntax.maybeLoc)(elementParams, _syntax.SourceSpan.NON_EXISTENT),\n body: OptionalList(elementParams)\n });\n return {\n args,\n params\n };\n });\n }\n }\n function hasDynamicFeatures(_ref55) {\n var {\n attrs,\n modifiers\n } = _ref55;\n // ElementModifier needs the special ComponentOperations\n if (modifiers.length > 0) {\n return true;\n } // Splattributes need the special ComponentOperations to merge into\n\n return !!attrs.filter(attr => attr.type === 'SplatAttr')[0];\n }\n class ClassifiedComponent {\n constructor(tag, element) {\n this.tag = tag;\n this.element = element;\n this.dynamicFeatures = true;\n }\n arg(attr, _ref56) {\n var {\n state\n } = _ref56;\n var name = attr.name;\n return VISIT_EXPRS.visit(convertPathToCallIfKeyword(attr.value), state).mapOk(value => new NamedArgument({\n loc: attr.loc,\n key: name,\n value\n }));\n }\n toStatement(component, _ref57) {\n var {\n args,\n params\n } = _ref57;\n var {\n element,\n state\n } = component;\n return this.blocks(state).mapOk(blocks => new Component({\n loc: element.loc,\n tag: this.tag,\n params,\n args,\n blocks\n }));\n }\n blocks(state) {\n return VISIT_STMTS.NamedBlocks(this.element.blocks, state);\n }\n }\n class ClassifiedSimpleElement {\n constructor(tag, element, dynamicFeatures) {\n this.tag = tag;\n this.element = element;\n this.dynamicFeatures = dynamicFeatures;\n this.isComponent = false;\n }\n arg(attr) {\n return Err((0, _syntax.generateSyntaxError)(attr.name.chars + \" is not a valid attribute name. @arguments are only allowed on components, but the tag for this element (`\" + this.tag.chars + \"`) is a regular, non-component HTML element.\", attr.loc));\n }\n toStatement(classified, _ref58) {\n var {\n params\n } = _ref58;\n var {\n state,\n element\n } = classified;\n var body = VISIT_STMTS.visitList(this.element.body, state);\n return body.mapOk(body => new SimpleElement({\n loc: element.loc,\n tag: this.tag,\n params,\n body: body.toArray(),\n dynamicFeatures: this.dynamicFeatures\n }));\n }\n }\n class NormalizationStatements {\n visitList(nodes, state) {\n return new ResultArray(nodes.map(e => VISIT_STMTS.visit(e, state))).toOptionalList().mapOk(list => list.filter(s => s !== null));\n }\n visit(node, state) {\n switch (node.type) {\n case 'GlimmerComment':\n return Ok(null);\n case 'AppendContent':\n return this.AppendContent(node, state);\n case 'HtmlText':\n return Ok(this.TextNode(node));\n case 'HtmlComment':\n return Ok(this.HtmlComment(node));\n case 'InvokeBlock':\n return this.InvokeBlock(node, state);\n case 'InvokeComponent':\n return this.Component(node, state);\n case 'SimpleElement':\n return this.SimpleElement(node, state);\n }\n }\n InvokeBlock(node, state) {\n var translated = BLOCK_KEYWORDS.translate(node, state);\n if (translated !== null) {\n return translated;\n }\n var head = VISIT_EXPRS.visit(node.callee, state);\n var args = VISIT_EXPRS.Args(node.args, state);\n return Result.all(head, args).andThen(_ref59 => {\n var [head, args] = _ref59;\n return this.NamedBlocks(node.blocks, state).mapOk(blocks => new InvokeBlock({\n loc: node.loc,\n head,\n args,\n blocks\n }));\n });\n }\n NamedBlocks(blocks, state) {\n var list = new ResultArray(blocks.blocks.map(b => this.NamedBlock(b, state)));\n return list.toArray().mapOk(list => new NamedBlocks({\n loc: blocks.loc,\n blocks: OptionalList(list)\n }));\n }\n NamedBlock(named, state) {\n var body = state.visitBlock(named.block);\n return body.mapOk(body => {\n return new NamedBlock({\n loc: named.loc,\n name: named.name,\n body: body.toArray(),\n scope: named.block.scope\n });\n });\n }\n SimpleElement(element, state) {\n return new ClassifiedElement(element, new ClassifiedSimpleElement(element.tag, element, hasDynamicFeatures(element)), state).toStatement();\n }\n Component(component, state) {\n return VISIT_EXPRS.visit(component.callee, state).andThen(callee => new ClassifiedElement(component, new ClassifiedComponent(callee, component), state).toStatement());\n }\n AppendContent(append, state) {\n var translated = APPEND_KEYWORDS.translate(append, state);\n if (translated !== null) {\n return translated;\n }\n var value = VISIT_EXPRS.visit(append.value, state);\n return value.mapOk(value => {\n if (append.trusting) {\n return new AppendTrustedHTML({\n loc: append.loc,\n html: value\n });\n } else {\n return new AppendTextNode({\n loc: append.loc,\n text: value\n });\n }\n });\n }\n TextNode(text) {\n return new AppendTextNode({\n loc: text.loc,\n text: new _syntax.ASTv2.LiteralExpression({\n loc: text.loc,\n value: text.chars\n })\n });\n }\n HtmlComment(comment) {\n return new AppendComment({\n loc: comment.loc,\n value: comment.text\n });\n }\n }\n var VISIT_STMTS = new NormalizationStatements();\n\n /**\n * This is the mutable state for this compiler pass.\n */\n\n class NormalizationState {\n constructor(block, isStrict) {\n this.isStrict = isStrict;\n this._cursorCount = 0;\n this._currentScope = block;\n }\n generateUniqueCursor() {\n return \"%cursor:\" + this._cursorCount++ + \"%\";\n }\n get scope() {\n return this._currentScope;\n }\n visitBlock(block) {\n var oldBlock = this._currentScope;\n this._currentScope = block.scope;\n try {\n return VISIT_STMTS.visitList(block.body, this);\n } finally {\n this._currentScope = oldBlock;\n }\n }\n }\n\n /**\n * Normalize the AST from @glimmer/syntax into the HIR. The HIR has special\n * instructions for keywords like `{{yield}}`, `(has-block)` and\n * `{{#in-element}}`.\n *\n * Most importantly, it also classifies HTML element syntax into:\n *\n * 1. simple HTML element (with optional splattributes)\n * 2. component invocation\n *\n * Because the @glimmer/syntax AST gives us a string for an element's tag,\n * this pass also normalizes that string into an expression.\n *\n * ```\n * // normalized into a path expression whose head is `this` and tail is\n * // `[\"x\"]`\n * <this.x />\n *\n * {{#let expr as |t|}}\n * // `\"t\"` is normalized into a variable lookup.\n * <t />\n *\n * // normalized into a path expression whose head is the variable lookup\n * // `t` and tail is `[\"input\"]`.\n * <t.input />\n * {{/let}}\n *\n * // normalized into a free variable lookup for `SomeComponent` (with the\n * // context `ComponentHead`).\n * <SomeComponent />\n *\n * // normalized into a path expression whose head is the free variable\n * // `notInScope` (with the context `Expression`), and whose tail is\n * // `[\"SomeComponent\"]`. In resolver mode, this path will be rejected later,\n * // since it cannot serve as an input to the resolver.\n * <notInScope.SomeComponent />\n * ```\n */\n\n function normalize(source, root, isStrict) {\n // create a new context for the normalization pass\n var state = new NormalizationState(root.table, isStrict);\n var body = VISIT_STMTS.visitList(root.body, state);\n return body.mapOk(body => new Template({\n loc: root.loc,\n scope: root.table,\n body: body.toArray()\n }));\n }\n class WireFormatDebugger {\n constructor(_ref60) {\n var [_statements, symbols, _hasEval, upvars] = _ref60;\n this.upvars = upvars;\n this.symbols = symbols;\n }\n format(program) {\n var out = [];\n for (var statement of program[0]) {\n out.push(this.formatOpcode(statement));\n }\n return out;\n }\n formatOpcode(opcode) {\n if (Array.isArray(opcode)) {\n switch (opcode[0]) {\n case 1\n /* Append */:\n return ['append', this.formatOpcode(opcode[1])];\n case 2\n /* TrustingAppend */:\n return ['trusting-append', this.formatOpcode(opcode[1])];\n case 6\n /* Block */:\n return ['block', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n case 40\n /* InElement */:\n return ['in-element', opcode[1], this.formatOpcode(opcode[2]), opcode[3] ? this.formatOpcode(opcode[3]) : undefined];\n case 10\n /* OpenElement */:\n return ['open-element', inflateTagName(opcode[1])];\n case 11\n /* OpenElementWithSplat */:\n return ['open-element-with-splat', inflateTagName(opcode[1])];\n case 13\n /* CloseElement */:\n return ['close-element'];\n case 12\n /* FlushElement */:\n return ['flush-element'];\n case 14\n /* StaticAttr */:\n return ['static-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];\n case 24\n /* StaticComponentAttr */:\n return ['static-component-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];\n case 15\n /* DynamicAttr */:\n return ['dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case 16\n /* ComponentAttr */:\n return ['component-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case 17\n /* AttrSplat */:\n return ['attr-splat'];\n case 18\n /* Yield */:\n return ['yield', opcode[1], this.formatParams(opcode[2])];\n case 20\n /* DynamicArg */:\n return ['dynamic-arg', opcode[1], this.formatOpcode(opcode[2])];\n case 21\n /* StaticArg */:\n return ['static-arg', opcode[1], this.formatOpcode(opcode[2])];\n case 22\n /* TrustingDynamicAttr */:\n return ['trusting-dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case 23\n /* TrustingComponentAttr */:\n return ['trusting-component-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case 26\n /* Debugger */:\n return ['debugger', opcode[1]];\n case 3\n /* Comment */:\n return ['comment', opcode[1]];\n case 4\n /* Modifier */:\n return ['modifier', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];\n case 8\n /* Component */:\n return ['component', this.formatOpcode(opcode[1]), this.formatElementParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n case 48\n /* HasBlock */:\n return ['has-block', this.formatOpcode(opcode[1])];\n case 49\n /* HasBlockParams */:\n return ['has-block-params', this.formatOpcode(opcode[1])];\n case 50\n /* Curry */:\n return ['curry', this.formatOpcode(opcode[1]), this.formatCurryType(opcode[2]), this.formatParams(opcode[3]), this.formatHash(opcode[4])];\n case 27\n /* Undefined */:\n return ['undefined'];\n case 28\n /* Call */:\n return ['call', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];\n case 29\n /* Concat */:\n return ['concat', this.formatParams(opcode[1])];\n case 31\n /* GetStrictFree */:\n return ['get-strict-free', this.upvars[opcode[1]], opcode[2]];\n case 34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */:\n return ['GetFreeAsComponentOrHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];\n case 35\n /* GetFreeAsComponentOrHelperHead */:\n return ['GetFreeAsComponentOrHelperHead', this.upvars[opcode[1]], opcode[2]];\n case 36\n /* GetFreeAsHelperHeadOrThisFallback */:\n return ['GetFreeAsHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];\n case 99\n /* GetFreeAsDeprecatedHelperHeadOrThisFallback */:\n return ['GetFreeAsDeprecatedHelperHeadOrThisFallback', this.upvars[opcode[1]]];\n case 37\n /* GetFreeAsHelperHead */:\n return ['GetFreeAsHelperHead', this.upvars[opcode[1]], opcode[2]];\n case 39\n /* GetFreeAsComponentHead */:\n return ['GetFreeAsComponentHead', this.upvars[opcode[1]], opcode[2]];\n case 38\n /* GetFreeAsModifierHead */:\n return ['GetFreeAsModifierHead', this.upvars[opcode[1]], opcode[2]];\n case 30\n /* GetSymbol */:\n {\n if (opcode[1] === 0) {\n return ['get-symbol', 'this', opcode[2]];\n } else {\n return ['get-symbol', this.symbols[opcode[1] - 1], opcode[2]];\n }\n }\n case 32\n /* GetTemplateSymbol */:\n {\n return ['get-template-symbol', opcode[1], opcode[2]];\n }\n case 41\n /* If */:\n return ['if', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];\n case 52\n /* IfInline */:\n return ['if-inline'];\n case 51\n /* Not */:\n return ['not'];\n case 42\n /* Each */:\n return ['each', this.formatOpcode(opcode[1]), opcode[2] ? this.formatOpcode(opcode[2]) : null, this.formatBlock(opcode[3]), opcode[4] ? this.formatBlock(opcode[4]) : null];\n case 43\n /* With */:\n return ['with', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];\n case 44\n /* Let */:\n return ['let', this.formatParams(opcode[1]), this.formatBlock(opcode[2])];\n case 54\n /* Log */:\n return ['log', this.formatParams(opcode[1])];\n case 45\n /* WithDynamicVars */:\n return ['-with-dynamic-vars', this.formatHash(opcode[1]), this.formatBlock(opcode[2])];\n case 53\n /* GetDynamicVar */:\n return ['-get-dynamic-vars', this.formatOpcode(opcode[1])];\n case 46\n /* InvokeComponent */:\n return ['component', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n }\n } else {\n return opcode;\n }\n }\n formatCurryType(value) {\n switch (value) {\n case 0\n /* Component */:\n return 'component';\n case 1\n /* Helper */:\n return 'helper';\n case 2\n /* Modifier */:\n return 'modifier';\n default:\n throw (0, _util.exhausted)(value);\n }\n }\n formatElementParams(opcodes) {\n if (opcodes === null) return null;\n return opcodes.map(o => this.formatOpcode(o));\n }\n formatParams(opcodes) {\n if (opcodes === null) return null;\n return opcodes.map(o => this.formatOpcode(o));\n }\n formatHash(hash) {\n if (hash === null) return null;\n return hash[0].reduce((accum, key, index) => {\n accum[key] = this.formatOpcode(hash[1][index]);\n return accum;\n }, (0, _util.dict)());\n }\n formatBlocks(blocks) {\n if (blocks === null) return null;\n return blocks[0].reduce((accum, key, index) => {\n accum[key] = this.formatBlock(blocks[1][index]);\n return accum;\n }, (0, _util.dict)());\n }\n formatBlock(block) {\n return {\n statements: block[0].map(s => this.formatOpcode(s)),\n parameters: block[1]\n };\n }\n }\n _exports.WireFormatDebugger = WireFormatDebugger;\n class ExpressionEncoder {\n expr(expr) {\n switch (expr.type) {\n case 'Missing':\n return undefined;\n case 'Literal':\n return this.Literal(expr);\n case 'CallExpression':\n return this.CallExpression(expr);\n case 'DeprecatedCallExpression':\n return this.DeprecatedCallExpression(expr);\n case 'PathExpression':\n return this.PathExpression(expr);\n case 'Arg':\n return [30\n /* GetSymbol */, expr.symbol];\n case 'Local':\n return this.Local(expr);\n case 'This':\n return [30\n /* GetSymbol */, 0];\n case 'Free':\n return [expr.resolution.resolution(), expr.symbol];\n case 'HasBlock':\n return this.HasBlock(expr);\n case 'HasBlockParams':\n return this.HasBlockParams(expr);\n case 'Curry':\n return this.Curry(expr);\n case 'Not':\n return this.Not(expr);\n case 'IfInline':\n return this.IfInline(expr);\n case 'InterpolateExpression':\n return this.InterpolateExpression(expr);\n case 'GetDynamicVar':\n return this.GetDynamicVar(expr);\n case 'Log':\n return this.Log(expr);\n }\n }\n Literal(_ref61) {\n var {\n value\n } = _ref61;\n if (value === undefined) {\n return [27\n /* Undefined */];\n } else {\n return value;\n }\n }\n Missing() {\n return undefined;\n }\n HasBlock(_ref62) {\n var {\n symbol\n } = _ref62;\n return [48\n /* HasBlock */, [30\n /* GetSymbol */, symbol]];\n }\n HasBlockParams(_ref63) {\n var {\n symbol\n } = _ref63;\n return [49\n /* HasBlockParams */, [30\n /* GetSymbol */, symbol]];\n }\n Curry(_ref64) {\n var {\n definition,\n curriedType,\n args\n } = _ref64;\n return [50\n /* Curry */, EXPR.expr(definition), curriedType, EXPR.Positional(args.positional), EXPR.NamedArguments(args.named)];\n }\n Local(_ref65) {\n var {\n isTemplateLocal,\n symbol\n } = _ref65;\n return [isTemplateLocal ? 32\n /* GetTemplateSymbol */ : 30\n /* GetSymbol */, symbol];\n }\n GetWithResolver(_ref66) {\n var {\n symbol\n } = _ref66;\n return [34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */, symbol];\n }\n PathExpression(_ref67) {\n var {\n head,\n tail\n } = _ref67;\n var getOp = EXPR.expr(head);\n return [...getOp, EXPR.Tail(tail)];\n }\n InterpolateExpression(_ref68) {\n var {\n parts\n } = _ref68;\n return [29\n /* Concat */, parts.map(e => EXPR.expr(e)).toArray()];\n }\n CallExpression(_ref69) {\n var {\n callee,\n args\n } = _ref69;\n return [28\n /* Call */, EXPR.expr(callee), ...EXPR.Args(args)];\n }\n DeprecatedCallExpression(_ref70) {\n var {\n arg,\n callee\n } = _ref70;\n return [99\n /* GetFreeAsDeprecatedHelperHeadOrThisFallback */, callee.symbol, [arg.chars]];\n }\n Tail(_ref71) {\n var {\n members\n } = _ref71;\n return (0, _util.mapPresent)(members, member => member.chars);\n }\n Args(_ref72) {\n var {\n positional,\n named\n } = _ref72;\n return [this.Positional(positional), this.NamedArguments(named)];\n }\n Positional(_ref73) {\n var {\n list\n } = _ref73;\n return list.map(l => EXPR.expr(l)).toPresentArray();\n }\n NamedArgument(_ref74) {\n var {\n key,\n value\n } = _ref74;\n return [key.chars, EXPR.expr(value)];\n }\n NamedArguments(_ref75) {\n var {\n entries: pairs\n } = _ref75;\n var list = pairs.toArray();\n if ((0, _util.isPresent)(list)) {\n var names = [];\n var _values = [];\n for (var pair of list) {\n var [name, value] = EXPR.NamedArgument(pair);\n names.push(name);\n _values.push(value);\n }\n (0, _util.assertPresent)(names);\n (0, _util.assertPresent)(_values);\n return [names, _values];\n } else {\n return null;\n }\n }\n Not(_ref76) {\n var {\n value\n } = _ref76;\n return [51\n /* Not */, EXPR.expr(value)];\n }\n IfInline(_ref77) {\n var {\n condition,\n truthy,\n falsy\n } = _ref77;\n var expr = [52\n /* IfInline */, EXPR.expr(condition), EXPR.expr(truthy)];\n if (falsy) {\n expr.push(EXPR.expr(falsy));\n }\n return expr;\n }\n GetDynamicVar(_ref78) {\n var {\n name\n } = _ref78;\n return [53\n /* GetDynamicVar */, EXPR.expr(name)];\n }\n Log(_ref79) {\n var {\n positional\n } = _ref79;\n return [54\n /* Log */, this.Positional(positional)];\n }\n }\n var EXPR = new ExpressionEncoder();\n class WireStatements {\n constructor(statements) {\n this.statements = statements;\n }\n toArray() {\n return this.statements;\n }\n }\n class ContentEncoder {\n list(statements) {\n var out = [];\n for (var statement of statements) {\n var result = CONTENT.content(statement);\n if (result && result instanceof WireStatements) {\n out.push(...result.toArray());\n } else {\n out.push(result);\n }\n }\n return out;\n }\n content(stmt) {\n return this.visitContent(stmt);\n }\n visitContent(stmt) {\n switch (stmt.type) {\n case 'Debugger':\n return [26\n /* Debugger */, stmt.scope.getEvalInfo()];\n case 'AppendComment':\n return this.AppendComment(stmt);\n case 'AppendTextNode':\n return this.AppendTextNode(stmt);\n case 'AppendTrustedHTML':\n return this.AppendTrustedHTML(stmt);\n case 'Yield':\n return this.Yield(stmt);\n case 'Component':\n return this.Component(stmt);\n case 'SimpleElement':\n return this.SimpleElement(stmt);\n case 'InElement':\n return this.InElement(stmt);\n case 'InvokeBlock':\n return this.InvokeBlock(stmt);\n case 'If':\n return this.If(stmt);\n case 'Each':\n return this.Each(stmt);\n case 'With':\n return this.With(stmt);\n case 'Let':\n return this.Let(stmt);\n case 'WithDynamicVars':\n return this.WithDynamicVars(stmt);\n case 'InvokeComponent':\n return this.InvokeComponent(stmt);\n default:\n return (0, _util.exhausted)(stmt);\n }\n }\n Yield(_ref80) {\n var {\n to,\n positional\n } = _ref80;\n return [18\n /* Yield */, to, EXPR.Positional(positional)];\n }\n InElement(_ref81) {\n var {\n guid,\n insertBefore,\n destination,\n block\n } = _ref81;\n var wireBlock = CONTENT.NamedBlock(block)[1]; // let guid = args.guid;\n\n var wireDestination = EXPR.expr(destination);\n var wireInsertBefore = EXPR.expr(insertBefore);\n if (wireInsertBefore === undefined) {\n return [40\n /* InElement */, wireBlock, guid, wireDestination];\n } else {\n return [40\n /* InElement */, wireBlock, guid, wireDestination, wireInsertBefore];\n }\n }\n InvokeBlock(_ref82) {\n var {\n head,\n args,\n blocks\n } = _ref82;\n return [6\n /* Block */, EXPR.expr(head), ...EXPR.Args(args), CONTENT.NamedBlocks(blocks)];\n }\n AppendTrustedHTML(_ref83) {\n var {\n html\n } = _ref83;\n return [2\n /* TrustingAppend */, EXPR.expr(html)];\n }\n AppendTextNode(_ref84) {\n var {\n text\n } = _ref84;\n return [1\n /* Append */, EXPR.expr(text)];\n }\n AppendComment(_ref85) {\n var {\n value\n } = _ref85;\n return [3\n /* Comment */, value.chars];\n }\n SimpleElement(_ref86) {\n var {\n tag,\n params,\n body,\n dynamicFeatures\n } = _ref86;\n var op = dynamicFeatures ? 11\n /* OpenElementWithSplat */ : 10\n /* OpenElement */;\n\n return new WireStatements([[op, deflateTagName(tag.chars)], ...CONTENT.ElementParameters(params).toArray(), [12\n /* FlushElement */], ...CONTENT.list(body), [13\n /* CloseElement */]]);\n }\n\n Component(_ref87) {\n var {\n tag,\n params,\n args,\n blocks\n } = _ref87;\n var wireTag = EXPR.expr(tag);\n var wirePositional = CONTENT.ElementParameters(params);\n var wireNamed = EXPR.NamedArguments(args);\n var wireNamedBlocks = CONTENT.NamedBlocks(blocks);\n return [8\n /* Component */, wireTag, wirePositional.toPresentArray(), wireNamed, wireNamedBlocks];\n }\n ElementParameters(_ref88) {\n var {\n body\n } = _ref88;\n return body.map(p => CONTENT.ElementParameter(p));\n }\n ElementParameter(param) {\n switch (param.type) {\n case 'SplatAttr':\n return [17\n /* AttrSplat */, param.symbol];\n case 'DynamicAttr':\n return [dynamicAttrOp(param.kind), ...dynamicAttr(param)];\n case 'StaticAttr':\n return [staticAttrOp(param.kind), ...staticAttr(param)];\n case 'Modifier':\n return [4\n /* Modifier */, EXPR.expr(param.callee), ...EXPR.Args(param.args)];\n }\n }\n NamedBlocks(_ref89) {\n var {\n blocks\n } = _ref89;\n var names = [];\n var serializedBlocks = [];\n for (var block of blocks.toArray()) {\n var [name, serializedBlock] = CONTENT.NamedBlock(block);\n names.push(name);\n serializedBlocks.push(serializedBlock);\n }\n return names.length > 0 ? [names, serializedBlocks] : null;\n }\n NamedBlock(_ref90) {\n var {\n name,\n body,\n scope\n } = _ref90;\n var nameChars = name.chars;\n if (nameChars === 'inverse') {\n nameChars = 'else';\n }\n return [nameChars, [CONTENT.list(body), scope.slots]];\n }\n If(_ref91) {\n var {\n condition,\n block,\n inverse\n } = _ref91;\n return [41\n /* If */, EXPR.expr(condition), CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n Each(_ref92) {\n var {\n value,\n key,\n block,\n inverse\n } = _ref92;\n return [42\n /* Each */, EXPR.expr(value), key ? EXPR.expr(key) : null, CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n With(_ref93) {\n var {\n value,\n block,\n inverse\n } = _ref93;\n return [43\n /* With */, EXPR.expr(value), CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n Let(_ref94) {\n var {\n positional,\n block\n } = _ref94;\n return [44\n /* Let */, EXPR.Positional(positional), CONTENT.NamedBlock(block)[1]];\n }\n WithDynamicVars(_ref95) {\n var {\n named,\n block\n } = _ref95;\n return [45\n /* WithDynamicVars */, EXPR.NamedArguments(named), CONTENT.NamedBlock(block)[1]];\n }\n InvokeComponent(_ref96) {\n var {\n definition,\n args,\n blocks\n } = _ref96;\n return [46\n /* InvokeComponent */, EXPR.expr(definition), EXPR.Positional(args.positional), EXPR.NamedArguments(args.named), blocks ? CONTENT.NamedBlocks(blocks) : null];\n }\n }\n var CONTENT = new ContentEncoder();\n function staticAttr(_ref97) {\n var {\n name,\n value,\n namespace\n } = _ref97;\n var out = [deflateAttrName(name.chars), value.chars];\n if (namespace) {\n out.push(namespace);\n }\n return out;\n }\n function dynamicAttr(_ref98) {\n var {\n name,\n value,\n namespace\n } = _ref98;\n var out = [deflateAttrName(name.chars), EXPR.expr(value)];\n if (namespace) {\n out.push(namespace);\n }\n return out;\n }\n function staticAttrOp(kind) {\n if (kind.component) {\n return 24\n /* StaticComponentAttr */;\n } else {\n return 14\n /* StaticAttr */;\n }\n }\n\n function dynamicAttrOp(kind) {\n if (kind.component) {\n return kind.trusting ? 23\n /* TrustingComponentAttr */ : 16\n /* ComponentAttr */;\n } else {\n return kind.trusting ? 22\n /* TrustingDynamicAttr */ : 15\n /* DynamicAttr */;\n }\n }\n\n function visit(template) {\n var statements = CONTENT.list(template.body);\n var scope = template.scope;\n var block = [statements, scope.symbols, scope.hasEval, scope.upvars];\n return block;\n }\n var defaultId = (() => {\n var req = typeof module === 'object' && typeof module.require === 'function' ? module.require : require;\n if (req) {\n try {\n var crypto = req('crypto');\n var idFn = src => {\n var hash = crypto.createHash('sha1');\n hash.update(src, 'utf8'); // trim to 6 bytes of data (2^48 - 1)\n\n return hash.digest('base64').substring(0, 8);\n };\n idFn('test');\n return idFn;\n } catch (e) {}\n }\n return function idFn() {\n return null;\n };\n })();\n _exports.defaultId = defaultId;\n var defaultOptions = {\n id: defaultId\n };\n /*\n * Compile a string into a template javascript string.\n *\n * Example usage:\n * import { precompile } from '@glimmer/compiler';\n * import { templateFactory } from 'glimmer-runtime';\n * let templateJs = precompile(\"Howdy {{name}}\");\n * let factory = templateFactory(new Function(\"return \" + templateJs)());\n * let template = factory.create(env);\n *\n * @method precompile\n * @param {string} string a Glimmer template string\n * @return {string} a template javascript string\n */\n\n function precompileJSON(string, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n var _a, _b;\n var source = new _syntax.Source(string, (_a = options.meta) === null || _a === void 0 ? void 0 : _a.moduleName);\n var [ast, locals] = (0, _syntax.normalize)(source, options);\n var block = normalize(source, ast, (_b = options.strictMode) !== null && _b !== void 0 ? _b : false).mapOk(pass2In => {\n return visit(pass2In);\n });\n if (block.isOk) {\n return [block.value, locals];\n } else {\n throw block.reason;\n }\n } // UUID used as a unique placeholder for placing a snippet of JS code into\n // the otherwise JSON stringified value below.\n\n var SCOPE_PLACEHOLDER = '796d24e6-2450-4fb0-8cdf-b65638b5ef70';\n /*\n * Compile a string into a template javascript string.\n *\n * Example usage:\n * import { precompile } from '@glimmer/compiler';\n * import { templateFactory } from 'glimmer-runtime';\n * let templateJs = precompile(\"Howdy {{name}}\");\n * let factory = templateFactory(new Function(\"return \" + templateJs)());\n * let template = factory.create(env);\n *\n * @method precompile\n * @param {string} string a Glimmer template string\n * @return {string} a template javascript string\n */\n\n function precompile(source, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n var _a, _b;\n var [block, usedLocals] = precompileJSON(source, options);\n var moduleName = (_a = options.meta) === null || _a === void 0 ? void 0 : _a.moduleName;\n var idFn = options.id || defaultId;\n var blockJSON = JSON.stringify(block);\n var templateJSONObject = {\n id: idFn(JSON.stringify(options.meta) + blockJSON),\n block: blockJSON,\n moduleName: moduleName !== null && moduleName !== void 0 ? moduleName : '(unknown template module)',\n // lying to the type checker here because we're going to\n // replace it just below, after stringification\n scope: SCOPE_PLACEHOLDER,\n isStrictMode: (_b = options.strictMode) !== null && _b !== void 0 ? _b : false\n };\n if (usedLocals.length === 0) {\n delete templateJSONObject.scope;\n } // JSON is javascript\n\n var stringified = JSON.stringify(templateJSONObject);\n if (usedLocals.length > 0) {\n var scopeFn = \"()=>[\" + usedLocals.join(',') + \"]\";\n stringified = stringified.replace(\"\\\"\" + SCOPE_PLACEHOLDER + \"\\\"\", scopeFn);\n }\n return stringified;\n }\n var VariableKind;\n (function (VariableKind) {\n VariableKind[\"Local\"] = \"Local\";\n VariableKind[\"Free\"] = \"Free\";\n VariableKind[\"Arg\"] = \"Arg\";\n VariableKind[\"Block\"] = \"Block\";\n VariableKind[\"This\"] = \"This\";\n })(VariableKind || (VariableKind = {}));\n function normalizeStatement(statement) {\n if (Array.isArray(statement)) {\n if (statementIsExpression(statement)) {\n return normalizeAppendExpression(statement);\n } else if (isSugaryArrayStatement(statement)) {\n return normalizeSugaryArrayStatement(statement);\n } else {\n return normalizeVerboseStatement(statement);\n }\n } else if (typeof statement === 'string') {\n return normalizeAppendHead(normalizeDottedPath(statement), false);\n } else {\n throw (0, _util.assertNever)(statement);\n }\n }\n function normalizeAppendHead(head, trusted) {\n if (head.type === \"GetPath\"\n /* GetPath */) {\n return {\n kind: \"AppendPath\"\n /* AppendPath */,\n\n path: head,\n trusted\n };\n } else {\n return {\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n expr: head,\n trusted\n };\n }\n }\n function isSugaryArrayStatement(statement) {\n if (Array.isArray(statement) && typeof statement[0] === 'string') {\n switch (statement[0][0]) {\n case '(':\n case '#':\n case '<':\n case '!':\n return true;\n default:\n return false;\n }\n }\n return false;\n }\n function normalizeSugaryArrayStatement(statement) {\n var name = statement[0];\n switch (name[0]) {\n case '(':\n {\n var params = null;\n var hash = null;\n if (statement.length === 3) {\n params = normalizeParams(statement[1]);\n hash = normalizeHash(statement[2]);\n } else if (statement.length === 2) {\n if (Array.isArray(statement[1])) {\n params = normalizeParams(statement[1]);\n } else {\n hash = normalizeHash(statement[1]);\n }\n }\n return {\n kind: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(name),\n params,\n hash,\n trusted: false\n };\n }\n case '#':\n {\n var {\n head: path,\n params: _params,\n hash: _hash,\n blocks,\n blockParams\n } = normalizeBuilderBlockStatement(statement);\n return {\n kind: \"Block\"\n /* Block */,\n\n head: path,\n params: _params,\n hash: _hash,\n blocks,\n blockParams\n };\n }\n case '!':\n {\n var _name2 = statement[0].slice(1);\n var {\n params: _params2,\n hash: _hash2,\n blocks: _blocks,\n blockParams: _blockParams\n } = normalizeBuilderBlockStatement(statement);\n return {\n kind: \"Keyword\"\n /* Keyword */,\n\n name: _name2,\n params: _params2,\n hash: _hash2,\n blocks: _blocks,\n blockParams: _blockParams\n };\n }\n case '<':\n {\n var attrs = (0, _util.dict)();\n var block = [];\n if (statement.length === 3) {\n attrs = normalizeAttrs(statement[1]);\n block = normalizeBlock(statement[2]);\n } else if (statement.length === 2) {\n if (Array.isArray(statement[1])) {\n block = normalizeBlock(statement[1]);\n } else {\n attrs = normalizeAttrs(statement[1]);\n }\n }\n return {\n kind: \"Element\"\n /* Element */,\n\n name: extractElement(name),\n attrs,\n block\n };\n }\n default:\n throw new Error(\"Unreachable \" + JSON.stringify(statement) + \" in normalizeSugaryArrayStatement\");\n }\n }\n function normalizeVerboseStatement(statement) {\n switch (statement[0]) {\n case 0\n /* Literal */:\n {\n return {\n kind: \"Literal\"\n /* Literal */,\n\n value: statement[1]\n };\n }\n case 2\n /* Append */:\n {\n return normalizeAppendExpression(statement[1], statement[2]);\n }\n case 3\n /* Modifier */:\n {\n return {\n kind: \"Modifier\"\n /* Modifier */,\n\n params: normalizeParams(statement[1]),\n hash: normalizeHash(statement[2])\n };\n }\n case 4\n /* DynamicComponent */:\n {\n return {\n kind: \"DynamicComponent\"\n /* DynamicComponent */,\n\n expr: normalizeExpression(statement[1]),\n hash: normalizeHash(statement[2]),\n block: normalizeBlock(statement[3])\n };\n }\n case 1\n /* Comment */:\n {\n return {\n kind: \"Comment\"\n /* Comment */,\n\n value: statement[1]\n };\n }\n }\n }\n function extractBlockHead(name) {\n var result = /^(#|!)(.*)$/.exec(name);\n if (result === null) {\n throw new Error(\"Unexpected missing # in block head\");\n }\n return normalizeDottedPath(result[2]);\n }\n function normalizeCallHead(name) {\n var result = /^\\((.*)\\)$/.exec(name);\n if (result === null) {\n throw new Error(\"Unexpected missing () in call head\");\n }\n return normalizeDottedPath(result[1]);\n }\n function normalizePath(head, tail) {\n if (tail === void 0) {\n tail = [];\n }\n var pathHead = normalizePathHead(head);\n if ((0, _util.isPresent)(tail)) {\n return {\n type: \"GetPath\"\n /* GetPath */,\n\n path: {\n head: pathHead,\n tail\n }\n };\n } else {\n return {\n type: \"GetVar\"\n /* GetVar */,\n\n variable: pathHead\n };\n }\n }\n function normalizeDottedPath(whole) {\n var {\n kind,\n name: rest\n } = normalizePathHead(whole);\n var [name, ...tail] = rest.split('.');\n var variable = {\n kind,\n name,\n mode: 'loose'\n };\n if ((0, _util.isPresent)(tail)) {\n return {\n type: \"GetPath\"\n /* GetPath */,\n\n path: {\n head: variable,\n tail\n }\n };\n } else {\n return {\n type: \"GetVar\"\n /* GetVar */,\n\n variable\n };\n }\n }\n function normalizePathHead(whole) {\n var kind;\n var name;\n if (/^this(\\.|$)/.exec(whole)) {\n return {\n kind: VariableKind.This,\n name: whole,\n mode: 'loose'\n };\n }\n switch (whole[0]) {\n case '^':\n kind = VariableKind.Free;\n name = whole.slice(1);\n break;\n case '@':\n kind = VariableKind.Arg;\n name = whole.slice(1);\n break;\n case '&':\n kind = VariableKind.Block;\n name = whole.slice(1);\n break;\n default:\n kind = VariableKind.Local;\n name = whole;\n }\n return {\n kind,\n name,\n mode: 'loose'\n };\n }\n function normalizeBuilderBlockStatement(statement) {\n var head = statement[0];\n var blocks = (0, _util.dict)();\n var params = null;\n var hash = null;\n var blockParams = null;\n if (statement.length === 2) {\n blocks = normalizeBlocks(statement[1]);\n } else if (statement.length === 3) {\n if (Array.isArray(statement[1])) {\n params = normalizeParams(statement[1]);\n } else {\n ({\n hash,\n blockParams\n } = normalizeBlockHash(statement[1]));\n }\n blocks = normalizeBlocks(statement[2]);\n } else if (statement.length === 4) {\n params = normalizeParams(statement[1]);\n ({\n hash,\n blockParams\n } = normalizeBlockHash(statement[2]));\n blocks = normalizeBlocks(statement[3]);\n }\n return {\n head: extractBlockHead(head),\n params,\n hash,\n blockParams,\n blocks\n };\n }\n function normalizeBlockHash(hash) {\n if (hash === null) {\n return {\n hash: null,\n blockParams: null\n };\n }\n var out = null;\n var blockParams = null;\n entries(hash, (key, value) => {\n if (key === 'as') {\n blockParams = Array.isArray(value) ? value : [value];\n } else {\n out = out || (0, _util.dict)();\n out[key] = normalizeExpression(value);\n }\n });\n return {\n hash: out,\n blockParams\n };\n }\n function entries(dict, callback) {\n Object.keys(dict).forEach(key => {\n var value = dict[key];\n callback(key, value);\n });\n }\n function normalizeBlocks(value) {\n if (Array.isArray(value)) {\n return {\n default: normalizeBlock(value)\n };\n } else {\n return mapObject(value, normalizeBlock);\n }\n }\n function normalizeBlock(block) {\n return block.map(s => normalizeStatement(s));\n }\n function normalizeAttrs(attrs) {\n return mapObject(attrs, a => normalizeAttr(a).expr);\n }\n function normalizeAttr(attr) {\n if (attr === 'splat') {\n return {\n expr: \"Splat\"\n /* Splat */,\n\n trusted: false\n };\n } else {\n var expr = normalizeExpression(attr);\n return {\n expr,\n trusted: false\n };\n }\n }\n function mapObject(object, callback) {\n var out = (0, _util.dict)();\n Object.keys(object).forEach(k => {\n out[k] = callback(object[k], k);\n });\n return out;\n }\n function extractElement(input) {\n var match = /^<([a-z0-9\\-][a-zA-Z0-9\\-]*)>$/.exec(input);\n return match ? match[1] : null;\n }\n function normalizeAppendExpression(expression, forceTrusted) {\n if (forceTrusted === void 0) {\n forceTrusted = false;\n }\n if (expression === null || expression === undefined) {\n return {\n expr: {\n type: \"Literal\"\n /* Literal */,\n\n value: expression\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: false\n };\n } else if (Array.isArray(expression)) {\n switch (expression[0]) {\n case 0\n /* Literal */:\n return {\n expr: {\n type: \"Literal\"\n /* Literal */,\n\n value: expression[1]\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: false\n };\n case 5\n /* Get */:\n {\n return normalizeAppendHead(normalizePath(expression[1], expression[2]), forceTrusted);\n }\n case 6\n /* Concat */:\n {\n var expr = {\n type: \"Concat\"\n /* Concat */,\n\n params: normalizeParams(expression.slice(1))\n };\n return {\n expr,\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: forceTrusted\n };\n }\n case 7\n /* HasBlock */:\n return {\n expr: {\n type: \"HasBlock\"\n /* HasBlock */,\n\n name: expression[1]\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: forceTrusted\n };\n case 8\n /* HasBlockParams */:\n return {\n expr: {\n type: \"HasBlockParams\"\n /* HasBlockParams */,\n\n name: expression[1]\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: forceTrusted\n };\n default:\n {\n if (isBuilderCallExpression(expression)) {\n return {\n expr: normalizeCallExpression(expression),\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: forceTrusted\n };\n } else {\n throw new Error(\"Unexpected array in expression position (wasn't a tuple expression and \" + expression[0] + \" isn't wrapped in parens, so it isn't a call): \" + JSON.stringify(expression));\n }\n }\n // BuilderCallExpression\n }\n } else if (typeof expression !== 'object') {\n switch (typeof expression) {\n case 'string':\n {\n return normalizeAppendHead(normalizeDottedPath(expression), forceTrusted);\n }\n case 'boolean':\n case 'number':\n return {\n expr: {\n type: \"Literal\"\n /* Literal */,\n\n value: expression\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: true\n };\n default:\n throw (0, _util.assertNever)(expression);\n }\n } else {\n throw (0, _util.assertNever)(expression);\n }\n }\n function normalizeExpression(expression) {\n if (expression === null || expression === undefined) {\n return {\n type: \"Literal\"\n /* Literal */,\n\n value: expression\n };\n } else if (Array.isArray(expression)) {\n switch (expression[0]) {\n case 0\n /* Literal */:\n return {\n type: \"Literal\"\n /* Literal */,\n\n value: expression[1]\n };\n case 5\n /* Get */:\n {\n return normalizePath(expression[1], expression[2]);\n }\n case 6\n /* Concat */:\n {\n var expr = {\n type: \"Concat\"\n /* Concat */,\n\n params: normalizeParams(expression.slice(1))\n };\n return expr;\n }\n case 7\n /* HasBlock */:\n return {\n type: \"HasBlock\"\n /* HasBlock */,\n\n name: expression[1]\n };\n case 8\n /* HasBlockParams */:\n return {\n type: \"HasBlockParams\"\n /* HasBlockParams */,\n\n name: expression[1]\n };\n default:\n {\n if (isBuilderCallExpression(expression)) {\n return normalizeCallExpression(expression);\n } else {\n throw new Error(\"Unexpected array in expression position (wasn't a tuple expression and \" + expression[0] + \" isn't wrapped in parens, so it isn't a call): \" + JSON.stringify(expression));\n }\n }\n // BuilderCallExpression\n }\n } else if (typeof expression !== 'object') {\n switch (typeof expression) {\n case 'string':\n {\n return normalizeDottedPath(expression);\n }\n case 'boolean':\n case 'number':\n return {\n type: \"Literal\"\n /* Literal */,\n\n value: expression\n };\n default:\n throw (0, _util.assertNever)(expression);\n }\n } else {\n throw (0, _util.assertNever)(expression);\n }\n }\n function statementIsExpression(statement) {\n if (!Array.isArray(statement)) {\n return false;\n }\n var name = statement[0];\n if (typeof name === 'number') {\n switch (name) {\n case 0\n /* Literal */:\n\n case 5\n /* Get */:\n\n case 6\n /* Concat */:\n\n case 7\n /* HasBlock */:\n\n case 8\n /* HasBlockParams */:\n return true;\n default:\n return false;\n }\n }\n if (name[0] === '(') {\n return true;\n }\n return false;\n }\n function isBuilderCallExpression(value) {\n return typeof value[0] === 'string' && value[0][0] === '(';\n }\n function normalizeParams(input) {\n return input.map(normalizeExpression);\n }\n function normalizeHash(input) {\n if (input === null) return null;\n return mapObject(input, normalizeExpression);\n }\n function normalizeCallExpression(expr) {\n switch (expr.length) {\n case 1:\n return {\n type: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(expr[0]),\n params: null,\n hash: null\n };\n case 2:\n {\n if (Array.isArray(expr[1])) {\n return {\n type: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(expr[0]),\n params: normalizeParams(expr[1]),\n hash: null\n };\n } else {\n return {\n type: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(expr[0]),\n params: null,\n hash: normalizeHash(expr[1])\n };\n }\n }\n case 3:\n return {\n type: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(expr[0]),\n params: normalizeParams(expr[1]),\n hash: normalizeHash(expr[2])\n };\n }\n }\n class ProgramSymbols {\n constructor() {\n this._freeVariables = [];\n this._symbols = ['this'];\n this.top = this;\n }\n toSymbols() {\n return this._symbols.slice(1);\n }\n toUpvars() {\n return this._freeVariables;\n }\n freeVar(name) {\n return addString(this._freeVariables, name);\n }\n block(name) {\n return this.symbol(name);\n }\n arg(name) {\n return addString(this._symbols, name);\n }\n local(name) {\n throw new Error(\"No local \" + name + \" was found. Maybe you meant ^\" + name + \" for upvar, or !\" + name + \" for keyword?\");\n }\n this() {\n return 0;\n }\n hasLocal(_name) {\n return false;\n } // any symbol\n\n symbol(name) {\n return addString(this._symbols, name);\n }\n child(locals) {\n return new LocalSymbols(this, locals);\n }\n }\n _exports.ProgramSymbols = ProgramSymbols;\n class LocalSymbols {\n constructor(parent, locals) {\n this.parent = parent;\n this.locals = (0, _util.dict)();\n for (var local of locals) {\n this.locals[local] = parent.top.symbol(local);\n }\n }\n get paramSymbols() {\n return (0, _util.values)(this.locals);\n }\n get top() {\n return this.parent.top;\n }\n freeVar(name) {\n return this.parent.freeVar(name);\n }\n arg(name) {\n return this.parent.arg(name);\n }\n block(name) {\n return this.parent.block(name);\n }\n local(name) {\n if (name in this.locals) {\n return this.locals[name];\n } else {\n return this.parent.local(name);\n }\n }\n this() {\n return this.parent.this();\n }\n hasLocal(name) {\n if (name in this.locals) {\n return true;\n } else {\n return this.parent.hasLocal(name);\n }\n }\n child(locals) {\n return new LocalSymbols(this, locals);\n }\n }\n function addString(array, item) {\n var index = array.indexOf(item);\n if (index === -1) {\n index = array.length;\n array.push(item);\n return index;\n } else {\n return index;\n }\n }\n function unimpl(message) {\n return new Error(\"unimplemented \" + message);\n }\n function buildStatements(statements, symbols) {\n var out = [];\n statements.forEach(s => out.push(...buildStatement(normalizeStatement(s), symbols)));\n return out;\n }\n function buildNormalizedStatements(statements, symbols) {\n var out = [];\n statements.forEach(s => out.push(...buildStatement(s, symbols)));\n return out;\n }\n function buildStatement(normalized, symbols) {\n if (symbols === void 0) {\n symbols = new ProgramSymbols();\n }\n switch (normalized.kind) {\n case \"AppendPath\"\n /* AppendPath */:\n {\n return [[normalized.trusted ? 2\n /* TrustingAppend */ : 1\n /* Append */, buildGetPath(normalized.path, symbols)]];\n }\n case \"AppendExpr\"\n /* AppendExpr */:\n {\n return [[normalized.trusted ? 2\n /* TrustingAppend */ : 1\n /* Append */, buildExpression(normalized.expr, normalized.trusted ? 'TrustedAppend' : 'Append', symbols)]];\n }\n case \"Call\"\n /* Call */:\n {\n var {\n head: path,\n params,\n hash,\n trusted\n } = normalized;\n var builtParams = params ? buildParams(params, symbols) : null;\n var builtHash = hash ? buildHash(hash, symbols) : null;\n var builtExpr = buildCallHead(path, trusted ? 3\n /* AmbiguousInvoke */ : 2\n /* AmbiguousAppendInvoke */, symbols);\n return [[trusted ? 2\n /* TrustingAppend */ : 1\n /* Append */, [28\n /* Call */, builtExpr, builtParams, builtHash]]];\n }\n case \"Literal\"\n /* Literal */:\n {\n return [[1\n /* Append */, normalized.value]];\n }\n case \"Comment\"\n /* Comment */:\n {\n return [[3\n /* Comment */, normalized.value]];\n }\n case \"Block\"\n /* Block */:\n {\n var blocks = buildBlocks(normalized.blocks, normalized.blockParams, symbols);\n var _hash3 = buildHash(normalized.hash, symbols);\n var _params3 = buildParams(normalized.params, symbols);\n var _path = buildCallHead(normalized.head, 7\n /* ResolveAsComponentHead */, symbols);\n return [[6\n /* Block */, _path, _params3, _hash3, blocks]];\n }\n case \"Keyword\"\n /* Keyword */:\n {\n return [buildKeyword(normalized, symbols)];\n }\n case \"Element\"\n /* Element */:\n return buildElement(normalized, symbols);\n case \"Modifier\"\n /* Modifier */:\n throw unimpl('modifier');\n case \"DynamicComponent\"\n /* DynamicComponent */:\n throw unimpl('dynamic component');\n default:\n throw (0, _util.assertNever)(normalized);\n }\n }\n function s(arr) {\n for (var _len2 = arguments.length, interpolated = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n interpolated[_key2 - 1] = arguments[_key2];\n }\n var result = arr.reduce((result, string, i) => result + (\"\" + string + (interpolated[i] ? String(interpolated[i]) : '')), '');\n return [0\n /* Literal */, result];\n }\n function c(arr) {\n for (var _len3 = arguments.length, interpolated = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n interpolated[_key3 - 1] = arguments[_key3];\n }\n var result = arr.reduce((result, string, i) => result + (\"\" + string + (interpolated[i] ? String(interpolated[i]) : '')), '');\n return [1\n /* Comment */, result];\n }\n function unicode(charCode) {\n return String.fromCharCode(parseInt(charCode, 16));\n }\n var NEWLINE = '\\n';\n _exports.NEWLINE = NEWLINE;\n function buildKeyword(normalized, symbols) {\n var {\n name\n } = normalized;\n var params = buildParams(normalized.params, symbols);\n var childSymbols = symbols.child(normalized.blockParams || []);\n var block = buildBlock(normalized.blocks.default, childSymbols, childSymbols.paramSymbols);\n var inverse = normalized.blocks.else ? buildBlock(normalized.blocks.else, symbols, []) : null;\n switch (name) {\n case 'with':\n return [43\n /* With */, params[0], block, inverse];\n case 'if':\n return [41\n /* If */, params[0], block, inverse];\n case 'each':\n var keyExpr = normalized.hash ? normalized.hash['key'] : null;\n var key = keyExpr ? buildExpression(keyExpr, 'Strict', symbols) : null;\n return [42\n /* Each */, params[0], key, block, inverse];\n default:\n throw new Error('unimplemented keyword');\n }\n }\n function buildElement(_ref99, symbols) {\n var {\n name,\n attrs,\n block\n } = _ref99;\n var out = [hasSplat(attrs) ? [11\n /* OpenElementWithSplat */, name] : [10\n /* OpenElement */, name]];\n if (attrs) {\n var {\n params,\n args\n } = buildElementParams(attrs, symbols);\n out.push(...params);\n }\n out.push([12\n /* FlushElement */]);\n\n if (Array.isArray(block)) {\n block.forEach(s => out.push(...buildStatement(s, symbols)));\n } else if (block === null) ;else {\n throw (0, _util.assertNever)(block);\n }\n out.push([13\n /* CloseElement */]);\n\n return out;\n }\n function hasSplat(attrs) {\n if (attrs === null) return false;\n return Object.keys(attrs).some(a => attrs[a] === \"Splat\"\n /* Splat */);\n }\n\n function buildElementParams(attrs, symbols) {\n var params = [];\n var keys = [];\n var values = [];\n Object.keys(attrs).forEach(key => {\n var value = attrs[key];\n if (value === \"Splat\"\n /* Splat */) {\n params.push([17\n /* AttrSplat */, symbols.block('&attrs')]);\n } else if (key[0] === '@') {\n keys.push(key);\n values.push(buildExpression(value, 'Strict', symbols));\n } else {\n params.push(...buildAttributeValue(key, value,\n // TODO: extract namespace from key\n extractNamespace(key), symbols));\n }\n });\n return {\n params,\n args: (0, _util.isPresent)(keys) && (0, _util.isPresent)(values) ? [keys, values] : null\n };\n }\n function extractNamespace(name) {\n if (name === 'xmlns') {\n return \"http://www.w3.org/2000/xmlns/\"\n /* XMLNS */;\n }\n\n var match = /^([^:]*):([^:]*)$/.exec(name);\n if (match === null) {\n return null;\n }\n var namespace = match[1];\n switch (namespace) {\n case 'xlink':\n return \"http://www.w3.org/1999/xlink\"\n /* XLink */;\n\n case 'xml':\n return \"http://www.w3.org/XML/1998/namespace\"\n /* XML */;\n\n case 'xmlns':\n return \"http://www.w3.org/2000/xmlns/\"\n /* XMLNS */;\n }\n\n return null;\n }\n function buildAttributeValue(name, value, namespace, symbols) {\n switch (value.type) {\n case \"Literal\"\n /* Literal */:\n {\n var val = value.value;\n if (val === false) {\n return [];\n } else if (val === true) {\n return [[14\n /* StaticAttr */, name, '', namespace !== null && namespace !== void 0 ? namespace : undefined]];\n } else if (typeof val === 'string') {\n return [[14\n /* StaticAttr */, name, val, namespace !== null && namespace !== void 0 ? namespace : undefined]];\n } else {\n throw new Error(\"Unexpected/unimplemented literal attribute \" + JSON.stringify(val));\n }\n }\n default:\n return [[15\n /* DynamicAttr */, name, buildExpression(value, 'AttrValue', symbols), namespace !== null && namespace !== void 0 ? namespace : undefined]];\n }\n }\n function varContext(context, bare) {\n switch (context) {\n case 'Append':\n return bare ? 'AppendBare' : 'AppendInvoke';\n case 'TrustedAppend':\n return bare ? 'TrustedAppendBare' : 'TrustedAppendInvoke';\n case 'AttrValue':\n return bare ? 'AttrValueBare' : 'AttrValueInvoke';\n default:\n return context;\n }\n }\n function buildExpression(expr, context, symbols) {\n switch (expr.type) {\n case \"GetPath\"\n /* GetPath */:\n {\n return buildGetPath(expr, symbols);\n }\n case \"GetVar\"\n /* GetVar */:\n {\n return buildVar(expr.variable, varContext(context, true), symbols);\n }\n case \"Concat\"\n /* Concat */:\n {\n return [29\n /* Concat */, buildConcat(expr.params, symbols)];\n }\n case \"Call\"\n /* Call */:\n {\n var builtParams = buildParams(expr.params, symbols);\n var builtHash = buildHash(expr.hash, symbols);\n var builtExpr = buildCallHead(expr.head, context === 'Strict' ? 'SubExpression' : varContext(context, false), symbols);\n return [28\n /* Call */, builtExpr, builtParams, builtHash];\n }\n case \"HasBlock\"\n /* HasBlock */:\n {\n return [48\n /* HasBlock */, buildVar({\n kind: VariableKind.Block,\n name: expr.name,\n mode: 'loose'\n }, 0\n /* Strict */, symbols)];\n }\n case \"HasBlockParams\"\n /* HasBlockParams */:\n {\n return [49\n /* HasBlockParams */, buildVar({\n kind: VariableKind.Block,\n name: expr.name,\n mode: 'loose'\n }, 0\n /* Strict */, symbols)];\n }\n case \"Literal\"\n /* Literal */:\n {\n if (expr.value === undefined) {\n return [27\n /* Undefined */];\n } else {\n return expr.value;\n }\n }\n default:\n (0, _util.assertNever)(expr);\n }\n }\n function buildCallHead(callHead, context, symbols) {\n if (callHead.type === \"GetVar\"\n /* GetVar */) {\n return buildVar(callHead.variable, context, symbols);\n } else {\n return buildGetPath(callHead, symbols);\n }\n }\n function buildGetPath(head, symbols) {\n return buildVar(head.path.head, 0\n /* Strict */, symbols, head.path.tail);\n }\n function buildVar(head, context, symbols, path) {\n var op = 30\n /* GetSymbol */;\n\n var sym;\n switch (head.kind) {\n case VariableKind.Free:\n if (context === 'Strict') {\n op = 31\n /* GetStrictFree */;\n } else if (context === 'AppendBare') {\n op = 34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */;\n } else if (context === 'AppendInvoke') {\n op = 35\n /* GetFreeAsComponentOrHelperHead */;\n } else if (context === 'TrustedAppendBare') {\n op = 36\n /* GetFreeAsHelperHeadOrThisFallback */;\n } else if (context === 'TrustedAppendInvoke') {\n op = 37\n /* GetFreeAsHelperHead */;\n } else if (context === 'AttrValueBare') {\n op = 36\n /* GetFreeAsHelperHeadOrThisFallback */;\n } else if (context === 'AttrValueInvoke') {\n op = 37\n /* GetFreeAsHelperHead */;\n } else if (context === 'SubExpression') {\n op = 37\n /* GetFreeAsHelperHead */;\n } else {\n op = expressionContextOp(context);\n }\n sym = symbols.freeVar(head.name);\n break;\n default:\n op = 30\n /* GetSymbol */;\n\n sym = getSymbolForVar(head.kind, symbols, head.name);\n }\n if (path === undefined || path.length === 0) {\n return [op, sym];\n } else {\n return [op, sym, path];\n }\n }\n function getSymbolForVar(kind, symbols, name) {\n switch (kind) {\n case VariableKind.Arg:\n return symbols.arg(name);\n case VariableKind.Block:\n return symbols.block(name);\n case VariableKind.Local:\n return symbols.local(name);\n case VariableKind.This:\n return symbols.this();\n default:\n return (0, _util.exhausted)(kind);\n }\n }\n function expressionContextOp(context) {\n switch (context) {\n case 0\n /* Strict */:\n return 31\n /* GetStrictFree */;\n\n case 1\n /* AmbiguousAppend */:\n return 34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */;\n\n case 2\n /* AmbiguousAppendInvoke */:\n return 35\n /* GetFreeAsComponentOrHelperHead */;\n\n case 3\n /* AmbiguousInvoke */:\n return 36\n /* GetFreeAsHelperHeadOrThisFallback */;\n\n case 5\n /* ResolveAsCallHead */:\n return 37\n /* GetFreeAsHelperHead */;\n\n case 6\n /* ResolveAsModifierHead */:\n return 38\n /* GetFreeAsModifierHead */;\n\n case 7\n /* ResolveAsComponentHead */:\n return 39\n /* GetFreeAsComponentHead */;\n\n default:\n return (0, _util.exhausted)(context);\n }\n }\n function buildParams(exprs, symbols) {\n if (exprs === null || !(0, _util.isPresent)(exprs)) return null;\n return exprs.map(e => buildExpression(e, 'Strict', symbols));\n }\n function buildConcat(exprs, symbols) {\n return exprs.map(e => buildExpression(e, 'AttrValue', symbols));\n }\n function buildHash(exprs, symbols) {\n if (exprs === null) return null;\n var out = [[], []];\n Object.keys(exprs).forEach(key => {\n out[0].push(key);\n out[1].push(buildExpression(exprs[key], 'Strict', symbols));\n });\n return out;\n }\n function buildBlocks(blocks, blockParams, parent) {\n var keys = [];\n var values = [];\n Object.keys(blocks).forEach(name => {\n keys.push(name);\n if (name === 'default') {\n var symbols = parent.child(blockParams || []);\n values.push(buildBlock(blocks[name], symbols, symbols.paramSymbols));\n } else {\n values.push(buildBlock(blocks[name], parent, []));\n }\n });\n return [keys, values];\n }\n function buildBlock(block, symbols, locals) {\n if (locals === void 0) {\n locals = [];\n }\n return [buildNormalizedStatements(block, symbols), locals];\n }\n});","define(\"@glimmer/env\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.DEBUG = _exports.CI = void 0;\n var DEBUG = false;\n _exports.DEBUG = DEBUG;\n var CI = false;\n _exports.CI = CI;\n});","define(\"@glimmer/syntax\", [\"exports\", \"@glimmer/util\", \"@handlebars/parser\", \"simple-html-tokenizer\"], function (_exports, _util, _parser, _simpleHtmlTokenizer) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.builders = _exports.WalkerPath = _exports.Walker = _exports.SymbolTable = _exports.SpanList = _exports.SourceSpan = _exports.SourceSlice = _exports.Source = _exports.ProgramSymbolTable = _exports.Path = _exports.KEYWORDS_TYPES = _exports.BlockSymbolTable = _exports.ASTv2 = _exports.ASTv1 = _exports.AST = void 0;\n _exports.cannotRemoveNode = cannotRemoveNode;\n _exports.cannotReplaceNode = cannotReplaceNode;\n _exports.generateSyntaxError = generateSyntaxError;\n _exports.getTemplateLocals = getTemplateLocals;\n _exports.hasSpan = hasSpan;\n _exports.isKeyword = isKeyword;\n _exports.loc = loc;\n _exports.maybeLoc = maybeLoc;\n _exports.node = node;\n _exports.normalize = normalize;\n _exports.preprocess = preprocess;\n _exports.print = build;\n _exports.sortByLoc = sortByLoc;\n _exports.traverse = traverse;\n var UNKNOWN_POSITION = Object.freeze({\n line: 1,\n column: 0\n });\n var SYNTHETIC_LOCATION = Object.freeze({\n source: '(synthetic)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n var TEMPORARY_LOCATION = Object.freeze({\n source: '(temporary)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n var NON_EXISTENT_LOCATION = Object.freeze({\n source: '(nonexistent)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n var BROKEN_LOCATION = Object.freeze({\n source: '(broken)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n class SourceSlice {\n constructor(options) {\n this.loc = options.loc;\n this.chars = options.chars;\n }\n static synthetic(chars) {\n var offsets = SourceSpan.synthetic(chars);\n return new SourceSlice({\n loc: offsets,\n chars: chars\n });\n }\n static load(source, slice) {\n return new SourceSlice({\n loc: SourceSpan.load(source, slice[1]),\n chars: slice[0]\n });\n }\n getString() {\n return this.chars;\n }\n serialize() {\n return [this.chars, this.loc.serialize()];\n }\n }\n\n /**\n * This file implements the DSL used by span and offset in places where they need to exhaustively\n * consider all combinations of states (Handlebars offsets, character offsets and invisible/broken\n * offsets).\n *\n * It's probably overkill, but it makes the code that uses it clear. It could be refactored or\n * removed.\n */\n _exports.SourceSlice = SourceSlice;\n var MatchAny = 'MATCH_ANY';\n var IsInvisible = 'IS_INVISIBLE';\n class WhenList {\n constructor(whens) {\n this._whens = whens;\n }\n first(kind) {\n for (var when of this._whens) {\n var value = when.match(kind);\n if ((0, _util.isPresent)(value)) {\n return value[0];\n }\n }\n return null;\n }\n }\n class When {\n constructor() {\n this._map = new Map();\n }\n get(pattern, or) {\n var value = this._map.get(pattern);\n if (value) {\n return value;\n }\n value = or();\n this._map.set(pattern, value);\n return value;\n }\n add(pattern, out) {\n this._map.set(pattern, out);\n }\n match(kind) {\n var pattern = patternFor(kind);\n var out = [];\n var exact = this._map.get(pattern);\n var fallback = this._map.get(MatchAny);\n if (exact) {\n out.push(exact);\n }\n if (fallback) {\n out.push(fallback);\n }\n return out;\n }\n }\n function match(callback) {\n return callback(new Matcher()).check();\n }\n class Matcher {\n constructor() {\n this._whens = new When();\n }\n /**\n * You didn't exhaustively match all possibilities.\n */\n\n check() {\n return (left, right) => this.matchFor(left.kind, right.kind)(left, right);\n }\n matchFor(left, right) {\n var nesteds = this._whens.match(left);\n var callback = new WhenList(nesteds).first(right);\n return callback;\n }\n when(left, right,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n callback) {\n this._whens.get(left, () => new When()).add(right, callback);\n return this;\n }\n }\n function patternFor(kind) {\n switch (kind) {\n case \"Broken\"\n /* Broken */:\n\n case \"InternalsSynthetic\"\n /* InternalsSynthetic */:\n\n case \"NonExistent\"\n /* NonExistent */:\n return IsInvisible;\n default:\n return kind;\n }\n }\n\n // eslint-disable-next-line import/no-extraneous-dependencies\n /**\n * Used to indicate that an attempt to convert a `SourcePosition` to a character offset failed. It\n * is separate from `null` so that `null` can be used to indicate that the computation wasn't yet\n * attempted (and therefore to cache the failure)\n */\n\n var BROKEN = 'BROKEN';\n /**\n * A `SourceOffset` represents a single position in the source.\n *\n * There are three kinds of backing data for `SourceOffset` objects:\n *\n * - `CharPosition`, which contains a character offset into the raw source string\n * - `HbsPosition`, which contains a `SourcePosition` from the Handlebars AST, which can be\n * converted to a `CharPosition` on demand.\n * - `InvisiblePosition`, which represents a position not in source (@see {InvisiblePosition})\n */\n\n class SourceOffset {\n constructor(data) {\n this.data = data;\n }\n /**\n * Create a `SourceOffset` from a Handlebars `SourcePosition`. It's stored as-is, and converted\n * into a character offset on demand, which avoids unnecessarily computing the offset of every\n * `SourceLocation`, but also means that broken `SourcePosition`s are not always detected.\n */\n\n static forHbsPos(source, pos) {\n return new HbsPosition(source, pos, null).wrap();\n }\n /**\n * Create a `SourceOffset` that corresponds to a broken `SourcePosition`. This means that the\n * calling code determined (or knows) that the `SourceLocation` doesn't correspond correctly to\n * any part of the source.\n */\n\n static broken(pos) {\n if (pos === void 0) {\n pos = UNKNOWN_POSITION;\n }\n return new InvisiblePosition(\"Broken\"\n /* Broken */, pos).wrap();\n }\n /**\n * Get the character offset for this `SourceOffset`, if possible.\n */\n\n get offset() {\n var charPos = this.data.toCharPos();\n return charPos === null ? null : charPos.offset;\n }\n /**\n * Compare this offset with another one.\n *\n * If both offsets are `HbsPosition`s, they're equivalent as long as their lines and columns are\n * the same. This avoids computing offsets unnecessarily.\n *\n * Otherwise, two `SourceOffset`s are equivalent if their successfully computed character offsets\n * are the same.\n */\n\n eql(right) {\n return eql(this.data, right.data);\n }\n /**\n * Create a span that starts from this source offset and ends with another source offset. Avoid\n * computing character offsets if both `SourceOffset`s are still lazy.\n */\n\n until(other) {\n return span(this.data, other.data);\n }\n /**\n * Create a `SourceOffset` by moving the character position represented by this source offset\n * forward or backward (if `by` is negative), if possible.\n *\n * If this `SourceOffset` can't compute a valid character offset, `move` returns a broken offset.\n *\n * If the resulting character offset is less than 0 or greater than the size of the source, `move`\n * returns a broken offset.\n */\n\n move(by) {\n var charPos = this.data.toCharPos();\n if (charPos === null) {\n return SourceOffset.broken();\n } else {\n var result = charPos.offset + by;\n if (charPos.source.check(result)) {\n return new CharPosition(charPos.source, result).wrap();\n } else {\n return SourceOffset.broken();\n }\n }\n }\n /**\n * Create a new `SourceSpan` that represents a collapsed range at this source offset. Avoid\n * computing the character offset if it has not already been computed.\n */\n\n collapsed() {\n return span(this.data, this.data);\n }\n /**\n * Convert this `SourceOffset` into a Handlebars {@see SourcePosition} for compatibility with\n * existing plugins.\n */\n\n toJSON() {\n return this.data.toJSON();\n }\n }\n class CharPosition {\n constructor(source, charPos) {\n this.source = source;\n this.charPos = charPos;\n this.kind = \"CharPosition\"\n /* CharPosition */;\n /** Computed from char offset */\n\n this._locPos = null;\n }\n /**\n * This is already a `CharPosition`.\n *\n * {@see HbsPosition} for the alternative.\n *\n * @implements {PositionData}\n */\n\n toCharPos() {\n return this;\n }\n /**\n * Produce a Handlebars {@see SourcePosition} for this `CharPosition`. If this `CharPosition` was\n * computed using {@see SourceOffset#move}, this will compute the `SourcePosition` for the offset.\n *\n * @implements {PositionData}\n */\n\n toJSON() {\n var hbs = this.toHbsPos();\n return hbs === null ? UNKNOWN_POSITION : hbs.toJSON();\n }\n wrap() {\n return new SourceOffset(this);\n }\n /**\n * A `CharPosition` always has an offset it can produce without any additional computation.\n */\n\n get offset() {\n return this.charPos;\n }\n /**\n * Convert the current character offset to an `HbsPosition`, if it was not already computed. Once\n * a `CharPosition` has computed its `HbsPosition`, it will not need to do compute it again, and\n * the same `CharPosition` is retained when used as one of the ends of a `SourceSpan`, so\n * computing the `HbsPosition` should be a one-time operation.\n */\n\n toHbsPos() {\n var locPos = this._locPos;\n if (locPos === null) {\n var hbsPos = this.source.hbsPosFor(this.charPos);\n if (hbsPos === null) {\n this._locPos = locPos = BROKEN;\n } else {\n this._locPos = locPos = new HbsPosition(this.source, hbsPos, this.charPos);\n }\n }\n return locPos === BROKEN ? null : locPos;\n }\n }\n class HbsPosition {\n constructor(source, hbsPos, charPos) {\n if (charPos === void 0) {\n charPos = null;\n }\n this.source = source;\n this.hbsPos = hbsPos;\n this.kind = \"HbsPosition\"\n /* HbsPosition */;\n\n this._charPos = charPos === null ? null : new CharPosition(source, charPos);\n }\n /**\n * Lazily compute the character offset from the {@see SourcePosition}. Once an `HbsPosition` has\n * computed its `CharPosition`, it will not need to do compute it again, and the same\n * `HbsPosition` is retained when used as one of the ends of a `SourceSpan`, so computing the\n * `CharPosition` should be a one-time operation.\n *\n * @implements {PositionData}\n */\n\n toCharPos() {\n var charPos = this._charPos;\n if (charPos === null) {\n var charPosNumber = this.source.charPosFor(this.hbsPos);\n if (charPosNumber === null) {\n this._charPos = charPos = BROKEN;\n } else {\n this._charPos = charPos = new CharPosition(this.source, charPosNumber);\n }\n }\n return charPos === BROKEN ? null : charPos;\n }\n /**\n * Return the {@see SourcePosition} that this `HbsPosition` was instantiated with. This operation\n * does not need to compute anything.\n *\n * @implements {PositionData}\n */\n\n toJSON() {\n return this.hbsPos;\n }\n wrap() {\n return new SourceOffset(this);\n }\n /**\n * This is already an `HbsPosition`.\n *\n * {@see CharPosition} for the alternative.\n */\n\n toHbsPos() {\n return this;\n }\n }\n class InvisiblePosition {\n constructor(kind,\n // whatever was provided, possibly broken\n pos) {\n this.kind = kind;\n this.pos = pos;\n }\n /**\n * A broken position cannot be turned into a {@see CharacterPosition}.\n */\n\n toCharPos() {\n return null;\n }\n /**\n * The serialization of an `InvisiblePosition is whatever Handlebars {@see SourcePosition} was\n * originally identified as broken, non-existent or synthetic.\n *\n * If an `InvisiblePosition` never had an source offset at all, this method returns\n * {@see UNKNOWN_POSITION} for compatibility.\n */\n\n toJSON() {\n return this.pos;\n }\n wrap() {\n return new SourceOffset(this);\n }\n get offset() {\n return null;\n }\n }\n /**\n * Compare two {@see AnyPosition} and determine whether they are equal.\n *\n * @see {SourceOffset#eql}\n */\n\n var eql = match(m => m.when(\"HbsPosition\"\n /* HbsPosition */, \"HbsPosition\"\n /* HbsPosition */, (_ref, _ref2) => {\n var {\n hbsPos: left\n } = _ref;\n var {\n hbsPos: right\n } = _ref2;\n return left.column === right.column && left.line === right.line;\n }).when(\"CharPosition\"\n /* CharPosition */, \"CharPosition\"\n /* CharPosition */, (_ref3, _ref4) => {\n var {\n charPos: left\n } = _ref3;\n var {\n charPos: right\n } = _ref4;\n return left === right;\n }).when(\"CharPosition\"\n /* CharPosition */, \"HbsPosition\"\n /* HbsPosition */, (_ref5, right) => {\n var {\n offset: left\n } = _ref5;\n var _a;\n return left === ((_a = right.toCharPos()) === null || _a === void 0 ? void 0 : _a.offset);\n }).when(\"HbsPosition\"\n /* HbsPosition */, \"CharPosition\"\n /* CharPosition */, (left, _ref6) => {\n var {\n offset: right\n } = _ref6;\n var _a;\n return ((_a = left.toCharPos()) === null || _a === void 0 ? void 0 : _a.offset) === right;\n }).when(MatchAny, MatchAny, () => false));\n\n // eslint-disable-next-line import/no-extraneous-dependencies\n /**\n * A `SourceSpan` object represents a span of characters inside of a template source.\n *\n * There are three kinds of `SourceSpan` objects:\n *\n * - `ConcreteSourceSpan`, which contains byte offsets\n * - `LazySourceSpan`, which contains `SourceLocation`s from the Handlebars AST, which can be\n * converted to byte offsets on demand.\n * - `InvisibleSourceSpan`, which represent source strings that aren't present in the source,\n * because:\n * - they were created synthetically\n * - their location is nonsensical (the span is broken)\n * - they represent nothing in the source (this currently happens only when a bug in the\n * upstream Handlebars parser fails to assign a location to empty blocks)\n *\n * At a high level, all `SourceSpan` objects provide:\n *\n * - byte offsets\n * - source in column and line format\n *\n * And you can do these operations on `SourceSpan`s:\n *\n * - collapse it to a `SourceSpan` representing its starting or ending position\n * - slice out some characters, optionally skipping some characters at the beginning or end\n * - create a new `SourceSpan` with a different starting or ending offset\n *\n * All SourceSpan objects implement `SourceLocation`, for compatibility. All SourceSpan\n * objects have a `toJSON` that emits `SourceLocation`, also for compatibility.\n *\n * For compatibility, subclasses of `AbstractSourceSpan` must implement `locDidUpdate`, which\n * happens when an AST plugin attempts to modify the `start` or `end` of a span directly.\n *\n * The goal is to avoid creating any problems for use-cases like AST Explorer.\n */\n\n class SourceSpan {\n constructor(data) {\n this.data = data;\n this.isInvisible = data.kind !== \"CharPosition\"\n /* CharPosition */ && data.kind !== \"HbsPosition\"\n /* HbsPosition */;\n }\n\n static get NON_EXISTENT() {\n return new InvisibleSpan(\"NonExistent\"\n /* NonExistent */, NON_EXISTENT_LOCATION).wrap();\n }\n static load(source, serialized) {\n if (typeof serialized === 'number') {\n return SourceSpan.forCharPositions(source, serialized, serialized);\n } else if (typeof serialized === 'string') {\n return SourceSpan.synthetic(serialized);\n } else if (Array.isArray(serialized)) {\n return SourceSpan.forCharPositions(source, serialized[0], serialized[1]);\n } else if (serialized === \"NonExistent\"\n /* NonExistent */) {\n return SourceSpan.NON_EXISTENT;\n } else if (serialized === \"Broken\"\n /* Broken */) {\n return SourceSpan.broken(BROKEN_LOCATION);\n }\n (0, _util.assertNever)(serialized);\n }\n static forHbsLoc(source, loc) {\n var start = new HbsPosition(source, loc.start);\n var end = new HbsPosition(source, loc.end);\n return new HbsSpan(source, {\n start,\n end\n }, loc).wrap();\n }\n static forCharPositions(source, startPos, endPos) {\n var start = new CharPosition(source, startPos);\n var end = new CharPosition(source, endPos);\n return new CharPositionSpan(source, {\n start,\n end\n }).wrap();\n }\n static synthetic(chars) {\n return new InvisibleSpan(\"InternalsSynthetic\"\n /* InternalsSynthetic */, NON_EXISTENT_LOCATION, chars).wrap();\n }\n static broken(pos) {\n if (pos === void 0) {\n pos = BROKEN_LOCATION;\n }\n return new InvisibleSpan(\"Broken\"\n /* Broken */, pos).wrap();\n }\n getStart() {\n return this.data.getStart().wrap();\n }\n getEnd() {\n return this.data.getEnd().wrap();\n }\n get loc() {\n var span = this.data.toHbsSpan();\n return span === null ? BROKEN_LOCATION : span.toHbsLoc();\n }\n get module() {\n return this.data.getModule();\n }\n /**\n * Get the starting `SourcePosition` for this `SourceSpan`, lazily computing it if needed.\n */\n\n get startPosition() {\n return this.loc.start;\n }\n /**\n * Get the ending `SourcePosition` for this `SourceSpan`, lazily computing it if needed.\n */\n\n get endPosition() {\n return this.loc.end;\n }\n /**\n * Support converting ASTv1 nodes into a serialized format using JSON.stringify.\n */\n\n toJSON() {\n return this.loc;\n }\n /**\n * Create a new span with the current span's end and a new beginning.\n */\n\n withStart(other) {\n return span(other.data, this.data.getEnd());\n }\n /**\n * Create a new span with the current span's beginning and a new ending.\n */\n\n withEnd(other) {\n return span(this.data.getStart(), other.data);\n }\n asString() {\n return this.data.asString();\n }\n /**\n * Convert this `SourceSpan` into a `SourceSlice`. In debug mode, this method optionally checks\n * that the byte offsets represented by this `SourceSpan` actually correspond to the expected\n * string.\n */\n\n toSlice(expected) {\n var chars = this.data.asString();\n if (true /* DEBUG */) {\n if (expected !== undefined && chars !== expected) {\n // eslint-disable-next-line no-console\n console.warn(\"unexpectedly found \" + JSON.stringify(chars) + \" when slicing source, but expected \" + JSON.stringify(expected));\n }\n }\n return new SourceSlice({\n loc: this,\n chars: expected || chars\n });\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use startPosition instead\n */\n\n get start() {\n return this.loc.start;\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use withStart instead\n */\n\n set start(position) {\n this.data.locDidUpdate({\n start: position\n });\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use endPosition instead\n */\n\n get end() {\n return this.loc.end;\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use withEnd instead\n */\n\n set end(position) {\n this.data.locDidUpdate({\n end: position\n });\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use module instead\n */\n\n get source() {\n return this.module;\n }\n collapse(where) {\n switch (where) {\n case 'start':\n return this.getStart().collapsed();\n case 'end':\n return this.getEnd().collapsed();\n }\n }\n extend(other) {\n return span(this.data.getStart(), other.data.getEnd());\n }\n serialize() {\n return this.data.serialize();\n }\n slice(_ref7) {\n var {\n skipStart = 0,\n skipEnd = 0\n } = _ref7;\n return span(this.getStart().move(skipStart).data, this.getEnd().move(-skipEnd).data);\n }\n sliceStartChars(_ref8) {\n var {\n skipStart = 0,\n chars\n } = _ref8;\n return span(this.getStart().move(skipStart).data, this.getStart().move(skipStart + chars).data);\n }\n sliceEndChars(_ref9) {\n var {\n skipEnd = 0,\n chars\n } = _ref9;\n return span(this.getEnd().move(skipEnd - chars).data, this.getStart().move(-skipEnd).data);\n }\n }\n _exports.SourceSpan = SourceSpan;\n class CharPositionSpan {\n constructor(source, charPositions) {\n this.source = source;\n this.charPositions = charPositions;\n this.kind = \"CharPosition\"\n /* CharPosition */;\n\n this._locPosSpan = null;\n }\n wrap() {\n return new SourceSpan(this);\n }\n asString() {\n return this.source.slice(this.charPositions.start.charPos, this.charPositions.end.charPos);\n }\n getModule() {\n return this.source.module;\n }\n getStart() {\n return this.charPositions.start;\n }\n getEnd() {\n return this.charPositions.end;\n }\n locDidUpdate() {}\n toHbsSpan() {\n var locPosSpan = this._locPosSpan;\n if (locPosSpan === null) {\n var start = this.charPositions.start.toHbsPos();\n var end = this.charPositions.end.toHbsPos();\n if (start === null || end === null) {\n locPosSpan = this._locPosSpan = BROKEN;\n } else {\n locPosSpan = this._locPosSpan = new HbsSpan(this.source, {\n start,\n end\n });\n }\n }\n return locPosSpan === BROKEN ? null : locPosSpan;\n }\n serialize() {\n var {\n start: {\n charPos: start\n },\n end: {\n charPos: end\n }\n } = this.charPositions;\n if (start === end) {\n return start;\n } else {\n return [start, end];\n }\n }\n toCharPosSpan() {\n return this;\n }\n }\n class HbsSpan {\n constructor(source, hbsPositions, providedHbsLoc) {\n if (providedHbsLoc === void 0) {\n providedHbsLoc = null;\n }\n this.source = source;\n this.hbsPositions = hbsPositions;\n this.kind = \"HbsPosition\"\n /* HbsPosition */;\n\n this._charPosSpan = null;\n this._providedHbsLoc = providedHbsLoc;\n }\n serialize() {\n var charPos = this.toCharPosSpan();\n return charPos === null ? \"Broken\"\n /* Broken */ : charPos.wrap().serialize();\n }\n wrap() {\n return new SourceSpan(this);\n }\n updateProvided(pos, edge) {\n if (this._providedHbsLoc) {\n this._providedHbsLoc[edge] = pos;\n } // invalidate computed character offsets\n\n this._charPosSpan = null;\n this._providedHbsLoc = {\n start: pos,\n end: pos\n };\n }\n locDidUpdate(_ref10) {\n var {\n start,\n end\n } = _ref10;\n if (start !== undefined) {\n this.updateProvided(start, 'start');\n this.hbsPositions.start = new HbsPosition(this.source, start, null);\n }\n if (end !== undefined) {\n this.updateProvided(end, 'end');\n this.hbsPositions.end = new HbsPosition(this.source, end, null);\n }\n }\n asString() {\n var span = this.toCharPosSpan();\n return span === null ? '' : span.asString();\n }\n getModule() {\n return this.source.module;\n }\n getStart() {\n return this.hbsPositions.start;\n }\n getEnd() {\n return this.hbsPositions.end;\n }\n toHbsLoc() {\n return {\n start: this.hbsPositions.start.hbsPos,\n end: this.hbsPositions.end.hbsPos\n };\n }\n toHbsSpan() {\n return this;\n }\n toCharPosSpan() {\n var charPosSpan = this._charPosSpan;\n if (charPosSpan === null) {\n var start = this.hbsPositions.start.toCharPos();\n var end = this.hbsPositions.end.toCharPos();\n if (start && end) {\n charPosSpan = this._charPosSpan = new CharPositionSpan(this.source, {\n start,\n end\n });\n } else {\n charPosSpan = this._charPosSpan = BROKEN;\n return null;\n }\n }\n return charPosSpan === BROKEN ? null : charPosSpan;\n }\n }\n class InvisibleSpan {\n constructor(kind,\n // whatever was provided, possibly broken\n loc,\n // if the span represents a synthetic string\n string) {\n if (string === void 0) {\n string = null;\n }\n this.kind = kind;\n this.loc = loc;\n this.string = string;\n }\n serialize() {\n switch (this.kind) {\n case \"Broken\"\n /* Broken */:\n\n case \"NonExistent\"\n /* NonExistent */:\n return this.kind;\n case \"InternalsSynthetic\"\n /* InternalsSynthetic */:\n return this.string || '';\n }\n }\n wrap() {\n return new SourceSpan(this);\n }\n asString() {\n return this.string || '';\n }\n locDidUpdate(_ref11) {\n var {\n start,\n end\n } = _ref11;\n if (start !== undefined) {\n this.loc.start = start;\n }\n if (end !== undefined) {\n this.loc.end = end;\n }\n }\n getModule() {\n // TODO: Make this reflect the actual module this span originated from\n return 'an unknown module';\n }\n getStart() {\n return new InvisiblePosition(this.kind, this.loc.start);\n }\n getEnd() {\n return new InvisiblePosition(this.kind, this.loc.end);\n }\n toCharPosSpan() {\n return this;\n }\n toHbsSpan() {\n return null;\n }\n toHbsLoc() {\n return BROKEN_LOCATION;\n }\n }\n var span = match(m => m.when(\"HbsPosition\"\n /* HbsPosition */, \"HbsPosition\"\n /* HbsPosition */, (left, right) => new HbsSpan(left.source, {\n start: left,\n end: right\n }).wrap()).when(\"CharPosition\"\n /* CharPosition */, \"CharPosition\"\n /* CharPosition */, (left, right) => new CharPositionSpan(left.source, {\n start: left,\n end: right\n }).wrap()).when(\"CharPosition\"\n /* CharPosition */, \"HbsPosition\"\n /* HbsPosition */, (left, right) => {\n var rightCharPos = right.toCharPos();\n if (rightCharPos === null) {\n return new InvisibleSpan(\"Broken\"\n /* Broken */, BROKEN_LOCATION).wrap();\n } else {\n return span(left, rightCharPos);\n }\n }).when(\"HbsPosition\"\n /* HbsPosition */, \"CharPosition\"\n /* CharPosition */, (left, right) => {\n var leftCharPos = left.toCharPos();\n if (leftCharPos === null) {\n return new InvisibleSpan(\"Broken\"\n /* Broken */, BROKEN_LOCATION).wrap();\n } else {\n return span(leftCharPos, right);\n }\n }).when(IsInvisible, MatchAny, left => new InvisibleSpan(left.kind, BROKEN_LOCATION).wrap()).when(MatchAny, IsInvisible, (_, right) => new InvisibleSpan(right.kind, BROKEN_LOCATION).wrap()));\n\n // eslint-disable-next-line import/no-extraneous-dependencies\n class Source {\n constructor(source, module) {\n if (module === void 0) {\n module = 'an unknown module';\n }\n this.source = source;\n this.module = module;\n }\n /**\n * Validate that the character offset represents a position in the source string.\n */\n\n check(offset) {\n return offset >= 0 && offset <= this.source.length;\n }\n slice(start, end) {\n return this.source.slice(start, end);\n }\n offsetFor(line, column) {\n return SourceOffset.forHbsPos(this, {\n line,\n column\n });\n }\n spanFor(_ref12) {\n var {\n start,\n end\n } = _ref12;\n return SourceSpan.forHbsLoc(this, {\n start: {\n line: start.line,\n column: start.column\n },\n end: {\n line: end.line,\n column: end.column\n }\n });\n }\n hbsPosFor(offset) {\n var seenLines = 0;\n var seenChars = 0;\n if (offset > this.source.length) {\n return null;\n }\n while (true) {\n var nextLine = this.source.indexOf('\\n', seenChars);\n if (offset <= nextLine || nextLine === -1) {\n return {\n line: seenLines + 1,\n column: offset - seenChars\n };\n } else {\n seenLines += 1;\n seenChars = nextLine + 1;\n }\n }\n }\n charPosFor(position) {\n var {\n line,\n column\n } = position;\n var sourceString = this.source;\n var sourceLength = sourceString.length;\n var seenLines = 0;\n var seenChars = 0;\n while (true) {\n if (seenChars >= sourceLength) return sourceLength;\n var nextLine = this.source.indexOf('\\n', seenChars);\n if (nextLine === -1) nextLine = this.source.length;\n if (seenLines === line - 1) {\n if (seenChars + column > nextLine) return nextLine;\n if (true /* DEBUG */) {\n var roundTrip = this.hbsPosFor(seenChars + column);\n }\n return seenChars + column;\n } else if (nextLine === -1) {\n return 0;\n } else {\n seenLines += 1;\n seenChars = nextLine + 1;\n }\n }\n }\n }\n _exports.Source = Source;\n class PathExpressionImplV1 {\n constructor(original, head, tail, loc) {\n this.original = original;\n this.loc = loc;\n this.type = 'PathExpression';\n this.this = false;\n this.data = false; // Cache for the head value.\n\n this._head = undefined;\n var parts = tail.slice();\n if (head.type === 'ThisHead') {\n this.this = true;\n } else if (head.type === 'AtHead') {\n this.data = true;\n parts.unshift(head.name.slice(1));\n } else {\n parts.unshift(head.name);\n }\n this.parts = parts;\n }\n get head() {\n if (this._head) {\n return this._head;\n }\n var firstPart;\n if (this.this) {\n firstPart = 'this';\n } else if (this.data) {\n firstPart = \"@\" + this.parts[0];\n } else {\n firstPart = this.parts[0];\n }\n var firstPartLoc = this.loc.collapse('start').sliceStartChars({\n chars: firstPart.length\n }).loc;\n return this._head = publicBuilder.head(firstPart, firstPartLoc);\n }\n get tail() {\n return this.this ? this.parts : this.parts.slice(1);\n }\n }\n var _SOURCE;\n function SOURCE() {\n if (!_SOURCE) {\n _SOURCE = new Source('', '(synthetic)');\n }\n return _SOURCE;\n }\n function buildMustache(path, params, hash, raw, loc, strip) {\n if (typeof path === 'string') {\n path = buildPath(path);\n }\n return {\n type: 'MustacheStatement',\n path,\n params: params || [],\n hash: hash || buildHash([]),\n escaped: !raw,\n trusting: !!raw,\n loc: buildLoc(loc || null),\n strip: strip || {\n open: false,\n close: false\n }\n };\n }\n function buildBlock(path, params, hash, _defaultBlock, _elseBlock, loc, openStrip, inverseStrip, closeStrip) {\n var defaultBlock;\n var elseBlock;\n if (_defaultBlock.type === 'Template') {\n defaultBlock = (0, _util.assign)({}, _defaultBlock, {\n type: 'Block'\n });\n } else {\n defaultBlock = _defaultBlock;\n }\n if (_elseBlock !== undefined && _elseBlock !== null && _elseBlock.type === 'Template') {\n elseBlock = (0, _util.assign)({}, _elseBlock, {\n type: 'Block'\n });\n } else {\n elseBlock = _elseBlock;\n }\n return {\n type: 'BlockStatement',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n program: defaultBlock || null,\n inverse: elseBlock || null,\n loc: buildLoc(loc || null),\n openStrip: openStrip || {\n open: false,\n close: false\n },\n inverseStrip: inverseStrip || {\n open: false,\n close: false\n },\n closeStrip: closeStrip || {\n open: false,\n close: false\n }\n };\n }\n function buildElementModifier(path, params, hash, loc) {\n return {\n type: 'ElementModifierStatement',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n loc: buildLoc(loc || null)\n };\n }\n function buildPartial(name, params, hash, indent, loc) {\n return {\n type: 'PartialStatement',\n name: name,\n params: params || [],\n hash: hash || buildHash([]),\n indent: indent || '',\n strip: {\n open: false,\n close: false\n },\n loc: buildLoc(loc || null)\n };\n }\n function buildComment(value, loc) {\n return {\n type: 'CommentStatement',\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildMustacheComment(value, loc) {\n return {\n type: 'MustacheCommentStatement',\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildConcat(parts, loc) {\n if (!(0, _util.isPresent)(parts)) {\n throw new Error(\"b.concat requires at least one part\");\n }\n return {\n type: 'ConcatStatement',\n parts: parts || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildElement(tag, options) {\n if (options === void 0) {\n options = {};\n }\n var {\n attrs,\n blockParams,\n modifiers,\n comments,\n children,\n loc\n } = options;\n var tagName; // this is used for backwards compat, prior to `selfClosing` being part of the ElementNode AST\n\n var selfClosing = false;\n if (typeof tag === 'object') {\n selfClosing = tag.selfClosing;\n tagName = tag.name;\n } else if (tag.slice(-1) === '/') {\n tagName = tag.slice(0, -1);\n selfClosing = true;\n } else {\n tagName = tag;\n }\n return {\n type: 'ElementNode',\n tag: tagName,\n selfClosing: selfClosing,\n attributes: attrs || [],\n blockParams: blockParams || [],\n modifiers: modifiers || [],\n comments: comments || [],\n children: children || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildAttr(name, value, loc) {\n return {\n type: 'AttrNode',\n name: name,\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildText(chars, loc) {\n return {\n type: 'TextNode',\n chars: chars || '',\n loc: buildLoc(loc || null)\n };\n } // Expressions\n\n function buildSexpr(path, params, hash, loc) {\n return {\n type: 'SubExpression',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n loc: buildLoc(loc || null)\n };\n }\n function headToString(head) {\n switch (head.type) {\n case 'AtHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n case 'ThisHead':\n return {\n original: \"this\",\n parts: []\n };\n case 'VarHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n }\n }\n function buildHead(original, loc) {\n var [head, ...tail] = original.split('.');\n var headNode;\n if (head === 'this') {\n headNode = {\n type: 'ThisHead',\n loc: buildLoc(loc || null)\n };\n } else if (head[0] === '@') {\n headNode = {\n type: 'AtHead',\n name: head,\n loc: buildLoc(loc || null)\n };\n } else {\n headNode = {\n type: 'VarHead',\n name: head,\n loc: buildLoc(loc || null)\n };\n }\n return {\n head: headNode,\n tail\n };\n }\n function buildThis(loc) {\n return {\n type: 'ThisHead',\n loc: buildLoc(loc || null)\n };\n }\n function buildAtName(name, loc) {\n return {\n type: 'AtHead',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildVar(name, loc) {\n return {\n type: 'VarHead',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildHeadFromString(head, loc) {\n if (head[0] === '@') {\n return buildAtName(head, loc);\n } else if (head === 'this') {\n return buildThis(loc);\n } else {\n return buildVar(head, loc);\n }\n }\n function buildNamedBlockName(name, loc) {\n return {\n type: 'NamedBlockName',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildCleanPath(head, tail, loc) {\n var {\n original: originalHead,\n parts: headParts\n } = headToString(head);\n var parts = [...headParts, ...tail];\n var original = [...originalHead, ...parts].join('.');\n return new PathExpressionImplV1(original, head, tail, buildLoc(loc || null));\n }\n function buildPath(path, loc) {\n if (typeof path !== 'string') {\n if ('type' in path) {\n return path;\n } else {\n var {\n head: _head,\n tail: _tail\n } = buildHead(path.head, SourceSpan.broken());\n var {\n original: originalHead\n } = headToString(_head);\n return new PathExpressionImplV1([originalHead, ..._tail].join('.'), _head, _tail, buildLoc(loc || null));\n }\n }\n var {\n head,\n tail\n } = buildHead(path, SourceSpan.broken());\n return new PathExpressionImplV1(path, head, tail, buildLoc(loc || null));\n }\n function buildLiteral(type, value, loc) {\n return {\n type,\n value,\n original: value,\n loc: buildLoc(loc || null)\n };\n } // Miscellaneous\n\n function buildHash(pairs, loc) {\n return {\n type: 'Hash',\n pairs: pairs || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildPair(key, value, loc) {\n return {\n type: 'HashPair',\n key: key,\n value,\n loc: buildLoc(loc || null)\n };\n }\n function buildProgram(body, blockParams, loc) {\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildBlockItself(body, blockParams, chained, loc) {\n if (chained === void 0) {\n chained = false;\n }\n return {\n type: 'Block',\n body: body || [],\n blockParams: blockParams || [],\n chained,\n loc: buildLoc(loc || null)\n };\n }\n function buildTemplate(body, blockParams, loc) {\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildPosition(line, column) {\n return {\n line,\n column\n };\n }\n function buildLoc() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1) {\n var _loc = args[0];\n if (_loc && typeof _loc === 'object') {\n return SourceSpan.forHbsLoc(SOURCE(), _loc);\n } else {\n return SourceSpan.forHbsLoc(SOURCE(), SYNTHETIC_LOCATION);\n }\n } else {\n var [startLine, startColumn, endLine, endColumn, _source] = args;\n var source = _source ? new Source('', _source) : SOURCE();\n return SourceSpan.forHbsLoc(source, {\n start: {\n line: startLine,\n column: startColumn\n },\n end: {\n line: endLine,\n column: endColumn\n }\n });\n }\n }\n var publicBuilder = {\n mustache: buildMustache,\n block: buildBlock,\n partial: buildPartial,\n comment: buildComment,\n mustacheComment: buildMustacheComment,\n element: buildElement,\n elementModifier: buildElementModifier,\n attr: buildAttr,\n text: buildText,\n sexpr: buildSexpr,\n concat: buildConcat,\n hash: buildHash,\n pair: buildPair,\n literal: buildLiteral,\n program: buildProgram,\n blockItself: buildBlockItself,\n template: buildTemplate,\n loc: buildLoc,\n pos: buildPosition,\n path: buildPath,\n fullPath: buildCleanPath,\n head: buildHeadFromString,\n at: buildAtName,\n var: buildVar,\n this: buildThis,\n blockName: buildNamedBlockName,\n string: literal('StringLiteral'),\n boolean: literal('BooleanLiteral'),\n number: literal('NumberLiteral'),\n undefined() {\n return buildLiteral('UndefinedLiteral', undefined);\n },\n null() {\n return buildLiteral('NullLiteral', null);\n }\n };\n _exports.builders = publicBuilder;\n function literal(type) {\n return function (value, loc) {\n return buildLiteral(type, value, loc);\n };\n }\n var api = /*#__PURE__*/Object.freeze({\n __proto__: null\n });\n\n /**\n * A free variable is resolved according to a resolution rule:\n *\n * 1. Strict resolution\n * 2. Namespaced resolution\n * 3. Fallback resolution\n */\n\n /**\n * Strict resolution is used:\n *\n * 1. in a strict mode template\n * 2. in an unambiguous invocation with dot paths\n */\n _exports.ASTv1 = _exports.AST = api;\n class StrictResolution {\n constructor() {\n this.isAngleBracket = false;\n }\n resolution() {\n return 31\n /* GetStrictFree */;\n }\n\n serialize() {\n return 'Strict';\n }\n }\n var STRICT_RESOLUTION = new StrictResolution();\n /**\n * A `LooseModeResolution` includes:\n *\n * - 0 or more namespaces to resolve the variable in\n * - optional fallback behavior\n *\n * In practice, there are a limited number of possible combinations of these degrees of freedom,\n * and they are captured by the `Ambiguity` union below.\n */\n\n class LooseModeResolution {\n constructor(ambiguity, isAngleBracket) {\n if (isAngleBracket === void 0) {\n isAngleBracket = false;\n }\n this.ambiguity = ambiguity;\n this.isAngleBracket = isAngleBracket;\n }\n /**\n * Namespaced resolution is used in an unambiguous syntax position:\n *\n * 1. `(sexp)` (namespace: `Helper`)\n * 2. `{{#block}}` (namespace: `Component`)\n * 3. `<a {{modifier}}>` (namespace: `Modifier`)\n * 4. `<Component />` (namespace: `Component`)\n *\n * @see {NamespacedAmbiguity}\n */\n\n static namespaced(namespace, isAngleBracket) {\n if (isAngleBracket === void 0) {\n isAngleBracket = false;\n }\n return new LooseModeResolution({\n namespaces: [namespace],\n fallback: false\n }, isAngleBracket);\n }\n /**\n * Fallback resolution is used when no namespaced resolutions are possible, but fallback\n * resolution is still allowed.\n *\n * ```hbs\n * {{x.y}}\n * ```\n *\n * @see {FallbackAmbiguity}\n */\n\n static fallback() {\n return new LooseModeResolution({\n namespaces: [],\n fallback: true\n });\n }\n /**\n * Append resolution is used when the variable should be resolved in both the `component` and\n * `helper` namespaces. Fallback resolution is optional.\n *\n * ```hbs\n * {{x}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces with fallback resolution.\n *\n * ```hbs\n * {{x y}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces without fallback\n * resolution.\n *\n * @see {ComponentOrHelperAmbiguity}\n */\n\n static append(_ref13) {\n var {\n invoke\n } = _ref13;\n return new LooseModeResolution({\n namespaces: [\"Component\"\n /* Component */, \"Helper\"\n /* Helper */],\n\n fallback: !invoke\n });\n }\n /**\n * Trusting append resolution is used when the variable should be resolved in both the `component` and\n * `helper` namespaces. Fallback resolution is optional.\n *\n * ```hbs\n * {{{x}}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces with fallback resolution.\n *\n * ```hbs\n * {{{x y}}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces without fallback\n * resolution.\n *\n * @see {HelperAmbiguity}\n */\n\n static trustingAppend(_ref14) {\n var {\n invoke\n } = _ref14;\n return new LooseModeResolution({\n namespaces: [\"Helper\"\n /* Helper */],\n\n fallback: !invoke\n });\n }\n /**\n * Attribute resolution is used when the variable should be resolved as a `helper` with fallback\n * resolution.\n *\n * ```hbs\n * <a href={{x}} />\n * <a href=\"{{x}}.html\" />\n * ```\n *\n * ^ resolved in the `helper` namespace with fallback\n *\n * @see {HelperAmbiguity}\n */\n\n static attr() {\n return new LooseModeResolution({\n namespaces: [\"Helper\"\n /* Helper */],\n\n fallback: true\n });\n }\n resolution() {\n if (this.ambiguity.namespaces.length === 0) {\n return 31\n /* GetStrictFree */;\n } else if (this.ambiguity.namespaces.length === 1) {\n if (this.ambiguity.fallback) {\n // simple namespaced resolution with fallback must be attr={{x}}\n return 36\n /* GetFreeAsHelperHeadOrThisFallback */;\n } else {\n // simple namespaced resolution without fallback\n switch (this.ambiguity.namespaces[0]) {\n case \"Helper\"\n /* Helper */:\n return 37\n /* GetFreeAsHelperHead */;\n\n case \"Modifier\"\n /* Modifier */:\n return 38\n /* GetFreeAsModifierHead */;\n\n case \"Component\"\n /* Component */:\n return 39\n /* GetFreeAsComponentHead */;\n }\n }\n } else if (this.ambiguity.fallback) {\n // component or helper + fallback ({{something}})\n return 34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */;\n } else {\n // component or helper without fallback ({{something something}})\n return 35\n /* GetFreeAsComponentOrHelperHead */;\n }\n }\n\n serialize() {\n if (this.ambiguity.namespaces.length === 0) {\n return 'Loose';\n } else if (this.ambiguity.namespaces.length === 1) {\n if (this.ambiguity.fallback) {\n // simple namespaced resolution with fallback must be attr={{x}}\n return ['ambiguous', \"Attr\"\n /* Attr */];\n } else {\n return ['ns', this.ambiguity.namespaces[0]];\n }\n } else if (this.ambiguity.fallback) {\n // component or helper + fallback ({{something}})\n return ['ambiguous', \"Append\"\n /* Append */];\n } else {\n // component or helper without fallback ({{something something}})\n return ['ambiguous', \"Invoke\"\n /* Invoke */];\n }\n }\n }\n\n var ARGUMENT_RESOLUTION = LooseModeResolution.fallback();\n function loadResolution(resolution) {\n if (typeof resolution === 'string') {\n switch (resolution) {\n case 'Loose':\n return LooseModeResolution.fallback();\n case 'Strict':\n return STRICT_RESOLUTION;\n }\n }\n switch (resolution[0]) {\n case 'ambiguous':\n switch (resolution[1]) {\n case \"Append\"\n /* Append */:\n return LooseModeResolution.append({\n invoke: false\n });\n case \"Attr\"\n /* Attr */:\n return LooseModeResolution.attr();\n case \"Invoke\"\n /* Invoke */:\n return LooseModeResolution.append({\n invoke: true\n });\n }\n case 'ns':\n return LooseModeResolution.namespaced(resolution[1]);\n }\n }\n function node(name) {\n if (name !== undefined) {\n var type = name;\n return {\n fields() {\n return class {\n constructor(fields) {\n this.type = type;\n (0, _util.assign)(this, fields);\n }\n };\n }\n };\n } else {\n return {\n fields() {\n return class {\n constructor(fields) {\n (0, _util.assign)(this, fields);\n }\n };\n }\n };\n }\n }\n\n /**\n * Corresponds to syntaxes with positional and named arguments:\n *\n * - SubExpression\n * - Invoking Append\n * - Invoking attributes\n * - InvokeBlock\n *\n * If `Args` is empty, the `SourceOffsets` for this node should be the collapsed position\n * immediately after the parent call node's `callee`.\n */\n\n class Args extends node().fields() {\n static empty(loc) {\n return new Args({\n loc,\n positional: PositionalArguments.empty(loc),\n named: NamedArguments.empty(loc)\n });\n }\n static named(named) {\n return new Args({\n loc: named.loc,\n positional: PositionalArguments.empty(named.loc.collapse('end')),\n named\n });\n }\n nth(offset) {\n return this.positional.nth(offset);\n }\n get(name) {\n return this.named.get(name);\n }\n isEmpty() {\n return this.positional.isEmpty() && this.named.isEmpty();\n }\n }\n /**\n * Corresponds to positional arguments.\n *\n * If `PositionalArguments` is empty, the `SourceOffsets` for this node should be the collapsed\n * position immediately after the parent call node's `callee`.\n */\n\n class PositionalArguments extends node().fields() {\n static empty(loc) {\n return new PositionalArguments({\n loc,\n exprs: []\n });\n }\n get size() {\n return this.exprs.length;\n }\n nth(offset) {\n return this.exprs[offset] || null;\n }\n isEmpty() {\n return this.exprs.length === 0;\n }\n }\n /**\n * Corresponds to named arguments.\n *\n * If `PositionalArguments` and `NamedArguments` are empty, the `SourceOffsets` for this node should\n * be the same as the `Args` node that contains this node.\n *\n * If `PositionalArguments` is not empty but `NamedArguments` is empty, the `SourceOffsets` for this\n * node should be the collapsed position immediately after the last positional argument.\n */\n\n class NamedArguments extends node().fields() {\n static empty(loc) {\n return new NamedArguments({\n loc,\n entries: []\n });\n }\n get size() {\n return this.entries.length;\n }\n get(name) {\n var entry = this.entries.filter(e => e.name.chars === name)[0];\n return entry ? entry.value : null;\n }\n isEmpty() {\n return this.entries.length === 0;\n }\n }\n /**\n * Corresponds to a single named argument.\n *\n * ```hbs\n * x=<expr>\n * ```\n */\n\n class NamedArgument {\n constructor(options) {\n this.loc = options.name.loc.extend(options.value.loc);\n this.name = options.name;\n this.value = options.value;\n }\n }\n\n /**\n * `HtmlAttr` nodes are valid HTML attributes, with or without a value.\n *\n * Exceptions:\n *\n * - `...attributes` is `SplatAttr`\n * - `@x=<value>` is `ComponentArg`\n */\n\n class HtmlAttr extends node('HtmlAttr').fields() {}\n class SplatAttr extends node('SplatAttr').fields() {}\n /**\n * Corresponds to an argument passed by a component (`@x=<value>`)\n */\n\n class ComponentArg extends node().fields() {\n /**\n * Convert the component argument into a named argument node\n */\n toNamedArgument() {\n return new NamedArgument({\n name: this.name,\n value: this.value\n });\n }\n }\n /**\n * An `ElementModifier` is just a normal call node in modifier position.\n */\n\n class ElementModifier extends node('ElementModifier').fields() {}\n class SpanList {\n constructor(span) {\n if (span === void 0) {\n span = [];\n }\n this._span = span;\n }\n static range(span, fallback) {\n if (fallback === void 0) {\n fallback = SourceSpan.NON_EXISTENT;\n }\n return new SpanList(span.map(loc)).getRangeOffset(fallback);\n }\n add(offset) {\n this._span.push(offset);\n }\n getRangeOffset(fallback) {\n if (this._span.length === 0) {\n return fallback;\n } else {\n var first = this._span[0];\n var last = this._span[this._span.length - 1];\n return first.extend(last);\n }\n }\n }\n _exports.SpanList = SpanList;\n function loc(span) {\n if (Array.isArray(span)) {\n var first = span[0];\n var last = span[span.length - 1];\n return loc(first).extend(loc(last));\n } else if (span instanceof SourceSpan) {\n return span;\n } else {\n return span.loc;\n }\n }\n function hasSpan(span) {\n if (Array.isArray(span) && span.length === 0) {\n return false;\n }\n return true;\n }\n function maybeLoc(location, fallback) {\n if (hasSpan(location)) {\n return loc(location);\n } else {\n return fallback;\n }\n }\n class GlimmerComment extends node('GlimmerComment').fields() {}\n class HtmlText extends node('HtmlText').fields() {}\n class HtmlComment extends node('HtmlComment').fields() {}\n class AppendContent extends node('AppendContent').fields() {\n get callee() {\n if (this.value.type === 'Call') {\n return this.value.callee;\n } else {\n return this.value;\n }\n }\n get args() {\n if (this.value.type === 'Call') {\n return this.value.args;\n } else {\n return Args.empty(this.value.loc.collapse('end'));\n }\n }\n }\n class InvokeBlock extends node('InvokeBlock').fields() {}\n /**\n * Corresponds to a component invocation. When the content of a component invocation contains no\n * named blocks, `blocks` contains a single named block named `\"default\"`. When a component\n * invocation is self-closing, `blocks` is empty.\n */\n\n class InvokeComponent extends node('InvokeComponent').fields() {\n get args() {\n var entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.callee.loc.collapse('end')),\n entries\n }));\n }\n }\n /**\n * Corresponds to a simple HTML element. The AST allows component arguments and modifiers to support\n * future extensions.\n */\n\n class SimpleElement extends node('SimpleElement').fields() {\n get args() {\n var entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.tag.loc.collapse('end')),\n entries\n }));\n }\n }\n\n /**\n * Corresponds to a Handlebars literal.\n *\n * @see {LiteralValue}\n */\n\n class LiteralExpression extends node('Literal').fields() {\n toSlice() {\n return new SourceSlice({\n loc: this.loc,\n chars: this.value\n });\n }\n }\n /**\n * Returns true if an input {@see ExpressionNode} is a literal.\n */\n\n function isLiteral(node, kind) {\n if (node.type === 'Literal') {\n if (kind === undefined) {\n return true;\n } else if (kind === 'null') {\n return node.value === null;\n } else {\n return typeof node.value === kind;\n }\n } else {\n return false;\n }\n }\n /**\n * Corresponds to a path in expression position.\n *\n * ```hbs\n * this\n * this.x\n * @x\n * @x.y\n * x\n * x.y\n * ```\n */\n\n class PathExpression extends node('Path').fields() {}\n /**\n * Corresponds to a parenthesized call expression.\n *\n * ```hbs\n * (x)\n * (x.y)\n * (x y)\n * (x.y z)\n * ```\n */\n\n class CallExpression extends node('Call').fields() {}\n /**\n * Corresponds to a possible deprecated helper call. Must be:\n *\n * 1. A free variable (not this.foo, not @foo, not local).\n * 2. Argument-less.\n * 3. In a component invocation's named argument position.\n * 4. Not parenthesized (not @bar={{(helper)}}).\n * 5. Not interpolated (not @bar=\"{{helper}}\").\n *\n * ```hbs\n * <Foo @bar={{helper}} />\n * ```\n */\n\n class DeprecatedCallExpression extends node('DeprecatedCall').fields() {}\n /**\n * Corresponds to an interpolation in attribute value position.\n *\n * ```hbs\n * <a href=\"{{url}}.html\"\n * ```\n */\n\n class InterpolateExpression extends node('Interpolate').fields() {}\n\n /**\n * Corresponds to `this` at the head of an expression.\n */\n\n class ThisReference extends node('This').fields() {}\n /**\n * Corresponds to `@<ident>` at the beginning of an expression.\n */\n\n class ArgReference extends node('Arg').fields() {}\n /**\n * Corresponds to `<ident>` at the beginning of an expression, when `<ident>` is in the current\n * block's scope.\n */\n\n class LocalVarReference extends node('Local').fields() {}\n /**\n * Corresponds to `<ident>` at the beginning of an expression, when `<ident>` is *not* in the\n * current block's scope.\n *\n * The `resolution: FreeVarResolution` field describes how to resolve the free variable.\n *\n * Note: In strict mode, it must always be a variable that is in a concrete JavaScript scope that\n * the template will be installed into.\n */\n\n class FreeVarReference extends node('Free').fields() {}\n\n /**\n * Corresponds to an entire template.\n */\n\n class Template extends node().fields() {}\n /**\n * Represents a block. In principle this could be merged with `NamedBlock`, because all cases\n * involving blocks have at least a notional name.\n */\n\n class Block extends node().fields() {}\n /**\n * Corresponds to a collection of named blocks.\n */\n\n class NamedBlocks extends node().fields() {\n get(name) {\n return this.blocks.filter(block => block.name.chars === name)[0] || null;\n }\n }\n /**\n * Corresponds to a single named block. This is used for anonymous named blocks (`default` and\n * `else`).\n */\n\n class NamedBlock extends node().fields() {\n get args() {\n var entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.name.loc.collapse('end')),\n entries\n }));\n }\n }\n var api$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n StrictResolution: StrictResolution,\n STRICT_RESOLUTION: STRICT_RESOLUTION,\n LooseModeResolution: LooseModeResolution,\n ARGUMENT_RESOLUTION: ARGUMENT_RESOLUTION,\n loadResolution: loadResolution,\n node: node,\n Args: Args,\n PositionalArguments: PositionalArguments,\n NamedArguments: NamedArguments,\n NamedArgument: NamedArgument,\n HtmlAttr: HtmlAttr,\n SplatAttr: SplatAttr,\n ComponentArg: ComponentArg,\n ElementModifier: ElementModifier,\n GlimmerComment: GlimmerComment,\n HtmlText: HtmlText,\n HtmlComment: HtmlComment,\n AppendContent: AppendContent,\n InvokeBlock: InvokeBlock,\n InvokeComponent: InvokeComponent,\n SimpleElement: SimpleElement,\n LiteralExpression: LiteralExpression,\n isLiteral: isLiteral,\n PathExpression: PathExpression,\n CallExpression: CallExpression,\n DeprecatedCallExpression: DeprecatedCallExpression,\n InterpolateExpression: InterpolateExpression,\n ThisReference: ThisReference,\n ArgReference: ArgReference,\n LocalVarReference: LocalVarReference,\n FreeVarReference: FreeVarReference,\n Template: Template,\n Block: Block,\n NamedBlocks: NamedBlocks,\n NamedBlock: NamedBlock\n });\n _exports.ASTv2 = api$1;\n var ATTR_VALUE_REGEX_TEST = /[\\xA0\"&]/;\n var ATTR_VALUE_REGEX_REPLACE = new RegExp(ATTR_VALUE_REGEX_TEST.source, 'g');\n var TEXT_REGEX_TEST = /[\\xA0&<>]/;\n var TEXT_REGEX_REPLACE = new RegExp(TEXT_REGEX_TEST.source, 'g');\n function attrValueReplacer(char) {\n switch (char.charCodeAt(0)) {\n case 160\n /* NBSP */:\n return '&nbsp;';\n case 34\n /* QUOT */:\n return '&quot;';\n case 38\n /* AMP */:\n return '&amp;';\n default:\n return char;\n }\n }\n function textReplacer(char) {\n switch (char.charCodeAt(0)) {\n case 160\n /* NBSP */:\n return '&nbsp;';\n case 38\n /* AMP */:\n return '&amp;';\n case 60\n /* LT */:\n return '&lt;';\n case 62\n /* GT */:\n return '&gt;';\n default:\n return char;\n }\n }\n function escapeAttrValue(attrValue) {\n if (ATTR_VALUE_REGEX_TEST.test(attrValue)) {\n return attrValue.replace(ATTR_VALUE_REGEX_REPLACE, attrValueReplacer);\n }\n return attrValue;\n }\n function escapeText(text) {\n if (TEXT_REGEX_TEST.test(text)) {\n return text.replace(TEXT_REGEX_REPLACE, textReplacer);\n }\n return text;\n }\n function sortByLoc(a, b) {\n // If either is invisible, don't try to order them\n if (a.loc.isInvisible || b.loc.isInvisible) {\n return 0;\n }\n if (a.loc.startPosition.line < b.loc.startPosition.line) {\n return -1;\n }\n if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column < b.loc.startPosition.column) {\n return -1;\n }\n if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column === b.loc.startPosition.column) {\n return 0;\n }\n return 1;\n }\n var voidMap = Object.create(null);\n var voidTagNames = 'area base br col command embed hr img input keygen link meta param source track wbr';\n voidTagNames.split(' ').forEach(tagName => {\n voidMap[tagName] = true;\n });\n var NON_WHITESPACE = /\\S/;\n /**\n * Examples when true:\n * - link\n * - liNK\n *\n * Examples when false:\n * - Link (component)\n */\n\n function isVoidTag(tag) {\n return voidMap[tag.toLowerCase()] && tag[0].toLowerCase() === tag[0];\n }\n class Printer {\n constructor(options) {\n this.buffer = '';\n this.options = options;\n }\n /*\n This is used by _all_ methods on this Printer class that add to `this.buffer`,\n it allows consumers of the printer to use alternate string representations for\n a given node.\n The primary use case for this are things like source -> source codemod utilities.\n For example, ember-template-recast attempts to always preserve the original string\n formatting in each AST node if no modifications are made to it.\n */\n\n handledByOverride(node, ensureLeadingWhitespace) {\n if (ensureLeadingWhitespace === void 0) {\n ensureLeadingWhitespace = false;\n }\n if (this.options.override !== undefined) {\n var result = this.options.override(node, this.options);\n if (typeof result === 'string') {\n if (ensureLeadingWhitespace && result !== '' && NON_WHITESPACE.test(result[0])) {\n result = \" \" + result;\n }\n this.buffer += result;\n return true;\n }\n }\n return false;\n }\n Node(node) {\n switch (node.type) {\n case 'MustacheStatement':\n case 'BlockStatement':\n case 'PartialStatement':\n case 'MustacheCommentStatement':\n case 'CommentStatement':\n case 'TextNode':\n case 'ElementNode':\n case 'AttrNode':\n case 'Block':\n case 'Template':\n return this.TopLevelStatement(node);\n case 'StringLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'UndefinedLiteral':\n case 'NullLiteral':\n case 'PathExpression':\n case 'SubExpression':\n return this.Expression(node);\n case 'Program':\n return this.Block(node);\n case 'ConcatStatement':\n // should have an AttrNode parent\n return this.ConcatStatement(node);\n case 'Hash':\n return this.Hash(node);\n case 'HashPair':\n return this.HashPair(node);\n case 'ElementModifierStatement':\n return this.ElementModifierStatement(node);\n }\n }\n Expression(expression) {\n switch (expression.type) {\n case 'StringLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'UndefinedLiteral':\n case 'NullLiteral':\n return this.Literal(expression);\n case 'PathExpression':\n return this.PathExpression(expression);\n case 'SubExpression':\n return this.SubExpression(expression);\n }\n }\n Literal(literal) {\n switch (literal.type) {\n case 'StringLiteral':\n return this.StringLiteral(literal);\n case 'BooleanLiteral':\n return this.BooleanLiteral(literal);\n case 'NumberLiteral':\n return this.NumberLiteral(literal);\n case 'UndefinedLiteral':\n return this.UndefinedLiteral(literal);\n case 'NullLiteral':\n return this.NullLiteral(literal);\n }\n }\n TopLevelStatement(statement) {\n switch (statement.type) {\n case 'MustacheStatement':\n return this.MustacheStatement(statement);\n case 'BlockStatement':\n return this.BlockStatement(statement);\n case 'PartialStatement':\n return this.PartialStatement(statement);\n case 'MustacheCommentStatement':\n return this.MustacheCommentStatement(statement);\n case 'CommentStatement':\n return this.CommentStatement(statement);\n case 'TextNode':\n return this.TextNode(statement);\n case 'ElementNode':\n return this.ElementNode(statement);\n case 'Block':\n case 'Template':\n return this.Block(statement);\n case 'AttrNode':\n // should have element\n return this.AttrNode(statement);\n }\n }\n Block(block) {\n /*\n When processing a template like:\n ```hbs\n {{#if whatever}}\n whatever\n {{else if somethingElse}}\n something else\n {{else}}\n fallback\n {{/if}}\n ```\n The AST still _effectively_ looks like:\n ```hbs\n {{#if whatever}}\n whatever\n {{else}}{{#if somethingElse}}\n something else\n {{else}}\n fallback\n {{/if}}{{/if}}\n ```\n The only way we can tell if that is the case is by checking for\n `block.chained`, but unfortunately when the actual statements are\n processed the `block.body[0]` node (which will always be a\n `BlockStatement`) has no clue that its ancestor `Block` node was\n chained.\n This \"forwards\" the `chained` setting so that we can check\n it later when processing the `BlockStatement`.\n */\n if (block.chained) {\n var firstChild = block.body[0];\n firstChild.chained = true;\n }\n if (this.handledByOverride(block)) {\n return;\n }\n this.TopLevelStatements(block.body);\n }\n TopLevelStatements(statements) {\n statements.forEach(statement => this.TopLevelStatement(statement));\n }\n ElementNode(el) {\n if (this.handledByOverride(el)) {\n return;\n }\n this.OpenElementNode(el);\n this.TopLevelStatements(el.children);\n this.CloseElementNode(el);\n }\n OpenElementNode(el) {\n this.buffer += \"<\" + el.tag;\n var parts = [...el.attributes, ...el.modifiers, ...el.comments].sort(sortByLoc);\n for (var part of parts) {\n this.buffer += ' ';\n switch (part.type) {\n case 'AttrNode':\n this.AttrNode(part);\n break;\n case 'ElementModifierStatement':\n this.ElementModifierStatement(part);\n break;\n case 'MustacheCommentStatement':\n this.MustacheCommentStatement(part);\n break;\n }\n }\n if (el.blockParams.length) {\n this.BlockParams(el.blockParams);\n }\n if (el.selfClosing) {\n this.buffer += ' /';\n }\n this.buffer += '>';\n }\n CloseElementNode(el) {\n if (el.selfClosing || isVoidTag(el.tag)) {\n return;\n }\n this.buffer += \"</\" + el.tag + \">\";\n }\n AttrNode(attr) {\n if (this.handledByOverride(attr)) {\n return;\n }\n var {\n name,\n value\n } = attr;\n this.buffer += name;\n if (value.type !== 'TextNode' || value.chars.length > 0) {\n this.buffer += '=';\n this.AttrNodeValue(value);\n }\n }\n AttrNodeValue(value) {\n if (value.type === 'TextNode') {\n this.buffer += '\"';\n this.TextNode(value, true);\n this.buffer += '\"';\n } else {\n this.Node(value);\n }\n }\n TextNode(text, isAttr) {\n if (this.handledByOverride(text)) {\n return;\n }\n if (this.options.entityEncoding === 'raw') {\n this.buffer += text.chars;\n } else if (isAttr) {\n this.buffer += escapeAttrValue(text.chars);\n } else {\n this.buffer += escapeText(text.chars);\n }\n }\n MustacheStatement(mustache) {\n if (this.handledByOverride(mustache)) {\n return;\n }\n this.buffer += mustache.escaped ? '{{' : '{{{';\n if (mustache.strip.open) {\n this.buffer += '~';\n }\n this.Expression(mustache.path);\n this.Params(mustache.params);\n this.Hash(mustache.hash);\n if (mustache.strip.close) {\n this.buffer += '~';\n }\n this.buffer += mustache.escaped ? '}}' : '}}}';\n }\n BlockStatement(block) {\n if (this.handledByOverride(block)) {\n return;\n }\n if (block.chained) {\n this.buffer += block.inverseStrip.open ? '{{~' : '{{';\n this.buffer += 'else ';\n } else {\n this.buffer += block.openStrip.open ? '{{~#' : '{{#';\n }\n this.Expression(block.path);\n this.Params(block.params);\n this.Hash(block.hash);\n if (block.program.blockParams.length) {\n this.BlockParams(block.program.blockParams);\n }\n if (block.chained) {\n this.buffer += block.inverseStrip.close ? '~}}' : '}}';\n } else {\n this.buffer += block.openStrip.close ? '~}}' : '}}';\n }\n this.Block(block.program);\n if (block.inverse) {\n if (!block.inverse.chained) {\n this.buffer += block.inverseStrip.open ? '{{~' : '{{';\n this.buffer += 'else';\n this.buffer += block.inverseStrip.close ? '~}}' : '}}';\n }\n this.Block(block.inverse);\n }\n if (!block.chained) {\n this.buffer += block.closeStrip.open ? '{{~/' : '{{/';\n this.Expression(block.path);\n this.buffer += block.closeStrip.close ? '~}}' : '}}';\n }\n }\n BlockParams(blockParams) {\n this.buffer += \" as |\" + blockParams.join(' ') + \"|\";\n }\n PartialStatement(partial) {\n if (this.handledByOverride(partial)) {\n return;\n }\n this.buffer += '{{>';\n this.Expression(partial.name);\n this.Params(partial.params);\n this.Hash(partial.hash);\n this.buffer += '}}';\n }\n ConcatStatement(concat) {\n if (this.handledByOverride(concat)) {\n return;\n }\n this.buffer += '\"';\n concat.parts.forEach(part => {\n if (part.type === 'TextNode') {\n this.TextNode(part, true);\n } else {\n this.Node(part);\n }\n });\n this.buffer += '\"';\n }\n MustacheCommentStatement(comment) {\n if (this.handledByOverride(comment)) {\n return;\n }\n this.buffer += \"{{!--\" + comment.value + \"--}}\";\n }\n ElementModifierStatement(mod) {\n if (this.handledByOverride(mod)) {\n return;\n }\n this.buffer += '{{';\n this.Expression(mod.path);\n this.Params(mod.params);\n this.Hash(mod.hash);\n this.buffer += '}}';\n }\n CommentStatement(comment) {\n if (this.handledByOverride(comment)) {\n return;\n }\n this.buffer += \"<!--\" + comment.value + \"-->\";\n }\n PathExpression(path) {\n if (this.handledByOverride(path)) {\n return;\n }\n this.buffer += path.original;\n }\n SubExpression(sexp) {\n if (this.handledByOverride(sexp)) {\n return;\n }\n this.buffer += '(';\n this.Expression(sexp.path);\n this.Params(sexp.params);\n this.Hash(sexp.hash);\n this.buffer += ')';\n }\n Params(params) {\n // TODO: implement a top level Params AST node (just like the Hash object)\n // so that this can also be overridden\n if (params.length) {\n params.forEach(param => {\n this.buffer += ' ';\n this.Expression(param);\n });\n }\n }\n Hash(hash) {\n if (this.handledByOverride(hash, true)) {\n return;\n }\n hash.pairs.forEach(pair => {\n this.buffer += ' ';\n this.HashPair(pair);\n });\n }\n HashPair(pair) {\n if (this.handledByOverride(pair)) {\n return;\n }\n this.buffer += pair.key;\n this.buffer += '=';\n this.Node(pair.value);\n }\n StringLiteral(str) {\n if (this.handledByOverride(str)) {\n return;\n }\n this.buffer += JSON.stringify(str.value);\n }\n BooleanLiteral(bool) {\n if (this.handledByOverride(bool)) {\n return;\n }\n this.buffer += bool.value;\n }\n NumberLiteral(number) {\n if (this.handledByOverride(number)) {\n return;\n }\n this.buffer += number.value;\n }\n UndefinedLiteral(node) {\n if (this.handledByOverride(node)) {\n return;\n }\n this.buffer += 'undefined';\n }\n NullLiteral(node) {\n if (this.handledByOverride(node)) {\n return;\n }\n this.buffer += 'null';\n }\n print(node) {\n var {\n options\n } = this;\n if (options.override) {\n var result = options.override(node, options);\n if (result !== undefined) {\n return result;\n }\n }\n this.buffer = '';\n this.Node(node);\n return this.buffer;\n }\n }\n function build(ast, options) {\n if (options === void 0) {\n options = {\n entityEncoding: 'transformed'\n };\n }\n if (!ast) {\n return '';\n }\n var printer = new Printer(options);\n return printer.print(ast);\n }\n function generateSyntaxError(message, location) {\n var {\n module,\n loc\n } = location;\n var {\n line,\n column\n } = loc.start;\n var code = location.asString();\n var quotedCode = code ? \"\\n\\n|\\n| \" + code.split('\\n').join('\\n| ') + \"\\n|\\n\\n\" : '';\n var error = new Error(message + \": \" + quotedCode + \"(error occurred in '\" + module + \"' @ line \" + line + \" : column \" + column + \")\");\n error.name = 'SyntaxError';\n error.location = location;\n error.code = code;\n return error;\n }\n\n // ParentNode and ChildKey types are derived from VisitorKeysMap\n\n var visitorKeys = {\n Program: (0, _util.tuple)('body'),\n Template: (0, _util.tuple)('body'),\n Block: (0, _util.tuple)('body'),\n MustacheStatement: (0, _util.tuple)('path', 'params', 'hash'),\n BlockStatement: (0, _util.tuple)('path', 'params', 'hash', 'program', 'inverse'),\n ElementModifierStatement: (0, _util.tuple)('path', 'params', 'hash'),\n PartialStatement: (0, _util.tuple)('name', 'params', 'hash'),\n CommentStatement: (0, _util.tuple)(),\n MustacheCommentStatement: (0, _util.tuple)(),\n ElementNode: (0, _util.tuple)('attributes', 'modifiers', 'children', 'comments'),\n AttrNode: (0, _util.tuple)('value'),\n TextNode: (0, _util.tuple)(),\n ConcatStatement: (0, _util.tuple)('parts'),\n SubExpression: (0, _util.tuple)('path', 'params', 'hash'),\n PathExpression: (0, _util.tuple)(),\n PathHead: (0, _util.tuple)(),\n StringLiteral: (0, _util.tuple)(),\n BooleanLiteral: (0, _util.tuple)(),\n NumberLiteral: (0, _util.tuple)(),\n NullLiteral: (0, _util.tuple)(),\n UndefinedLiteral: (0, _util.tuple)(),\n Hash: (0, _util.tuple)('pairs'),\n HashPair: (0, _util.tuple)('value'),\n // v2 new nodes\n NamedBlock: (0, _util.tuple)('attributes', 'modifiers', 'children', 'comments'),\n SimpleElement: (0, _util.tuple)('attributes', 'modifiers', 'children', 'comments'),\n Component: (0, _util.tuple)('head', 'attributes', 'modifiers', 'children', 'comments')\n };\n var TraversalError = function () {\n TraversalError.prototype = Object.create(Error.prototype);\n TraversalError.prototype.constructor = TraversalError;\n function TraversalError(message, node, parent, key) {\n var error = Error.call(this, message);\n this.key = key;\n this.message = message;\n this.node = node;\n this.parent = parent;\n this.stack = error.stack;\n }\n return TraversalError;\n }();\n function cannotRemoveNode(node, parent, key) {\n return new TraversalError('Cannot remove a node unless it is part of an array', node, parent, key);\n }\n function cannotReplaceNode(node, parent, key) {\n return new TraversalError('Cannot replace a node with multiple nodes unless it is part of an array', node, parent, key);\n }\n function cannotReplaceOrRemoveInKeyHandlerYet(node, key) {\n return new TraversalError('Replacing and removing in key handlers is not yet supported.', node, null, key);\n }\n class WalkerPath {\n constructor(node, parent, parentKey) {\n if (parent === void 0) {\n parent = null;\n }\n if (parentKey === void 0) {\n parentKey = null;\n }\n this.node = node;\n this.parent = parent;\n this.parentKey = parentKey;\n }\n get parentNode() {\n return this.parent ? this.parent.node : null;\n }\n parents() {\n return {\n [Symbol.iterator]: () => {\n return new PathParentsIterator(this);\n }\n };\n }\n }\n _exports.WalkerPath = WalkerPath;\n class PathParentsIterator {\n constructor(path) {\n this.path = path;\n }\n next() {\n if (this.path.parent) {\n this.path = this.path.parent;\n return {\n done: false,\n value: this.path\n };\n } else {\n return {\n done: true,\n value: null\n };\n }\n }\n }\n function getEnterFunction(handler) {\n if (typeof handler === 'function') {\n return handler;\n } else {\n return handler.enter;\n }\n }\n function getExitFunction(handler) {\n if (typeof handler === 'function') {\n return undefined;\n } else {\n return handler.exit;\n }\n }\n function getKeyHandler(handler, key) {\n var keyVisitor = typeof handler !== 'function' ? handler.keys : undefined;\n if (keyVisitor === undefined) return;\n var keyHandler = keyVisitor[key];\n if (keyHandler !== undefined) {\n return keyHandler;\n }\n return keyVisitor.All;\n }\n function getNodeHandler(visitor, nodeType) {\n if (nodeType === 'Template' || nodeType === 'Block') {\n if (visitor.Program) {\n return visitor.Program;\n }\n }\n var handler = visitor[nodeType];\n if (handler !== undefined) {\n return handler;\n }\n return visitor.All;\n }\n function visitNode(visitor, path) {\n var {\n node,\n parent,\n parentKey\n } = path;\n var handler = getNodeHandler(visitor, node.type);\n var enter;\n var exit;\n if (handler !== undefined) {\n enter = getEnterFunction(handler);\n exit = getExitFunction(handler);\n }\n var result;\n if (enter !== undefined) {\n result = enter(node, path);\n }\n if (result !== undefined && result !== null) {\n if (JSON.stringify(node) === JSON.stringify(result)) {\n result = undefined;\n } else if (Array.isArray(result)) {\n visitArray(visitor, result, parent, parentKey);\n return result;\n } else {\n var _path = new WalkerPath(result, parent, parentKey);\n return visitNode(visitor, _path) || result;\n }\n }\n if (result === undefined) {\n var keys = visitorKeys[node.type];\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]; // we know if it has child keys we can widen to a ParentNode\n\n visitKey(visitor, handler, path, key);\n }\n if (exit !== undefined) {\n result = exit(node, path);\n }\n }\n return result;\n }\n function get(node, key) {\n return node[key];\n }\n function set(node, key, value) {\n node[key] = value;\n }\n function visitKey(visitor, handler, path, key) {\n var {\n node\n } = path;\n var value = get(node, key);\n if (!value) {\n return;\n }\n var keyEnter;\n var keyExit;\n if (handler !== undefined) {\n var keyHandler = getKeyHandler(handler, key);\n if (keyHandler !== undefined) {\n keyEnter = getEnterFunction(keyHandler);\n keyExit = getExitFunction(keyHandler);\n }\n }\n if (keyEnter !== undefined) {\n if (keyEnter(node, key) !== undefined) {\n throw cannotReplaceOrRemoveInKeyHandlerYet(node, key);\n }\n }\n if (Array.isArray(value)) {\n visitArray(visitor, value, path, key);\n } else {\n var keyPath = new WalkerPath(value, path, key);\n var result = visitNode(visitor, keyPath);\n if (result !== undefined) {\n // TODO: dynamically check the results by having a table of\n // expected node types in value space, not just type space\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n assignKey(node, key, value, result);\n }\n }\n if (keyExit !== undefined) {\n if (keyExit(node, key) !== undefined) {\n throw cannotReplaceOrRemoveInKeyHandlerYet(node, key);\n }\n }\n }\n function visitArray(visitor, array, parent, parentKey) {\n for (var i = 0; i < array.length; i++) {\n var _node = array[i];\n var path = new WalkerPath(_node, parent, parentKey);\n var result = visitNode(visitor, path);\n if (result !== undefined) {\n i += spliceArray(array, i, result) - 1;\n }\n }\n }\n function assignKey(node, key, value, result) {\n if (result === null) {\n throw cannotRemoveNode(value, node, key);\n } else if (Array.isArray(result)) {\n if (result.length === 1) {\n set(node, key, result[0]);\n } else {\n if (result.length === 0) {\n throw cannotRemoveNode(value, node, key);\n } else {\n throw cannotReplaceNode(value, node, key);\n }\n }\n } else {\n set(node, key, result);\n }\n }\n function spliceArray(array, index, result) {\n if (result === null) {\n array.splice(index, 1);\n return 0;\n } else if (Array.isArray(result)) {\n array.splice(index, 1, ...result);\n return result.length;\n } else {\n array.splice(index, 1, result);\n return 1;\n }\n }\n function traverse(node, visitor) {\n var path = new WalkerPath(node);\n visitNode(visitor, path);\n }\n class Walker {\n constructor(order) {\n this.order = order;\n this.stack = [];\n }\n visit(node, callback) {\n if (!node) {\n return;\n }\n this.stack.push(node);\n if (this.order === 'post') {\n this.children(node, callback);\n callback(node, this);\n } else {\n callback(node, this);\n this.children(node, callback);\n }\n this.stack.pop();\n }\n children(node, callback) {\n switch (node.type) {\n case 'Block':\n case 'Template':\n return visitors.Program(this, node, callback);\n case 'ElementNode':\n return visitors.ElementNode(this, node, callback);\n case 'BlockStatement':\n return visitors.BlockStatement(this, node, callback);\n default:\n return;\n }\n }\n }\n _exports.Walker = _exports.Path = Walker;\n var visitors = {\n Program(walker, node, callback) {\n for (var i = 0; i < node.body.length; i++) {\n walker.visit(node.body[i], callback);\n }\n },\n Template(walker, node, callback) {\n for (var i = 0; i < node.body.length; i++) {\n walker.visit(node.body[i], callback);\n }\n },\n Block(walker, node, callback) {\n for (var i = 0; i < node.body.length; i++) {\n walker.visit(node.body[i], callback);\n }\n },\n ElementNode(walker, node, callback) {\n for (var i = 0; i < node.children.length; i++) {\n walker.visit(node.children[i], callback);\n }\n },\n BlockStatement(walker, node, callback) {\n walker.visit(node.program, callback);\n walker.visit(node.inverse || null, callback);\n }\n };\n\n // Based on the ID validation regex in Handlebars.\n\n var ID_INVERSE_PATTERN = /[!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]/; // Checks the element's attributes to see if it uses block params.\n // If it does, registers the block params with the program and\n // removes the corresponding attributes from the element.\n\n function parseElementBlockParams(element) {\n var params = parseBlockParams(element);\n if (params) element.blockParams = params;\n }\n function parseBlockParams(element) {\n var l = element.attributes.length;\n var attrNames = [];\n for (var i = 0; i < l; i++) {\n attrNames.push(element.attributes[i].name);\n }\n var asIndex = attrNames.indexOf('as');\n if (asIndex === -1 && attrNames.length > 0 && attrNames[attrNames.length - 1].charAt(0) === '|') {\n throw generateSyntaxError('Block parameters must be preceded by the `as` keyword, detected block parameters without `as`', element.loc);\n }\n if (asIndex !== -1 && l > asIndex && attrNames[asIndex + 1].charAt(0) === '|') {\n // Some basic validation, since we're doing the parsing ourselves\n var paramsString = attrNames.slice(asIndex).join(' ');\n if (paramsString.charAt(paramsString.length - 1) !== '|' || paramsString.match(/\\|/g).length !== 2) {\n throw generateSyntaxError(\"Invalid block parameters syntax, '\" + paramsString + \"'\", element.loc);\n }\n var params = [];\n for (var _i = asIndex + 1; _i < l; _i++) {\n var param = attrNames[_i].replace(/\\|/g, '');\n if (param !== '') {\n if (ID_INVERSE_PATTERN.test(param)) {\n throw generateSyntaxError(\"Invalid identifier for block parameters, '\" + param + \"'\", element.loc);\n }\n params.push(param);\n }\n }\n if (params.length === 0) {\n throw generateSyntaxError('Cannot use zero block parameters', element.loc);\n }\n element.attributes = element.attributes.slice(0, asIndex);\n return params;\n }\n return null;\n }\n function childrenFor(node) {\n switch (node.type) {\n case 'Block':\n case 'Template':\n return node.body;\n case 'ElementNode':\n return node.children;\n }\n }\n function appendChild(parent, node) {\n childrenFor(parent).push(node);\n }\n function isHBSLiteral(path) {\n return path.type === 'StringLiteral' || path.type === 'BooleanLiteral' || path.type === 'NumberLiteral' || path.type === 'NullLiteral' || path.type === 'UndefinedLiteral';\n }\n function printLiteral(literal) {\n if (literal.type === 'UndefinedLiteral') {\n return 'undefined';\n } else {\n return JSON.stringify(literal.value);\n }\n }\n function isUpperCase(tag) {\n return tag[0] === tag[0].toUpperCase() && tag[0] !== tag[0].toLowerCase();\n }\n function isLowerCase(tag) {\n return tag[0] === tag[0].toLowerCase() && tag[0] !== tag[0].toUpperCase();\n }\n var DEFAULT_STRIP = {\n close: false,\n open: false\n };\n /**\n * The Parser Builder differentiates from the public builder API by:\n *\n * 1. Offering fewer different ways to instantiate nodes\n * 2. Mandating source locations\n */\n\n class Builders {\n pos(line, column) {\n return {\n line,\n column\n };\n }\n blockItself(_ref15) {\n var {\n body,\n blockParams,\n chained = false,\n loc\n } = _ref15;\n return {\n type: 'Block',\n body: body || [],\n blockParams: blockParams || [],\n chained,\n loc\n };\n }\n template(_ref16) {\n var {\n body,\n blockParams,\n loc\n } = _ref16;\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc\n };\n }\n mustache(_ref17) {\n var {\n path,\n params,\n hash,\n trusting,\n loc,\n strip = DEFAULT_STRIP\n } = _ref17;\n return {\n type: 'MustacheStatement',\n path,\n params,\n hash,\n escaped: !trusting,\n trusting,\n loc,\n strip: strip || {\n open: false,\n close: false\n }\n };\n }\n block(_ref18) {\n var {\n path,\n params,\n hash,\n defaultBlock,\n elseBlock = null,\n loc,\n openStrip = DEFAULT_STRIP,\n inverseStrip = DEFAULT_STRIP,\n closeStrip = DEFAULT_STRIP\n } = _ref18;\n return {\n type: 'BlockStatement',\n path: path,\n params,\n hash,\n program: defaultBlock,\n inverse: elseBlock,\n loc: loc,\n openStrip: openStrip,\n inverseStrip: inverseStrip,\n closeStrip: closeStrip\n };\n }\n comment(value, loc) {\n return {\n type: 'CommentStatement',\n value: value,\n loc\n };\n }\n mustacheComment(value, loc) {\n return {\n type: 'MustacheCommentStatement',\n value: value,\n loc\n };\n }\n concat(parts, loc) {\n return {\n type: 'ConcatStatement',\n parts,\n loc\n };\n }\n element(_ref19) {\n var {\n tag,\n selfClosing,\n attrs,\n blockParams,\n modifiers,\n comments,\n children,\n loc\n } = _ref19;\n return {\n type: 'ElementNode',\n tag,\n selfClosing: selfClosing,\n attributes: attrs || [],\n blockParams: blockParams || [],\n modifiers: modifiers || [],\n comments: comments || [],\n children: children || [],\n loc\n };\n }\n elementModifier(_ref20) {\n var {\n path,\n params,\n hash,\n loc\n } = _ref20;\n return {\n type: 'ElementModifierStatement',\n path,\n params,\n hash,\n loc\n };\n }\n attr(_ref21) {\n var {\n name,\n value,\n loc\n } = _ref21;\n return {\n type: 'AttrNode',\n name: name,\n value: value,\n loc\n };\n }\n text(_ref22) {\n var {\n chars,\n loc\n } = _ref22;\n return {\n type: 'TextNode',\n chars,\n loc\n };\n }\n sexpr(_ref23) {\n var {\n path,\n params,\n hash,\n loc\n } = _ref23;\n return {\n type: 'SubExpression',\n path,\n params,\n hash,\n loc\n };\n }\n path(_ref24) {\n var {\n head,\n tail,\n loc\n } = _ref24;\n var {\n original: originalHead\n } = headToString$1(head);\n var original = [...originalHead, ...tail].join('.');\n return new PathExpressionImplV1(original, head, tail, loc);\n }\n head(head, loc) {\n if (head[0] === '@') {\n return this.atName(head, loc);\n } else if (head === 'this') {\n return this.this(loc);\n } else {\n return this.var(head, loc);\n }\n }\n this(loc) {\n return {\n type: 'ThisHead',\n loc\n };\n }\n atName(name, loc) {\n return {\n type: 'AtHead',\n name,\n loc\n };\n }\n var(name, loc) {\n return {\n type: 'VarHead',\n name,\n loc\n };\n }\n hash(pairs, loc) {\n return {\n type: 'Hash',\n pairs: pairs || [],\n loc\n };\n }\n pair(_ref25) {\n var {\n key,\n value,\n loc\n } = _ref25;\n return {\n type: 'HashPair',\n key: key,\n value,\n loc\n };\n }\n literal(_ref26) {\n var {\n type,\n value,\n loc\n } = _ref26;\n return {\n type,\n value,\n original: value,\n loc\n };\n }\n undefined() {\n return this.literal({\n type: 'UndefinedLiteral',\n value: undefined\n });\n }\n null() {\n return this.literal({\n type: 'NullLiteral',\n value: null\n });\n }\n string(value, loc) {\n return this.literal({\n type: 'StringLiteral',\n value,\n loc\n });\n }\n boolean(value, loc) {\n return this.literal({\n type: 'BooleanLiteral',\n value,\n loc\n });\n }\n number(value, loc) {\n return this.literal({\n type: 'NumberLiteral',\n value,\n loc\n });\n }\n } // Expressions\n\n function headToString$1(head) {\n switch (head.type) {\n case 'AtHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n case 'ThisHead':\n return {\n original: \"this\",\n parts: []\n };\n case 'VarHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n }\n }\n var b = new Builders();\n class Parser {\n constructor(source, entityParser, mode) {\n if (entityParser === void 0) {\n entityParser = new _simpleHtmlTokenizer.EntityParser(_simpleHtmlTokenizer.HTML5NamedCharRefs);\n }\n if (mode === void 0) {\n mode = 'precompile';\n }\n this.elementStack = [];\n this.currentAttribute = null;\n this.currentNode = null;\n this.source = source;\n this.lines = source.source.split(/(?:\\r\\n?|\\n)/g);\n this.tokenizer = new _simpleHtmlTokenizer.EventedTokenizer(this, entityParser, mode);\n }\n offset() {\n var {\n line,\n column\n } = this.tokenizer;\n return this.source.offsetFor(line, column);\n }\n pos(_ref27) {\n var {\n line,\n column\n } = _ref27;\n return this.source.offsetFor(line, column);\n }\n finish(node) {\n return (0, _util.assign)({}, node, {\n loc: node.loc.until(this.offset())\n }); // node.loc = node.loc.withEnd(end);\n }\n\n get currentAttr() {\n return this.currentAttribute;\n }\n get currentTag() {\n var node = this.currentNode;\n return node;\n }\n get currentStartTag() {\n var node = this.currentNode;\n return node;\n }\n get currentEndTag() {\n var node = this.currentNode;\n return node;\n }\n get currentComment() {\n var node = this.currentNode;\n return node;\n }\n get currentData() {\n var node = this.currentNode;\n return node;\n }\n acceptTemplate(node) {\n return this[node.type](node);\n }\n acceptNode(node) {\n return this[node.type](node);\n }\n currentElement() {\n return this.elementStack[this.elementStack.length - 1];\n }\n sourceForNode(node, endNode) {\n var firstLine = node.loc.start.line - 1;\n var currentLine = firstLine - 1;\n var firstColumn = node.loc.start.column;\n var string = [];\n var line;\n var lastLine;\n var lastColumn;\n if (endNode) {\n lastLine = endNode.loc.end.line - 1;\n lastColumn = endNode.loc.end.column;\n } else {\n lastLine = node.loc.end.line - 1;\n lastColumn = node.loc.end.column;\n }\n while (currentLine < lastLine) {\n currentLine++;\n line = this.lines[currentLine];\n if (currentLine === firstLine) {\n if (firstLine === lastLine) {\n string.push(line.slice(firstColumn, lastColumn));\n } else {\n string.push(line.slice(firstColumn));\n }\n } else if (currentLine === lastLine) {\n string.push(line.slice(0, lastColumn));\n } else {\n string.push(line);\n }\n }\n return string.join('\\n');\n }\n }\n class HandlebarsNodeVisitors extends Parser {\n get isTopLevel() {\n return this.elementStack.length === 0;\n }\n Program(program) {\n var body = [];\n var node;\n if (this.isTopLevel) {\n node = b.template({\n body,\n blockParams: program.blockParams,\n loc: this.source.spanFor(program.loc)\n });\n } else {\n node = b.blockItself({\n body,\n blockParams: program.blockParams,\n chained: program.chained,\n loc: this.source.spanFor(program.loc)\n });\n }\n var i,\n l = program.body.length;\n this.elementStack.push(node);\n if (l === 0) {\n return this.elementStack.pop();\n }\n for (i = 0; i < l; i++) {\n this.acceptNode(program.body[i]);\n } // Ensure that that the element stack is balanced properly.\n\n var poppedNode = this.elementStack.pop();\n if (poppedNode !== node) {\n var elementNode = poppedNode;\n throw generateSyntaxError(\"Unclosed element `\" + elementNode.tag + \"`\", elementNode.loc);\n }\n return node;\n }\n BlockStatement(block) {\n if (this.tokenizer.state === \"comment\"\n /* comment */) {\n this.appendToCommentData(this.sourceForNode(block));\n return;\n }\n if (this.tokenizer.state !== \"data\"\n /* data */ && this.tokenizer.state !== \"beforeData\"\n /* beforeData */) {\n throw generateSyntaxError('A block may only be used inside an HTML element or another block.', this.source.spanFor(block.loc));\n }\n var {\n path,\n params,\n hash\n } = acceptCallNodes(this, block); // These are bugs in Handlebars upstream\n\n if (!block.program.loc) {\n block.program.loc = NON_EXISTENT_LOCATION;\n }\n if (block.inverse && !block.inverse.loc) {\n block.inverse.loc = NON_EXISTENT_LOCATION;\n }\n var program = this.Program(block.program);\n var inverse = block.inverse ? this.Program(block.inverse) : null;\n var node = b.block({\n path,\n params,\n hash,\n defaultBlock: program,\n elseBlock: inverse,\n loc: this.source.spanFor(block.loc),\n openStrip: block.openStrip,\n inverseStrip: block.inverseStrip,\n closeStrip: block.closeStrip\n });\n var parentProgram = this.currentElement();\n appendChild(parentProgram, node);\n }\n MustacheStatement(rawMustache) {\n var {\n tokenizer\n } = this;\n if (tokenizer.state === 'comment') {\n this.appendToCommentData(this.sourceForNode(rawMustache));\n return;\n }\n var mustache;\n var {\n escaped,\n loc,\n strip\n } = rawMustache;\n if (isHBSLiteral(rawMustache.path)) {\n mustache = b.mustache({\n path: this.acceptNode(rawMustache.path),\n params: [],\n hash: b.hash([], this.source.spanFor(rawMustache.path.loc).collapse('end')),\n trusting: !escaped,\n loc: this.source.spanFor(loc),\n strip\n });\n } else {\n var {\n path,\n params,\n hash\n } = acceptCallNodes(this, rawMustache);\n mustache = b.mustache({\n path,\n params,\n hash,\n trusting: !escaped,\n loc: this.source.spanFor(loc),\n strip\n });\n }\n switch (tokenizer.state) {\n // Tag helpers\n case \"tagOpen\"\n /* tagOpen */:\n\n case \"tagName\"\n /* tagName */:\n throw generateSyntaxError(\"Cannot use mustaches in an elements tagname\", mustache.loc);\n case \"beforeAttributeName\"\n /* beforeAttributeName */:\n addElementModifier(this.currentStartTag, mustache);\n break;\n case \"attributeName\"\n /* attributeName */:\n\n case \"afterAttributeName\"\n /* afterAttributeName */:\n this.beginAttributeValue(false);\n this.finishAttributeValue();\n addElementModifier(this.currentStartTag, mustache);\n tokenizer.transitionTo(\"beforeAttributeName\"\n /* beforeAttributeName */);\n\n break;\n case \"afterAttributeValueQuoted\"\n /* afterAttributeValueQuoted */:\n addElementModifier(this.currentStartTag, mustache);\n tokenizer.transitionTo(\"beforeAttributeName\"\n /* beforeAttributeName */);\n\n break;\n // Attribute values\n\n case \"beforeAttributeValue\"\n /* beforeAttributeValue */:\n this.beginAttributeValue(false);\n this.appendDynamicAttributeValuePart(mustache);\n tokenizer.transitionTo(\"attributeValueUnquoted\"\n /* attributeValueUnquoted */);\n\n break;\n case \"attributeValueDoubleQuoted\"\n /* attributeValueDoubleQuoted */:\n\n case \"attributeValueSingleQuoted\"\n /* attributeValueSingleQuoted */:\n\n case \"attributeValueUnquoted\"\n /* attributeValueUnquoted */:\n this.appendDynamicAttributeValuePart(mustache);\n break;\n // TODO: Only append child when the tokenizer state makes\n // sense to do so, otherwise throw an error.\n\n default:\n appendChild(this.currentElement(), mustache);\n }\n return mustache;\n }\n appendDynamicAttributeValuePart(part) {\n this.finalizeTextPart();\n var attr = this.currentAttr;\n attr.isDynamic = true;\n attr.parts.push(part);\n }\n finalizeTextPart() {\n var attr = this.currentAttr;\n var text = attr.currentPart;\n if (text !== null) {\n this.currentAttr.parts.push(text);\n this.startTextPart();\n }\n }\n startTextPart() {\n this.currentAttr.currentPart = null;\n }\n ContentStatement(content) {\n updateTokenizerLocation(this.tokenizer, content);\n this.tokenizer.tokenizePart(content.value);\n this.tokenizer.flushData();\n }\n CommentStatement(rawComment) {\n var {\n tokenizer\n } = this;\n if (tokenizer.state === \"comment\"\n /* comment */) {\n this.appendToCommentData(this.sourceForNode(rawComment));\n return null;\n }\n var {\n value,\n loc\n } = rawComment;\n var comment = b.mustacheComment(value, this.source.spanFor(loc));\n switch (tokenizer.state) {\n case \"beforeAttributeName\"\n /* beforeAttributeName */:\n\n case \"afterAttributeName\"\n /* afterAttributeName */:\n this.currentStartTag.comments.push(comment);\n break;\n case \"beforeData\"\n /* beforeData */:\n\n case \"data\"\n /* data */:\n appendChild(this.currentElement(), comment);\n break;\n default:\n throw generateSyntaxError(\"Using a Handlebars comment when in the `\" + tokenizer['state'] + \"` state is not supported\", this.source.spanFor(rawComment.loc));\n }\n return comment;\n }\n PartialStatement(partial) {\n throw generateSyntaxError(\"Handlebars partials are not supported\", this.source.spanFor(partial.loc));\n }\n PartialBlockStatement(partialBlock) {\n throw generateSyntaxError(\"Handlebars partial blocks are not supported\", this.source.spanFor(partialBlock.loc));\n }\n Decorator(decorator) {\n throw generateSyntaxError(\"Handlebars decorators are not supported\", this.source.spanFor(decorator.loc));\n }\n DecoratorBlock(decoratorBlock) {\n throw generateSyntaxError(\"Handlebars decorator blocks are not supported\", this.source.spanFor(decoratorBlock.loc));\n }\n SubExpression(sexpr) {\n var {\n path,\n params,\n hash\n } = acceptCallNodes(this, sexpr);\n return b.sexpr({\n path,\n params,\n hash,\n loc: this.source.spanFor(sexpr.loc)\n });\n }\n PathExpression(path) {\n var {\n original\n } = path;\n var parts;\n if (original.indexOf('/') !== -1) {\n if (original.slice(0, 2) === './') {\n throw generateSyntaxError(\"Using \\\"./\\\" is not supported in Glimmer and unnecessary\", this.source.spanFor(path.loc));\n }\n if (original.slice(0, 3) === '../') {\n throw generateSyntaxError(\"Changing context using \\\"../\\\" is not supported in Glimmer\", this.source.spanFor(path.loc));\n }\n if (original.indexOf('.') !== -1) {\n throw generateSyntaxError(\"Mixing '.' and '/' in paths is not supported in Glimmer; use only '.' to separate property paths\", this.source.spanFor(path.loc));\n }\n parts = [path.parts.join('/')];\n } else if (original === '.') {\n throw generateSyntaxError(\"'.' is not a supported path in Glimmer; check for a path with a trailing '.'\", this.source.spanFor(path.loc));\n } else {\n parts = path.parts;\n }\n var thisHead = false; // This is to fix a bug in the Handlebars AST where the path expressions in\n // `{{this.foo}}` (and similarly `{{foo-bar this.foo named=this.foo}}` etc)\n // are simply turned into `{{foo}}`. The fix is to push it back onto the\n // parts array and let the runtime see the difference. However, we cannot\n // simply use the string `this` as it means literally the property called\n // \"this\" in the current context (it can be expressed in the syntax as\n // `{{[this]}}`, where the square bracket are generally for this kind of\n // escaping – such as `{{foo.[\"bar.baz\"]}}` would mean lookup a property\n // named literally \"bar.baz\" on `this.foo`). By convention, we use `null`\n // for this purpose.\n\n if (original.match(/^this(\\..+)?$/)) {\n thisHead = true;\n }\n var pathHead;\n if (thisHead) {\n pathHead = {\n type: 'ThisHead',\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + 4\n }\n }\n };\n } else if (path.data) {\n var head = parts.shift();\n if (head === undefined) {\n throw generateSyntaxError(\"Attempted to parse a path expression, but it was not valid. Paths beginning with @ must start with a-z.\", this.source.spanFor(path.loc));\n }\n pathHead = {\n type: 'AtHead',\n name: \"@\" + head,\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + head.length + 1\n }\n }\n };\n } else {\n var _head2 = parts.shift();\n if (_head2 === undefined) {\n throw generateSyntaxError(\"Attempted to parse a path expression, but it was not valid. Paths must start with a-z or A-Z.\", this.source.spanFor(path.loc));\n }\n pathHead = {\n type: 'VarHead',\n name: _head2,\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + _head2.length\n }\n }\n };\n }\n return new PathExpressionImplV1(path.original, pathHead, parts, this.source.spanFor(path.loc));\n }\n Hash(hash) {\n var pairs = [];\n for (var i = 0; i < hash.pairs.length; i++) {\n var pair = hash.pairs[i];\n pairs.push(b.pair({\n key: pair.key,\n value: this.acceptNode(pair.value),\n loc: this.source.spanFor(pair.loc)\n }));\n }\n return b.hash(pairs, this.source.spanFor(hash.loc));\n }\n StringLiteral(string) {\n return b.literal({\n type: 'StringLiteral',\n value: string.value,\n loc: string.loc\n });\n }\n BooleanLiteral(boolean) {\n return b.literal({\n type: 'BooleanLiteral',\n value: boolean.value,\n loc: boolean.loc\n });\n }\n NumberLiteral(number) {\n return b.literal({\n type: 'NumberLiteral',\n value: number.value,\n loc: number.loc\n });\n }\n UndefinedLiteral(undef) {\n return b.literal({\n type: 'UndefinedLiteral',\n value: undefined,\n loc: undef.loc\n });\n }\n NullLiteral(nul) {\n return b.literal({\n type: 'NullLiteral',\n value: null,\n loc: nul.loc\n });\n }\n }\n function calculateRightStrippedOffsets(original, value) {\n if (value === '') {\n // if it is empty, just return the count of newlines\n // in original\n return {\n lines: original.split('\\n').length - 1,\n columns: 0\n };\n } // otherwise, return the number of newlines prior to\n // `value`\n\n var difference = original.split(value)[0];\n var lines = difference.split(/\\n/);\n var lineCount = lines.length - 1;\n return {\n lines: lineCount,\n columns: lines[lineCount].length\n };\n }\n function updateTokenizerLocation(tokenizer, content) {\n var line = content.loc.start.line;\n var column = content.loc.start.column;\n var offsets = calculateRightStrippedOffsets(content.original, content.value);\n line = line + offsets.lines;\n if (offsets.lines) {\n column = offsets.columns;\n } else {\n column = column + offsets.columns;\n }\n tokenizer.line = line;\n tokenizer.column = column;\n }\n function acceptCallNodes(compiler, node) {\n if (node.path.type.endsWith('Literal')) {\n var _path2 = node.path;\n var value = '';\n if (_path2.type === 'BooleanLiteral') {\n value = _path2.original.toString();\n } else if (_path2.type === 'StringLiteral') {\n value = \"\\\"\" + _path2.original + \"\\\"\";\n } else if (_path2.type === 'NullLiteral') {\n value = 'null';\n } else if (_path2.type === 'NumberLiteral') {\n value = _path2.value.toString();\n } else {\n value = 'undefined';\n }\n throw generateSyntaxError(_path2.type + \" \\\"\" + (_path2.type === 'StringLiteral' ? _path2.original : value) + \"\\\" cannot be called as a sub-expression, replace (\" + value + \") with \" + value, compiler.source.spanFor(_path2.loc));\n }\n var path = node.path.type === 'PathExpression' ? compiler.PathExpression(node.path) : compiler.SubExpression(node.path);\n var params = node.params ? node.params.map(e => compiler.acceptNode(e)) : []; // if there is no hash, position it as a collapsed node immediately after the last param (or the\n // path, if there are also no params)\n\n var end = params.length > 0 ? params[params.length - 1].loc : path.loc;\n var hash = node.hash ? compiler.Hash(node.hash) : {\n type: 'Hash',\n pairs: [],\n loc: compiler.source.spanFor(end).collapse('end')\n };\n return {\n path,\n params,\n hash\n };\n }\n function addElementModifier(element, mustache) {\n var {\n path,\n params,\n hash,\n loc\n } = mustache;\n if (isHBSLiteral(path)) {\n var _modifier = \"{{\" + printLiteral(path) + \"}}\";\n var tag = \"<\" + element.name + \" ... \" + _modifier + \" ...\";\n throw generateSyntaxError(\"In \" + tag + \", \" + _modifier + \" is not a valid modifier\", mustache.loc);\n }\n var modifier = b.elementModifier({\n path,\n params,\n hash,\n loc\n });\n element.modifiers.push(modifier);\n }\n class TokenizerEventHandlers extends HandlebarsNodeVisitors {\n constructor() {\n super(...arguments);\n this.tagOpenLine = 0;\n this.tagOpenColumn = 0;\n }\n reset() {\n this.currentNode = null;\n } // Comment\n\n beginComment() {\n this.currentNode = b.comment('', this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn));\n }\n appendToCommentData(char) {\n this.currentComment.value += char;\n }\n finishComment() {\n appendChild(this.currentElement(), this.finish(this.currentComment));\n } // Data\n\n beginData() {\n this.currentNode = b.text({\n chars: '',\n loc: this.offset().collapsed()\n });\n }\n appendToData(char) {\n this.currentData.chars += char;\n }\n finishData() {\n this.currentData.loc = this.currentData.loc.withEnd(this.offset());\n appendChild(this.currentElement(), this.currentData);\n } // Tags - basic\n\n tagOpen() {\n this.tagOpenLine = this.tokenizer.line;\n this.tagOpenColumn = this.tokenizer.column;\n }\n beginStartTag() {\n this.currentNode = {\n type: 'StartTag',\n name: '',\n attributes: [],\n modifiers: [],\n comments: [],\n selfClosing: false,\n loc: this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn)\n };\n }\n beginEndTag() {\n this.currentNode = {\n type: 'EndTag',\n name: '',\n attributes: [],\n modifiers: [],\n comments: [],\n selfClosing: false,\n loc: this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn)\n };\n }\n finishTag() {\n var tag = this.finish(this.currentTag);\n if (tag.type === 'StartTag') {\n this.finishStartTag();\n if (tag.name === ':') {\n throw generateSyntaxError('Invalid named block named detected, you may have created a named block without a name, or you may have began your name with a number. Named blocks must have names that are at least one character long, and begin with a lower case letter', this.source.spanFor({\n start: this.currentTag.loc.toJSON(),\n end: this.offset().toJSON()\n }));\n }\n if (voidMap[tag.name] || tag.selfClosing) {\n this.finishEndTag(true);\n }\n } else if (tag.type === 'EndTag') {\n this.finishEndTag(false);\n }\n }\n finishStartTag() {\n var {\n name,\n attributes: attrs,\n modifiers,\n comments,\n selfClosing,\n loc\n } = this.finish(this.currentStartTag);\n var element = b.element({\n tag: name,\n selfClosing,\n attrs,\n modifiers,\n comments,\n children: [],\n blockParams: [],\n loc\n });\n this.elementStack.push(element);\n }\n finishEndTag(isVoid) {\n var tag = this.finish(this.currentTag);\n var element = this.elementStack.pop();\n var parent = this.currentElement();\n this.validateEndTag(tag, element, isVoid);\n element.loc = element.loc.withEnd(this.offset());\n parseElementBlockParams(element);\n appendChild(parent, element);\n }\n markTagAsSelfClosing() {\n this.currentTag.selfClosing = true;\n } // Tags - name\n\n appendToTagName(char) {\n this.currentTag.name += char;\n } // Tags - attributes\n\n beginAttribute() {\n var offset = this.offset();\n this.currentAttribute = {\n name: '',\n parts: [],\n currentPart: null,\n isQuoted: false,\n isDynamic: false,\n start: offset,\n valueSpan: offset.collapsed()\n };\n }\n appendToAttributeName(char) {\n this.currentAttr.name += char;\n }\n beginAttributeValue(isQuoted) {\n this.currentAttr.isQuoted = isQuoted;\n this.startTextPart();\n this.currentAttr.valueSpan = this.offset().collapsed();\n }\n appendToAttributeValue(char) {\n var parts = this.currentAttr.parts;\n var lastPart = parts[parts.length - 1];\n var current = this.currentAttr.currentPart;\n if (current) {\n current.chars += char; // update end location for each added char\n\n current.loc = current.loc.withEnd(this.offset());\n } else {\n // initially assume the text node is a single char\n var _loc2 = this.offset(); // the tokenizer line/column have already been advanced, correct location info\n\n if (char === '\\n') {\n _loc2 = lastPart ? lastPart.loc.getEnd() : this.currentAttr.valueSpan.getStart();\n } else {\n _loc2 = _loc2.move(-1);\n }\n this.currentAttr.currentPart = b.text({\n chars: char,\n loc: _loc2.collapsed()\n });\n }\n }\n finishAttributeValue() {\n this.finalizeTextPart();\n var tag = this.currentTag;\n var tokenizerPos = this.offset();\n if (tag.type === 'EndTag') {\n throw generateSyntaxError(\"Invalid end tag: closing tag must not have attributes\", this.source.spanFor({\n start: tag.loc.toJSON(),\n end: tokenizerPos.toJSON()\n }));\n }\n var {\n name,\n parts,\n start,\n isQuoted,\n isDynamic,\n valueSpan\n } = this.currentAttr;\n var value = this.assembleAttributeValue(parts, isQuoted, isDynamic, start.until(tokenizerPos));\n value.loc = valueSpan.withEnd(tokenizerPos);\n var attribute = b.attr({\n name,\n value,\n loc: start.until(tokenizerPos)\n });\n this.currentStartTag.attributes.push(attribute);\n }\n reportSyntaxError(message) {\n throw generateSyntaxError(message, this.offset().collapsed());\n }\n assembleConcatenatedValue(parts) {\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n if (part.type !== 'MustacheStatement' && part.type !== 'TextNode') {\n throw generateSyntaxError('Unsupported node in quoted attribute value: ' + part['type'], part.loc);\n }\n }\n (0, _util.assertPresent)(parts, \"the concatenation parts of an element should not be empty\");\n var first = parts[0];\n var last = parts[parts.length - 1];\n return b.concat(parts, this.source.spanFor(first.loc).extend(this.source.spanFor(last.loc)));\n }\n validateEndTag(tag, element, selfClosing) {\n var error;\n if (voidMap[tag.name] && !selfClosing) {\n // EngTag is also called by StartTag for void and self-closing tags (i.e.\n // <input> or <br />, so we need to check for that here. Otherwise, we would\n // throw an error for those cases.\n error = \"<\" + tag.name + \"> elements do not need end tags. You should remove it\";\n } else if (element.tag === undefined) {\n error = \"Closing tag </\" + tag.name + \"> without an open tag\";\n } else if (element.tag !== tag.name) {\n error = \"Closing tag </\" + tag.name + \"> did not match last open tag <\" + element.tag + \"> (on line \" + element.loc.startPosition.line + \")\";\n }\n if (error) {\n throw generateSyntaxError(error, tag.loc);\n }\n }\n assembleAttributeValue(parts, isQuoted, isDynamic, span) {\n if (isDynamic) {\n if (isQuoted) {\n return this.assembleConcatenatedValue(parts);\n } else {\n if (parts.length === 1 || parts.length === 2 && parts[1].type === 'TextNode' && parts[1].chars === '/') {\n return parts[0];\n } else {\n throw generateSyntaxError(\"An unquoted attribute value must be a string or a mustache, \" + \"preceded by whitespace or a '=' character, and \" + \"followed by whitespace, a '>' character, or '/>'\", span);\n }\n }\n } else {\n return parts.length > 0 ? parts[0] : b.text({\n chars: '',\n loc: span\n });\n }\n }\n }\n var syntax = {\n parse: preprocess,\n builders: publicBuilder,\n print: build,\n traverse,\n Walker\n };\n class CodemodEntityParser extends _simpleHtmlTokenizer.EntityParser {\n // match upstream types, but never match an entity\n constructor() {\n super({});\n }\n parse() {\n return undefined;\n }\n }\n function preprocess(input, options) {\n if (options === void 0) {\n options = {};\n }\n var _a, _b, _c;\n var mode = options.mode || 'precompile';\n var source;\n var ast;\n if (typeof input === 'string') {\n source = new Source(input, (_a = options.meta) === null || _a === void 0 ? void 0 : _a.moduleName);\n if (mode === 'codemod') {\n ast = (0, _parser.parseWithoutProcessing)(input, options.parseOptions);\n } else {\n ast = (0, _parser.parse)(input, options.parseOptions);\n }\n } else if (input instanceof Source) {\n source = input;\n if (mode === 'codemod') {\n ast = (0, _parser.parseWithoutProcessing)(input.source, options.parseOptions);\n } else {\n ast = (0, _parser.parse)(input.source, options.parseOptions);\n }\n } else {\n source = new Source('', (_b = options.meta) === null || _b === void 0 ? void 0 : _b.moduleName);\n ast = input;\n }\n var entityParser = undefined;\n if (mode === 'codemod') {\n entityParser = new CodemodEntityParser();\n }\n var offsets = SourceSpan.forCharPositions(source, 0, source.source.length);\n ast.loc = {\n source: '(program)',\n start: offsets.startPosition,\n end: offsets.endPosition\n };\n var program = new TokenizerEventHandlers(source, entityParser, mode).acceptTemplate(ast);\n if (options.strictMode) {\n program.blockParams = (_c = options.locals) !== null && _c !== void 0 ? _c : [];\n }\n if (options && options.plugins && options.plugins.ast) {\n for (var i = 0, l = options.plugins.ast.length; i < l; i++) {\n var transform = options.plugins.ast[i];\n var env = (0, _util.assign)({}, options, {\n syntax\n }, {\n plugins: undefined\n });\n var pluginResult = transform(env);\n traverse(program, pluginResult.visitor);\n }\n }\n return program;\n }\n class SymbolTable {\n static top(locals, customizeComponentName) {\n return new ProgramSymbolTable(locals, customizeComponentName);\n }\n child(locals) {\n var symbols = locals.map(name => this.allocate(name));\n return new BlockSymbolTable(this, locals, symbols);\n }\n }\n _exports.SymbolTable = SymbolTable;\n class ProgramSymbolTable extends SymbolTable {\n constructor(templateLocals, customizeComponentName) {\n super();\n this.templateLocals = templateLocals;\n this.customizeComponentName = customizeComponentName;\n this.symbols = [];\n this.upvars = [];\n this.size = 1;\n this.named = (0, _util.dict)();\n this.blocks = (0, _util.dict)();\n this.usedTemplateLocals = [];\n this._hasEval = false;\n }\n getUsedTemplateLocals() {\n return this.usedTemplateLocals;\n }\n setHasEval() {\n this._hasEval = true;\n }\n get hasEval() {\n return this._hasEval;\n }\n has(name) {\n return this.templateLocals.indexOf(name) !== -1;\n }\n get(name) {\n var index = this.usedTemplateLocals.indexOf(name);\n if (index !== -1) {\n return [index, true];\n }\n index = this.usedTemplateLocals.length;\n this.usedTemplateLocals.push(name);\n return [index, true];\n }\n getLocalsMap() {\n return (0, _util.dict)();\n }\n getEvalInfo() {\n var locals = this.getLocalsMap();\n return Object.keys(locals).map(symbol => locals[symbol]);\n }\n allocateFree(name, resolution) {\n // If the name in question is an uppercase (i.e. angle-bracket) component invocation, run\n // the optional `customizeComponentName` function provided to the precompiler.\n if (resolution.resolution() === 39\n /* GetFreeAsComponentHead */ && resolution.isAngleBracket && isUpperCase(name)) {\n name = this.customizeComponentName(name);\n }\n var index = this.upvars.indexOf(name);\n if (index !== -1) {\n return index;\n }\n index = this.upvars.length;\n this.upvars.push(name);\n return index;\n }\n allocateNamed(name) {\n var named = this.named[name];\n if (!named) {\n named = this.named[name] = this.allocate(name);\n }\n return named;\n }\n allocateBlock(name) {\n if (name === 'inverse') {\n name = 'else';\n }\n var block = this.blocks[name];\n if (!block) {\n block = this.blocks[name] = this.allocate(\"&\" + name);\n }\n return block;\n }\n allocate(identifier) {\n this.symbols.push(identifier);\n return this.size++;\n }\n }\n _exports.ProgramSymbolTable = ProgramSymbolTable;\n class BlockSymbolTable extends SymbolTable {\n constructor(parent, symbols, slots) {\n super();\n this.parent = parent;\n this.symbols = symbols;\n this.slots = slots;\n }\n get locals() {\n return this.symbols;\n }\n has(name) {\n return this.symbols.indexOf(name) !== -1 || this.parent.has(name);\n }\n get(name) {\n var slot = this.symbols.indexOf(name);\n return slot === -1 ? this.parent.get(name) : [this.slots[slot], false];\n }\n getLocalsMap() {\n var dict = this.parent.getLocalsMap();\n this.symbols.forEach(symbol => dict[symbol] = this.get(symbol)[0]);\n return dict;\n }\n getEvalInfo() {\n var locals = this.getLocalsMap();\n return Object.keys(locals).map(symbol => locals[symbol]);\n }\n setHasEval() {\n this.parent.setHasEval();\n }\n allocateFree(name, resolution) {\n return this.parent.allocateFree(name, resolution);\n }\n allocateNamed(name) {\n return this.parent.allocateNamed(name);\n }\n allocateBlock(name) {\n return this.parent.allocateBlock(name);\n }\n allocate(identifier) {\n return this.parent.allocate(identifier);\n }\n }\n _exports.BlockSymbolTable = BlockSymbolTable;\n var __rest = undefined && undefined.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n };\n class Builder {\n // TEMPLATE //\n template(symbols, body, loc) {\n return new Template({\n table: symbols,\n body,\n loc\n });\n } // INTERNAL (these nodes cannot be reached when doing general-purpose visiting) //\n\n block(symbols, body, loc) {\n return new Block({\n scope: symbols,\n body,\n loc\n });\n }\n namedBlock(name, block, loc) {\n return new NamedBlock({\n name,\n block,\n attrs: [],\n componentArgs: [],\n modifiers: [],\n loc\n });\n }\n simpleNamedBlock(name, block, loc) {\n return new BuildElement({\n selfClosing: false,\n attrs: [],\n componentArgs: [],\n modifiers: [],\n comments: []\n }).named(name, block, loc);\n }\n slice(chars, loc) {\n return new SourceSlice({\n loc,\n chars\n });\n }\n args(positional, named, loc) {\n return new Args({\n loc,\n positional,\n named\n });\n }\n positional(exprs, loc) {\n return new PositionalArguments({\n loc,\n exprs\n });\n }\n namedArgument(key, value) {\n return new NamedArgument({\n name: key,\n value\n });\n }\n named(entries, loc) {\n return new NamedArguments({\n loc,\n entries\n });\n }\n attr(_ref28, loc) {\n var {\n name,\n value,\n trusting\n } = _ref28;\n return new HtmlAttr({\n loc,\n name,\n value,\n trusting\n });\n }\n splatAttr(symbol, loc) {\n return new SplatAttr({\n symbol,\n loc\n });\n }\n arg(_ref29, loc) {\n var {\n name,\n value,\n trusting\n } = _ref29;\n return new ComponentArg({\n name,\n value,\n trusting,\n loc\n });\n } // EXPRESSIONS //\n\n path(head, tail, loc) {\n return new PathExpression({\n loc,\n ref: head,\n tail\n });\n }\n self(loc) {\n return new ThisReference({\n loc\n });\n }\n at(name, symbol, loc) {\n return new ArgReference({\n loc,\n name: new SourceSlice({\n loc,\n chars: name\n }),\n symbol\n });\n }\n freeVar(_ref30) {\n var {\n name,\n context,\n symbol,\n loc\n } = _ref30;\n return new FreeVarReference({\n name,\n resolution: context,\n symbol,\n loc\n });\n }\n localVar(name, symbol, isTemplateLocal, loc) {\n return new LocalVarReference({\n loc,\n name,\n isTemplateLocal,\n symbol\n });\n }\n sexp(parts, loc) {\n return new CallExpression({\n loc,\n callee: parts.callee,\n args: parts.args\n });\n }\n deprecatedCall(arg, callee, loc) {\n return new DeprecatedCallExpression({\n loc,\n arg,\n callee\n });\n }\n interpolate(parts, loc) {\n (0, _util.assertPresent)(parts);\n return new InterpolateExpression({\n loc,\n parts\n });\n }\n literal(value, loc) {\n return new LiteralExpression({\n loc,\n value\n });\n } // STATEMENTS //\n\n append(_ref31, loc) {\n var {\n table,\n trusting,\n value\n } = _ref31;\n return new AppendContent({\n table,\n trusting,\n value,\n loc\n });\n }\n modifier(_ref32, loc) {\n var {\n callee,\n args\n } = _ref32;\n return new ElementModifier({\n loc,\n callee,\n args\n });\n }\n namedBlocks(blocks, loc) {\n return new NamedBlocks({\n loc,\n blocks\n });\n }\n blockStatement(_a, loc) {\n var {\n symbols,\n program,\n inverse = null\n } = _a,\n call = __rest(_a, [\"symbols\", \"program\", \"inverse\"]);\n var blocksLoc = program.loc;\n var blocks = [this.namedBlock(SourceSlice.synthetic('default'), program, program.loc)];\n if (inverse) {\n blocksLoc = blocksLoc.extend(inverse.loc);\n blocks.push(this.namedBlock(SourceSlice.synthetic('else'), inverse, inverse.loc));\n }\n return new InvokeBlock({\n loc,\n blocks: this.namedBlocks(blocks, blocksLoc),\n callee: call.callee,\n args: call.args\n });\n }\n element(options) {\n return new BuildElement(options);\n }\n }\n class BuildElement {\n constructor(base) {\n this.base = base;\n this.builder = new Builder();\n }\n simple(tag, body, loc) {\n return new SimpleElement((0, _util.assign)({\n tag,\n body,\n componentArgs: [],\n loc\n }, this.base));\n }\n named(name, block, loc) {\n return new NamedBlock((0, _util.assign)({\n name,\n block,\n componentArgs: [],\n loc\n }, this.base));\n }\n selfClosingComponent(callee, loc) {\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n // point the empty named blocks at the `/` self-closing tag\n blocks: new NamedBlocks({\n blocks: [],\n loc: loc.sliceEndChars({\n skipEnd: 1,\n chars: 1\n })\n })\n }, this.base));\n }\n componentWithDefaultBlock(callee, children, symbols, loc) {\n var block = this.builder.block(symbols, children, loc);\n var namedBlock = this.builder.namedBlock(SourceSlice.synthetic('default'), block, loc); // BUILDER.simpleNamedBlock('default', children, symbols, loc);\n\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n blocks: this.builder.namedBlocks([namedBlock], namedBlock.loc)\n }, this.base));\n }\n componentWithNamedBlocks(callee, blocks, loc) {\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n blocks: this.builder.namedBlocks(blocks, SpanList.range(blocks))\n }, this.base));\n }\n }\n function SexpSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(\"Helper\"\n /* Helper */);\n } else {\n return null;\n }\n }\n function ModifierSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(\"Modifier\"\n /* Modifier */);\n } else {\n return null;\n }\n }\n function BlockSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(\"Component\"\n /* Component */);\n } else {\n return LooseModeResolution.fallback();\n }\n }\n function ComponentSyntaxContext(node) {\n if (isSimplePath(node)) {\n return LooseModeResolution.namespaced(\"Component\"\n /* Component */, true);\n } else {\n return null;\n }\n }\n /**\n * This corresponds to append positions (text curlies or attribute\n * curlies). In strict mode, this also corresponds to arg curlies.\n */\n\n function AttrValueSyntaxContext(node) {\n var isSimple = isSimpleCallee(node);\n var isInvoke = isInvokeNode(node);\n if (isSimple) {\n return isInvoke ? LooseModeResolution.namespaced(\"Helper\"\n /* Helper */) : LooseModeResolution.attr();\n } else {\n return isInvoke ? STRICT_RESOLUTION : LooseModeResolution.fallback();\n }\n }\n /**\n * This corresponds to append positions (text curlies or attribute\n * curlies). In strict mode, this also corresponds to arg curlies.\n */\n\n function AppendSyntaxContext(node) {\n var isSimple = isSimpleCallee(node);\n var isInvoke = isInvokeNode(node);\n var trusting = node.trusting;\n if (isSimple) {\n return trusting ? LooseModeResolution.trustingAppend({\n invoke: isInvoke\n }) : LooseModeResolution.append({\n invoke: isInvoke\n });\n } else {\n return LooseModeResolution.fallback();\n }\n } // UTILITIES\n\n /**\n * A call node has a simple callee if its head is:\n *\n * - a `PathExpression`\n * - the `PathExpression`'s head is a `VarHead`\n * - it has no tail\n *\n * Simple heads:\n *\n * ```\n * {{x}}\n * {{x y}}\n * ```\n *\n * Not simple heads:\n *\n * ```\n * {{x.y}}\n * {{x.y z}}\n * {{@x}}\n * {{@x a}}\n * {{this}}\n * {{this a}}\n * ```\n */\n\n function isSimpleCallee(node) {\n var path = node.path;\n return isSimplePath(path);\n }\n function isSimplePath(node) {\n if (node.type === 'PathExpression' && node.head.type === 'VarHead') {\n return node.tail.length === 0;\n } else {\n return false;\n }\n }\n /**\n * The call expression has at least one argument.\n */\n\n function isInvokeNode(node) {\n return node.params.length > 0 || node.hash.pairs.length > 0;\n }\n function normalize(source, options) {\n if (options === void 0) {\n options = {};\n }\n var _a;\n var ast = preprocess(source, options);\n var normalizeOptions = (0, _util.assign)({\n strictMode: false,\n locals: []\n }, options);\n var top = SymbolTable.top(normalizeOptions.locals, (_a =\n // eslint-disable-next-line @typescript-eslint/unbound-method\n options.customizeComponentName) !== null && _a !== void 0 ? _a : name => name);\n var block = new BlockContext(source, normalizeOptions, top);\n var normalizer = new StatementNormalizer(block);\n var astV2 = new TemplateChildren(block.loc(ast.loc), ast.body.map(b => normalizer.normalize(b)), block).assertTemplate(top);\n var locals = top.getUsedTemplateLocals();\n return [astV2, locals];\n }\n /**\n * A `BlockContext` represents the block that a particular AST node is contained inside of.\n *\n * `BlockContext` is aware of template-wide options (such as strict mode), as well as the bindings\n * that are in-scope within that block.\n *\n * Concretely, it has the `PrecompileOptions` and current `SymbolTable`, and provides\n * facilities for working with those options.\n *\n * `BlockContext` is stateless.\n */\n\n class BlockContext {\n constructor(source, options, table) {\n this.source = source;\n this.options = options;\n this.table = table;\n this.builder = new Builder();\n }\n get strict() {\n return this.options.strictMode || false;\n }\n loc(loc) {\n return this.source.spanFor(loc);\n }\n resolutionFor(node, resolution) {\n if (this.strict) {\n return {\n resolution: STRICT_RESOLUTION\n };\n }\n if (this.isFreeVar(node)) {\n var r = resolution(node);\n if (r === null) {\n return {\n resolution: 'error',\n path: printPath(node),\n head: printHead(node)\n };\n }\n return {\n resolution: r\n };\n } else {\n return {\n resolution: STRICT_RESOLUTION\n };\n }\n }\n isFreeVar(callee) {\n if (callee.type === 'PathExpression') {\n if (callee.head.type !== 'VarHead') {\n return false;\n }\n return !this.table.has(callee.head.name);\n } else if (callee.path.type === 'PathExpression') {\n return this.isFreeVar(callee.path);\n } else {\n return false;\n }\n }\n hasBinding(name) {\n return this.table.has(name);\n }\n child(blockParams) {\n return new BlockContext(this.source, this.options, this.table.child(blockParams));\n }\n customizeComponentName(input) {\n if (this.options.customizeComponentName) {\n return this.options.customizeComponentName(input);\n } else {\n return input;\n }\n }\n }\n /**\n * An `ExpressionNormalizer` normalizes expressions within a block.\n *\n * `ExpressionNormalizer` is stateless.\n */\n\n class ExpressionNormalizer {\n constructor(block) {\n this.block = block;\n }\n normalize(expr, resolution) {\n switch (expr.type) {\n case 'NullLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'StringLiteral':\n case 'UndefinedLiteral':\n return this.block.builder.literal(expr.value, this.block.loc(expr.loc));\n case 'PathExpression':\n return this.path(expr, resolution);\n case 'SubExpression':\n {\n var _resolution = this.block.resolutionFor(expr, SexpSyntaxContext);\n if (_resolution.resolution === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`\" + _resolution.path + \"`) but \" + _resolution.head + \" was not in scope\", expr.loc);\n }\n return this.block.builder.sexp(this.callParts(expr, _resolution.resolution), this.block.loc(expr.loc));\n }\n }\n }\n path(expr, resolution) {\n var headOffsets = this.block.loc(expr.head.loc);\n var tail = []; // start with the head\n\n var offset = headOffsets;\n for (var part of expr.tail) {\n offset = offset.sliceStartChars({\n chars: part.length,\n skipStart: 1\n });\n tail.push(new SourceSlice({\n loc: offset,\n chars: part\n }));\n }\n return this.block.builder.path(this.ref(expr.head, resolution), tail, this.block.loc(expr.loc));\n }\n /**\n * The `callParts` method takes ASTv1.CallParts as well as a syntax context and normalizes\n * it to an ASTv2 CallParts.\n */\n\n callParts(parts, context) {\n var {\n path,\n params,\n hash\n } = parts;\n var callee = this.normalize(path, context);\n var paramList = params.map(p => this.normalize(p, ARGUMENT_RESOLUTION));\n var paramLoc = SpanList.range(paramList, callee.loc.collapse('end'));\n var namedLoc = this.block.loc(hash.loc);\n var argsLoc = SpanList.range([paramLoc, namedLoc]);\n var positional = this.block.builder.positional(params.map(p => this.normalize(p, ARGUMENT_RESOLUTION)), paramLoc);\n var named = this.block.builder.named(hash.pairs.map(p => this.namedArgument(p)), this.block.loc(hash.loc));\n return {\n callee,\n args: this.block.builder.args(positional, named, argsLoc)\n };\n }\n namedArgument(pair) {\n var offsets = this.block.loc(pair.loc);\n var keyOffsets = offsets.sliceStartChars({\n chars: pair.key.length\n });\n return this.block.builder.namedArgument(new SourceSlice({\n chars: pair.key,\n loc: keyOffsets\n }), this.normalize(pair.value, ARGUMENT_RESOLUTION));\n }\n /**\n * The `ref` method normalizes an `ASTv1.PathHead` into an `ASTv2.VariableReference`.\n * This method is extremely important, because it is responsible for normalizing free\n * variables into an an ASTv2.PathHead *with appropriate context*.\n *\n * The syntax context is originally determined by the syntactic position that this `PathHead`\n * came from, and is ultimately attached to the `ASTv2.VariableReference` here. In ASTv2,\n * the `VariableReference` node bears full responsibility for loose mode rules that control\n * the behavior of free variables.\n */\n\n ref(head, resolution) {\n var {\n block\n } = this;\n var {\n builder,\n table\n } = block;\n var offsets = block.loc(head.loc);\n switch (head.type) {\n case 'ThisHead':\n return builder.self(offsets);\n case 'AtHead':\n {\n var symbol = table.allocateNamed(head.name);\n return builder.at(head.name, symbol, offsets);\n }\n case 'VarHead':\n {\n if (block.hasBinding(head.name)) {\n var [_symbol, isRoot] = table.get(head.name);\n return block.builder.localVar(head.name, _symbol, isRoot, offsets);\n } else {\n var context = block.strict ? STRICT_RESOLUTION : resolution;\n var _symbol2 = block.table.allocateFree(head.name, context);\n return block.builder.freeVar({\n name: head.name,\n context,\n symbol: _symbol2,\n loc: offsets\n });\n }\n }\n }\n }\n }\n /**\n * `TemplateNormalizer` normalizes top-level ASTv1 statements to ASTv2.\n */\n\n class StatementNormalizer {\n constructor(block) {\n this.block = block;\n }\n normalize(node) {\n switch (node.type) {\n case 'PartialStatement':\n throw new Error(\"Handlebars partial syntax ({{> ...}}) is not allowed in Glimmer\");\n case 'BlockStatement':\n return this.BlockStatement(node);\n case 'ElementNode':\n return new ElementNormalizer(this.block).ElementNode(node);\n case 'MustacheStatement':\n return this.MustacheStatement(node);\n // These are the same in ASTv2\n\n case 'MustacheCommentStatement':\n return this.MustacheCommentStatement(node);\n case 'CommentStatement':\n {\n var _loc3 = this.block.loc(node.loc);\n return new HtmlComment({\n loc: _loc3,\n text: _loc3.slice({\n skipStart: 4,\n skipEnd: 3\n }).toSlice(node.value)\n });\n }\n case 'TextNode':\n return new HtmlText({\n loc: this.block.loc(node.loc),\n chars: node.chars\n });\n }\n }\n MustacheCommentStatement(node) {\n var loc = this.block.loc(node.loc);\n var textLoc;\n if (loc.asString().slice(0, 5) === '{{!--') {\n textLoc = loc.slice({\n skipStart: 5,\n skipEnd: 4\n });\n } else {\n textLoc = loc.slice({\n skipStart: 3,\n skipEnd: 2\n });\n }\n return new GlimmerComment({\n loc,\n text: textLoc.toSlice(node.value)\n });\n }\n /**\n * Normalizes an ASTv1.MustacheStatement to an ASTv2.AppendStatement\n */\n\n MustacheStatement(mustache) {\n var {\n escaped\n } = mustache;\n var loc = this.block.loc(mustache.loc); // Normalize the call parts in AppendSyntaxContext\n\n var callParts = this.expr.callParts({\n path: mustache.path,\n params: mustache.params,\n hash: mustache.hash\n }, AppendSyntaxContext(mustache));\n var value = callParts.args.isEmpty() ? callParts.callee : this.block.builder.sexp(callParts, loc);\n return this.block.builder.append({\n table: this.block.table,\n trusting: !escaped,\n value\n }, loc);\n }\n /**\n * Normalizes a ASTv1.BlockStatement to an ASTv2.BlockStatement\n */\n\n BlockStatement(block) {\n var {\n program,\n inverse\n } = block;\n var loc = this.block.loc(block.loc);\n var resolution = this.block.resolutionFor(block, BlockSyntaxContext);\n if (resolution.resolution === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`{{#\" + resolution.path + \"}}`) but \" + resolution.head + \" was not in scope\", loc);\n }\n var callParts = this.expr.callParts(block, resolution.resolution);\n return this.block.builder.blockStatement((0, _util.assign)({\n symbols: this.block.table,\n program: this.Block(program),\n inverse: inverse ? this.Block(inverse) : null\n }, callParts), loc);\n }\n Block(_ref33) {\n var {\n body,\n loc,\n blockParams\n } = _ref33;\n var child = this.block.child(blockParams);\n var normalizer = new StatementNormalizer(child);\n return new BlockChildren(this.block.loc(loc), body.map(b => normalizer.normalize(b)), this.block).assertBlock(child.table);\n }\n get expr() {\n return new ExpressionNormalizer(this.block);\n }\n }\n class ElementNormalizer {\n constructor(ctx) {\n this.ctx = ctx;\n }\n /**\n * Normalizes an ASTv1.ElementNode to:\n *\n * - ASTv2.NamedBlock if the tag name begins with `:`\n * - ASTv2.Component if the tag name matches the component heuristics\n * - ASTv2.SimpleElement if the tag name doesn't match the component heuristics\n *\n * A tag name represents a component if:\n *\n * - it begins with `@`\n * - it is exactly `this` or begins with `this.`\n * - the part before the first `.` is a reference to an in-scope variable binding\n * - it begins with an uppercase character\n */\n\n ElementNode(element) {\n var {\n tag,\n selfClosing,\n comments\n } = element;\n var loc = this.ctx.loc(element.loc);\n var [tagHead, ...rest] = tag.split('.'); // the head, attributes and modifiers are in the current scope\n\n var path = this.classifyTag(tagHead, rest, element.loc);\n var attrs = element.attributes.filter(a => a.name[0] !== '@').map(a => this.attr(a));\n var args = element.attributes.filter(a => a.name[0] === '@').map(a => this.arg(a));\n var modifiers = element.modifiers.map(m => this.modifier(m)); // the element's block params are in scope for the children\n\n var child = this.ctx.child(element.blockParams);\n var normalizer = new StatementNormalizer(child);\n var childNodes = element.children.map(s => normalizer.normalize(s));\n var el = this.ctx.builder.element({\n selfClosing,\n attrs,\n componentArgs: args,\n modifiers,\n comments: comments.map(c => new StatementNormalizer(this.ctx).MustacheCommentStatement(c))\n });\n var children = new ElementChildren(el, loc, childNodes, this.ctx);\n var offsets = this.ctx.loc(element.loc);\n var tagOffsets = offsets.sliceStartChars({\n chars: tag.length,\n skipStart: 1\n });\n if (path === 'ElementHead') {\n if (tag[0] === ':') {\n return children.assertNamedBlock(tagOffsets.slice({\n skipStart: 1\n }).toSlice(tag.slice(1)), child.table);\n } else {\n return children.assertElement(tagOffsets.toSlice(tag), element.blockParams.length > 0);\n }\n }\n if (element.selfClosing) {\n return el.selfClosingComponent(path, loc);\n } else {\n var blocks = children.assertComponent(tag, child.table, element.blockParams.length > 0);\n return el.componentWithNamedBlocks(path, blocks, loc);\n }\n }\n modifier(m) {\n var resolution = this.ctx.resolutionFor(m, ModifierSyntaxContext);\n if (resolution.resolution === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`{{#\" + resolution.path + \"}}`) as a modifier, but \" + resolution.head + \" was not in scope. Try adding `this` to the beginning of the path\", m.loc);\n }\n var callParts = this.expr.callParts(m, resolution.resolution);\n return this.ctx.builder.modifier(callParts, this.ctx.loc(m.loc));\n }\n /**\n * This method handles attribute values that are curlies, as well as curlies nested inside of\n * interpolations:\n *\n * ```hbs\n * <a href={{url}} />\n * <a href=\"{{url}}.html\" />\n * ```\n */\n\n mustacheAttr(mustache) {\n // Normalize the call parts in AttrValueSyntaxContext\n var sexp = this.ctx.builder.sexp(this.expr.callParts(mustache, AttrValueSyntaxContext(mustache)), this.ctx.loc(mustache.loc)); // If there are no params or hash, just return the function part as its own expression\n\n if (sexp.args.isEmpty()) {\n return sexp.callee;\n } else {\n return sexp;\n }\n }\n /**\n * attrPart is the narrowed down list of valid attribute values that are also\n * allowed as a concat part (you can't nest concats).\n */\n\n attrPart(part) {\n switch (part.type) {\n case 'MustacheStatement':\n return {\n expr: this.mustacheAttr(part),\n trusting: !part.escaped\n };\n case 'TextNode':\n return {\n expr: this.ctx.builder.literal(part.chars, this.ctx.loc(part.loc)),\n trusting: true\n };\n }\n }\n attrValue(part) {\n switch (part.type) {\n case 'ConcatStatement':\n {\n var parts = part.parts.map(p => this.attrPart(p).expr);\n return {\n expr: this.ctx.builder.interpolate(parts, this.ctx.loc(part.loc)),\n trusting: false\n };\n }\n default:\n return this.attrPart(part);\n }\n }\n attr(m) {\n if (m.name === '...attributes') {\n return this.ctx.builder.splatAttr(this.ctx.table.allocateBlock('attrs'), this.ctx.loc(m.loc));\n }\n var offsets = this.ctx.loc(m.loc);\n var nameSlice = offsets.sliceStartChars({\n chars: m.name.length\n }).toSlice(m.name);\n var value = this.attrValue(m.value);\n return this.ctx.builder.attr({\n name: nameSlice,\n value: value.expr,\n trusting: value.trusting\n }, offsets);\n }\n maybeDeprecatedCall(arg, part) {\n if (this.ctx.strict) {\n return null;\n }\n if (part.type !== 'MustacheStatement') {\n return null;\n }\n var {\n path\n } = part;\n if (path.type !== 'PathExpression') {\n return null;\n }\n if (path.head.type !== 'VarHead') {\n return null;\n }\n var {\n name\n } = path.head;\n if (name === 'has-block' || name === 'has-block-params') {\n return null;\n }\n if (this.ctx.hasBinding(name)) {\n return null;\n }\n if (path.tail.length !== 0) {\n return null;\n }\n if (part.params.length !== 0 || part.hash.pairs.length !== 0) {\n return null;\n }\n var context = LooseModeResolution.attr();\n var callee = this.ctx.builder.freeVar({\n name,\n context,\n symbol: this.ctx.table.allocateFree(name, context),\n loc: path.loc\n });\n return {\n expr: this.ctx.builder.deprecatedCall(arg, callee, part.loc),\n trusting: false\n };\n }\n arg(arg) {\n var offsets = this.ctx.loc(arg.loc);\n var nameSlice = offsets.sliceStartChars({\n chars: arg.name.length\n }).toSlice(arg.name);\n var value = this.maybeDeprecatedCall(nameSlice, arg.value) || this.attrValue(arg.value);\n return this.ctx.builder.arg({\n name: nameSlice,\n value: value.expr,\n trusting: value.trusting\n }, offsets);\n }\n /**\n * This function classifies the head of an ASTv1.Element into an ASTv2.PathHead (if the\n * element is a component) or `'ElementHead'` (if the element is a simple element).\n *\n * Rules:\n *\n * 1. If the variable is an `@arg`, return an `AtHead`\n * 2. If the variable is `this`, return a `ThisHead`\n * 3. If the variable is in the current scope:\n * a. If the scope is the root scope, then return a Free `LocalVarHead`\n * b. Else, return a standard `LocalVarHead`\n * 4. If the tag name is a path and the variable is not in the current scope, Syntax Error\n * 5. If the variable is uppercase return a FreeVar(ResolveAsComponentHead)\n * 6. Otherwise, return `'ElementHead'`\n */\n\n classifyTag(variable, tail, loc) {\n var uppercase = isUpperCase(variable);\n var inScope = variable[0] === '@' || variable === 'this' || this.ctx.hasBinding(variable);\n if (this.ctx.strict && !inScope) {\n if (uppercase) {\n throw generateSyntaxError(\"Attempted to invoke a component that was not in scope in a strict mode template, `<\" + variable + \">`. If you wanted to create an element with that name, convert it to lowercase - `<\" + variable.toLowerCase() + \">`\", loc);\n } // In strict mode, values are always elements unless they are in scope\n\n return 'ElementHead';\n } // Since the parser handed us the HTML element name as a string, we need\n // to convert it into an ASTv1 path so it can be processed using the\n // expression normalizer.\n\n var isComponent = inScope || uppercase;\n var variableLoc = loc.sliceStartChars({\n skipStart: 1,\n chars: variable.length\n });\n var tailLength = tail.reduce((accum, part) => accum + 1 + part.length, 0);\n var pathEnd = variableLoc.getEnd().move(tailLength);\n var pathLoc = variableLoc.withEnd(pathEnd);\n if (isComponent) {\n var path = b.path({\n head: b.head(variable, variableLoc),\n tail,\n loc: pathLoc\n });\n var resolution = this.ctx.resolutionFor(path, ComponentSyntaxContext);\n if (resolution.resolution === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`<\" + resolution.path + \">`) but \" + resolution.head + \" was not in scope\", loc);\n }\n return new ExpressionNormalizer(this.ctx).normalize(path, resolution.resolution);\n } // If the tag name wasn't a valid component but contained a `.`, it's\n // a syntax error.\n\n if (tail.length > 0) {\n throw generateSyntaxError(\"You used \" + variable + \".\" + tail.join('.') + \" as a tag name, but \" + variable + \" is not in scope\", loc);\n }\n return 'ElementHead';\n }\n get expr() {\n return new ExpressionNormalizer(this.ctx);\n }\n }\n class Children {\n constructor(loc, children, block) {\n this.loc = loc;\n this.children = children;\n this.block = block;\n this.namedBlocks = children.filter(c => c instanceof NamedBlock);\n this.hasSemanticContent = Boolean(children.filter(c => {\n if (c instanceof NamedBlock) {\n return false;\n }\n switch (c.type) {\n case 'GlimmerComment':\n case 'HtmlComment':\n return false;\n case 'HtmlText':\n return !/^\\s*$/.exec(c.chars);\n default:\n return true;\n }\n }).length);\n this.nonBlockChildren = children.filter(c => !(c instanceof NamedBlock));\n }\n }\n class TemplateChildren extends Children {\n assertTemplate(table) {\n if ((0, _util.isPresent)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block at the top-level of a template\", this.loc);\n }\n return this.block.builder.template(table, this.nonBlockChildren, this.block.loc(this.loc));\n }\n }\n class BlockChildren extends Children {\n assertBlock(table) {\n if ((0, _util.isPresent)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block nested in a normal block\", this.loc);\n }\n return this.block.builder.block(table, this.nonBlockChildren, this.loc);\n }\n }\n class ElementChildren extends Children {\n constructor(el, loc, children, block) {\n super(loc, children, block);\n this.el = el;\n }\n assertNamedBlock(name, table) {\n if (this.el.base.selfClosing) {\n throw generateSyntaxError(\"<:\" + name.chars + \"/> is not a valid named block: named blocks cannot be self-closing\", this.loc);\n }\n if ((0, _util.isPresent)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block inside <:\" + name.chars + \"> named block: named blocks cannot contain nested named blocks\", this.loc);\n }\n if (!isLowerCase(name.chars)) {\n throw generateSyntaxError(\"<:\" + name.chars + \"> is not a valid named block, and named blocks must begin with a lowercase letter\", this.loc);\n }\n if (this.el.base.attrs.length > 0 || this.el.base.componentArgs.length > 0 || this.el.base.modifiers.length > 0) {\n throw generateSyntaxError(\"named block <:\" + name.chars + \"> cannot have attributes, arguments, or modifiers\", this.loc);\n }\n var offsets = SpanList.range(this.nonBlockChildren, this.loc);\n return this.block.builder.namedBlock(name, this.block.builder.block(table, this.nonBlockChildren, offsets), this.loc);\n }\n assertElement(name, hasBlockParams) {\n if (hasBlockParams) {\n throw generateSyntaxError(\"Unexpected block params in <\" + name + \">: simple elements cannot have block params\", this.loc);\n }\n if ((0, _util.isPresent)(this.namedBlocks)) {\n var names = this.namedBlocks.map(b => b.name);\n if (names.length === 1) {\n throw generateSyntaxError(\"Unexpected named block <:foo> inside <\" + name.chars + \"> HTML element\", this.loc);\n } else {\n var printedNames = names.map(n => \"<:\" + n.chars + \">\").join(', ');\n throw generateSyntaxError(\"Unexpected named blocks inside <\" + name.chars + \"> HTML element (\" + printedNames + \")\", this.loc);\n }\n }\n return this.el.simple(name, this.nonBlockChildren, this.loc);\n }\n assertComponent(name, table, hasBlockParams) {\n if ((0, _util.isPresent)(this.namedBlocks) && this.hasSemanticContent) {\n throw generateSyntaxError(\"Unexpected content inside <\" + name + \"> component invocation: when using named blocks, the tag cannot contain other content\", this.loc);\n }\n if ((0, _util.isPresent)(this.namedBlocks)) {\n if (hasBlockParams) {\n throw generateSyntaxError(\"Unexpected block params list on <\" + name + \"> component invocation: when passing named blocks, the invocation tag cannot take block params\", this.loc);\n }\n var seenNames = new Set();\n for (var block of this.namedBlocks) {\n var _name = block.name.chars;\n if (seenNames.has(_name)) {\n throw generateSyntaxError(\"Component had two named blocks with the same name, `<:\" + _name + \">`. Only one block with a given name may be passed\", this.loc);\n }\n if (_name === 'inverse' && seenNames.has('else') || _name === 'else' && seenNames.has('inverse')) {\n throw generateSyntaxError(\"Component has both <:else> and <:inverse> block. <:inverse> is an alias for <:else>\", this.loc);\n }\n seenNames.add(_name);\n }\n return this.namedBlocks;\n } else {\n return [this.block.builder.namedBlock(SourceSlice.synthetic('default'), this.block.builder.block(table, this.nonBlockChildren, this.loc), this.loc)];\n }\n }\n }\n function printPath(node) {\n if (node.type !== 'PathExpression' && node.path.type === 'PathExpression') {\n return printPath(node.path);\n } else {\n return new Printer({\n entityEncoding: 'raw'\n }).print(node);\n }\n }\n function printHead(node) {\n if (node.type === 'PathExpression') {\n switch (node.head.type) {\n case 'AtHead':\n case 'VarHead':\n return node.head.name;\n case 'ThisHead':\n return 'this';\n }\n } else if (node.path.type === 'PathExpression') {\n return printHead(node.path);\n } else {\n return new Printer({\n entityEncoding: 'raw'\n }).print(node);\n }\n }\n function isKeyword(word) {\n return word in KEYWORDS_TYPES;\n }\n /**\n * This includes the full list of keywords currently in use in the template\n * language, and where their valid usages are.\n */\n\n var KEYWORDS_TYPES = {\n component: ['Call', 'Append', 'Block'],\n debugger: ['Append'],\n 'each-in': ['Block'],\n each: ['Block'],\n 'has-block-params': ['Call', 'Append'],\n 'has-block': ['Call', 'Append'],\n helper: ['Call', 'Append'],\n if: ['Call', 'Append', 'Block'],\n 'in-element': ['Block'],\n let: ['Block'],\n 'link-to': ['Append', 'Block'],\n log: ['Call', 'Append'],\n modifier: ['Call'],\n mount: ['Append'],\n mut: ['Call', 'Append'],\n outlet: ['Append'],\n 'query-params': ['Call'],\n readonly: ['Call', 'Append'],\n unbound: ['Call', 'Append'],\n unless: ['Call', 'Append', 'Block'],\n with: ['Block'],\n yield: ['Append']\n };\n\n /**\n * Gets the correct Token from the Node based on it's type\n */\n _exports.KEYWORDS_TYPES = KEYWORDS_TYPES;\n function tokensFromType(node, scopedTokens, options) {\n if (node.type === 'PathExpression') {\n if (node.head.type === 'AtHead' || node.head.type === 'ThisHead') {\n return;\n }\n var possbleToken = node.head.name;\n if (scopedTokens.indexOf(possbleToken) === -1) {\n return possbleToken;\n }\n } else if (node.type === 'ElementNode') {\n var {\n tag\n } = node;\n var char = tag.charAt(0);\n if (char === ':' || char === '@') {\n return;\n }\n if (!options.includeHtmlElements && tag.indexOf('.') === -1 && tag.toLowerCase() === tag) {\n return;\n }\n if (tag.substr(0, 5) === 'this.') {\n return;\n }\n if (scopedTokens.indexOf(tag) !== -1) {\n return;\n }\n return tag;\n }\n }\n /**\n * Adds tokens to the tokensSet based on their node.type\n */\n\n function addTokens(tokensSet, node, scopedTokens, options) {\n var maybeTokens = tokensFromType(node, scopedTokens, options);\n (Array.isArray(maybeTokens) ? maybeTokens : [maybeTokens]).forEach(maybeToken => {\n if (maybeToken !== undefined && maybeToken[0] !== '@') {\n var maybeTokenFirstSegment = maybeToken.split('.')[0];\n if (!scopedTokens.includes(maybeTokenFirstSegment)) {\n tokensSet.add(maybeToken.split('.')[0]);\n }\n }\n });\n }\n /**\n * Parses and traverses a given handlebars html template to extract all template locals\n * referenced that could possible come from the parent scope. Can exclude known keywords\n * optionally.\n */\n\n function getTemplateLocals(html, options) {\n if (options === void 0) {\n options = {\n includeHtmlElements: false,\n includeKeywords: false\n };\n }\n var ast = preprocess(html);\n var tokensSet = new Set();\n var scopedTokens = [];\n traverse(ast, {\n Block: {\n enter(_ref34) {\n var {\n blockParams\n } = _ref34;\n blockParams.forEach(param => {\n scopedTokens.push(param);\n });\n },\n exit(_ref35) {\n var {\n blockParams\n } = _ref35;\n blockParams.forEach(() => {\n scopedTokens.pop();\n });\n }\n },\n ElementNode: {\n enter(node) {\n node.blockParams.forEach(param => {\n scopedTokens.push(param);\n });\n addTokens(tokensSet, node, scopedTokens, options);\n },\n exit(_ref36) {\n var {\n blockParams\n } = _ref36;\n blockParams.forEach(() => {\n scopedTokens.pop();\n });\n }\n },\n PathExpression(node) {\n addTokens(tokensSet, node, scopedTokens, options);\n }\n });\n var tokens = [];\n tokensSet.forEach(s => tokens.push(s));\n if (!(options === null || options === void 0 ? void 0 : options.includeKeywords)) {\n tokens = tokens.filter(token => !isKeyword(token));\n }\n return tokens;\n }\n});","define(\"@glimmer/util\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports._WeakSet = _exports.Stack = _exports.SERIALIZATION_FIRST_NODE_STRING = _exports.LOGGER = _exports.LOCAL_LOGGER = _exports.HAS_NATIVE_SYMBOL = _exports.HAS_NATIVE_PROXY = _exports.EMPTY_STRING_ARRAY = _exports.EMPTY_NUMBER_ARRAY = _exports.EMPTY_ARRAY = void 0;\n _exports.assert = debugAssert;\n _exports.assertNever = assertNever;\n _exports.assertPresent = assertPresent;\n _exports.beginTestSteps = _exports.assign = void 0;\n _exports.buildUntouchableThis = buildUntouchableThis;\n _exports.castToBrowser = castToBrowser;\n _exports.castToSimple = castToSimple;\n _exports.checkNode = checkNode;\n _exports.clearElement = clearElement;\n _exports.constants = constants;\n _exports.debugToString = void 0;\n _exports.decodeHandle = decodeHandle;\n _exports.decodeImmediate = decodeImmediate;\n _exports.decodeNegative = decodeNegative;\n _exports.decodePositive = decodePositive;\n _exports.deprecate = deprecate;\n _exports.dict = dict;\n _exports.emptyArray = emptyArray;\n _exports.encodeHandle = encodeHandle;\n _exports.encodeImmediate = encodeImmediate;\n _exports.encodeNegative = encodeNegative;\n _exports.encodePositive = encodePositive;\n _exports.endTestSteps = void 0;\n _exports.enumerableSymbol = enumerableSymbol;\n _exports.exhausted = exhausted;\n _exports.expect = expect;\n _exports.extractHandle = extractHandle;\n _exports.fillNulls = fillNulls;\n _exports.ifPresent = ifPresent;\n _exports.intern = intern;\n _exports.isDict = isDict;\n _exports.isEmptyArray = isEmptyArray;\n _exports.isErrHandle = isErrHandle;\n _exports.isHandle = isHandle;\n _exports.isNonPrimitiveHandle = isNonPrimitiveHandle;\n _exports.isObject = isObject;\n _exports.isOkHandle = isOkHandle;\n _exports.isPresent = isPresent;\n _exports.isSerializationFirstNode = isSerializationFirstNode;\n _exports.isSmallInt = isSmallInt;\n _exports.keys = keys;\n _exports.logStep = void 0;\n _exports.mapPresent = mapPresent;\n _exports.strip = strip;\n _exports.symbol = void 0;\n _exports.toPresentOption = toPresentOption;\n _exports.tuple = void 0;\n _exports.unreachable = unreachable;\n _exports.unwrap = unwrap;\n _exports.unwrapHandle = unwrapHandle;\n _exports.unwrapTemplate = unwrapTemplate;\n _exports.values = values;\n _exports.verifySteps = void 0;\n var EMPTY_ARRAY = Object.freeze([]);\n _exports.EMPTY_ARRAY = EMPTY_ARRAY;\n function emptyArray() {\n return EMPTY_ARRAY;\n }\n var EMPTY_STRING_ARRAY = emptyArray();\n _exports.EMPTY_STRING_ARRAY = EMPTY_STRING_ARRAY;\n var EMPTY_NUMBER_ARRAY = emptyArray();\n /**\n * This function returns `true` if the input array is the special empty array sentinel,\n * which is sometimes used for optimizations.\n */\n _exports.EMPTY_NUMBER_ARRAY = EMPTY_NUMBER_ARRAY;\n function isEmptyArray(input) {\n return input === EMPTY_ARRAY;\n }\n\n // import Logger from './logger';\n\n function debugAssert(test, msg) {\n // if (!alreadyWarned) {\n // alreadyWarned = true;\n // Logger.warn(\"Don't leave debug assertions on in public builds\");\n // }\n if (!test) {\n throw new Error(msg || 'assertion failure');\n }\n }\n function deprecate(desc) {\n LOCAL_LOGGER.warn(\"DEPRECATION: \" + desc);\n }\n function dict() {\n return Object.create(null);\n }\n function isDict(u) {\n return u !== null && u !== undefined;\n }\n function isObject(u) {\n return typeof u === 'function' || typeof u === 'object' && u !== null;\n }\n class StackImpl {\n constructor(values) {\n if (values === void 0) {\n values = [];\n }\n this.current = null;\n this.stack = values;\n }\n get size() {\n return this.stack.length;\n }\n push(item) {\n this.current = item;\n this.stack.push(item);\n }\n pop() {\n var item = this.stack.pop();\n var len = this.stack.length;\n this.current = len === 0 ? null : this.stack[len - 1];\n return item === undefined ? null : item;\n }\n nth(from) {\n var len = this.stack.length;\n return len < from ? null : this.stack[len - from];\n }\n isEmpty() {\n return this.stack.length === 0;\n }\n toArray() {\n return this.stack;\n }\n }\n _exports.Stack = StackImpl;\n function clearElement(parent) {\n var current = parent.firstChild;\n while (current) {\n var next = current.nextSibling;\n parent.removeChild(current);\n current = next;\n }\n }\n var SERIALIZATION_FIRST_NODE_STRING = '%+b:0%';\n _exports.SERIALIZATION_FIRST_NODE_STRING = SERIALIZATION_FIRST_NODE_STRING;\n function isSerializationFirstNode(node) {\n return node.nodeValue === SERIALIZATION_FIRST_NODE_STRING;\n }\n var assign = Object.assign;\n _exports.assign = assign;\n function fillNulls(count) {\n var arr = new Array(count);\n for (var i = 0; i < count; i++) {\n arr[i] = null;\n }\n return arr;\n }\n function values(obj) {\n var vals = [];\n for (var key in obj) {\n vals.push(obj[key]);\n }\n return vals;\n }\n\n /**\n Strongly hint runtimes to intern the provided string.\n \n When do I need to use this function?\n \n For the most part, never. Pre-mature optimization is bad, and often the\n runtime does exactly what you need it to, and more often the trade-off isn't\n worth it.\n \n Why?\n \n Runtimes store strings in at least 2 different representations:\n Ropes and Symbols (interned strings). The Rope provides a memory efficient\n data-structure for strings created from concatenation or some other string\n manipulation like splitting.\n \n Unfortunately checking equality of different ropes can be quite costly as\n runtimes must resort to clever string comparison algorithms. These\n algorithms typically cost in proportion to the length of the string.\n Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n unique by their string content, equality checks can be done by pointer\n comparison.\n \n How do I know if my string is a rope or symbol?\n \n Typically (warning general sweeping statement, but truthy in runtimes at\n present) static strings created as part of the JS source are interned.\n Strings often used for comparisons can be interned at runtime if some\n criteria are met. One of these criteria can be the size of the entire rope.\n For example, in chrome 38 a rope longer then 12 characters will not\n intern, nor will segments of that rope.\n \n Some numbers: http://jsperf.com/eval-vs-keys/8\n \n Known Trick™\n \n @private\n @return {String} interned version of the provided string\n */\n function intern(str) {\n var obj = {};\n obj[str] = 1;\n for (var key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n }\n var HAS_NATIVE_PROXY = typeof Proxy === 'function';\n _exports.HAS_NATIVE_PROXY = HAS_NATIVE_PROXY;\n var HAS_NATIVE_SYMBOL = function () {\n if (typeof Symbol !== 'function') {\n return false;\n } // eslint-disable-next-line symbol-description\n\n return typeof Symbol() === 'symbol';\n }();\n _exports.HAS_NATIVE_SYMBOL = HAS_NATIVE_SYMBOL;\n function keys(obj) {\n return Object.keys(obj);\n }\n function unwrap(val) {\n if (val === null || val === undefined) throw new Error(\"Expected value to be present\");\n return val;\n }\n function expect(val, message) {\n if (val === null || val === undefined) throw new Error(message);\n return val;\n }\n function unreachable(message) {\n if (message === void 0) {\n message = 'unreachable';\n }\n return new Error(message);\n }\n function exhausted(value) {\n throw new Error(\"Exhausted \" + value);\n }\n var tuple = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return args;\n };\n _exports.tuple = tuple;\n function enumerableSymbol(key) {\n return intern(\"__\" + key + Math.floor(Math.random() * Date.now()) + \"__\");\n }\n var symbol = HAS_NATIVE_SYMBOL ? Symbol : enumerableSymbol;\n _exports.symbol = symbol;\n function strip(strings) {\n var out = '';\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n for (var i = 0; i < strings.length; i++) {\n var string = strings[i];\n var dynamic = args[i] !== undefined ? String(args[i]) : '';\n out += \"\" + string + dynamic;\n }\n var lines = out.split('\\n');\n while (lines.length && lines[0].match(/^\\s*$/)) {\n lines.shift();\n }\n while (lines.length && lines[lines.length - 1].match(/^\\s*$/)) {\n lines.pop();\n }\n var min = Infinity;\n for (var line of lines) {\n var leading = line.match(/^\\s*/)[0].length;\n min = Math.min(min, leading);\n }\n var stripped = [];\n for (var _line of lines) {\n stripped.push(_line.slice(min));\n }\n return stripped.join('\\n');\n }\n function isHandle(value) {\n return value >= 0;\n }\n function isNonPrimitiveHandle(value) {\n return value > 3\n /* ENCODED_UNDEFINED_HANDLE */;\n }\n\n function constants() {\n for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n return [false, true, null, undefined, ...values];\n }\n function isSmallInt(value) {\n return value % 1 === 0 && value <= 536870911\n /* MAX_INT */ && value >= -536870912\n /* MIN_INT */;\n }\n\n function encodeNegative(num) {\n return num & -536870913\n /* SIGN_BIT */;\n }\n\n function decodeNegative(num) {\n return num | ~-536870913\n /* SIGN_BIT */;\n }\n\n function encodePositive(num) {\n return ~num;\n }\n function decodePositive(num) {\n return ~num;\n }\n function encodeHandle(num) {\n return num;\n }\n function decodeHandle(num) {\n return num;\n }\n function encodeImmediate(num) {\n num |= 0;\n return num < 0 ? encodeNegative(num) : encodePositive(num);\n }\n function decodeImmediate(num) {\n num |= 0;\n return num > -536870913\n /* SIGN_BIT */ ? decodePositive(num) : decodeNegative(num);\n } // Warm\n [1, -1].forEach(x => decodeImmediate(encodeImmediate(x)));\n function unwrapHandle(handle) {\n if (typeof handle === 'number') {\n return handle;\n } else {\n var error = handle.errors[0];\n throw new Error(\"Compile Error: \" + error.problem + \" @ \" + error.span.start + \"..\" + error.span.end);\n }\n }\n function unwrapTemplate(template) {\n if (template.result === 'error') {\n throw new Error(\"Compile Error: \" + template.problem + \" @ \" + template.span.start + \"..\" + template.span.end);\n }\n return template;\n }\n function extractHandle(handle) {\n if (typeof handle === 'number') {\n return handle;\n } else {\n return handle.handle;\n }\n }\n function isOkHandle(handle) {\n return typeof handle === 'number';\n }\n function isErrHandle(handle) {\n return typeof handle === 'number';\n }\n var weakSet = typeof WeakSet === 'function' ? WeakSet : class WeakSetPolyFill {\n constructor() {\n this._map = new WeakMap();\n }\n add(val) {\n this._map.set(val, true);\n return this;\n }\n delete(val) {\n return this._map.delete(val);\n }\n has(val) {\n return this._map.has(val);\n }\n };\n _exports._WeakSet = weakSet;\n function castToSimple(node) {\n if (isDocument(node)) {\n return node;\n } else if (isElement(node)) {\n return node;\n } else {\n return node;\n }\n }\n function castToBrowser(node, sugaryCheck) {\n if (node === null || node === undefined) {\n return null;\n }\n if (typeof document === undefined) {\n throw new Error('Attempted to cast to a browser node in a non-browser context');\n }\n if (isDocument(node)) {\n return node;\n }\n if (node.ownerDocument !== document) {\n throw new Error('Attempted to cast to a browser node with a node that was not created from this document');\n }\n return checkNode(node, sugaryCheck);\n }\n function checkError(from, check) {\n return new Error(\"cannot cast a \" + from + \" into \" + check);\n }\n function isDocument(node) {\n return node.nodeType === 9\n /* DOCUMENT_NODE */;\n }\n\n function isElement(node) {\n return node.nodeType === 1\n /* ELEMENT_NODE */;\n }\n\n function checkNode(node, check) {\n var isMatch = false;\n if (node !== null) {\n if (typeof check === 'string') {\n isMatch = stringCheckNode(node, check);\n } else if (Array.isArray(check)) {\n isMatch = check.some(c => stringCheckNode(node, c));\n } else {\n throw unreachable();\n }\n }\n if (isMatch) {\n return node;\n } else {\n throw checkError(\"SimpleElement(\" + node + \")\", check);\n }\n }\n function stringCheckNode(node, check) {\n switch (check) {\n case 'NODE':\n return true;\n case 'HTML':\n return node instanceof HTMLElement;\n case 'SVG':\n return node instanceof SVGElement;\n case 'ELEMENT':\n return node instanceof Element;\n default:\n if (check.toUpperCase() === check) {\n throw new Error(\"BUG: this code is missing handling for a generic node type\");\n }\n return node instanceof Element && node.tagName.toLowerCase() === check;\n }\n }\n function isPresent(list) {\n return list.length > 0;\n }\n function ifPresent(list, ifPresent, otherwise) {\n if (isPresent(list)) {\n return ifPresent(list);\n } else {\n return otherwise();\n }\n }\n function toPresentOption(list) {\n if (isPresent(list)) {\n return list;\n } else {\n return null;\n }\n }\n function assertPresent(list, message) {\n if (message === void 0) {\n message = \"unexpected empty list\";\n }\n if (!isPresent(list)) {\n throw new Error(message);\n }\n }\n function mapPresent(list, callback) {\n if (list === null) {\n return null;\n }\n var out = [];\n for (var item of list) {\n out.push(callback(item));\n }\n return out;\n }\n function buildUntouchableThis(source) {\n var context = null;\n if (true /* DEBUG */ && HAS_NATIVE_PROXY) {\n var assertOnProperty = property => {\n throw new Error(\"You accessed `this.\" + String(property) + \"` from a function passed to the \" + source + \", but the function itself was not bound to a valid `this` context. Consider updating to use a bound function (for instance, use an arrow function, `() => {}`).\");\n };\n context = new Proxy({}, {\n get(_target, property) {\n assertOnProperty(property);\n },\n set(_target, property) {\n assertOnProperty(property);\n return false;\n },\n has(_target, property) {\n assertOnProperty(property);\n return false;\n }\n });\n }\n return context;\n }\n var debugToString;\n if (true /* DEBUG */) {\n var getFunctionName = fn => {\n var functionName = fn.name;\n if (functionName === undefined) {\n var match = Function.prototype.toString.call(fn).match(/function (\\w+)\\s*\\(/);\n functionName = match && match[1] || '';\n }\n return functionName.replace(/^bound /, '');\n };\n var getObjectName = obj => {\n var name;\n var className;\n if (obj.constructor && typeof obj.constructor === 'function') {\n className = getFunctionName(obj.constructor);\n }\n if ('toString' in obj && obj.toString !== Object.prototype.toString && obj.toString !== Function.prototype.toString) {\n name = obj.toString();\n } // If the class has a decent looking name, and the `toString` is one of the\n // default Ember toStrings, replace the constructor portion of the toString\n // with the class name. We check the length of the class name to prevent doing\n // this when the value is minified.\n\n if (name && name.match(/<.*:ember\\d+>/) && className && className[0] !== '_' && className.length > 2 && className !== 'Class') {\n return name.replace(/<.*:/, \"<\" + className + \":\");\n }\n return name || className;\n };\n var getPrimitiveName = value => {\n return String(value);\n };\n debugToString = value => {\n if (typeof value === 'function') {\n return getFunctionName(value) || \"(unknown function)\";\n } else if (typeof value === 'object' && value !== null) {\n return getObjectName(value) || \"(unknown object)\";\n } else {\n return getPrimitiveName(value);\n }\n };\n }\n var debugToString$1 = debugToString;\n _exports.debugToString = debugToString$1;\n var beginTestSteps;\n _exports.beginTestSteps = beginTestSteps;\n var endTestSteps;\n _exports.endTestSteps = endTestSteps;\n var verifySteps;\n _exports.verifySteps = verifySteps;\n var logStep;\n\n /**\n * This constant exists to make it easier to differentiate normal logs from\n * errant console.logs. LOCAL_LOGGER should only be used inside a\n * LOCAL_SHOULD_LOG check.\n *\n * It does not alleviate the need to check LOCAL_SHOULD_LOG, which is used\n * for stripping.\n */\n _exports.logStep = logStep;\n var LOCAL_LOGGER = console;\n /**\n * This constant exists to make it easier to differentiate normal logs from\n * errant console.logs. LOGGER can be used outside of LOCAL_SHOULD_LOG checks,\n * and is meant to be used in the rare situation where a console.* call is\n * actually appropriate.\n */\n _exports.LOCAL_LOGGER = LOCAL_LOGGER;\n var LOGGER = console;\n _exports.LOGGER = LOGGER;\n function assertNever(value, desc) {\n if (desc === void 0) {\n desc = 'unexpected unreachable branch';\n }\n LOGGER.log('unreachable', value);\n LOGGER.log(desc + \" :: \" + JSON.stringify(value) + \" (\" + value + \")\");\n throw new Error(\"code reached unreachable\");\n }\n});","define(\"@glimmer/wire-format\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.getStringFromValue = getStringFromValue;\n _exports.is = is;\n _exports.isArgument = isArgument;\n _exports.isAttribute = isAttribute;\n _exports.isGet = _exports.isFlushElement = void 0;\n _exports.isHelper = isHelper;\n _exports.isStringLiteral = isStringLiteral;\n function is(variant) {\n return function (value) {\n return Array.isArray(value) && value[0] === variant;\n };\n } // Statements\n\n var isFlushElement = is(12\n /* FlushElement */);\n _exports.isFlushElement = isFlushElement;\n function isAttribute(val) {\n return val[0] === 14\n /* StaticAttr */ || val[0] === 15\n /* DynamicAttr */ || val[0] === 22\n /* TrustingDynamicAttr */ || val[0] === 16\n /* ComponentAttr */ || val[0] === 24\n /* StaticComponentAttr */ || val[0] === 23\n /* TrustingComponentAttr */ || val[0] === 17\n /* AttrSplat */ || val[0] === 4\n /* Modifier */;\n }\n\n function isStringLiteral(expr) {\n return typeof expr === 'string';\n }\n function getStringFromValue(expr) {\n return expr;\n }\n function isArgument(val) {\n return val[0] === 21\n /* StaticArg */ || val[0] === 20\n /* DynamicArg */;\n }\n\n function isHelper(expr) {\n return Array.isArray(expr) && expr[0] === 28\n /* Call */;\n } // Expressions\n\n var isGet = is(30\n /* GetSymbol */);\n _exports.isGet = isGet;\n});","define(\"@handlebars/parser/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.Exception = Exception;\n _exports.PrintVisitor = PrintVisitor;\n _exports.Visitor = Visitor;\n _exports.WhitespaceControl = WhitespaceControl;\n _exports.parse = parse;\n _exports.parseWithoutProcessing = parseWithoutProcessing;\n _exports.parser = void 0;\n _exports.print = print;\n var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n function Exception(message, node) {\n var loc = node && node.loc,\n line,\n endLineNumber,\n column,\n endColumn;\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n message += ' - ' + line + ':' + column;\n }\n var tmp = Error.prototype.constructor.call(this, message);\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n }\n Exception.prototype = new Error();\n function Visitor() {\n this.parents = [];\n }\n Visitor.prototype = {\n constructor: Visitor,\n mutating: false,\n // Visits a given value. If mutating, will replace the value if necessary.\n acceptKey: function (node, name) {\n var value = this.accept(node[name]);\n if (this.mutating) {\n // Hacky sanity check: This may have a few false positives for type for the helper\n // methods but will generally do the right thing without a lot of overhead.\n if (value && !Visitor.prototype[value.type]) {\n throw new Exception('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n }\n node[name] = value;\n }\n },\n // Performs an accept operation with added sanity check to ensure\n // required keys are not removed.\n acceptRequired: function (node, name) {\n this.acceptKey(node, name);\n if (!node[name]) {\n throw new Exception(node.type + ' requires ' + name);\n }\n },\n // Traverses a given array. If mutating, empty respnses will be removed\n // for child elements.\n acceptArray: function (array) {\n for (var i = 0, l = array.length; i < l; i++) {\n this.acceptKey(array, i);\n if (!array[i]) {\n array.splice(i, 1);\n i--;\n l--;\n }\n }\n },\n accept: function (object) {\n if (!object) {\n return;\n }\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new Exception('Unknown type: ' + object.type, object);\n }\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n var ret = this[object.type](object);\n this.current = this.parents.shift();\n if (!this.mutating || ret) {\n return ret;\n } else if (ret !== false) {\n return object;\n }\n },\n Program: function (program) {\n this.acceptArray(program.body);\n },\n MustacheStatement: visitSubExpression,\n Decorator: visitSubExpression,\n BlockStatement: visitBlock,\n DecoratorBlock: visitBlock,\n PartialStatement: visitPartial,\n PartialBlockStatement: function (partial) {\n visitPartial.call(this, partial);\n this.acceptKey(partial, 'program');\n },\n ContentStatement: function /* content */ () {},\n CommentStatement: function /* comment */ () {},\n SubExpression: visitSubExpression,\n PathExpression: function /* path */ () {},\n StringLiteral: function /* string */ () {},\n NumberLiteral: function /* number */ () {},\n BooleanLiteral: function /* bool */ () {},\n UndefinedLiteral: function /* literal */ () {},\n NullLiteral: function /* literal */ () {},\n Hash: function (hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function (pair) {\n this.acceptRequired(pair, 'value');\n }\n };\n function visitSubExpression(mustache) {\n this.acceptRequired(mustache, 'path');\n this.acceptArray(mustache.params);\n this.acceptKey(mustache, 'hash');\n }\n function visitBlock(block) {\n visitSubExpression.call(this, block);\n this.acceptKey(block, 'program');\n this.acceptKey(block, 'inverse');\n }\n function visitPartial(partial) {\n this.acceptRequired(partial, 'name');\n this.acceptArray(partial.params);\n this.acceptKey(partial, 'hash');\n }\n function WhitespaceControl(options) {\n if (options === void 0) {\n options = {};\n }\n this.options = options;\n }\n WhitespaceControl.prototype = new Visitor();\n WhitespaceControl.prototype.Program = function (program) {\n var doStandalone = !this.options.ignoreStandalone;\n var isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n var body = program.body;\n for (var i = 0, l = body.length; i < l; i++) {\n var current = body[i],\n strip = this.accept(current);\n if (!strip) {\n continue;\n }\n var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n if (strip.close) {\n omitRight(body, i, true);\n }\n if (strip.open) {\n omitLeft(body, i, true);\n }\n if (doStandalone && inlineStandalone) {\n omitRight(body, i);\n if (omitLeft(body, i)) {\n // If we are on a standalone node, save the indent info for partials\n if (current.type === 'PartialStatement') {\n // Pull out the whitespace from the final line\n current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n }\n }\n }\n if (doStandalone && openStandalone) {\n omitRight((current.program || current.inverse).body);\n // Strip out the previous content node if it's whitespace only\n omitLeft(body, i);\n }\n if (doStandalone && closeStandalone) {\n // Always strip the next node\n omitRight(body, i);\n omitLeft((current.inverse || current.program).body);\n }\n }\n return program;\n };\n WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n this.accept(block.program);\n this.accept(block.inverse);\n // Find the inverse program that is involed with whitespace stripping.\n var program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n if (inverse && inverse.chained) {\n firstInverse = inverse.body[0].program;\n // Walk the inverse chain to find the last inverse that is actually in the chain.\n while (lastInverse.chained) {\n lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n }\n }\n var strip = {\n open: block.openStrip.open,\n close: block.closeStrip.close,\n // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n // so our parent can determine if we actually are standalone\n openStandalone: isNextWhitespace(program.body),\n closeStandalone: isPrevWhitespace((firstInverse || program).body)\n };\n if (block.openStrip.close) {\n omitRight(program.body, null, true);\n }\n if (inverse) {\n var inverseStrip = block.inverseStrip;\n if (inverseStrip.open) {\n omitLeft(program.body, null, true);\n }\n if (inverseStrip.close) {\n omitRight(firstInverse.body, null, true);\n }\n if (block.closeStrip.open) {\n omitLeft(lastInverse.body, null, true);\n }\n // Find standalone else statments\n if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n return strip;\n };\n WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n return mustache.strip;\n };\n WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n /* istanbul ignore next */\n var strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n };\n function isPrevWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = body.length;\n }\n // Nodes that end with newlines are considered whitespace (but are special\n // cased for strip operations)\n var prev = body[i - 1],\n sibling = body[i - 2];\n if (!prev) {\n return isRoot;\n }\n if (prev.type === 'ContentStatement') {\n return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n }\n }\n function isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n var next = body[i + 1],\n sibling = body[i + 2];\n if (!next) {\n return isRoot;\n }\n if (next.type === 'ContentStatement') {\n return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n }\n }\n // Marks the node to the right of the position as omitted.\n // I.e. {{foo}}' ' will mark the ' ' node as omitted.\n //\n // If i is undefined, then the first child will be marked as such.\n //\n // If multiple is truthy then all whitespace will be stripped out until non-whitespace\n // content is met.\n function omitRight(body, i, multiple) {\n var current = body[i == null ? 0 : i + 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n return;\n }\n var original = current.value;\n current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n current.rightStripped = current.value !== original;\n }\n // Marks the node to the left of the position as omitted.\n // I.e. ' '{{foo}} will mark the ' ' node as omitted.\n //\n // If i is undefined then the last child will be marked as such.\n //\n // If multiple is truthy then all whitespace will be stripped out until non-whitespace\n // content is met.\n function omitLeft(body, i, multiple) {\n var current = body[i == null ? body.length - 1 : i - 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n return;\n }\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n var original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n }\n\n /* parser generated by jison 0.4.18 */\n /*\n Returns a Parser object of the following structure:\n \n Parser: {\n yy: {}\n }\n \n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n \n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n \n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n \n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n \n \n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n \n \n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n */\n var parser = function () {\n var o = function (k, v, o, l) {\n for (o = o || {}, l = k.length; l--; o[k[l]] = v);\n return o;\n },\n $V0 = [2, 44],\n $V1 = [1, 20],\n $V2 = [5, 14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60],\n $V3 = [1, 35],\n $V4 = [1, 38],\n $V5 = [1, 30],\n $V6 = [1, 31],\n $V7 = [1, 32],\n $V8 = [1, 33],\n $V9 = [1, 34],\n $Va = [1, 37],\n $Vb = [14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60],\n $Vc = [14, 15, 19, 29, 34, 44, 47, 48, 52, 56, 60],\n $Vd = [15, 18],\n $Ve = [14, 15, 19, 29, 34, 47, 48, 52, 56, 60],\n $Vf = [33, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vg = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84],\n $Vh = [1, 51],\n $Vi = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84, 86],\n $Vj = [2, 43],\n $Vk = [55, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vl = [1, 58],\n $Vm = [1, 59],\n $Vn = [1, 66],\n $Vo = [33, 64, 71, 74, 79, 80, 81, 82, 83, 84],\n $Vp = [23, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vq = [1, 76],\n $Vr = [64, 67, 71, 79, 80, 81, 82, 83, 84],\n $Vs = [33, 74],\n $Vt = [23, 33, 55, 67, 71, 74],\n $Vu = [1, 106],\n $Vv = [1, 118],\n $Vw = [71, 76];\n var parser = {\n trace: function trace() {},\n yy: {},\n symbols_: {\n \"error\": 2,\n \"root\": 3,\n \"program\": 4,\n \"EOF\": 5,\n \"program_repetition0\": 6,\n \"statement\": 7,\n \"mustache\": 8,\n \"block\": 9,\n \"rawBlock\": 10,\n \"partial\": 11,\n \"partialBlock\": 12,\n \"content\": 13,\n \"COMMENT\": 14,\n \"CONTENT\": 15,\n \"openRawBlock\": 16,\n \"rawBlock_repetition0\": 17,\n \"END_RAW_BLOCK\": 18,\n \"OPEN_RAW_BLOCK\": 19,\n \"helperName\": 20,\n \"openRawBlock_repetition0\": 21,\n \"openRawBlock_option0\": 22,\n \"CLOSE_RAW_BLOCK\": 23,\n \"openBlock\": 24,\n \"block_option0\": 25,\n \"closeBlock\": 26,\n \"openInverse\": 27,\n \"block_option1\": 28,\n \"OPEN_BLOCK\": 29,\n \"openBlock_repetition0\": 30,\n \"openBlock_option0\": 31,\n \"openBlock_option1\": 32,\n \"CLOSE\": 33,\n \"OPEN_INVERSE\": 34,\n \"openInverse_repetition0\": 35,\n \"openInverse_option0\": 36,\n \"openInverse_option1\": 37,\n \"openInverseChain\": 38,\n \"OPEN_INVERSE_CHAIN\": 39,\n \"openInverseChain_repetition0\": 40,\n \"openInverseChain_option0\": 41,\n \"openInverseChain_option1\": 42,\n \"inverseAndProgram\": 43,\n \"INVERSE\": 44,\n \"inverseChain\": 45,\n \"inverseChain_option0\": 46,\n \"OPEN_ENDBLOCK\": 47,\n \"OPEN\": 48,\n \"expr\": 49,\n \"mustache_repetition0\": 50,\n \"mustache_option0\": 51,\n \"OPEN_UNESCAPED\": 52,\n \"mustache_repetition1\": 53,\n \"mustache_option1\": 54,\n \"CLOSE_UNESCAPED\": 55,\n \"OPEN_PARTIAL\": 56,\n \"partial_repetition0\": 57,\n \"partial_option0\": 58,\n \"openPartialBlock\": 59,\n \"OPEN_PARTIAL_BLOCK\": 60,\n \"openPartialBlock_repetition0\": 61,\n \"openPartialBlock_option0\": 62,\n \"sexpr\": 63,\n \"OPEN_SEXPR\": 64,\n \"sexpr_repetition0\": 65,\n \"sexpr_option0\": 66,\n \"CLOSE_SEXPR\": 67,\n \"hash\": 68,\n \"hash_repetition_plus0\": 69,\n \"hashSegment\": 70,\n \"ID\": 71,\n \"EQUALS\": 72,\n \"blockParams\": 73,\n \"OPEN_BLOCK_PARAMS\": 74,\n \"blockParams_repetition_plus0\": 75,\n \"CLOSE_BLOCK_PARAMS\": 76,\n \"path\": 77,\n \"dataName\": 78,\n \"STRING\": 79,\n \"NUMBER\": 80,\n \"BOOLEAN\": 81,\n \"UNDEFINED\": 82,\n \"NULL\": 83,\n \"DATA\": 84,\n \"pathSegments\": 85,\n \"SEP\": 86,\n \"$accept\": 0,\n \"$end\": 1\n },\n terminals_: {\n 2: \"error\",\n 5: \"EOF\",\n 14: \"COMMENT\",\n 15: \"CONTENT\",\n 18: \"END_RAW_BLOCK\",\n 19: \"OPEN_RAW_BLOCK\",\n 23: \"CLOSE_RAW_BLOCK\",\n 29: \"OPEN_BLOCK\",\n 33: \"CLOSE\",\n 34: \"OPEN_INVERSE\",\n 39: \"OPEN_INVERSE_CHAIN\",\n 44: \"INVERSE\",\n 47: \"OPEN_ENDBLOCK\",\n 48: \"OPEN\",\n 52: \"OPEN_UNESCAPED\",\n 55: \"CLOSE_UNESCAPED\",\n 56: \"OPEN_PARTIAL\",\n 60: \"OPEN_PARTIAL_BLOCK\",\n 64: \"OPEN_SEXPR\",\n 67: \"CLOSE_SEXPR\",\n 71: \"ID\",\n 72: \"EQUALS\",\n 74: \"OPEN_BLOCK_PARAMS\",\n 76: \"CLOSE_BLOCK_PARAMS\",\n 79: \"STRING\",\n 80: \"NUMBER\",\n 81: \"BOOLEAN\",\n 82: \"UNDEFINED\",\n 83: \"NULL\",\n 84: \"DATA\",\n 86: \"SEP\"\n },\n productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [49, 1], [49, 1], [63, 5], [68, 1], [70, 3], [73, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [78, 2], [77, 1], [85, 3], [85, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [50, 0], [50, 2], [51, 0], [51, 1], [53, 0], [53, 2], [54, 0], [54, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [65, 0], [65, 2], [66, 0], [66, 1], [69, 1], [69, 2], [75, 1], [75, 2]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n /* this == yyval */\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n case 2:\n this.$ = yy.prepareProgram($$[$0]);\n break;\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 20:\n case 27:\n case 28:\n case 33:\n case 34:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 11:\n this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 12:\n this.$ = {\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1]\n };\n break;\n case 13:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n break;\n case 14:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n break;\n case 15:\n this.$ = {\n open: $$[$0 - 5],\n path: $$[$0 - 4],\n params: $$[$0 - 3],\n hash: $$[$0 - 2],\n blockParams: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 5], $$[$0])\n };\n break;\n case 16:\n case 17:\n this.$ = {\n path: $$[$0 - 4],\n params: $$[$0 - 3],\n hash: $$[$0 - 2],\n blockParams: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 5], $$[$0])\n };\n break;\n case 18:\n this.$ = {\n strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]),\n program: $$[$0]\n };\n break;\n case 19:\n var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n program.chained = true;\n this.$ = {\n strip: $$[$0 - 2].strip,\n program: program,\n chain: true\n };\n break;\n case 21:\n this.$ = {\n path: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 2], $$[$0])\n };\n break;\n case 22:\n case 23:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 24:\n this.$ = {\n type: 'PartialStatement',\n name: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n indent: '',\n strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 25:\n this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 26:\n this.$ = {\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 4], $$[$0])\n };\n break;\n case 29:\n this.$ = {\n type: 'SubExpression',\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n loc: yy.locInfo(this._$)\n };\n break;\n case 30:\n this.$ = {\n type: 'Hash',\n pairs: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 31:\n this.$ = {\n type: 'HashPair',\n key: yy.id($$[$0 - 2]),\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 32:\n this.$ = yy.id($$[$0 - 1]);\n break;\n case 35:\n this.$ = {\n type: 'StringLiteral',\n value: $$[$0],\n original: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 36:\n this.$ = {\n type: 'NumberLiteral',\n value: Number($$[$0]),\n original: Number($$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 37:\n this.$ = {\n type: 'BooleanLiteral',\n value: $$[$0] === 'true',\n original: $$[$0] === 'true',\n loc: yy.locInfo(this._$)\n };\n break;\n case 38:\n this.$ = {\n type: 'UndefinedLiteral',\n original: undefined,\n value: undefined,\n loc: yy.locInfo(this._$)\n };\n break;\n case 39:\n this.$ = {\n type: 'NullLiteral',\n original: null,\n value: null,\n loc: yy.locInfo(this._$)\n };\n break;\n case 40:\n this.$ = yy.preparePath(true, $$[$0], this._$);\n break;\n case 41:\n this.$ = yy.preparePath(false, $$[$0], this._$);\n break;\n case 42:\n $$[$0 - 2].push({\n part: yy.id($$[$0]),\n original: $$[$0],\n separator: $$[$0 - 1]\n });\n this.$ = $$[$0 - 2];\n break;\n case 43:\n this.$ = [{\n part: yy.id($$[$0]),\n original: $$[$0]\n }];\n break;\n case 44:\n case 46:\n case 48:\n case 56:\n case 62:\n case 68:\n case 76:\n case 80:\n case 84:\n case 88:\n case 92:\n this.$ = [];\n break;\n case 45:\n case 47:\n case 49:\n case 57:\n case 63:\n case 69:\n case 77:\n case 81:\n case 85:\n case 89:\n case 93:\n case 97:\n case 99:\n $$[$0 - 1].push($$[$0]);\n break;\n case 96:\n case 98:\n this.$ = [$$[$0]];\n break;\n }\n },\n table: [o([5, 14, 15, 19, 29, 34, 48, 52, 56, 60], $V0, {\n 3: 1,\n 4: 2,\n 6: 3\n }), {\n 1: [3]\n }, {\n 5: [1, 4]\n }, o([5, 39, 44, 47], [2, 2], {\n 7: 5,\n 8: 6,\n 9: 7,\n 10: 8,\n 11: 9,\n 12: 10,\n 13: 11,\n 24: 15,\n 27: 16,\n 16: 17,\n 59: 19,\n 14: [1, 12],\n 15: $V1,\n 19: [1, 23],\n 29: [1, 21],\n 34: [1, 22],\n 48: [1, 13],\n 52: [1, 14],\n 56: [1, 18],\n 60: [1, 24]\n }), {\n 1: [2, 1]\n }, o($V2, [2, 45]), o($V2, [2, 3]), o($V2, [2, 4]), o($V2, [2, 5]), o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 8]), o($V2, [2, 9]), {\n 20: 26,\n 49: 25,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 49: 39,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vb, $V0, {\n 6: 3,\n 4: 40\n }), o($Vc, $V0, {\n 6: 3,\n 4: 41\n }), o($Vd, [2, 46], {\n 17: 42\n }), {\n 20: 26,\n 49: 43,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Ve, $V0, {\n 6: 3,\n 4: 44\n }), o([5, 14, 15, 18, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60], [2, 10]), {\n 20: 45,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 46,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 47,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 49: 48,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vf, [2, 76], {\n 50: 49\n }), o($Vg, [2, 27]), o($Vg, [2, 28]), o($Vg, [2, 33]), o($Vg, [2, 34]), o($Vg, [2, 35]), o($Vg, [2, 36]), o($Vg, [2, 37]), o($Vg, [2, 38]), o($Vg, [2, 39]), {\n 20: 26,\n 49: 50,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vg, [2, 41], {\n 86: $Vh\n }), {\n 71: $V4,\n 85: 52\n }, o($Vi, $Vj), o($Vk, [2, 80], {\n 53: 53\n }), {\n 25: 54,\n 38: 56,\n 39: $Vl,\n 43: 57,\n 44: $Vm,\n 45: 55,\n 47: [2, 52]\n }, {\n 28: 60,\n 43: 61,\n 44: $Vm,\n 47: [2, 54]\n }, {\n 13: 63,\n 15: $V1,\n 18: [1, 62]\n }, o($Vf, [2, 84], {\n 57: 64\n }), {\n 26: 65,\n 47: $Vn\n }, o($Vo, [2, 56], {\n 30: 67\n }), o($Vo, [2, 62], {\n 35: 68\n }), o($Vp, [2, 48], {\n 21: 69\n }), o($Vf, [2, 88], {\n 61: 70\n }), {\n 20: 26,\n 33: [2, 78],\n 49: 72,\n 51: 71,\n 63: 27,\n 64: $V3,\n 68: 73,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vr, [2, 92], {\n 65: 77\n }), {\n 71: [1, 78]\n }, o($Vg, [2, 40], {\n 86: $Vh\n }), {\n 20: 26,\n 49: 80,\n 54: 79,\n 55: [2, 82],\n 63: 27,\n 64: $V3,\n 68: 81,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 26: 82,\n 47: $Vn\n }, {\n 47: [2, 53]\n }, o($Vb, $V0, {\n 6: 3,\n 4: 83\n }), {\n 47: [2, 20]\n }, {\n 20: 84,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Ve, $V0, {\n 6: 3,\n 4: 85\n }), {\n 26: 86,\n 47: $Vn\n }, {\n 47: [2, 55]\n }, o($V2, [2, 11]), o($Vd, [2, 47]), {\n 20: 26,\n 33: [2, 86],\n 49: 88,\n 58: 87,\n 63: 27,\n 64: $V3,\n 68: 89,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($V2, [2, 25]), {\n 20: 90,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vs, [2, 58], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 31: 91,\n 49: 92,\n 68: 93,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), o($Vs, [2, 64], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 36: 94,\n 49: 95,\n 68: 96,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), {\n 20: 26,\n 22: 97,\n 23: [2, 50],\n 49: 98,\n 63: 27,\n 64: $V3,\n 68: 99,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 33: [2, 90],\n 49: 101,\n 62: 100,\n 63: 27,\n 64: $V3,\n 68: 102,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 33: [1, 103]\n }, o($Vf, [2, 77]), {\n 33: [2, 79]\n }, o([23, 33, 55, 67, 74], [2, 30], {\n 70: 104,\n 71: [1, 105]\n }), o($Vt, [2, 96]), o($Vi, $Vj, {\n 72: $Vu\n }), {\n 20: 26,\n 49: 108,\n 63: 27,\n 64: $V3,\n 66: 107,\n 67: [2, 94],\n 68: 109,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vi, [2, 42]), {\n 55: [1, 110]\n }, o($Vk, [2, 81]), {\n 55: [2, 83]\n }, o($V2, [2, 13]), {\n 38: 56,\n 39: $Vl,\n 43: 57,\n 44: $Vm,\n 45: 112,\n 46: 111,\n 47: [2, 74]\n }, o($Vo, [2, 68], {\n 40: 113\n }), {\n 47: [2, 18]\n }, o($V2, [2, 14]), {\n 33: [1, 114]\n }, o($Vf, [2, 85]), {\n 33: [2, 87]\n }, {\n 33: [1, 115]\n }, {\n 32: 116,\n 33: [2, 60],\n 73: 117,\n 74: $Vv\n }, o($Vo, [2, 57]), o($Vs, [2, 59]), {\n 33: [2, 66],\n 37: 119,\n 73: 120,\n 74: $Vv\n }, o($Vo, [2, 63]), o($Vs, [2, 65]), {\n 23: [1, 121]\n }, o($Vp, [2, 49]), {\n 23: [2, 51]\n }, {\n 33: [1, 122]\n }, o($Vf, [2, 89]), {\n 33: [2, 91]\n }, o($V2, [2, 22]), o($Vt, [2, 97]), {\n 72: $Vu\n }, {\n 20: 26,\n 49: 123,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 67: [1, 124]\n }, o($Vr, [2, 93]), {\n 67: [2, 95]\n }, o($V2, [2, 23]), {\n 47: [2, 19]\n }, {\n 47: [2, 75]\n }, o($Vs, [2, 70], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 41: 125,\n 49: 126,\n 68: 127,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), o($V2, [2, 24]), o($V2, [2, 21]), {\n 33: [1, 128]\n }, {\n 33: [2, 61]\n }, {\n 71: [1, 130],\n 75: 129\n }, {\n 33: [1, 131]\n }, {\n 33: [2, 67]\n }, o($Vd, [2, 12]), o($Ve, [2, 26]), o($Vt, [2, 31]), o($Vg, [2, 29]), {\n 33: [2, 72],\n 42: 132,\n 73: 133,\n 74: $Vv\n }, o($Vo, [2, 69]), o($Vs, [2, 71]), o($Vb, [2, 15]), {\n 71: [1, 135],\n 76: [1, 134]\n }, o($Vw, [2, 98]), o($Vc, [2, 16]), {\n 33: [1, 136]\n }, {\n 33: [2, 73]\n }, {\n 33: [2, 32]\n }, o($Vw, [2, 99]), o($Vb, [2, 17])],\n defaultActions: {\n 4: [2, 1],\n 55: [2, 53],\n 57: [2, 20],\n 61: [2, 55],\n 73: [2, 79],\n 81: [2, 83],\n 85: [2, 18],\n 89: [2, 87],\n 99: [2, 51],\n 102: [2, 91],\n 109: [2, 95],\n 111: [2, 19],\n 112: [2, 75],\n 117: [2, 61],\n 120: [2, 67],\n 133: [2, 73],\n 134: [2, 32]\n },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n TERROR = 2,\n EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = {\n yy: {}\n };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol,\n state,\n action,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n /* generated by jison-lex 0.3.4 */\n var lexer = function () {\n var lexer = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function () {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function (n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function (match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n\n return false;\n },\n // return next match in input\n next: function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n function strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n }\n switch ($avoiding_name_collisions) {\n case 0:\n if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n strip(0, 1);\n this.begin(\"mu\");\n } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n strip(0, 1);\n this.begin(\"emu\");\n } else {\n this.begin(\"mu\");\n }\n if (yy_.yytext) return 15;\n break;\n case 1:\n return 15;\n case 2:\n this.popState();\n return 15;\n case 3:\n this.begin('raw');\n return 15;\n case 4:\n this.popState();\n // Should be using `this.topState()` below, but it currently\n // returns the second top instead of the first top. Opened an\n // issue about it at https://github.com/zaach/jison/issues/291\n if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n return 15;\n } else {\n strip(5, 9);\n return 18;\n }\n case 5:\n return 15;\n case 6:\n this.popState();\n return 14;\n case 7:\n return 64;\n case 8:\n return 67;\n case 9:\n return 19;\n case 10:\n this.popState();\n this.begin('raw');\n return 23;\n case 11:\n return 56;\n case 12:\n return 60;\n case 13:\n return 29;\n case 14:\n return 47;\n case 15:\n this.popState();\n return 44;\n case 16:\n this.popState();\n return 44;\n case 17:\n return 34;\n case 18:\n return 39;\n case 19:\n return 52;\n case 20:\n return 48;\n case 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n break;\n case 22:\n this.popState();\n return 14;\n case 23:\n return 48;\n case 24:\n return 72;\n case 25:\n return 71;\n case 26:\n return 71;\n case 27:\n return 86;\n case 28:\n // ignore whitespace\n break;\n case 29:\n this.popState();\n return 55;\n case 30:\n this.popState();\n return 33;\n case 31:\n yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');\n return 79;\n case 32:\n yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");\n return 79;\n case 33:\n return 84;\n case 34:\n return 81;\n case 35:\n return 81;\n case 36:\n return 82;\n case 37:\n return 83;\n case 38:\n return 80;\n case 39:\n return 74;\n case 40:\n return 76;\n case 41:\n return 71;\n case 42:\n yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');\n return 71;\n case 43:\n return 'INVALID';\n case 44:\n return 5;\n }\n },\n rules: [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/],\n conditions: {\n \"mu\": {\n \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44],\n \"inclusive\": false\n },\n \"emu\": {\n \"rules\": [2],\n \"inclusive\": false\n },\n \"com\": {\n \"rules\": [6],\n \"inclusive\": false\n },\n \"raw\": {\n \"rules\": [3, 4, 5],\n \"inclusive\": false\n },\n \"INITIAL\": {\n \"rules\": [0, 1, 44],\n \"inclusive\": true\n }\n }\n };\n return lexer;\n }();\n parser.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser;\n parser.Parser = Parser;\n return new Parser();\n }();\n\n /* eslint-disable new-cap */\n _exports.parser = parser;\n function print(ast) {\n return new PrintVisitor().accept(ast);\n }\n function PrintVisitor() {\n this.padding = 0;\n }\n PrintVisitor.prototype = new Visitor();\n PrintVisitor.prototype.pad = function (string) {\n var out = '';\n for (var i = 0, l = this.padding; i < l; i++) {\n out += ' ';\n }\n out += string + '\\n';\n return out;\n };\n PrintVisitor.prototype.Program = function (program) {\n var out = '',\n body = program.body,\n i,\n l;\n if (program.blockParams) {\n var blockParams = 'BLOCK PARAMS: [';\n for (i = 0, l = program.blockParams.length; i < l; i++) {\n blockParams += ' ' + program.blockParams[i];\n }\n blockParams += ' ]';\n out += this.pad(blockParams);\n }\n for (i = 0, l = body.length; i < l; i++) {\n out += this.accept(body[i]);\n }\n this.padding--;\n return out;\n };\n PrintVisitor.prototype.MustacheStatement = function (mustache) {\n return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');\n };\n PrintVisitor.prototype.Decorator = function (mustache) {\n return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');\n };\n PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {\n var out = '';\n out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');\n this.padding++;\n out += this.pad(this.SubExpression(block));\n if (block.program) {\n out += this.pad('PROGRAM:');\n this.padding++;\n out += this.accept(block.program);\n this.padding--;\n }\n if (block.inverse) {\n if (block.program) {\n this.padding++;\n }\n out += this.pad('{{^}}');\n this.padding++;\n out += this.accept(block.inverse);\n this.padding--;\n if (block.program) {\n this.padding--;\n }\n }\n this.padding--;\n return out;\n };\n PrintVisitor.prototype.PartialStatement = function (partial) {\n var content = 'PARTIAL:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n return this.pad('{{> ' + content + ' }}');\n };\n PrintVisitor.prototype.PartialBlockStatement = function (partial) {\n var content = 'PARTIAL BLOCK:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n content += ' ' + this.pad('PROGRAM:');\n this.padding++;\n content += this.accept(partial.program);\n this.padding--;\n return this.pad('{{> ' + content + ' }}');\n };\n PrintVisitor.prototype.ContentStatement = function (content) {\n return this.pad(\"CONTENT[ '\" + content.value + \"' ]\");\n };\n PrintVisitor.prototype.CommentStatement = function (comment) {\n return this.pad(\"{{! '\" + comment.value + \"' }}\");\n };\n PrintVisitor.prototype.SubExpression = function (sexpr) {\n var params = sexpr.params,\n paramStrings = [],\n hash;\n for (var i = 0, l = params.length; i < l; i++) {\n paramStrings.push(this.accept(params[i]));\n }\n params = '[' + paramStrings.join(', ') + ']';\n hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';\n return this.accept(sexpr.path) + ' ' + params + hash;\n };\n PrintVisitor.prototype.PathExpression = function (id) {\n var path = id.parts.join('/');\n return (id.data ? '@' : '') + 'PATH:' + path;\n };\n PrintVisitor.prototype.StringLiteral = function (string) {\n return '\"' + string.value + '\"';\n };\n PrintVisitor.prototype.NumberLiteral = function (number) {\n return 'NUMBER{' + number.value + '}';\n };\n PrintVisitor.prototype.BooleanLiteral = function (bool) {\n return 'BOOLEAN{' + bool.value + '}';\n };\n PrintVisitor.prototype.UndefinedLiteral = function () {\n return 'UNDEFINED';\n };\n PrintVisitor.prototype.NullLiteral = function () {\n return 'NULL';\n };\n PrintVisitor.prototype.Hash = function (hash) {\n var pairs = hash.pairs,\n joinedPairs = [];\n for (var i = 0, l = pairs.length; i < l; i++) {\n joinedPairs.push(this.accept(pairs[i]));\n }\n return 'HASH{' + joinedPairs.join(', ') + '}';\n };\n PrintVisitor.prototype.HashPair = function (pair) {\n return pair.key + '=' + this.accept(pair.value);\n };\n /* eslint-enable new-cap */\n\n function validateClose(open, close) {\n close = close.path ? close.path.original : close;\n if (open.path.original !== close) {\n var errorNode = {\n loc: open.path.loc\n };\n throw new Exception(open.path.original + \" doesn't match \" + close, errorNode);\n }\n }\n function SourceLocation(source, locInfo) {\n this.source = source;\n this.start = {\n line: locInfo.first_line,\n column: locInfo.first_column\n };\n this.end = {\n line: locInfo.last_line,\n column: locInfo.last_column\n };\n }\n function id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n }\n function stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n }\n function stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n }\n function preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n var original = data ? '@' : '',\n dig = [],\n depth = 0;\n for (var i = 0, l = parts.length; i < l; i++) {\n var part = parts[i].part,\n // If we have [] syntax then we do not treat path references as operators,\n // i.e. foo.[this] resolves to approximately context.foo['this']\n isLiteral = parts[i].original !== part;\n original += (parts[i].separator || '') + part;\n if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n if (dig.length > 0) {\n throw new Exception('Invalid path: ' + original, {\n loc: loc\n });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n return {\n type: 'PathExpression',\n data: data,\n depth: depth,\n parts: dig,\n original: original,\n loc: loc\n };\n }\n function prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n var escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n var decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path: path,\n params: params,\n hash: hash,\n escaped: escaped,\n strip: strip,\n loc: this.locInfo(locInfo)\n };\n }\n function prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n locInfo = this.locInfo(locInfo);\n var program = {\n type: 'Program',\n body: contents,\n strip: {},\n loc: locInfo\n };\n return {\n type: 'BlockStatement',\n path: openRawBlock.path,\n params: openRawBlock.params,\n hash: openRawBlock.hash,\n program: program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n }\n function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n var decorator = /\\*/.test(openBlock.open);\n program.blockParams = openBlock.blockParams;\n var inverse, inverseStrip;\n if (inverseAndProgram) {\n if (decorator) {\n throw new Exception('Unexpected inverse block on decorator', inverseAndProgram);\n }\n if (inverseAndProgram.chain) {\n inverseAndProgram.program.body[0].closeStrip = close.strip;\n }\n inverseStrip = inverseAndProgram.strip;\n inverse = inverseAndProgram.program;\n }\n if (inverted) {\n inverted = inverse;\n inverse = program;\n program = inverted;\n }\n return {\n type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n path: openBlock.path,\n params: openBlock.params,\n hash: openBlock.hash,\n program: program,\n inverse: inverse,\n openStrip: openBlock.strip,\n inverseStrip: inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n }\n function prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n var firstLoc = statements[0].loc,\n lastLoc = statements[statements.length - 1].loc;\n /* istanbul ignore else */\n if (firstLoc && lastLoc) {\n loc = {\n source: firstLoc.source,\n start: {\n line: firstLoc.start.line,\n column: firstLoc.start.column\n },\n end: {\n line: lastLoc.end.line,\n column: lastLoc.end.column\n }\n };\n }\n }\n return {\n type: 'Program',\n body: statements,\n strip: {},\n loc: loc\n };\n }\n function preparePartialBlock(open, program, close, locInfo) {\n validateClose(open, close);\n return {\n type: 'PartialBlockStatement',\n name: open.path,\n params: open.params,\n hash: open.hash,\n program: program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n }\n var Helpers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n SourceLocation: SourceLocation,\n id: id,\n stripFlags: stripFlags,\n stripComment: stripComment,\n preparePath: preparePath,\n prepareMustache: prepareMustache,\n prepareRawBlock: prepareRawBlock,\n prepareBlock: prepareBlock,\n prepareProgram: prepareProgram,\n preparePartialBlock: preparePartialBlock\n });\n var baseHelpers = {};\n for (var helper in Helpers) {\n if (Object.prototype.hasOwnProperty.call(Helpers, helper)) {\n baseHelpers[helper] = Helpers[helper];\n }\n }\n function parseWithoutProcessing(input, options) {\n // Just return if an already-compiled AST was passed in.\n if (input.type === 'Program') {\n return input;\n }\n parser.yy = baseHelpers;\n // Altering the shared object here, but this is ok as parser is a sync operation\n parser.yy.locInfo = function (locInfo) {\n return new SourceLocation(options && options.srcName, locInfo);\n };\n var ast = parser.parse(input);\n return ast;\n }\n function parse(input, options) {\n var ast = parseWithoutProcessing(input, options);\n var strip = new WhitespaceControl(options);\n return strip.accept(ast);\n }\n});","define(\"ember-babel\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.assertThisInitialized = assertThisInitialized;\n _exports.classCallCheck = classCallCheck;\n _exports.createClass = createClass;\n _exports.createForOfIteratorHelperLoose = createForOfIteratorHelperLoose;\n _exports.createSuper = createSuper;\n _exports.inheritsLoose = inheritsLoose;\n _exports.objectDestructuringEmpty = objectDestructuringEmpty;\n _exports.possibleConstructorReturn = possibleConstructorReturn;\n _exports.taggedTemplateLiteralLoose = taggedTemplateLiteralLoose;\n _exports.wrapNativeSuper = wrapNativeSuper;\n /* globals Reflect */\n\n var setPrototypeOf = Object.setPrototypeOf;\n var getPrototypeOf = Object.getPrototypeOf;\n var hasReflectConstruct = typeof Reflect === 'object' && typeof Reflect.construct === 'function';\n var nativeWrapperCache = new Map();\n\n // Super minimal version of Babel's wrapNativeSuper. We only use this for\n // extending Function, for ComputedDecoratorImpl and AliasDecoratorImpl. We know\n // we will never directly create an instance of these classes so no need to\n // include `construct` code or other helpers.\n function wrapNativeSuper(Class) {\n if (nativeWrapperCache.has(Class)) {\n return nativeWrapperCache.get(Class);\n }\n function Wrapper() {}\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n nativeWrapperCache.set(Class, Wrapper);\n return setPrototypeOf(Wrapper, Class);\n }\n function classCallCheck(instance, Constructor) {\n if (true /* DEBUG */) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n }\n }\n\n /*\n Overrides default `inheritsLoose` to _also_ call `Object.setPrototypeOf`.\n This is needed so that we can use `loose` option with the\n `@babel/plugin-transform-classes` (because we want simple assignment to the\n prototype wherever possible) but also keep our constructor based prototypal\n inheritance working properly\n */\n function inheritsLoose(subClass, superClass) {\n if (true /* DEBUG */) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function');\n }\n }\n subClass.prototype = Object.create(superClass === null ? null : superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass !== null) {\n setPrototypeOf(subClass, superClass);\n }\n }\n function taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n strings.raw = raw;\n return strings;\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n /*\n Differs from default implementation by avoiding boolean coercion of\n `protoProps` and `staticProps`.\n */\n function createClass(Constructor, protoProps, staticProps) {\n if (protoProps !== null && protoProps !== undefined) {\n _defineProperties(Constructor.prototype, protoProps);\n }\n if (staticProps !== null && staticProps !== undefined) {\n _defineProperties(Constructor, staticProps);\n }\n return Constructor;\n }\n function assertThisInitialized(self) {\n if (true /* DEBUG */ && self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n }\n\n /*\n Adds `DEBUG` guard to error being thrown, and avoids boolean coercion of `call`.\n */\n function possibleConstructorReturn(self, call) {\n if (typeof call === 'object' && call !== null || typeof call === 'function') {\n return call;\n }\n return assertThisInitialized(self);\n }\n function objectDestructuringEmpty(obj) {\n if (true /* DEBUG */ && (obj === null || obj === undefined)) {\n throw new TypeError('Cannot destructure undefined');\n }\n }\n\n /*\n Differs from default implementation by checking for _any_ `Reflect.construct`\n (the default implementation tries to ensure that `Reflect.construct` is truly\n the native one).\n \n Original source: https://github.com/babel/babel/blob/v7.9.2/packages/babel-helpers/src/helpers.js#L738-L757\n */\n function createSuper(Derived) {\n return function () {\n var Super = getPrototypeOf(Derived);\n var result;\n if (hasReflectConstruct) {\n // NOTE: This doesn't work if this.__proto__.constructor has been modified.\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return possibleConstructorReturn(this, result);\n };\n }\n\n /*\n Does not differ from default implementation.\n */\n function arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n var arr2 = new Array(len);\n for (var i = 0; i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n }\n\n /*\n Does not differ from default implementation.\n */\n function unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === 'string') return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === 'Object' && o.constructor) n = o.constructor.name;\n if (n === 'Map' || n === 'Set') return Array.from(n);\n if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n }\n\n /*\n Does not differ from default implementation.\n */\n function createForOfIteratorHelperLoose(o) {\n var i = 0;\n if (typeof Symbol === 'undefined' || o[Symbol.iterator] == null) {\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n throw new TypeError('Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n }\n i = o[Symbol.iterator]();\n return i.next.bind(i);\n }\n});","define(\"ember-template-compiler/index\", [\"exports\", \"@ember/-internals/environment\", \"@ember/canary-features\", \"@glimmer/syntax\", \"ember/version\", \"require\", \"ember-template-compiler/lib/system/precompile\", \"ember-template-compiler/lib/system/compile\", \"ember-template-compiler/lib/system/compile-options\", \"ember-template-compiler/lib/plugins\", \"@glimmer/compiler\", \"ember-template-compiler/lib/system/bootstrap\", \"ember-template-compiler/lib/system/initializer\"], function (_exports, _environment, _canaryFeatures, _GlimmerSyntax, _version, _require, _precompile, _compile, _compileOptions, _plugins, _compiler, _bootstrap, _initializer) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"RESOLUTION_MODE_TRANSFORMS\", {\n enumerable: true,\n get: function () {\n return _plugins.RESOLUTION_MODE_TRANSFORMS;\n }\n });\n Object.defineProperty(_exports, \"STRICT_MODE_TRANSFORMS\", {\n enumerable: true,\n get: function () {\n return _plugins.STRICT_MODE_TRANSFORMS;\n }\n });\n Object.defineProperty(_exports, \"VERSION\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n });\n _exports._GlimmerSyntax = _exports._Ember = void 0;\n Object.defineProperty(_exports, \"_buildCompileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.buildCompileOptions;\n }\n });\n Object.defineProperty(_exports, \"_precompile\", {\n enumerable: true,\n get: function () {\n return _compiler.precompile;\n }\n });\n Object.defineProperty(_exports, \"_preprocess\", {\n enumerable: true,\n get: function () {\n return _GlimmerSyntax.preprocess;\n }\n });\n Object.defineProperty(_exports, \"_print\", {\n enumerable: true,\n get: function () {\n return _GlimmerSyntax.print;\n }\n });\n Object.defineProperty(_exports, \"_transformsFor\", {\n enumerable: true,\n get: function () {\n return _compileOptions.transformsFor;\n }\n });\n Object.defineProperty(_exports, \"compile\", {\n enumerable: true,\n get: function () {\n return _compile.default;\n }\n });\n Object.defineProperty(_exports, \"compileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.default;\n }\n });\n Object.defineProperty(_exports, \"precompile\", {\n enumerable: true,\n get: function () {\n return _precompile.default;\n }\n });\n _exports._GlimmerSyntax = _GlimmerSyntax;\n var _Ember;\n _exports._Ember = _Ember;\n try {\n _exports._Ember = _Ember = (0, _require.default)(\"ember\");\n } catch (e) {\n _exports._Ember = _Ember = {\n ENV: _environment.ENV,\n FEATURES: _canaryFeatures.FEATURES,\n VERSION: _version.default\n };\n }\n\n // used to bootstrap templates\n\n // add domTemplates initializer (only does something if `ember-template-compiler`\n // is loaded already)\n});","define(\"ember-template-compiler/lib/plugins/assert-against-attrs\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertAgainstAttrs;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that asserts against\n \n ```handlebars\n {{attrs.foo.bar}}\n ```\n \n ...as well as `{{#if attrs.foo}}`, `{{deeply (nested attrs.foobar.baz)}}`.\n \n @private\n @class AssertAgainstAttrs\n */\n function assertAgainstAttrs(env) {\n var _env$meta;\n var {\n builders: b\n } = env.syntax;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n var stack = [[]];\n function updateBlockParamsStack(blockParams) {\n var parent = stack[stack.length - 1];\n (true && !(parent) && (0, _debug.assert)('has parent', parent));\n stack.push(parent.concat(blockParams));\n }\n return {\n name: 'assert-against-attrs',\n visitor: {\n Program: {\n enter(node) {\n updateBlockParamsStack(node.blockParams);\n },\n exit() {\n stack.pop();\n }\n },\n ElementNode: {\n enter(node) {\n updateBlockParamsStack(node.blockParams);\n },\n exit() {\n stack.pop();\n }\n },\n PathExpression(node) {\n if (isAttrs(node, stack[stack.length - 1])) {\n var path = b.path(node.original.substring(6));\n (true && !(node.this !== false) && (0, _debug.assert)(\"Using {{attrs}} to reference named arguments is not supported. {{attrs.\" + path.original + \"}} should be updated to {{@\" + path.original + \"}}. \" + (0, _calculateLocationDisplay.default)(moduleName, node.loc), node.this !== false));\n }\n }\n }\n };\n }\n function isAttrs(node, symbols) {\n var name = node.parts[0];\n if (name && symbols.indexOf(name) !== -1) {\n return false;\n }\n if (name === 'attrs') {\n if (node.this === true) {\n node.parts.shift();\n node.original = node.original.slice(5);\n }\n return true;\n }\n return false;\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-against-named-outlets\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertAgainstNamedOutlets;\n /**\n @module ember\n */\n /**\n Prevents usage of named outlets, a legacy concept in Ember removed in 4.0.\n \n @private\n @class AssertAgainstNamedOutlets\n */\n function assertAgainstNamedOutlets(env) {\n var _env$meta;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-against-named-outlets',\n visitor: {\n MustacheStatement(node) {\n if (node.path.type === 'PathExpression' && node.path.original === 'outlet' && node.params[0]) {\n var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n (true && !(false) && (0, _debug.assert)(\"Named outlets were removed in Ember 4.0. See https://deprecations.emberjs.com/v3.x#toc_route-render-template for guidance on alternative APIs for named outlet use cases. \" + sourceInformation));\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-input-helper-without-block\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _calculateLocationDisplay, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = errorOnInputWithContent;\n function errorOnInputWithContent(env) {\n var _env$meta;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-input-helper-without-block',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'input') {\n (true && !(false) && (0, _debug.assert)(assertMessage(moduleName, node)));\n }\n }\n }\n };\n }\n function assertMessage(moduleName, node) {\n var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n return \"The {{input}} helper cannot be used in block form. \" + sourceInformation;\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-reserved-named-arguments\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertReservedNamedArguments;\n function assertReservedNamedArguments(env) {\n var _env$meta;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-reserved-named-arguments',\n visitor: {\n // In general, we don't assert on the invocation side to avoid creating migration\n // hazards (e.g. using angle bracket to invoke a classic component that uses\n // `this.someReservedName`. However, we want to avoid leaking special internal\n // things, such as `__ARGS__`, so those would need to be asserted on both sides.\n AttrNode(_ref) {\n var {\n name,\n loc\n } = _ref;\n if (name === '@__ARGS__') {\n (true && !(false) && (0, _debug.assert)(assertMessage(name) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n },\n HashPair(_ref2) {\n var {\n key,\n loc\n } = _ref2;\n if (key === '__ARGS__') {\n (true && !(false) && (0, _debug.assert)(assertMessage(key) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n },\n PathExpression(_ref3) {\n var {\n original,\n loc\n } = _ref3;\n if (isReserved(original)) {\n (true && !(false) && (0, _debug.assert)(assertMessage(original) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n }\n }\n };\n }\n var RESERVED = ['@arguments', '@args', '@block', '@else'];\n function isReserved(name) {\n return RESERVED.indexOf(name) !== -1 || Boolean(name.match(/^@[^a-z]/));\n }\n function assertMessage(name) {\n return \"'\" + name + \"' is reserved.\";\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-splattribute-expression\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertSplattributeExpressions;\n function assertSplattributeExpressions(env) {\n var _env$meta;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-splattribute-expressions',\n visitor: {\n PathExpression(_ref) {\n var {\n original,\n loc\n } = _ref;\n if (original === '...attributes') {\n (true && !(false) && (0, _debug.assert)(errorMessage() + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n }\n }\n };\n }\n function errorMessage() {\n return '`...attributes` can only be used in the element position e.g. `<div ...attributes />`. It cannot be used as a path.';\n }\n});","define(\"ember-template-compiler/lib/plugins/index\", [\"exports\", \"ember-template-compiler/lib/plugins/assert-against-attrs\", \"ember-template-compiler/lib/plugins/assert-against-named-outlets\", \"ember-template-compiler/lib/plugins/assert-input-helper-without-block\", \"ember-template-compiler/lib/plugins/assert-reserved-named-arguments\", \"ember-template-compiler/lib/plugins/assert-splattribute-expression\", \"ember-template-compiler/lib/plugins/transform-action-syntax\", \"ember-template-compiler/lib/plugins/transform-each-in-into-each\", \"ember-template-compiler/lib/plugins/transform-each-track-array\", \"ember-template-compiler/lib/plugins/transform-in-element\", \"ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings\", \"ember-template-compiler/lib/plugins/transform-resolutions\", \"ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet\"], function (_exports, _assertAgainstAttrs, _assertAgainstNamedOutlets, _assertInputHelperWithoutBlock, _assertReservedNamedArguments, _assertSplattributeExpression, _transformActionSyntax, _transformEachInIntoEach, _transformEachTrackArray, _transformInElement, _transformQuotedBindingsIntoJustBindings, _transformResolutions, _transformWrapMountAndOutlet) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.STRICT_MODE_TRANSFORMS = _exports.RESOLUTION_MODE_TRANSFORMS = void 0;\n // order of plugins is important\n var RESOLUTION_MODE_TRANSFORMS = Object.freeze([_transformQuotedBindingsIntoJustBindings.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _assertAgainstAttrs.default, _transformEachInIntoEach.default, _assertInputHelperWithoutBlock.default, _transformInElement.default, _assertSplattributeExpression.default, _transformEachTrackArray.default, _assertAgainstNamedOutlets.default, _transformWrapMountAndOutlet.default, _transformResolutions.default].filter(notNull));\n _exports.RESOLUTION_MODE_TRANSFORMS = RESOLUTION_MODE_TRANSFORMS;\n var STRICT_MODE_TRANSFORMS = Object.freeze([_transformQuotedBindingsIntoJustBindings.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _transformEachInIntoEach.default, _transformInElement.default, _assertSplattributeExpression.default, _transformEachTrackArray.default, _assertAgainstNamedOutlets.default, _transformWrapMountAndOutlet.default].filter(notNull));\n _exports.STRICT_MODE_TRANSFORMS = STRICT_MODE_TRANSFORMS;\n function notNull(value) {\n return value !== null;\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-action-syntax\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformActionSyntax;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n <button {{action 'foo'}}>\n <button onblur={{action 'foo'}}>\n <button onblur={{action (action 'foo') 'bar'}}>\n ```\n \n with\n \n ```handlebars\n <button {{action this 'foo'}}>\n <button onblur={{action this 'foo'}}>\n <button onblur={{action this (action this 'foo') 'bar'}}>\n ```\n \n @private\n @class TransformActionSyntax\n */\n function transformActionSyntax(_ref) {\n var {\n syntax\n } = _ref;\n var {\n builders: b\n } = syntax;\n return {\n name: 'transform-action-syntax',\n visitor: {\n ElementModifierStatement(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n },\n MustacheStatement(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n },\n SubExpression(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n }\n }\n };\n }\n function isAction(node) {\n return (0, _utils.isPath)(node.path) && node.path.original === 'action';\n }\n function insertThisAsFirstParam(node, builders) {\n node.params.unshift(builders.path('this'));\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-each-in-into-each\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformEachInIntoEach;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{#each-in iterableThing as |key value|}}\n ```\n \n with\n \n ```handlebars\n {{#each (-each-in iterableThing) as |value key|}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformEachInIntoEach(env) {\n var {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-each-in-into-each',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'each-in') {\n node.params[0] = b.sexpr(b.path('-each-in'), [node.params[0]]);\n var blockParams = node.program.blockParams;\n if (!blockParams || blockParams.length === 0) {\n // who uses {{#each-in}} without block params?!\n } else if (blockParams.length === 1) {\n // insert a dummy variable for the first slot\n // pick a name that won't parse so it won't shadow any real variables\n blockParams = ['( unused value )', blockParams[0]];\n } else {\n var key = blockParams.shift();\n var value = blockParams.shift();\n blockParams = [value, key, ...blockParams];\n }\n node.program.blockParams = blockParams;\n return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-each-track-array\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformEachTrackArray;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{#each iterableThing as |key value|}}\n ```\n \n with\n \n ```handlebars\n {{#each (-track-array iterableThing) as |key value|}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformEachTrackArray(env) {\n var {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-each-track-array',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'each') {\n var firstParam = node.params[0];\n (true && !(firstParam) && (0, _debug.assert)('has firstParam', firstParam));\n if (firstParam.type === 'SubExpression' && firstParam.path.type === 'PathExpression' && firstParam.path.original === '-each-in') {\n return;\n }\n node.params[0] = b.sexpr(b.path('-track-array'), [firstParam]);\n return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-in-element\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformInElement;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that handles the public `{{in-element}}` as per RFC287.\n \n Issues a build time assertion for:\n \n ```handlebars\n {{#in-element someElement insertBefore=\"some-none-null-value\"}}\n {{modal-display text=text}}\n {{/in-element}}\n ```\n \n @private\n @class TransformInElement\n */\n function transformInElement(env) {\n var {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-in-element',\n visitor: {\n BlockStatement(node) {\n if (!(0, _utils.isPath)(node.path)) return;\n if (node.path.original === 'in-element') {\n var originalValue = node.params[0];\n if (originalValue && !env.isProduction) {\n var subExpr = b.sexpr('-in-el-null', [originalValue]);\n node.params.shift();\n node.params.unshift(subExpr);\n }\n node.hash.pairs.forEach(pair => {\n if (pair.key === 'insertBefore') {\n (true && !(pair.value.type === 'NullLiteral' || pair.value.type === 'UndefinedLiteral') && (0, _debug.assert)(\"Can only pass null to insertBefore in in-element, received: \" + JSON.stringify(pair.value), pair.value.type === 'NullLiteral' || pair.value.type === 'UndefinedLiteral'));\n }\n });\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformQuotedBindingsIntoJustBindings;\n function transformQuotedBindingsIntoJustBindings( /* env */\n ) {\n return {\n name: 'transform-quoted-bindings-into-just-bindings',\n visitor: {\n ElementNode(node) {\n var styleAttr = getStyleAttr(node);\n if (!validStyleAttr(styleAttr)) {\n return;\n }\n styleAttr.value = styleAttr.value.parts[0];\n }\n }\n };\n }\n function validStyleAttr(attr) {\n if (!attr) {\n return false;\n }\n var value = attr.value;\n if (!value || value.type !== 'ConcatStatement' || value.parts.length !== 1) {\n return false;\n }\n var onlyPart = value.parts[0];\n return onlyPart.type === 'MustacheStatement';\n }\n function getStyleAttr(node) {\n var attributes = node.attributes;\n for (var attribute of attributes) {\n if (attribute.name === 'style') {\n return attribute;\n }\n }\n return undefined;\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-resolutions\", [\"exports\", \"@ember/debug\", \"@glimmer/syntax\", \"ember-template-compiler/lib/system/calculate-location-display\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _syntax, _calculateLocationDisplay, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformResolutions;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{helper \"...\" ...}}\n ```\n \n with\n \n ```handlebars\n {{helper (-resolve \"helper:...\") ...}}\n ```\n \n and\n \n ```handlebars\n {{helper ... ...}}\n ```\n \n with\n \n ```handlebars\n {{helper (-disallow-dynamic-resolution ...) ...}}\n ```\n \n and\n \n ```handlebars\n {{modifier \"...\" ...}}\n ```\n \n with\n \n ```handlebars\n {{modifier (-resolve \"modifier:...\") ...}}\n ```\n and\n \n ```handlebars\n {{modifier ... ...}}\n ```\n \n with\n \n ```handlebars\n {{modifier (-disallow-dynamic-resolution ...) ...}}\n ```\n \n @private\n @class TransformResolutions\n */\n var TARGETS = Object.freeze(['helper', 'modifier']);\n function transformResolutions(env) {\n var _env$meta;\n var {\n builders: b\n } = env.syntax;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n var {\n hasLocal,\n node: tracker\n } = (0, _utils.trackLocals)();\n var seen;\n return {\n name: 'transform-resolutions',\n visitor: {\n Template: {\n enter() {\n seen = new Set();\n },\n exit() {\n seen = undefined;\n }\n },\n Block: tracker,\n ElementNode: {\n keys: {\n children: tracker\n }\n },\n MustacheStatement(node) {\n (true && !(seen) && (0, _debug.assert)('[BUG] seen set should be available', seen));\n if (seen.has(node)) {\n return;\n }\n if ((0, _utils.isPath)(node.path) && !isLocalVariable(node.path, hasLocal) && TARGETS.indexOf(node.path.original) !== -1) {\n var result = b.mustache(node.path, transformParams(b, node.params, node.path.original, moduleName, node.loc), node.hash, node.trusting, node.loc, node.strip);\n // Avoid double/infinite-processing\n seen.add(result);\n return result;\n }\n },\n SubExpression(node) {\n (true && !(seen) && (0, _debug.assert)('[BUG] seen set should be available', seen));\n if (seen.has(node)) {\n return;\n }\n if ((0, _utils.isPath)(node.path) && !isLocalVariable(node.path, hasLocal) && TARGETS.indexOf(node.path.original) !== -1) {\n var result = b.sexpr(node.path, transformParams(b, node.params, node.path.original, moduleName, node.loc), node.hash, node.loc);\n // Avoid double/infinite-processing\n seen.add(result);\n return result;\n }\n }\n }\n };\n }\n function isLocalVariable(node, hasLocal) {\n return !node.this && node.parts.length === 1 && hasLocal(node.parts[0]);\n }\n function transformParams(b, params, type, moduleName, loc) {\n var [first, ...rest] = params;\n (true && !(first) && (0, _debug.assert)(\"The \" + type + \" keyword requires at least one positional arguments \" + (0, _calculateLocationDisplay.default)(moduleName, loc), first));\n if ((0, _utils.isStringLiteral)(first)) {\n return [b.sexpr(b.path('-resolve', first.loc), [b.string(type + \":\" + first.value)], undefined, first.loc), ...rest];\n } else if (true /* DEBUG */) {\n return [b.sexpr(b.path('-disallow-dynamic-resolution', first.loc), [first], b.hash([b.pair('type', b.string(type), first.loc), b.pair('loc', b.string((0, _calculateLocationDisplay.default)(moduleName, loc)), first.loc), b.pair('original', b.string((0, _syntax.print)(first)))]), first.loc), ...rest];\n } else {\n return params;\n }\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformWrapMountAndOutlet;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{mount \"engine\" model=this.model}}\n ```\n \n with\n \n ```handlebars\n {{component (-mount \"engine\" model=this.model)}}\n ```\n \n and\n \n ```handlebars\n {{outlet}}\n ```\n \n with\n \n ```handlebars\n {{component (-outlet)}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformWrapMountAndOutlet(env) {\n var {\n builders: b\n } = env.syntax;\n var {\n hasLocal,\n node\n } = (0, _utils.trackLocals)();\n return {\n name: 'transform-wrap-mount-and-outlet',\n visitor: {\n Program: node,\n ElementNode: node,\n MustacheStatement(node) {\n if ((0, _utils.isPath)(node.path) && (node.path.original === 'mount' || node.path.original === 'outlet') && !hasLocal(node.path.original)) {\n var subexpression = b.sexpr(b.path(\"-\" + node.path.original), node.params, node.hash, node.loc);\n return b.mustache(b.path('component'), [subexpression], b.hash(), undefined, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/utils\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.isPath = isPath;\n _exports.isStringLiteral = isStringLiteral;\n _exports.isSubExpression = isSubExpression;\n _exports.trackLocals = trackLocals;\n function isPath(node) {\n return node.type === 'PathExpression';\n }\n function isSubExpression(node) {\n return node.type === 'SubExpression';\n }\n function isStringLiteral(node) {\n return node.type === 'StringLiteral';\n }\n function trackLocals() {\n var locals = new Map();\n var node = {\n enter(node) {\n for (var param of node.blockParams) {\n var value = locals.get(param) || 0;\n locals.set(param, value + 1);\n }\n },\n exit(node) {\n for (var param of node.blockParams) {\n var value = locals.get(param) - 1;\n if (value === 0) {\n locals.delete(param);\n } else {\n locals.set(param, value);\n }\n }\n }\n };\n return {\n hasLocal: key => locals.has(key),\n node\n };\n }\n});","define(\"ember-template-compiler/lib/system/bootstrap\", [\"exports\", \"ember-template-compiler/lib/system/compile\"], function (_exports, _compile) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /**\n @module ember\n */\n\n /**\n Find templates stored in the head tag as script tags and make them available\n to `Ember.CoreView` in the global `Ember.TEMPLATES` object.\n \n Script tags with `text/x-handlebars` will be compiled\n with Ember's template compiler and are suitable for use as a view's template.\n \n @private\n @method bootstrap\n @for Ember.HTMLBars\n @static\n @param ctx\n */\n function bootstrap(_ref) {\n var {\n context,\n hasTemplate,\n setTemplate\n } = _ref;\n if (!context) {\n context = document;\n }\n var selector = 'script[type=\"text/x-handlebars\"]';\n var elements = context.querySelectorAll(selector);\n for (var script of elements) {\n // Get the name of the script\n // First look for data-template-name attribute, then fall back to its\n // id if no name is found.\n var templateName = script.getAttribute('data-template-name') || script.getAttribute('id') || 'application';\n var template = void 0;\n template = (0, _compile.default)(script.innerHTML, {\n moduleName: templateName\n });\n // Check if template of same name already exists.\n if (hasTemplate(templateName)) {\n throw new Error(\"Template named \\\"\" + templateName + \"\\\" already exists.\");\n }\n // For templates which have a name, we save them and then remove them from the DOM.\n setTemplate(templateName, template);\n // Remove script tag from DOM.\n script.parentNode.removeChild(script);\n }\n }\n var _default = bootstrap;\n _exports.default = _default;\n});","define(\"ember-template-compiler/lib/system/calculate-location-display\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = calculateLocationDisplay;\n function calculateLocationDisplay(moduleName, loc) {\n var moduleInfo = '';\n if (moduleName) {\n moduleInfo += \"'\" + moduleName + \"' \";\n }\n if (loc) {\n var {\n column,\n line\n } = loc.start || {\n line: undefined,\n column: undefined\n };\n if (line !== undefined && column !== undefined) {\n if (moduleName) {\n // only prepend @ if the moduleName was present\n moduleInfo += '@ ';\n }\n moduleInfo += \"L\" + line + \":C\" + column;\n }\n }\n if (moduleInfo) {\n moduleInfo = \"(\" + moduleInfo + \") \";\n }\n return moduleInfo;\n }\n});","define(\"ember-template-compiler/lib/system/compile-options\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/index\", \"ember-template-compiler/lib/system/dasherize-component-name\"], function (_exports, _debug, _index, _dasherizeComponentName) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.buildCompileOptions = buildCompileOptions;\n _exports.default = compileOptions;\n _exports.transformsFor = transformsFor;\n var USER_PLUGINS = [];\n function malformedComponentLookup(string) {\n return string.indexOf('::') === -1 && string.indexOf(':') > -1;\n }\n function buildCompileOptions(_options) {\n var moduleName = _options.moduleName;\n var options = Object.assign({\n meta: {},\n isProduction: false,\n plugins: {\n ast: []\n }\n }, _options, {\n moduleName,\n customizeComponentName(tagname) {\n (true && !(!malformedComponentLookup(tagname)) && (0, _debug.assert)(\"You tried to invoke a component named <\" + tagname + \" /> in \\\"\" + (moduleName != null ? moduleName : '[NO MODULE]') + \"\\\", but that is not a valid name for a component. Did you mean to use the \\\"::\\\" syntax for nested components?\", !malformedComponentLookup(tagname)));\n return _dasherizeComponentName.default.get(tagname);\n }\n });\n if ('locals' in options && !options.locals) {\n // Glimmer's precompile options declare `locals` like:\n // locals?: string[]\n // but many in-use versions of babel-plugin-htmlbars-inline-precompile will\n // set locals to `null`. This used to work but only because glimmer was\n // ignoring locals for non-strict templates, and now it supports that case.\n delete options.locals;\n }\n // move `moduleName` into `meta` property\n if (options.moduleName) {\n var meta = options.meta;\n (true && !(meta) && (0, _debug.assert)('has meta', meta)); // We just set it\n meta.moduleName = options.moduleName;\n }\n return options;\n }\n function transformsFor(options) {\n return options.strictMode ? _index.STRICT_MODE_TRANSFORMS : _index.RESOLUTION_MODE_TRANSFORMS;\n }\n function compileOptions(_options) {\n if (_options === void 0) {\n _options = {};\n }\n var options = buildCompileOptions(_options);\n var builtInPlugins = transformsFor(options);\n if (!_options.plugins) {\n options.plugins = {\n ast: [...USER_PLUGINS, ...builtInPlugins]\n };\n } else {\n var potententialPugins = [...USER_PLUGINS, ...builtInPlugins];\n (true && !(options.plugins) && (0, _debug.assert)('expected plugins', options.plugins));\n var pluginsToAdd = potententialPugins.filter(plugin => {\n (true && !(options.plugins) && (0, _debug.assert)('expected plugins', options.plugins));\n return options.plugins.ast.indexOf(plugin) === -1;\n });\n options.plugins.ast = options.plugins.ast.concat(pluginsToAdd);\n }\n return options;\n }\n});","define(\"ember-template-compiler/lib/system/compile\", [\"exports\", \"require\", \"ember-template-compiler/lib/system/precompile\"], function (_exports, _require, _precompile) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = compile;\n /**\n @module ember\n */\n\n var template;\n /**\n Uses HTMLBars `compile` function to process a string into a compiled template.\n This is not present in production builds.\n @private\n @method compile\n @param {String} templateString This is the string to be compiled by HTMLBars.\n @param {Object} options This is an options hash to augment the compiler options.\n */\n function compile(templateString, options) {\n if (options === void 0) {\n options = {};\n }\n if (!template && (0, _require.has)('@ember/-internals/glimmer')) {\n template = (0, _require.default)(\"@ember/-internals/glimmer\").template;\n }\n if (!template) {\n throw new Error('Cannot call `compile` with only the template compiler loaded. Please load `ember.debug.js` or `ember.prod.js` prior to calling `compile`.');\n }\n return template(evaluate((0, _precompile.default)(templateString, options)));\n }\n function evaluate(precompiled) {\n return new Function(\"return \" + precompiled)();\n }\n});","define(\"ember-template-compiler/lib/system/dasherize-component-name\", [\"exports\", \"@ember/-internals/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /*\n This diverges from `Ember.String.dasherize` so that`<XFoo />` can resolve to `x-foo`.\n `Ember.String.dasherize` would resolve it to `xfoo`..\n */\n var SIMPLE_DASHERIZE_REGEXP = /[A-Z]|::/g;\n var ALPHA = /[A-Za-z0-9]/;\n var _default = new _utils.Cache(1000, key => key.replace(SIMPLE_DASHERIZE_REGEXP, (char, index) => {\n if (char === '::') {\n return '/';\n }\n if (index === 0 || !ALPHA.test(key[index - 1])) {\n return char.toLowerCase();\n }\n return \"-\" + char.toLowerCase();\n }));\n _exports.default = _default;\n});","define(\"ember-template-compiler/lib/system/initializer\", [\"require\", \"ember-template-compiler/lib/system/bootstrap\"], function (_require, _bootstrap) {\n \"use strict\";\n\n // Globals mode template compiler\n if ((0, _require.has)('@ember/application') && (0, _require.has)('@ember/-internals/browser-environment') && (0, _require.has)('@ember/-internals/glimmer')) {\n var emberEnv = (0, _require.default)(\"@ember/-internals/browser-environment\");\n var emberGlimmer = (0, _require.default)(\"@ember/-internals/glimmer\");\n var emberApp = (0, _require.default)(\"@ember/application\");\n var Application = emberApp.default;\n var {\n hasTemplate,\n setTemplate\n } = emberGlimmer;\n var {\n hasDOM\n } = emberEnv;\n Application.initializer({\n name: 'domTemplates',\n initialize() {\n if (hasDOM) {\n (0, _bootstrap.default)({\n context: document,\n hasTemplate,\n setTemplate\n });\n }\n }\n });\n }\n});","define(\"ember-template-compiler/lib/system/precompile\", [\"exports\", \"@glimmer/compiler\", \"ember-template-compiler/lib/system/compile-options\"], function (_exports, _compiler, _compileOptions) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = precompile;\n /**\n @module ember\n */\n\n /**\n Uses HTMLBars `compile` function to process a string into a compiled template string.\n The returned string must be passed through `Ember.HTMLBars.template`.\n \n This is not present in production builds.\n \n @private\n @method precompile\n @param {String} templateString This is the string to be compiled by HTMLBars.\n */\n function precompile(templateString, options) {\n if (options === void 0) {\n options = {};\n }\n return (0, _compiler.precompile)(templateString, (0, _compileOptions.default)(options));\n }\n});","define(\"ember-template-compiler/lib/types\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n});","define(\"ember/version\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _default = \"5.4.0\";\n _exports.default = _default;\n});","define(\"simple-html-tokenizer\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.Tokenizer = _exports.HTML5NamedCharRefs = _exports.EventedTokenizer = _exports.EntityParser = void 0;\n _exports.tokenize = tokenize;\n /**\n * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json\n * do not edit\n */\n var namedCharRefs = {\n Aacute: \"Á\",\n aacute: \"á\",\n Abreve: \"Ă\",\n abreve: \"ă\",\n ac: \"∾\",\n acd: \"∿\",\n acE: \"∾̳\",\n Acirc: \"Â\",\n acirc: \"â\",\n acute: \"´\",\n Acy: \"А\",\n acy: \"а\",\n AElig: \"Æ\",\n aelig: \"æ\",\n af: \"\\u2061\",\n Afr: \"𝔄\",\n afr: \"𝔞\",\n Agrave: \"À\",\n agrave: \"à\",\n alefsym: \"ℵ\",\n aleph: \"ℵ\",\n Alpha: \"Α\",\n alpha: \"α\",\n Amacr: \"Ā\",\n amacr: \"ā\",\n amalg: \"⨿\",\n amp: \"&\",\n AMP: \"&\",\n andand: \"⩕\",\n And: \"⩓\",\n and: \"∧\",\n andd: \"⩜\",\n andslope: \"⩘\",\n andv: \"⩚\",\n ang: \"∠\",\n ange: \"⦤\",\n angle: \"∠\",\n angmsdaa: \"⦨\",\n angmsdab: \"⦩\",\n angmsdac: \"⦪\",\n angmsdad: \"⦫\",\n angmsdae: \"⦬\",\n angmsdaf: \"⦭\",\n angmsdag: \"⦮\",\n angmsdah: \"⦯\",\n angmsd: \"∡\",\n angrt: \"∟\",\n angrtvb: \"⊾\",\n angrtvbd: \"⦝\",\n angsph: \"∢\",\n angst: \"Å\",\n angzarr: \"⍼\",\n Aogon: \"Ą\",\n aogon: \"ą\",\n Aopf: \"𝔸\",\n aopf: \"𝕒\",\n apacir: \"⩯\",\n ap: \"≈\",\n apE: \"⩰\",\n ape: \"≊\",\n apid: \"≋\",\n apos: \"'\",\n ApplyFunction: \"\\u2061\",\n approx: \"≈\",\n approxeq: \"≊\",\n Aring: \"Å\",\n aring: \"å\",\n Ascr: \"𝒜\",\n ascr: \"𝒶\",\n Assign: \"≔\",\n ast: \"*\",\n asymp: \"≈\",\n asympeq: \"≍\",\n Atilde: \"Ã\",\n atilde: \"ã\",\n Auml: \"Ä\",\n auml: \"ä\",\n awconint: \"∳\",\n awint: \"⨑\",\n backcong: \"≌\",\n backepsilon: \"϶\",\n backprime: \"‵\",\n backsim: \"∽\",\n backsimeq: \"⋍\",\n Backslash: \"∖\",\n Barv: \"⫧\",\n barvee: \"⊽\",\n barwed: \"⌅\",\n Barwed: \"⌆\",\n barwedge: \"⌅\",\n bbrk: \"⎵\",\n bbrktbrk: \"⎶\",\n bcong: \"≌\",\n Bcy: \"Б\",\n bcy: \"б\",\n bdquo: \"„\",\n becaus: \"∵\",\n because: \"∵\",\n Because: \"∵\",\n bemptyv: \"⦰\",\n bepsi: \"϶\",\n bernou: \"ℬ\",\n Bernoullis: \"ℬ\",\n Beta: \"Β\",\n beta: \"β\",\n beth: \"ℶ\",\n between: \"≬\",\n Bfr: \"𝔅\",\n bfr: \"𝔟\",\n bigcap: \"⋂\",\n bigcirc: \"◯\",\n bigcup: \"⋃\",\n bigodot: \"⨀\",\n bigoplus: \"⨁\",\n bigotimes: \"⨂\",\n bigsqcup: \"⨆\",\n bigstar: \"★\",\n bigtriangledown: \"▽\",\n bigtriangleup: \"△\",\n biguplus: \"⨄\",\n bigvee: \"⋁\",\n bigwedge: \"⋀\",\n bkarow: \"⤍\",\n blacklozenge: \"⧫\",\n blacksquare: \"▪\",\n blacktriangle: \"▴\",\n blacktriangledown: \"▾\",\n blacktriangleleft: \"◂\",\n blacktriangleright: \"▸\",\n blank: \"␣\",\n blk12: \"▒\",\n blk14: \"░\",\n blk34: \"▓\",\n block: \"█\",\n bne: \"=⃥\",\n bnequiv: \"≡⃥\",\n bNot: \"⫭\",\n bnot: \"⌐\",\n Bopf: \"𝔹\",\n bopf: \"𝕓\",\n bot: \"⊥\",\n bottom: \"⊥\",\n bowtie: \"⋈\",\n boxbox: \"⧉\",\n boxdl: \"┐\",\n boxdL: \"╕\",\n boxDl: \"╖\",\n boxDL: \"╗\",\n boxdr: \"┌\",\n boxdR: \"╒\",\n boxDr: \"╓\",\n boxDR: \"╔\",\n boxh: \"─\",\n boxH: \"═\",\n boxhd: \"┬\",\n boxHd: \"╤\",\n boxhD: \"╥\",\n boxHD: \"╦\",\n boxhu: \"┴\",\n boxHu: \"╧\",\n boxhU: \"╨\",\n boxHU: \"╩\",\n boxminus: \"⊟\",\n boxplus: \"⊞\",\n boxtimes: \"⊠\",\n boxul: \"┘\",\n boxuL: \"╛\",\n boxUl: \"╜\",\n boxUL: \"╝\",\n boxur: \"└\",\n boxuR: \"╘\",\n boxUr: \"╙\",\n boxUR: \"╚\",\n boxv: \"│\",\n boxV: \"║\",\n boxvh: \"┼\",\n boxvH: \"╪\",\n boxVh: \"╫\",\n boxVH: \"╬\",\n boxvl: \"┤\",\n boxvL: \"╡\",\n boxVl: \"╢\",\n boxVL: \"╣\",\n boxvr: \"├\",\n boxvR: \"╞\",\n boxVr: \"╟\",\n boxVR: \"╠\",\n bprime: \"‵\",\n breve: \"˘\",\n Breve: \"˘\",\n brvbar: \"¦\",\n bscr: \"𝒷\",\n Bscr: \"ℬ\",\n bsemi: \"⁏\",\n bsim: \"∽\",\n bsime: \"⋍\",\n bsolb: \"⧅\",\n bsol: \"\\\\\",\n bsolhsub: \"⟈\",\n bull: \"•\",\n bullet: \"•\",\n bump: \"≎\",\n bumpE: \"⪮\",\n bumpe: \"≏\",\n Bumpeq: \"≎\",\n bumpeq: \"≏\",\n Cacute: \"Ć\",\n cacute: \"ć\",\n capand: \"⩄\",\n capbrcup: \"⩉\",\n capcap: \"⩋\",\n cap: \"∩\",\n Cap: \"⋒\",\n capcup: \"⩇\",\n capdot: \"⩀\",\n CapitalDifferentialD: \"ⅅ\",\n caps: \"∩︀\",\n caret: \"⁁\",\n caron: \"ˇ\",\n Cayleys: \"ℭ\",\n ccaps: \"⩍\",\n Ccaron: \"Č\",\n ccaron: \"č\",\n Ccedil: \"Ç\",\n ccedil: \"ç\",\n Ccirc: \"Ĉ\",\n ccirc: \"ĉ\",\n Cconint: \"∰\",\n ccups: \"⩌\",\n ccupssm: \"⩐\",\n Cdot: \"Ċ\",\n cdot: \"ċ\",\n cedil: \"¸\",\n Cedilla: \"¸\",\n cemptyv: \"⦲\",\n cent: \"¢\",\n centerdot: \"·\",\n CenterDot: \"·\",\n cfr: \"𝔠\",\n Cfr: \"ℭ\",\n CHcy: \"Ч\",\n chcy: \"ч\",\n check: \"✓\",\n checkmark: \"✓\",\n Chi: \"Χ\",\n chi: \"χ\",\n circ: \"ˆ\",\n circeq: \"≗\",\n circlearrowleft: \"↺\",\n circlearrowright: \"↻\",\n circledast: \"⊛\",\n circledcirc: \"⊚\",\n circleddash: \"⊝\",\n CircleDot: \"⊙\",\n circledR: \"®\",\n circledS: \"Ⓢ\",\n CircleMinus: \"⊖\",\n CirclePlus: \"⊕\",\n CircleTimes: \"⊗\",\n cir: \"○\",\n cirE: \"⧃\",\n cire: \"≗\",\n cirfnint: \"⨐\",\n cirmid: \"⫯\",\n cirscir: \"⧂\",\n ClockwiseContourIntegral: \"∲\",\n CloseCurlyDoubleQuote: \"”\",\n CloseCurlyQuote: \"’\",\n clubs: \"♣\",\n clubsuit: \"♣\",\n colon: \":\",\n Colon: \"∷\",\n Colone: \"⩴\",\n colone: \"≔\",\n coloneq: \"≔\",\n comma: \",\",\n commat: \"@\",\n comp: \"∁\",\n compfn: \"∘\",\n complement: \"∁\",\n complexes: \"ℂ\",\n cong: \"≅\",\n congdot: \"⩭\",\n Congruent: \"≡\",\n conint: \"∮\",\n Conint: \"∯\",\n ContourIntegral: \"∮\",\n copf: \"𝕔\",\n Copf: \"ℂ\",\n coprod: \"∐\",\n Coproduct: \"∐\",\n copy: \"©\",\n COPY: \"©\",\n copysr: \"℗\",\n CounterClockwiseContourIntegral: \"∳\",\n crarr: \"↵\",\n cross: \"✗\",\n Cross: \"⨯\",\n Cscr: \"𝒞\",\n cscr: \"𝒸\",\n csub: \"⫏\",\n csube: \"⫑\",\n csup: \"⫐\",\n csupe: \"⫒\",\n ctdot: \"⋯\",\n cudarrl: \"⤸\",\n cudarrr: \"⤵\",\n cuepr: \"⋞\",\n cuesc: \"⋟\",\n cularr: \"↶\",\n cularrp: \"⤽\",\n cupbrcap: \"⩈\",\n cupcap: \"⩆\",\n CupCap: \"≍\",\n cup: \"∪\",\n Cup: \"⋓\",\n cupcup: \"⩊\",\n cupdot: \"⊍\",\n cupor: \"⩅\",\n cups: \"∪︀\",\n curarr: \"↷\",\n curarrm: \"⤼\",\n curlyeqprec: \"⋞\",\n curlyeqsucc: \"⋟\",\n curlyvee: \"⋎\",\n curlywedge: \"⋏\",\n curren: \"¤\",\n curvearrowleft: \"↶\",\n curvearrowright: \"↷\",\n cuvee: \"⋎\",\n cuwed: \"⋏\",\n cwconint: \"∲\",\n cwint: \"∱\",\n cylcty: \"⌭\",\n dagger: \"†\",\n Dagger: \"‡\",\n daleth: \"ℸ\",\n darr: \"↓\",\n Darr: \"↡\",\n dArr: \"⇓\",\n dash: \"‐\",\n Dashv: \"⫤\",\n dashv: \"⊣\",\n dbkarow: \"⤏\",\n dblac: \"˝\",\n Dcaron: \"Ď\",\n dcaron: \"ď\",\n Dcy: \"Д\",\n dcy: \"д\",\n ddagger: \"‡\",\n ddarr: \"⇊\",\n DD: \"ⅅ\",\n dd: \"ⅆ\",\n DDotrahd: \"⤑\",\n ddotseq: \"⩷\",\n deg: \"°\",\n Del: \"∇\",\n Delta: \"Δ\",\n delta: \"δ\",\n demptyv: \"⦱\",\n dfisht: \"⥿\",\n Dfr: \"𝔇\",\n dfr: \"𝔡\",\n dHar: \"⥥\",\n dharl: \"⇃\",\n dharr: \"⇂\",\n DiacriticalAcute: \"´\",\n DiacriticalDot: \"˙\",\n DiacriticalDoubleAcute: \"˝\",\n DiacriticalGrave: \"`\",\n DiacriticalTilde: \"˜\",\n diam: \"⋄\",\n diamond: \"⋄\",\n Diamond: \"⋄\",\n diamondsuit: \"♦\",\n diams: \"♦\",\n die: \"¨\",\n DifferentialD: \"ⅆ\",\n digamma: \"ϝ\",\n disin: \"⋲\",\n div: \"÷\",\n divide: \"÷\",\n divideontimes: \"⋇\",\n divonx: \"⋇\",\n DJcy: \"Ђ\",\n djcy: \"ђ\",\n dlcorn: \"⌞\",\n dlcrop: \"⌍\",\n dollar: \"$\",\n Dopf: \"𝔻\",\n dopf: \"𝕕\",\n Dot: \"¨\",\n dot: \"˙\",\n DotDot: \"⃜\",\n doteq: \"≐\",\n doteqdot: \"≑\",\n DotEqual: \"≐\",\n dotminus: \"∸\",\n dotplus: \"∔\",\n dotsquare: \"⊡\",\n doublebarwedge: \"⌆\",\n DoubleContourIntegral: \"∯\",\n DoubleDot: \"¨\",\n DoubleDownArrow: \"⇓\",\n DoubleLeftArrow: \"⇐\",\n DoubleLeftRightArrow: \"⇔\",\n DoubleLeftTee: \"⫤\",\n DoubleLongLeftArrow: \"⟸\",\n DoubleLongLeftRightArrow: \"⟺\",\n DoubleLongRightArrow: \"⟹\",\n DoubleRightArrow: \"⇒\",\n DoubleRightTee: \"⊨\",\n DoubleUpArrow: \"⇑\",\n DoubleUpDownArrow: \"⇕\",\n DoubleVerticalBar: \"∥\",\n DownArrowBar: \"⤓\",\n downarrow: \"↓\",\n DownArrow: \"↓\",\n Downarrow: \"⇓\",\n DownArrowUpArrow: \"⇵\",\n DownBreve: \"̑\",\n downdownarrows: \"⇊\",\n downharpoonleft: \"⇃\",\n downharpoonright: \"⇂\",\n DownLeftRightVector: \"⥐\",\n DownLeftTeeVector: \"⥞\",\n DownLeftVectorBar: \"⥖\",\n DownLeftVector: \"↽\",\n DownRightTeeVector: \"⥟\",\n DownRightVectorBar: \"⥗\",\n DownRightVector: \"⇁\",\n DownTeeArrow: \"↧\",\n DownTee: \"⊤\",\n drbkarow: \"⤐\",\n drcorn: \"⌟\",\n drcrop: \"⌌\",\n Dscr: \"𝒟\",\n dscr: \"𝒹\",\n DScy: \"Ѕ\",\n dscy: \"ѕ\",\n dsol: \"⧶\",\n Dstrok: \"Đ\",\n dstrok: \"đ\",\n dtdot: \"⋱\",\n dtri: \"▿\",\n dtrif: \"▾\",\n duarr: \"⇵\",\n duhar: \"⥯\",\n dwangle: \"⦦\",\n DZcy: \"Џ\",\n dzcy: \"џ\",\n dzigrarr: \"⟿\",\n Eacute: \"É\",\n eacute: \"é\",\n easter: \"⩮\",\n Ecaron: \"Ě\",\n ecaron: \"ě\",\n Ecirc: \"Ê\",\n ecirc: \"ê\",\n ecir: \"≖\",\n ecolon: \"≕\",\n Ecy: \"Э\",\n ecy: \"э\",\n eDDot: \"⩷\",\n Edot: \"Ė\",\n edot: \"ė\",\n eDot: \"≑\",\n ee: \"ⅇ\",\n efDot: \"≒\",\n Efr: \"𝔈\",\n efr: \"𝔢\",\n eg: \"⪚\",\n Egrave: \"È\",\n egrave: \"è\",\n egs: \"⪖\",\n egsdot: \"⪘\",\n el: \"⪙\",\n Element: \"∈\",\n elinters: \"⏧\",\n ell: \"ℓ\",\n els: \"⪕\",\n elsdot: \"⪗\",\n Emacr: \"Ē\",\n emacr: \"ē\",\n empty: \"∅\",\n emptyset: \"∅\",\n EmptySmallSquare: \"◻\",\n emptyv: \"∅\",\n EmptyVerySmallSquare: \"▫\",\n emsp13: \" \",\n emsp14: \" \",\n emsp: \" \",\n ENG: \"Ŋ\",\n eng: \"ŋ\",\n ensp: \" \",\n Eogon: \"Ę\",\n eogon: \"ę\",\n Eopf: \"𝔼\",\n eopf: \"𝕖\",\n epar: \"⋕\",\n eparsl: \"⧣\",\n eplus: \"⩱\",\n epsi: \"ε\",\n Epsilon: \"Ε\",\n epsilon: \"ε\",\n epsiv: \"ϵ\",\n eqcirc: \"≖\",\n eqcolon: \"≕\",\n eqsim: \"≂\",\n eqslantgtr: \"⪖\",\n eqslantless: \"⪕\",\n Equal: \"⩵\",\n equals: \"=\",\n EqualTilde: \"≂\",\n equest: \"≟\",\n Equilibrium: \"⇌\",\n equiv: \"≡\",\n equivDD: \"⩸\",\n eqvparsl: \"⧥\",\n erarr: \"⥱\",\n erDot: \"≓\",\n escr: \"ℯ\",\n Escr: \"ℰ\",\n esdot: \"≐\",\n Esim: \"⩳\",\n esim: \"≂\",\n Eta: \"Η\",\n eta: \"η\",\n ETH: \"Ð\",\n eth: \"ð\",\n Euml: \"Ë\",\n euml: \"ë\",\n euro: \"€\",\n excl: \"!\",\n exist: \"∃\",\n Exists: \"∃\",\n expectation: \"ℰ\",\n exponentiale: \"ⅇ\",\n ExponentialE: \"ⅇ\",\n fallingdotseq: \"≒\",\n Fcy: \"Ф\",\n fcy: \"ф\",\n female: \"♀\",\n ffilig: \"ffi\",\n fflig: \"ff\",\n ffllig: \"ffl\",\n Ffr: \"𝔉\",\n ffr: \"𝔣\",\n filig: \"fi\",\n FilledSmallSquare: \"◼\",\n FilledVerySmallSquare: \"▪\",\n fjlig: \"fj\",\n flat: \"♭\",\n fllig: \"fl\",\n fltns: \"▱\",\n fnof: \"ƒ\",\n Fopf: \"𝔽\",\n fopf: \"𝕗\",\n forall: \"∀\",\n ForAll: \"∀\",\n fork: \"⋔\",\n forkv: \"⫙\",\n Fouriertrf: \"ℱ\",\n fpartint: \"⨍\",\n frac12: \"½\",\n frac13: \"⅓\",\n frac14: \"¼\",\n frac15: \"⅕\",\n frac16: \"⅙\",\n frac18: \"⅛\",\n frac23: \"⅔\",\n frac25: \"⅖\",\n frac34: \"¾\",\n frac35: \"⅗\",\n frac38: \"⅜\",\n frac45: \"⅘\",\n frac56: \"⅚\",\n frac58: \"⅝\",\n frac78: \"⅞\",\n frasl: \"⁄\",\n frown: \"⌢\",\n fscr: \"𝒻\",\n Fscr: \"ℱ\",\n gacute: \"ǵ\",\n Gamma: \"Γ\",\n gamma: \"γ\",\n Gammad: \"Ϝ\",\n gammad: \"ϝ\",\n gap: \"⪆\",\n Gbreve: \"Ğ\",\n gbreve: \"ğ\",\n Gcedil: \"Ģ\",\n Gcirc: \"Ĝ\",\n gcirc: \"ĝ\",\n Gcy: \"Г\",\n gcy: \"г\",\n Gdot: \"Ġ\",\n gdot: \"ġ\",\n ge: \"≥\",\n gE: \"≧\",\n gEl: \"⪌\",\n gel: \"⋛\",\n geq: \"≥\",\n geqq: \"≧\",\n geqslant: \"⩾\",\n gescc: \"⪩\",\n ges: \"⩾\",\n gesdot: \"⪀\",\n gesdoto: \"⪂\",\n gesdotol: \"⪄\",\n gesl: \"⋛︀\",\n gesles: \"⪔\",\n Gfr: \"𝔊\",\n gfr: \"𝔤\",\n gg: \"≫\",\n Gg: \"⋙\",\n ggg: \"⋙\",\n gimel: \"ℷ\",\n GJcy: \"Ѓ\",\n gjcy: \"ѓ\",\n gla: \"⪥\",\n gl: \"≷\",\n glE: \"⪒\",\n glj: \"⪤\",\n gnap: \"⪊\",\n gnapprox: \"⪊\",\n gne: \"⪈\",\n gnE: \"≩\",\n gneq: \"⪈\",\n gneqq: \"≩\",\n gnsim: \"⋧\",\n Gopf: \"𝔾\",\n gopf: \"𝕘\",\n grave: \"`\",\n GreaterEqual: \"≥\",\n GreaterEqualLess: \"⋛\",\n GreaterFullEqual: \"≧\",\n GreaterGreater: \"⪢\",\n GreaterLess: \"≷\",\n GreaterSlantEqual: \"⩾\",\n GreaterTilde: \"≳\",\n Gscr: \"𝒢\",\n gscr: \"ℊ\",\n gsim: \"≳\",\n gsime: \"⪎\",\n gsiml: \"⪐\",\n gtcc: \"⪧\",\n gtcir: \"⩺\",\n gt: \">\",\n GT: \">\",\n Gt: \"≫\",\n gtdot: \"⋗\",\n gtlPar: \"⦕\",\n gtquest: \"⩼\",\n gtrapprox: \"⪆\",\n gtrarr: \"⥸\",\n gtrdot: \"⋗\",\n gtreqless: \"⋛\",\n gtreqqless: \"⪌\",\n gtrless: \"≷\",\n gtrsim: \"≳\",\n gvertneqq: \"≩︀\",\n gvnE: \"≩︀\",\n Hacek: \"ˇ\",\n hairsp: \" \",\n half: \"½\",\n hamilt: \"ℋ\",\n HARDcy: \"Ъ\",\n hardcy: \"ъ\",\n harrcir: \"⥈\",\n harr: \"↔\",\n hArr: \"⇔\",\n harrw: \"↭\",\n Hat: \"^\",\n hbar: \"ℏ\",\n Hcirc: \"Ĥ\",\n hcirc: \"ĥ\",\n hearts: \"♥\",\n heartsuit: \"♥\",\n hellip: \"…\",\n hercon: \"⊹\",\n hfr: \"𝔥\",\n Hfr: \"ℌ\",\n HilbertSpace: \"ℋ\",\n hksearow: \"⤥\",\n hkswarow: \"⤦\",\n hoarr: \"⇿\",\n homtht: \"∻\",\n hookleftarrow: \"↩\",\n hookrightarrow: \"↪\",\n hopf: \"𝕙\",\n Hopf: \"ℍ\",\n horbar: \"―\",\n HorizontalLine: \"─\",\n hscr: \"𝒽\",\n Hscr: \"ℋ\",\n hslash: \"ℏ\",\n Hstrok: \"Ħ\",\n hstrok: \"ħ\",\n HumpDownHump: \"≎\",\n HumpEqual: \"≏\",\n hybull: \"⁃\",\n hyphen: \"‐\",\n Iacute: \"Í\",\n iacute: \"í\",\n ic: \"\\u2063\",\n Icirc: \"Î\",\n icirc: \"î\",\n Icy: \"И\",\n icy: \"и\",\n Idot: \"İ\",\n IEcy: \"Е\",\n iecy: \"е\",\n iexcl: \"¡\",\n iff: \"⇔\",\n ifr: \"𝔦\",\n Ifr: \"ℑ\",\n Igrave: \"Ì\",\n igrave: \"ì\",\n ii: \"ⅈ\",\n iiiint: \"⨌\",\n iiint: \"∭\",\n iinfin: \"⧜\",\n iiota: \"℩\",\n IJlig: \"IJ\",\n ijlig: \"ij\",\n Imacr: \"Ī\",\n imacr: \"ī\",\n image: \"ℑ\",\n ImaginaryI: \"ⅈ\",\n imagline: \"ℐ\",\n imagpart: \"ℑ\",\n imath: \"ı\",\n Im: \"ℑ\",\n imof: \"⊷\",\n imped: \"Ƶ\",\n Implies: \"⇒\",\n incare: \"℅\",\n in: \"∈\",\n infin: \"∞\",\n infintie: \"⧝\",\n inodot: \"ı\",\n intcal: \"⊺\",\n int: \"∫\",\n Int: \"∬\",\n integers: \"ℤ\",\n Integral: \"∫\",\n intercal: \"⊺\",\n Intersection: \"⋂\",\n intlarhk: \"⨗\",\n intprod: \"⨼\",\n InvisibleComma: \"\\u2063\",\n InvisibleTimes: \"\\u2062\",\n IOcy: \"Ё\",\n iocy: \"ё\",\n Iogon: \"Į\",\n iogon: \"į\",\n Iopf: \"𝕀\",\n iopf: \"𝕚\",\n Iota: \"Ι\",\n iota: \"ι\",\n iprod: \"⨼\",\n iquest: \"¿\",\n iscr: \"𝒾\",\n Iscr: \"ℐ\",\n isin: \"∈\",\n isindot: \"⋵\",\n isinE: \"⋹\",\n isins: \"⋴\",\n isinsv: \"⋳\",\n isinv: \"∈\",\n it: \"\\u2062\",\n Itilde: \"Ĩ\",\n itilde: \"ĩ\",\n Iukcy: \"І\",\n iukcy: \"і\",\n Iuml: \"Ï\",\n iuml: \"ï\",\n Jcirc: \"Ĵ\",\n jcirc: \"ĵ\",\n Jcy: \"Й\",\n jcy: \"й\",\n Jfr: \"𝔍\",\n jfr: \"𝔧\",\n jmath: \"ȷ\",\n Jopf: \"𝕁\",\n jopf: \"𝕛\",\n Jscr: \"𝒥\",\n jscr: \"𝒿\",\n Jsercy: \"Ј\",\n jsercy: \"ј\",\n Jukcy: \"Є\",\n jukcy: \"є\",\n Kappa: \"Κ\",\n kappa: \"κ\",\n kappav: \"ϰ\",\n Kcedil: \"Ķ\",\n kcedil: \"ķ\",\n Kcy: \"К\",\n kcy: \"к\",\n Kfr: \"𝔎\",\n kfr: \"𝔨\",\n kgreen: \"ĸ\",\n KHcy: \"Х\",\n khcy: \"х\",\n KJcy: \"Ќ\",\n kjcy: \"ќ\",\n Kopf: \"𝕂\",\n kopf: \"𝕜\",\n Kscr: \"𝒦\",\n kscr: \"𝓀\",\n lAarr: \"⇚\",\n Lacute: \"Ĺ\",\n lacute: \"ĺ\",\n laemptyv: \"⦴\",\n lagran: \"ℒ\",\n Lambda: \"Λ\",\n lambda: \"λ\",\n lang: \"⟨\",\n Lang: \"⟪\",\n langd: \"⦑\",\n langle: \"⟨\",\n lap: \"⪅\",\n Laplacetrf: \"ℒ\",\n laquo: \"«\",\n larrb: \"⇤\",\n larrbfs: \"⤟\",\n larr: \"←\",\n Larr: \"↞\",\n lArr: \"⇐\",\n larrfs: \"⤝\",\n larrhk: \"↩\",\n larrlp: \"↫\",\n larrpl: \"⤹\",\n larrsim: \"⥳\",\n larrtl: \"↢\",\n latail: \"⤙\",\n lAtail: \"⤛\",\n lat: \"⪫\",\n late: \"⪭\",\n lates: \"⪭︀\",\n lbarr: \"⤌\",\n lBarr: \"⤎\",\n lbbrk: \"❲\",\n lbrace: \"{\",\n lbrack: \"[\",\n lbrke: \"⦋\",\n lbrksld: \"⦏\",\n lbrkslu: \"⦍\",\n Lcaron: \"Ľ\",\n lcaron: \"ľ\",\n Lcedil: \"Ļ\",\n lcedil: \"ļ\",\n lceil: \"⌈\",\n lcub: \"{\",\n Lcy: \"Л\",\n lcy: \"л\",\n ldca: \"⤶\",\n ldquo: \"“\",\n ldquor: \"„\",\n ldrdhar: \"⥧\",\n ldrushar: \"⥋\",\n ldsh: \"↲\",\n le: \"≤\",\n lE: \"≦\",\n LeftAngleBracket: \"⟨\",\n LeftArrowBar: \"⇤\",\n leftarrow: \"←\",\n LeftArrow: \"←\",\n Leftarrow: \"⇐\",\n LeftArrowRightArrow: \"⇆\",\n leftarrowtail: \"↢\",\n LeftCeiling: \"⌈\",\n LeftDoubleBracket: \"⟦\",\n LeftDownTeeVector: \"⥡\",\n LeftDownVectorBar: \"⥙\",\n LeftDownVector: \"⇃\",\n LeftFloor: \"⌊\",\n leftharpoondown: \"↽\",\n leftharpoonup: \"↼\",\n leftleftarrows: \"⇇\",\n leftrightarrow: \"↔\",\n LeftRightArrow: \"↔\",\n Leftrightarrow: \"⇔\",\n leftrightarrows: \"⇆\",\n leftrightharpoons: \"⇋\",\n leftrightsquigarrow: \"↭\",\n LeftRightVector: \"⥎\",\n LeftTeeArrow: \"↤\",\n LeftTee: \"⊣\",\n LeftTeeVector: \"⥚\",\n leftthreetimes: \"⋋\",\n LeftTriangleBar: \"⧏\",\n LeftTriangle: \"⊲\",\n LeftTriangleEqual: \"⊴\",\n LeftUpDownVector: \"⥑\",\n LeftUpTeeVector: \"⥠\",\n LeftUpVectorBar: \"⥘\",\n LeftUpVector: \"↿\",\n LeftVectorBar: \"⥒\",\n LeftVector: \"↼\",\n lEg: \"⪋\",\n leg: \"⋚\",\n leq: \"≤\",\n leqq: \"≦\",\n leqslant: \"⩽\",\n lescc: \"⪨\",\n les: \"⩽\",\n lesdot: \"⩿\",\n lesdoto: \"⪁\",\n lesdotor: \"⪃\",\n lesg: \"⋚︀\",\n lesges: \"⪓\",\n lessapprox: \"⪅\",\n lessdot: \"⋖\",\n lesseqgtr: \"⋚\",\n lesseqqgtr: \"⪋\",\n LessEqualGreater: \"⋚\",\n LessFullEqual: \"≦\",\n LessGreater: \"≶\",\n lessgtr: \"≶\",\n LessLess: \"⪡\",\n lesssim: \"≲\",\n LessSlantEqual: \"⩽\",\n LessTilde: \"≲\",\n lfisht: \"⥼\",\n lfloor: \"⌊\",\n Lfr: \"𝔏\",\n lfr: \"𝔩\",\n lg: \"≶\",\n lgE: \"⪑\",\n lHar: \"⥢\",\n lhard: \"↽\",\n lharu: \"↼\",\n lharul: \"⥪\",\n lhblk: \"▄\",\n LJcy: \"Љ\",\n ljcy: \"љ\",\n llarr: \"⇇\",\n ll: \"≪\",\n Ll: \"⋘\",\n llcorner: \"⌞\",\n Lleftarrow: \"⇚\",\n llhard: \"⥫\",\n lltri: \"◺\",\n Lmidot: \"Ŀ\",\n lmidot: \"ŀ\",\n lmoustache: \"⎰\",\n lmoust: \"⎰\",\n lnap: \"⪉\",\n lnapprox: \"⪉\",\n lne: \"⪇\",\n lnE: \"≨\",\n lneq: \"⪇\",\n lneqq: \"≨\",\n lnsim: \"⋦\",\n loang: \"⟬\",\n loarr: \"⇽\",\n lobrk: \"⟦\",\n longleftarrow: \"⟵\",\n LongLeftArrow: \"⟵\",\n Longleftarrow: \"⟸\",\n longleftrightarrow: \"⟷\",\n LongLeftRightArrow: \"⟷\",\n Longleftrightarrow: \"⟺\",\n longmapsto: \"⟼\",\n longrightarrow: \"⟶\",\n LongRightArrow: \"⟶\",\n Longrightarrow: \"⟹\",\n looparrowleft: \"↫\",\n looparrowright: \"↬\",\n lopar: \"⦅\",\n Lopf: \"𝕃\",\n lopf: \"𝕝\",\n loplus: \"⨭\",\n lotimes: \"⨴\",\n lowast: \"∗\",\n lowbar: \"_\",\n LowerLeftArrow: \"↙\",\n LowerRightArrow: \"↘\",\n loz: \"◊\",\n lozenge: \"◊\",\n lozf: \"⧫\",\n lpar: \"(\",\n lparlt: \"⦓\",\n lrarr: \"⇆\",\n lrcorner: \"⌟\",\n lrhar: \"⇋\",\n lrhard: \"⥭\",\n lrm: \"\\u200e\",\n lrtri: \"⊿\",\n lsaquo: \"‹\",\n lscr: \"𝓁\",\n Lscr: \"ℒ\",\n lsh: \"↰\",\n Lsh: \"↰\",\n lsim: \"≲\",\n lsime: \"⪍\",\n lsimg: \"⪏\",\n lsqb: \"[\",\n lsquo: \"‘\",\n lsquor: \"‚\",\n Lstrok: \"Ł\",\n lstrok: \"ł\",\n ltcc: \"⪦\",\n ltcir: \"⩹\",\n lt: \"<\",\n LT: \"<\",\n Lt: \"≪\",\n ltdot: \"⋖\",\n lthree: \"⋋\",\n ltimes: \"⋉\",\n ltlarr: \"⥶\",\n ltquest: \"⩻\",\n ltri: \"◃\",\n ltrie: \"⊴\",\n ltrif: \"◂\",\n ltrPar: \"⦖\",\n lurdshar: \"⥊\",\n luruhar: \"⥦\",\n lvertneqq: \"≨︀\",\n lvnE: \"≨︀\",\n macr: \"¯\",\n male: \"♂\",\n malt: \"✠\",\n maltese: \"✠\",\n Map: \"⤅\",\n map: \"↦\",\n mapsto: \"↦\",\n mapstodown: \"↧\",\n mapstoleft: \"↤\",\n mapstoup: \"↥\",\n marker: \"▮\",\n mcomma: \"⨩\",\n Mcy: \"М\",\n mcy: \"м\",\n mdash: \"—\",\n mDDot: \"∺\",\n measuredangle: \"∡\",\n MediumSpace: \" \",\n Mellintrf: \"ℳ\",\n Mfr: \"𝔐\",\n mfr: \"𝔪\",\n mho: \"℧\",\n micro: \"µ\",\n midast: \"*\",\n midcir: \"⫰\",\n mid: \"∣\",\n middot: \"·\",\n minusb: \"⊟\",\n minus: \"−\",\n minusd: \"∸\",\n minusdu: \"⨪\",\n MinusPlus: \"∓\",\n mlcp: \"⫛\",\n mldr: \"…\",\n mnplus: \"∓\",\n models: \"⊧\",\n Mopf: \"𝕄\",\n mopf: \"𝕞\",\n mp: \"∓\",\n mscr: \"𝓂\",\n Mscr: \"ℳ\",\n mstpos: \"∾\",\n Mu: \"Μ\",\n mu: \"μ\",\n multimap: \"⊸\",\n mumap: \"⊸\",\n nabla: \"∇\",\n Nacute: \"Ń\",\n nacute: \"ń\",\n nang: \"∠⃒\",\n nap: \"≉\",\n napE: \"⩰̸\",\n napid: \"≋̸\",\n napos: \"ʼn\",\n napprox: \"≉\",\n natural: \"♮\",\n naturals: \"ℕ\",\n natur: \"♮\",\n nbsp: \" \",\n nbump: \"≎̸\",\n nbumpe: \"≏̸\",\n ncap: \"⩃\",\n Ncaron: \"Ň\",\n ncaron: \"ň\",\n Ncedil: \"Ņ\",\n ncedil: \"ņ\",\n ncong: \"≇\",\n ncongdot: \"⩭̸\",\n ncup: \"⩂\",\n Ncy: \"Н\",\n ncy: \"н\",\n ndash: \"–\",\n nearhk: \"⤤\",\n nearr: \"↗\",\n neArr: \"⇗\",\n nearrow: \"↗\",\n ne: \"≠\",\n nedot: \"≐̸\",\n NegativeMediumSpace: \"​\",\n NegativeThickSpace: \"​\",\n NegativeThinSpace: \"​\",\n NegativeVeryThinSpace: \"​\",\n nequiv: \"≢\",\n nesear: \"⤨\",\n nesim: \"≂̸\",\n NestedGreaterGreater: \"≫\",\n NestedLessLess: \"≪\",\n NewLine: \"\\u000a\",\n nexist: \"∄\",\n nexists: \"∄\",\n Nfr: \"𝔑\",\n nfr: \"𝔫\",\n ngE: \"≧̸\",\n nge: \"≱\",\n ngeq: \"≱\",\n ngeqq: \"≧̸\",\n ngeqslant: \"⩾̸\",\n nges: \"⩾̸\",\n nGg: \"⋙̸\",\n ngsim: \"≵\",\n nGt: \"≫⃒\",\n ngt: \"≯\",\n ngtr: \"≯\",\n nGtv: \"≫̸\",\n nharr: \"↮\",\n nhArr: \"⇎\",\n nhpar: \"⫲\",\n ni: \"∋\",\n nis: \"⋼\",\n nisd: \"⋺\",\n niv: \"∋\",\n NJcy: \"Њ\",\n njcy: \"њ\",\n nlarr: \"↚\",\n nlArr: \"⇍\",\n nldr: \"‥\",\n nlE: \"≦̸\",\n nle: \"≰\",\n nleftarrow: \"↚\",\n nLeftarrow: \"⇍\",\n nleftrightarrow: \"↮\",\n nLeftrightarrow: \"⇎\",\n nleq: \"≰\",\n nleqq: \"≦̸\",\n nleqslant: \"⩽̸\",\n nles: \"⩽̸\",\n nless: \"≮\",\n nLl: \"⋘̸\",\n nlsim: \"≴\",\n nLt: \"≪⃒\",\n nlt: \"≮\",\n nltri: \"⋪\",\n nltrie: \"⋬\",\n nLtv: \"≪̸\",\n nmid: \"∤\",\n NoBreak: \"\\u2060\",\n NonBreakingSpace: \" \",\n nopf: \"𝕟\",\n Nopf: \"ℕ\",\n Not: \"⫬\",\n not: \"¬\",\n NotCongruent: \"≢\",\n NotCupCap: \"≭\",\n NotDoubleVerticalBar: \"∦\",\n NotElement: \"∉\",\n NotEqual: \"≠\",\n NotEqualTilde: \"≂̸\",\n NotExists: \"∄\",\n NotGreater: \"≯\",\n NotGreaterEqual: \"≱\",\n NotGreaterFullEqual: \"≧̸\",\n NotGreaterGreater: \"≫̸\",\n NotGreaterLess: \"≹\",\n NotGreaterSlantEqual: \"⩾̸\",\n NotGreaterTilde: \"≵\",\n NotHumpDownHump: \"≎̸\",\n NotHumpEqual: \"≏̸\",\n notin: \"∉\",\n notindot: \"⋵̸\",\n notinE: \"⋹̸\",\n notinva: \"∉\",\n notinvb: \"⋷\",\n notinvc: \"⋶\",\n NotLeftTriangleBar: \"⧏̸\",\n NotLeftTriangle: \"⋪\",\n NotLeftTriangleEqual: \"⋬\",\n NotLess: \"≮\",\n NotLessEqual: \"≰\",\n NotLessGreater: \"≸\",\n NotLessLess: \"≪̸\",\n NotLessSlantEqual: \"⩽̸\",\n NotLessTilde: \"≴\",\n NotNestedGreaterGreater: \"⪢̸\",\n NotNestedLessLess: \"⪡̸\",\n notni: \"∌\",\n notniva: \"∌\",\n notnivb: \"⋾\",\n notnivc: \"⋽\",\n NotPrecedes: \"⊀\",\n NotPrecedesEqual: \"⪯̸\",\n NotPrecedesSlantEqual: \"⋠\",\n NotReverseElement: \"∌\",\n NotRightTriangleBar: \"⧐̸\",\n NotRightTriangle: \"⋫\",\n NotRightTriangleEqual: \"⋭\",\n NotSquareSubset: \"⊏̸\",\n NotSquareSubsetEqual: \"⋢\",\n NotSquareSuperset: \"⊐̸\",\n NotSquareSupersetEqual: \"⋣\",\n NotSubset: \"⊂⃒\",\n NotSubsetEqual: \"⊈\",\n NotSucceeds: \"⊁\",\n NotSucceedsEqual: \"⪰̸\",\n NotSucceedsSlantEqual: \"⋡\",\n NotSucceedsTilde: \"≿̸\",\n NotSuperset: \"⊃⃒\",\n NotSupersetEqual: \"⊉\",\n NotTilde: \"≁\",\n NotTildeEqual: \"≄\",\n NotTildeFullEqual: \"≇\",\n NotTildeTilde: \"≉\",\n NotVerticalBar: \"∤\",\n nparallel: \"∦\",\n npar: \"∦\",\n nparsl: \"⫽⃥\",\n npart: \"∂̸\",\n npolint: \"⨔\",\n npr: \"⊀\",\n nprcue: \"⋠\",\n nprec: \"⊀\",\n npreceq: \"⪯̸\",\n npre: \"⪯̸\",\n nrarrc: \"⤳̸\",\n nrarr: \"↛\",\n nrArr: \"⇏\",\n nrarrw: \"↝̸\",\n nrightarrow: \"↛\",\n nRightarrow: \"⇏\",\n nrtri: \"⋫\",\n nrtrie: \"⋭\",\n nsc: \"⊁\",\n nsccue: \"⋡\",\n nsce: \"⪰̸\",\n Nscr: \"𝒩\",\n nscr: \"𝓃\",\n nshortmid: \"∤\",\n nshortparallel: \"∦\",\n nsim: \"≁\",\n nsime: \"≄\",\n nsimeq: \"≄\",\n nsmid: \"∤\",\n nspar: \"∦\",\n nsqsube: \"⋢\",\n nsqsupe: \"⋣\",\n nsub: \"⊄\",\n nsubE: \"⫅̸\",\n nsube: \"⊈\",\n nsubset: \"⊂⃒\",\n nsubseteq: \"⊈\",\n nsubseteqq: \"⫅̸\",\n nsucc: \"⊁\",\n nsucceq: \"⪰̸\",\n nsup: \"⊅\",\n nsupE: \"⫆̸\",\n nsupe: \"⊉\",\n nsupset: \"⊃⃒\",\n nsupseteq: \"⊉\",\n nsupseteqq: \"⫆̸\",\n ntgl: \"≹\",\n Ntilde: \"Ñ\",\n ntilde: \"ñ\",\n ntlg: \"≸\",\n ntriangleleft: \"⋪\",\n ntrianglelefteq: \"⋬\",\n ntriangleright: \"⋫\",\n ntrianglerighteq: \"⋭\",\n Nu: \"Ν\",\n nu: \"ν\",\n num: \"#\",\n numero: \"№\",\n numsp: \" \",\n nvap: \"≍⃒\",\n nvdash: \"⊬\",\n nvDash: \"⊭\",\n nVdash: \"⊮\",\n nVDash: \"⊯\",\n nvge: \"≥⃒\",\n nvgt: \">⃒\",\n nvHarr: \"⤄\",\n nvinfin: \"⧞\",\n nvlArr: \"⤂\",\n nvle: \"≤⃒\",\n nvlt: \"<⃒\",\n nvltrie: \"⊴⃒\",\n nvrArr: \"⤃\",\n nvrtrie: \"⊵⃒\",\n nvsim: \"∼⃒\",\n nwarhk: \"⤣\",\n nwarr: \"↖\",\n nwArr: \"⇖\",\n nwarrow: \"↖\",\n nwnear: \"⤧\",\n Oacute: \"Ó\",\n oacute: \"ó\",\n oast: \"⊛\",\n Ocirc: \"Ô\",\n ocirc: \"ô\",\n ocir: \"⊚\",\n Ocy: \"О\",\n ocy: \"о\",\n odash: \"⊝\",\n Odblac: \"Ő\",\n odblac: \"ő\",\n odiv: \"⨸\",\n odot: \"⊙\",\n odsold: \"⦼\",\n OElig: \"Œ\",\n oelig: \"œ\",\n ofcir: \"⦿\",\n Ofr: \"𝔒\",\n ofr: \"𝔬\",\n ogon: \"˛\",\n Ograve: \"Ò\",\n ograve: \"ò\",\n ogt: \"⧁\",\n ohbar: \"⦵\",\n ohm: \"Ω\",\n oint: \"∮\",\n olarr: \"↺\",\n olcir: \"⦾\",\n olcross: \"⦻\",\n oline: \"‾\",\n olt: \"⧀\",\n Omacr: \"Ō\",\n omacr: \"ō\",\n Omega: \"Ω\",\n omega: \"ω\",\n Omicron: \"Ο\",\n omicron: \"ο\",\n omid: \"⦶\",\n ominus: \"⊖\",\n Oopf: \"𝕆\",\n oopf: \"𝕠\",\n opar: \"⦷\",\n OpenCurlyDoubleQuote: \"“\",\n OpenCurlyQuote: \"‘\",\n operp: \"⦹\",\n oplus: \"⊕\",\n orarr: \"↻\",\n Or: \"⩔\",\n or: \"∨\",\n ord: \"⩝\",\n order: \"ℴ\",\n orderof: \"ℴ\",\n ordf: \"ª\",\n ordm: \"º\",\n origof: \"⊶\",\n oror: \"⩖\",\n orslope: \"⩗\",\n orv: \"⩛\",\n oS: \"Ⓢ\",\n Oscr: \"𝒪\",\n oscr: \"ℴ\",\n Oslash: \"Ø\",\n oslash: \"ø\",\n osol: \"⊘\",\n Otilde: \"Õ\",\n otilde: \"õ\",\n otimesas: \"⨶\",\n Otimes: \"⨷\",\n otimes: \"⊗\",\n Ouml: \"Ö\",\n ouml: \"ö\",\n ovbar: \"⌽\",\n OverBar: \"‾\",\n OverBrace: \"⏞\",\n OverBracket: \"⎴\",\n OverParenthesis: \"⏜\",\n para: \"¶\",\n parallel: \"∥\",\n par: \"∥\",\n parsim: \"⫳\",\n parsl: \"⫽\",\n part: \"∂\",\n PartialD: \"∂\",\n Pcy: \"П\",\n pcy: \"п\",\n percnt: \"%\",\n period: \".\",\n permil: \"‰\",\n perp: \"⊥\",\n pertenk: \"‱\",\n Pfr: \"𝔓\",\n pfr: \"𝔭\",\n Phi: \"Φ\",\n phi: \"φ\",\n phiv: \"ϕ\",\n phmmat: \"ℳ\",\n phone: \"☎\",\n Pi: \"Π\",\n pi: \"π\",\n pitchfork: \"⋔\",\n piv: \"ϖ\",\n planck: \"ℏ\",\n planckh: \"ℎ\",\n plankv: \"ℏ\",\n plusacir: \"⨣\",\n plusb: \"⊞\",\n pluscir: \"⨢\",\n plus: \"+\",\n plusdo: \"∔\",\n plusdu: \"⨥\",\n pluse: \"⩲\",\n PlusMinus: \"±\",\n plusmn: \"±\",\n plussim: \"⨦\",\n plustwo: \"⨧\",\n pm: \"±\",\n Poincareplane: \"ℌ\",\n pointint: \"⨕\",\n popf: \"𝕡\",\n Popf: \"ℙ\",\n pound: \"£\",\n prap: \"⪷\",\n Pr: \"⪻\",\n pr: \"≺\",\n prcue: \"≼\",\n precapprox: \"⪷\",\n prec: \"≺\",\n preccurlyeq: \"≼\",\n Precedes: \"≺\",\n PrecedesEqual: \"⪯\",\n PrecedesSlantEqual: \"≼\",\n PrecedesTilde: \"≾\",\n preceq: \"⪯\",\n precnapprox: \"⪹\",\n precneqq: \"⪵\",\n precnsim: \"⋨\",\n pre: \"⪯\",\n prE: \"⪳\",\n precsim: \"≾\",\n prime: \"′\",\n Prime: \"″\",\n primes: \"ℙ\",\n prnap: \"⪹\",\n prnE: \"⪵\",\n prnsim: \"⋨\",\n prod: \"∏\",\n Product: \"∏\",\n profalar: \"⌮\",\n profline: \"⌒\",\n profsurf: \"⌓\",\n prop: \"∝\",\n Proportional: \"∝\",\n Proportion: \"∷\",\n propto: \"∝\",\n prsim: \"≾\",\n prurel: \"⊰\",\n Pscr: \"𝒫\",\n pscr: \"𝓅\",\n Psi: \"Ψ\",\n psi: \"ψ\",\n puncsp: \" \",\n Qfr: \"𝔔\",\n qfr: \"𝔮\",\n qint: \"⨌\",\n qopf: \"𝕢\",\n Qopf: \"ℚ\",\n qprime: \"⁗\",\n Qscr: \"𝒬\",\n qscr: \"𝓆\",\n quaternions: \"ℍ\",\n quatint: \"⨖\",\n quest: \"?\",\n questeq: \"≟\",\n quot: \"\\\"\",\n QUOT: \"\\\"\",\n rAarr: \"⇛\",\n race: \"∽̱\",\n Racute: \"Ŕ\",\n racute: \"ŕ\",\n radic: \"√\",\n raemptyv: \"⦳\",\n rang: \"⟩\",\n Rang: \"⟫\",\n rangd: \"⦒\",\n range: \"⦥\",\n rangle: \"⟩\",\n raquo: \"»\",\n rarrap: \"⥵\",\n rarrb: \"⇥\",\n rarrbfs: \"⤠\",\n rarrc: \"⤳\",\n rarr: \"→\",\n Rarr: \"↠\",\n rArr: \"⇒\",\n rarrfs: \"⤞\",\n rarrhk: \"↪\",\n rarrlp: \"↬\",\n rarrpl: \"⥅\",\n rarrsim: \"⥴\",\n Rarrtl: \"⤖\",\n rarrtl: \"↣\",\n rarrw: \"↝\",\n ratail: \"⤚\",\n rAtail: \"⤜\",\n ratio: \"∶\",\n rationals: \"ℚ\",\n rbarr: \"⤍\",\n rBarr: \"⤏\",\n RBarr: \"⤐\",\n rbbrk: \"❳\",\n rbrace: \"}\",\n rbrack: \"]\",\n rbrke: \"⦌\",\n rbrksld: \"⦎\",\n rbrkslu: \"⦐\",\n Rcaron: \"Ř\",\n rcaron: \"ř\",\n Rcedil: \"Ŗ\",\n rcedil: \"ŗ\",\n rceil: \"⌉\",\n rcub: \"}\",\n Rcy: \"Р\",\n rcy: \"р\",\n rdca: \"⤷\",\n rdldhar: \"⥩\",\n rdquo: \"”\",\n rdquor: \"”\",\n rdsh: \"↳\",\n real: \"ℜ\",\n realine: \"ℛ\",\n realpart: \"ℜ\",\n reals: \"ℝ\",\n Re: \"ℜ\",\n rect: \"▭\",\n reg: \"®\",\n REG: \"®\",\n ReverseElement: \"∋\",\n ReverseEquilibrium: \"⇋\",\n ReverseUpEquilibrium: \"⥯\",\n rfisht: \"⥽\",\n rfloor: \"⌋\",\n rfr: \"𝔯\",\n Rfr: \"ℜ\",\n rHar: \"⥤\",\n rhard: \"⇁\",\n rharu: \"⇀\",\n rharul: \"⥬\",\n Rho: \"Ρ\",\n rho: \"ρ\",\n rhov: \"ϱ\",\n RightAngleBracket: \"⟩\",\n RightArrowBar: \"⇥\",\n rightarrow: \"→\",\n RightArrow: \"→\",\n Rightarrow: \"⇒\",\n RightArrowLeftArrow: \"⇄\",\n rightarrowtail: \"↣\",\n RightCeiling: \"⌉\",\n RightDoubleBracket: \"⟧\",\n RightDownTeeVector: \"⥝\",\n RightDownVectorBar: \"⥕\",\n RightDownVector: \"⇂\",\n RightFloor: \"⌋\",\n rightharpoondown: \"⇁\",\n rightharpoonup: \"⇀\",\n rightleftarrows: \"⇄\",\n rightleftharpoons: \"⇌\",\n rightrightarrows: \"⇉\",\n rightsquigarrow: \"↝\",\n RightTeeArrow: \"↦\",\n RightTee: \"⊢\",\n RightTeeVector: \"⥛\",\n rightthreetimes: \"⋌\",\n RightTriangleBar: \"⧐\",\n RightTriangle: \"⊳\",\n RightTriangleEqual: \"⊵\",\n RightUpDownVector: \"⥏\",\n RightUpTeeVector: \"⥜\",\n RightUpVectorBar: \"⥔\",\n RightUpVector: \"↾\",\n RightVectorBar: \"⥓\",\n RightVector: \"⇀\",\n ring: \"˚\",\n risingdotseq: \"≓\",\n rlarr: \"⇄\",\n rlhar: \"⇌\",\n rlm: \"\\u200f\",\n rmoustache: \"⎱\",\n rmoust: \"⎱\",\n rnmid: \"⫮\",\n roang: \"⟭\",\n roarr: \"⇾\",\n robrk: \"⟧\",\n ropar: \"⦆\",\n ropf: \"𝕣\",\n Ropf: \"ℝ\",\n roplus: \"⨮\",\n rotimes: \"⨵\",\n RoundImplies: \"⥰\",\n rpar: \")\",\n rpargt: \"⦔\",\n rppolint: \"⨒\",\n rrarr: \"⇉\",\n Rrightarrow: \"⇛\",\n rsaquo: \"›\",\n rscr: \"𝓇\",\n Rscr: \"ℛ\",\n rsh: \"↱\",\n Rsh: \"↱\",\n rsqb: \"]\",\n rsquo: \"’\",\n rsquor: \"’\",\n rthree: \"⋌\",\n rtimes: \"⋊\",\n rtri: \"▹\",\n rtrie: \"⊵\",\n rtrif: \"▸\",\n rtriltri: \"⧎\",\n RuleDelayed: \"⧴\",\n ruluhar: \"⥨\",\n rx: \"℞\",\n Sacute: \"Ś\",\n sacute: \"ś\",\n sbquo: \"‚\",\n scap: \"⪸\",\n Scaron: \"Š\",\n scaron: \"š\",\n Sc: \"⪼\",\n sc: \"≻\",\n sccue: \"≽\",\n sce: \"⪰\",\n scE: \"⪴\",\n Scedil: \"Ş\",\n scedil: \"ş\",\n Scirc: \"Ŝ\",\n scirc: \"ŝ\",\n scnap: \"⪺\",\n scnE: \"⪶\",\n scnsim: \"⋩\",\n scpolint: \"⨓\",\n scsim: \"≿\",\n Scy: \"С\",\n scy: \"с\",\n sdotb: \"⊡\",\n sdot: \"⋅\",\n sdote: \"⩦\",\n searhk: \"⤥\",\n searr: \"↘\",\n seArr: \"⇘\",\n searrow: \"↘\",\n sect: \"§\",\n semi: \";\",\n seswar: \"⤩\",\n setminus: \"∖\",\n setmn: \"∖\",\n sext: \"✶\",\n Sfr: \"𝔖\",\n sfr: \"𝔰\",\n sfrown: \"⌢\",\n sharp: \"♯\",\n SHCHcy: \"Щ\",\n shchcy: \"щ\",\n SHcy: \"Ш\",\n shcy: \"ш\",\n ShortDownArrow: \"↓\",\n ShortLeftArrow: \"←\",\n shortmid: \"∣\",\n shortparallel: \"∥\",\n ShortRightArrow: \"→\",\n ShortUpArrow: \"↑\",\n shy: \"\\u00ad\",\n Sigma: \"Σ\",\n sigma: \"σ\",\n sigmaf: \"ς\",\n sigmav: \"ς\",\n sim: \"∼\",\n simdot: \"⩪\",\n sime: \"≃\",\n simeq: \"≃\",\n simg: \"⪞\",\n simgE: \"⪠\",\n siml: \"⪝\",\n simlE: \"⪟\",\n simne: \"≆\",\n simplus: \"⨤\",\n simrarr: \"⥲\",\n slarr: \"←\",\n SmallCircle: \"∘\",\n smallsetminus: \"∖\",\n smashp: \"⨳\",\n smeparsl: \"⧤\",\n smid: \"∣\",\n smile: \"⌣\",\n smt: \"⪪\",\n smte: \"⪬\",\n smtes: \"⪬︀\",\n SOFTcy: \"Ь\",\n softcy: \"ь\",\n solbar: \"⌿\",\n solb: \"⧄\",\n sol: \"/\",\n Sopf: \"𝕊\",\n sopf: \"𝕤\",\n spades: \"♠\",\n spadesuit: \"♠\",\n spar: \"∥\",\n sqcap: \"⊓\",\n sqcaps: \"⊓︀\",\n sqcup: \"⊔\",\n sqcups: \"⊔︀\",\n Sqrt: \"√\",\n sqsub: \"⊏\",\n sqsube: \"⊑\",\n sqsubset: \"⊏\",\n sqsubseteq: \"⊑\",\n sqsup: \"⊐\",\n sqsupe: \"⊒\",\n sqsupset: \"⊐\",\n sqsupseteq: \"⊒\",\n square: \"□\",\n Square: \"□\",\n SquareIntersection: \"⊓\",\n SquareSubset: \"⊏\",\n SquareSubsetEqual: \"⊑\",\n SquareSuperset: \"⊐\",\n SquareSupersetEqual: \"⊒\",\n SquareUnion: \"⊔\",\n squarf: \"▪\",\n squ: \"□\",\n squf: \"▪\",\n srarr: \"→\",\n Sscr: \"𝒮\",\n sscr: \"𝓈\",\n ssetmn: \"∖\",\n ssmile: \"⌣\",\n sstarf: \"⋆\",\n Star: \"⋆\",\n star: \"☆\",\n starf: \"★\",\n straightepsilon: \"ϵ\",\n straightphi: \"ϕ\",\n strns: \"¯\",\n sub: \"⊂\",\n Sub: \"⋐\",\n subdot: \"⪽\",\n subE: \"⫅\",\n sube: \"⊆\",\n subedot: \"⫃\",\n submult: \"⫁\",\n subnE: \"⫋\",\n subne: \"⊊\",\n subplus: \"⪿\",\n subrarr: \"⥹\",\n subset: \"⊂\",\n Subset: \"⋐\",\n subseteq: \"⊆\",\n subseteqq: \"⫅\",\n SubsetEqual: \"⊆\",\n subsetneq: \"⊊\",\n subsetneqq: \"⫋\",\n subsim: \"⫇\",\n subsub: \"⫕\",\n subsup: \"⫓\",\n succapprox: \"⪸\",\n succ: \"≻\",\n succcurlyeq: \"≽\",\n Succeeds: \"≻\",\n SucceedsEqual: \"⪰\",\n SucceedsSlantEqual: \"≽\",\n SucceedsTilde: \"≿\",\n succeq: \"⪰\",\n succnapprox: \"⪺\",\n succneqq: \"⪶\",\n succnsim: \"⋩\",\n succsim: \"≿\",\n SuchThat: \"∋\",\n sum: \"∑\",\n Sum: \"∑\",\n sung: \"♪\",\n sup1: \"¹\",\n sup2: \"²\",\n sup3: \"³\",\n sup: \"⊃\",\n Sup: \"⋑\",\n supdot: \"⪾\",\n supdsub: \"⫘\",\n supE: \"⫆\",\n supe: \"⊇\",\n supedot: \"⫄\",\n Superset: \"⊃\",\n SupersetEqual: \"⊇\",\n suphsol: \"⟉\",\n suphsub: \"⫗\",\n suplarr: \"⥻\",\n supmult: \"⫂\",\n supnE: \"⫌\",\n supne: \"⊋\",\n supplus: \"⫀\",\n supset: \"⊃\",\n Supset: \"⋑\",\n supseteq: \"⊇\",\n supseteqq: \"⫆\",\n supsetneq: \"⊋\",\n supsetneqq: \"⫌\",\n supsim: \"⫈\",\n supsub: \"⫔\",\n supsup: \"⫖\",\n swarhk: \"⤦\",\n swarr: \"↙\",\n swArr: \"⇙\",\n swarrow: \"↙\",\n swnwar: \"⤪\",\n szlig: \"ß\",\n Tab: \"\\u0009\",\n target: \"⌖\",\n Tau: \"Τ\",\n tau: \"τ\",\n tbrk: \"⎴\",\n Tcaron: \"Ť\",\n tcaron: \"ť\",\n Tcedil: \"Ţ\",\n tcedil: \"ţ\",\n Tcy: \"Т\",\n tcy: \"т\",\n tdot: \"⃛\",\n telrec: \"⌕\",\n Tfr: \"𝔗\",\n tfr: \"𝔱\",\n there4: \"∴\",\n therefore: \"∴\",\n Therefore: \"∴\",\n Theta: \"Θ\",\n theta: \"θ\",\n thetasym: \"ϑ\",\n thetav: \"ϑ\",\n thickapprox: \"≈\",\n thicksim: \"∼\",\n ThickSpace: \"  \",\n ThinSpace: \" \",\n thinsp: \" \",\n thkap: \"≈\",\n thksim: \"∼\",\n THORN: \"Þ\",\n thorn: \"þ\",\n tilde: \"˜\",\n Tilde: \"∼\",\n TildeEqual: \"≃\",\n TildeFullEqual: \"≅\",\n TildeTilde: \"≈\",\n timesbar: \"⨱\",\n timesb: \"⊠\",\n times: \"×\",\n timesd: \"⨰\",\n tint: \"∭\",\n toea: \"⤨\",\n topbot: \"⌶\",\n topcir: \"⫱\",\n top: \"⊤\",\n Topf: \"𝕋\",\n topf: \"𝕥\",\n topfork: \"⫚\",\n tosa: \"⤩\",\n tprime: \"‴\",\n trade: \"™\",\n TRADE: \"™\",\n triangle: \"▵\",\n triangledown: \"▿\",\n triangleleft: \"◃\",\n trianglelefteq: \"⊴\",\n triangleq: \"≜\",\n triangleright: \"▹\",\n trianglerighteq: \"⊵\",\n tridot: \"◬\",\n trie: \"≜\",\n triminus: \"⨺\",\n TripleDot: \"⃛\",\n triplus: \"⨹\",\n trisb: \"⧍\",\n tritime: \"⨻\",\n trpezium: \"⏢\",\n Tscr: \"𝒯\",\n tscr: \"𝓉\",\n TScy: \"Ц\",\n tscy: \"ц\",\n TSHcy: \"Ћ\",\n tshcy: \"ћ\",\n Tstrok: \"Ŧ\",\n tstrok: \"ŧ\",\n twixt: \"≬\",\n twoheadleftarrow: \"↞\",\n twoheadrightarrow: \"↠\",\n Uacute: \"Ú\",\n uacute: \"ú\",\n uarr: \"↑\",\n Uarr: \"↟\",\n uArr: \"⇑\",\n Uarrocir: \"⥉\",\n Ubrcy: \"Ў\",\n ubrcy: \"ў\",\n Ubreve: \"Ŭ\",\n ubreve: \"ŭ\",\n Ucirc: \"Û\",\n ucirc: \"û\",\n Ucy: \"У\",\n ucy: \"у\",\n udarr: \"⇅\",\n Udblac: \"Ű\",\n udblac: \"ű\",\n udhar: \"⥮\",\n ufisht: \"⥾\",\n Ufr: \"𝔘\",\n ufr: \"𝔲\",\n Ugrave: \"Ù\",\n ugrave: \"ù\",\n uHar: \"⥣\",\n uharl: \"↿\",\n uharr: \"↾\",\n uhblk: \"▀\",\n ulcorn: \"⌜\",\n ulcorner: \"⌜\",\n ulcrop: \"⌏\",\n ultri: \"◸\",\n Umacr: \"Ū\",\n umacr: \"ū\",\n uml: \"¨\",\n UnderBar: \"_\",\n UnderBrace: \"⏟\",\n UnderBracket: \"⎵\",\n UnderParenthesis: \"⏝\",\n Union: \"⋃\",\n UnionPlus: \"⊎\",\n Uogon: \"Ų\",\n uogon: \"ų\",\n Uopf: \"𝕌\",\n uopf: \"𝕦\",\n UpArrowBar: \"⤒\",\n uparrow: \"↑\",\n UpArrow: \"↑\",\n Uparrow: \"⇑\",\n UpArrowDownArrow: \"⇅\",\n updownarrow: \"↕\",\n UpDownArrow: \"↕\",\n Updownarrow: \"⇕\",\n UpEquilibrium: \"⥮\",\n upharpoonleft: \"↿\",\n upharpoonright: \"↾\",\n uplus: \"⊎\",\n UpperLeftArrow: \"↖\",\n UpperRightArrow: \"↗\",\n upsi: \"υ\",\n Upsi: \"ϒ\",\n upsih: \"ϒ\",\n Upsilon: \"Υ\",\n upsilon: \"υ\",\n UpTeeArrow: \"↥\",\n UpTee: \"⊥\",\n upuparrows: \"⇈\",\n urcorn: \"⌝\",\n urcorner: \"⌝\",\n urcrop: \"⌎\",\n Uring: \"Ů\",\n uring: \"ů\",\n urtri: \"◹\",\n Uscr: \"𝒰\",\n uscr: \"𝓊\",\n utdot: \"⋰\",\n Utilde: \"Ũ\",\n utilde: \"ũ\",\n utri: \"▵\",\n utrif: \"▴\",\n uuarr: \"⇈\",\n Uuml: \"Ü\",\n uuml: \"ü\",\n uwangle: \"⦧\",\n vangrt: \"⦜\",\n varepsilon: \"ϵ\",\n varkappa: \"ϰ\",\n varnothing: \"∅\",\n varphi: \"ϕ\",\n varpi: \"ϖ\",\n varpropto: \"∝\",\n varr: \"↕\",\n vArr: \"⇕\",\n varrho: \"ϱ\",\n varsigma: \"ς\",\n varsubsetneq: \"⊊︀\",\n varsubsetneqq: \"⫋︀\",\n varsupsetneq: \"⊋︀\",\n varsupsetneqq: \"⫌︀\",\n vartheta: \"ϑ\",\n vartriangleleft: \"⊲\",\n vartriangleright: \"⊳\",\n vBar: \"⫨\",\n Vbar: \"⫫\",\n vBarv: \"⫩\",\n Vcy: \"В\",\n vcy: \"в\",\n vdash: \"⊢\",\n vDash: \"⊨\",\n Vdash: \"⊩\",\n VDash: \"⊫\",\n Vdashl: \"⫦\",\n veebar: \"⊻\",\n vee: \"∨\",\n Vee: \"⋁\",\n veeeq: \"≚\",\n vellip: \"⋮\",\n verbar: \"|\",\n Verbar: \"‖\",\n vert: \"|\",\n Vert: \"‖\",\n VerticalBar: \"∣\",\n VerticalLine: \"|\",\n VerticalSeparator: \"❘\",\n VerticalTilde: \"≀\",\n VeryThinSpace: \" \",\n Vfr: \"𝔙\",\n vfr: \"𝔳\",\n vltri: \"⊲\",\n vnsub: \"⊂⃒\",\n vnsup: \"⊃⃒\",\n Vopf: \"𝕍\",\n vopf: \"𝕧\",\n vprop: \"∝\",\n vrtri: \"⊳\",\n Vscr: \"𝒱\",\n vscr: \"𝓋\",\n vsubnE: \"⫋︀\",\n vsubne: \"⊊︀\",\n vsupnE: \"⫌︀\",\n vsupne: \"⊋︀\",\n Vvdash: \"⊪\",\n vzigzag: \"⦚\",\n Wcirc: \"Ŵ\",\n wcirc: \"ŵ\",\n wedbar: \"⩟\",\n wedge: \"∧\",\n Wedge: \"⋀\",\n wedgeq: \"≙\",\n weierp: \"℘\",\n Wfr: \"𝔚\",\n wfr: \"𝔴\",\n Wopf: \"𝕎\",\n wopf: \"𝕨\",\n wp: \"℘\",\n wr: \"≀\",\n wreath: \"≀\",\n Wscr: \"𝒲\",\n wscr: \"𝓌\",\n xcap: \"⋂\",\n xcirc: \"◯\",\n xcup: \"⋃\",\n xdtri: \"▽\",\n Xfr: \"𝔛\",\n xfr: \"𝔵\",\n xharr: \"⟷\",\n xhArr: \"⟺\",\n Xi: \"Ξ\",\n xi: \"ξ\",\n xlarr: \"⟵\",\n xlArr: \"⟸\",\n xmap: \"⟼\",\n xnis: \"⋻\",\n xodot: \"⨀\",\n Xopf: \"𝕏\",\n xopf: \"𝕩\",\n xoplus: \"⨁\",\n xotime: \"⨂\",\n xrarr: \"⟶\",\n xrArr: \"⟹\",\n Xscr: \"𝒳\",\n xscr: \"𝓍\",\n xsqcup: \"⨆\",\n xuplus: \"⨄\",\n xutri: \"△\",\n xvee: \"⋁\",\n xwedge: \"⋀\",\n Yacute: \"Ý\",\n yacute: \"ý\",\n YAcy: \"Я\",\n yacy: \"я\",\n Ycirc: \"Ŷ\",\n ycirc: \"ŷ\",\n Ycy: \"Ы\",\n ycy: \"ы\",\n yen: \"¥\",\n Yfr: \"𝔜\",\n yfr: \"𝔶\",\n YIcy: \"Ї\",\n yicy: \"ї\",\n Yopf: \"𝕐\",\n yopf: \"𝕪\",\n Yscr: \"𝒴\",\n yscr: \"𝓎\",\n YUcy: \"Ю\",\n yucy: \"ю\",\n yuml: \"ÿ\",\n Yuml: \"Ÿ\",\n Zacute: \"Ź\",\n zacute: \"ź\",\n Zcaron: \"Ž\",\n zcaron: \"ž\",\n Zcy: \"З\",\n zcy: \"з\",\n Zdot: \"Ż\",\n zdot: \"ż\",\n zeetrf: \"ℨ\",\n ZeroWidthSpace: \"​\",\n Zeta: \"Ζ\",\n zeta: \"ζ\",\n zfr: \"𝔷\",\n Zfr: \"ℨ\",\n ZHcy: \"Ж\",\n zhcy: \"ж\",\n zigrarr: \"⇝\",\n zopf: \"𝕫\",\n Zopf: \"ℤ\",\n Zscr: \"𝒵\",\n zscr: \"𝓏\",\n zwj: \"\\u200d\",\n zwnj: \"\\u200c\"\n };\n _exports.HTML5NamedCharRefs = namedCharRefs;\n var HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;\n var CHARCODE = /^#([0-9]+)$/;\n var NAMED = /^([A-Za-z0-9]+)$/;\n var EntityParser = /** @class */function () {\n function EntityParser(named) {\n this.named = named;\n }\n EntityParser.prototype.parse = function (entity) {\n if (!entity) {\n return;\n }\n var matches = entity.match(HEXCHARCODE);\n if (matches) {\n return String.fromCharCode(parseInt(matches[1], 16));\n }\n matches = entity.match(CHARCODE);\n if (matches) {\n return String.fromCharCode(parseInt(matches[1], 10));\n }\n matches = entity.match(NAMED);\n if (matches) {\n return this.named[matches[1]];\n }\n };\n return EntityParser;\n }();\n _exports.EntityParser = EntityParser;\n var WSP = /[\\t\\n\\f ]/;\n var ALPHA = /[A-Za-z]/;\n var CRLF = /\\r\\n?/g;\n function isSpace(char) {\n return WSP.test(char);\n }\n function isAlpha(char) {\n return ALPHA.test(char);\n }\n function preprocessInput(input) {\n return input.replace(CRLF, '\\n');\n }\n var EventedTokenizer = /** @class */function () {\n function EventedTokenizer(delegate, entityParser, mode) {\n if (mode === void 0) {\n mode = 'precompile';\n }\n this.delegate = delegate;\n this.entityParser = entityParser;\n this.mode = mode;\n this.state = \"beforeData\" /* beforeData */;\n this.line = -1;\n this.column = -1;\n this.input = '';\n this.index = -1;\n this.tagNameBuffer = '';\n this.states = {\n beforeData: function () {\n var char = this.peek();\n if (char === '<' && !this.isIgnoredEndTag()) {\n this.transitionTo(\"tagOpen\" /* tagOpen */);\n this.markTagStart();\n this.consume();\n } else {\n if (this.mode === 'precompile' && char === '\\n') {\n var tag = this.tagNameBuffer.toLowerCase();\n if (tag === 'pre' || tag === 'textarea') {\n this.consume();\n }\n }\n this.transitionTo(\"data\" /* data */);\n this.delegate.beginData();\n }\n },\n data: function () {\n var char = this.peek();\n var tag = this.tagNameBuffer;\n if (char === '<' && !this.isIgnoredEndTag()) {\n this.delegate.finishData();\n this.transitionTo(\"tagOpen\" /* tagOpen */);\n this.markTagStart();\n this.consume();\n } else if (char === '&' && tag !== 'script' && tag !== 'style') {\n this.consume();\n this.delegate.appendToData(this.consumeCharRef() || '&');\n } else {\n this.consume();\n this.delegate.appendToData(char);\n }\n },\n tagOpen: function () {\n var char = this.consume();\n if (char === '!') {\n this.transitionTo(\"markupDeclarationOpen\" /* markupDeclarationOpen */);\n } else if (char === '/') {\n this.transitionTo(\"endTagOpen\" /* endTagOpen */);\n } else if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(\"tagName\" /* tagName */);\n this.tagNameBuffer = '';\n this.delegate.beginStartTag();\n this.appendToTagName(char);\n }\n },\n markupDeclarationOpen: function () {\n var char = this.consume();\n if (char === '-' && this.peek() === '-') {\n this.consume();\n this.transitionTo(\"commentStart\" /* commentStart */);\n this.delegate.beginComment();\n } else {\n var maybeDoctype = char.toUpperCase() + this.input.substring(this.index, this.index + 6).toUpperCase();\n if (maybeDoctype === 'DOCTYPE') {\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.transitionTo(\"doctype\" /* doctype */);\n if (this.delegate.beginDoctype) this.delegate.beginDoctype();\n }\n }\n },\n doctype: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeDoctypeName\" /* beforeDoctypeName */);\n }\n },\n\n beforeDoctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else {\n this.transitionTo(\"doctypeName\" /* doctypeName */);\n if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n }\n },\n doctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"afterDoctypeName\" /* afterDoctypeName */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n }\n },\n afterDoctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n var nextSixChars = char.toUpperCase() + this.input.substring(this.index, this.index + 5).toUpperCase();\n var isPublic = nextSixChars.toUpperCase() === 'PUBLIC';\n var isSystem = nextSixChars.toUpperCase() === 'SYSTEM';\n if (isPublic || isSystem) {\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n }\n if (isPublic) {\n this.transitionTo(\"afterDoctypePublicKeyword\" /* afterDoctypePublicKeyword */);\n } else if (isSystem) {\n this.transitionTo(\"afterDoctypeSystemKeyword\" /* afterDoctypeSystemKeyword */);\n }\n }\n },\n\n afterDoctypePublicKeyword: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.transitionTo(\"beforeDoctypePublicIdentifier\" /* beforeDoctypePublicIdentifier */);\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(\"doctypePublicIdentifierDoubleQuoted\" /* doctypePublicIdentifierDoubleQuoted */);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(\"doctypePublicIdentifierSingleQuoted\" /* doctypePublicIdentifierSingleQuoted */);\n this.consume();\n } else if (char === '>') {\n this.consume();\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n },\n\n doctypePublicIdentifierDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n }\n },\n doctypePublicIdentifierSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n }\n },\n afterDoctypePublicIdentifier: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"betweenDoctypePublicAndSystemIdentifiers\" /* betweenDoctypePublicAndSystemIdentifiers */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"') {\n this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n } else if (char === \"'\") {\n this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n }\n },\n\n betweenDoctypePublicAndSystemIdentifiers: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"') {\n this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n } else if (char === \"'\") {\n this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n }\n },\n\n doctypeSystemIdentifierDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n }\n },\n doctypeSystemIdentifierSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n }\n },\n afterDoctypeSystemIdentifier: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n },\n\n commentStart: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentStartDash\" /* commentStartDash */);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData(char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n commentStartDash: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEnd\" /* commentEnd */);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData('-');\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n comment: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEndDash\" /* commentEndDash */);\n } else {\n this.delegate.appendToCommentData(char);\n }\n },\n commentEndDash: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEnd\" /* commentEnd */);\n } else {\n this.delegate.appendToCommentData('-' + char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n commentEnd: function () {\n var char = this.consume();\n if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData('--' + char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n tagName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.appendToTagName(char);\n }\n },\n endTagName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n this.tagNameBuffer = '';\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n this.tagNameBuffer = '';\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n this.tagNameBuffer = '';\n } else {\n this.appendToTagName(char);\n }\n },\n beforeAttributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n this.consume();\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '=') {\n this.delegate.reportSyntaxError('attribute name cannot start with equals sign');\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n }\n },\n attributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.transitionTo(\"afterAttributeName\" /* afterAttributeName */);\n this.consume();\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '=') {\n this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"' || char === \"'\" || char === '<') {\n this.delegate.reportSyntaxError(char + ' is not a valid character within attribute names');\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n afterAttributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '=') {\n this.consume();\n this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n beforeAttributeValue: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(\"attributeValueDoubleQuoted\" /* attributeValueDoubleQuoted */);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(\"attributeValueSingleQuoted\" /* attributeValueSingleQuoted */);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"attributeValueUnquoted\" /* attributeValueUnquoted */);\n this.delegate.beginAttributeValue(false);\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.delegate.finishAttributeValue();\n this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.delegate.finishAttributeValue();\n this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueUnquoted: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '&') {\n this.consume();\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else if (char === '>') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n afterAttributeValueQuoted: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n }\n },\n\n selfClosingStartTag: function () {\n var char = this.peek();\n if (char === '>') {\n this.consume();\n this.delegate.markTagAsSelfClosing();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n }\n },\n\n endTagOpen: function () {\n var char = this.consume();\n if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(\"endTagName\" /* endTagName */);\n this.tagNameBuffer = '';\n this.delegate.beginEndTag();\n this.appendToTagName(char);\n }\n }\n };\n this.reset();\n }\n EventedTokenizer.prototype.reset = function () {\n this.transitionTo(\"beforeData\" /* beforeData */);\n this.input = '';\n this.tagNameBuffer = '';\n this.index = 0;\n this.line = 1;\n this.column = 0;\n this.delegate.reset();\n };\n EventedTokenizer.prototype.transitionTo = function (state) {\n this.state = state;\n };\n EventedTokenizer.prototype.tokenize = function (input) {\n this.reset();\n this.tokenizePart(input);\n this.tokenizeEOF();\n };\n EventedTokenizer.prototype.tokenizePart = function (input) {\n this.input += preprocessInput(input);\n while (this.index < this.input.length) {\n var handler = this.states[this.state];\n if (handler !== undefined) {\n handler.call(this);\n } else {\n throw new Error(\"unhandled state \" + this.state);\n }\n }\n };\n EventedTokenizer.prototype.tokenizeEOF = function () {\n this.flushData();\n };\n EventedTokenizer.prototype.flushData = function () {\n if (this.state === 'data') {\n this.delegate.finishData();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n };\n\n EventedTokenizer.prototype.peek = function () {\n return this.input.charAt(this.index);\n };\n EventedTokenizer.prototype.consume = function () {\n var char = this.peek();\n this.index++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n } else {\n this.column++;\n }\n return char;\n };\n EventedTokenizer.prototype.consumeCharRef = function () {\n var endIndex = this.input.indexOf(';', this.index);\n if (endIndex === -1) {\n return;\n }\n var entity = this.input.slice(this.index, endIndex);\n var chars = this.entityParser.parse(entity);\n if (chars) {\n var count = entity.length;\n // consume the entity chars\n while (count) {\n this.consume();\n count--;\n }\n // consume the `;`\n this.consume();\n return chars;\n }\n };\n EventedTokenizer.prototype.markTagStart = function () {\n this.delegate.tagOpen();\n };\n EventedTokenizer.prototype.appendToTagName = function (char) {\n this.tagNameBuffer += char;\n this.delegate.appendToTagName(char);\n };\n EventedTokenizer.prototype.isIgnoredEndTag = function () {\n var tag = this.tagNameBuffer;\n return tag === 'title' && this.input.substring(this.index, this.index + 8) !== '</title>' || tag === 'style' && this.input.substring(this.index, this.index + 8) !== '</style>' || tag === 'script' && this.input.substring(this.index, this.index + 9) !== '</script>';\n };\n return EventedTokenizer;\n }();\n _exports.EventedTokenizer = EventedTokenizer;\n var Tokenizer = /** @class */function () {\n function Tokenizer(entityParser, options) {\n if (options === void 0) {\n options = {};\n }\n this.options = options;\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n this.tokens = [];\n this.tokenizer = new EventedTokenizer(this, entityParser, options.mode);\n this._currentAttribute = undefined;\n }\n Tokenizer.prototype.tokenize = function (input) {\n this.tokens = [];\n this.tokenizer.tokenize(input);\n return this.tokens;\n };\n Tokenizer.prototype.tokenizePart = function (input) {\n this.tokens = [];\n this.tokenizer.tokenizePart(input);\n return this.tokens;\n };\n Tokenizer.prototype.tokenizeEOF = function () {\n this.tokens = [];\n this.tokenizer.tokenizeEOF();\n return this.tokens[0];\n };\n Tokenizer.prototype.reset = function () {\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n };\n Tokenizer.prototype.current = function () {\n var token = this.token;\n if (token === null) {\n throw new Error('token was unexpectedly null');\n }\n if (arguments.length === 0) {\n return token;\n }\n for (var i = 0; i < arguments.length; i++) {\n if (token.type === arguments[i]) {\n return token;\n }\n }\n throw new Error(\"token type was unexpectedly \" + token.type);\n };\n Tokenizer.prototype.push = function (token) {\n this.token = token;\n this.tokens.push(token);\n };\n Tokenizer.prototype.currentAttribute = function () {\n return this._currentAttribute;\n };\n Tokenizer.prototype.addLocInfo = function () {\n if (this.options.loc) {\n this.current().loc = {\n start: {\n line: this.startLine,\n column: this.startColumn\n },\n end: {\n line: this.tokenizer.line,\n column: this.tokenizer.column\n }\n };\n }\n this.startLine = this.tokenizer.line;\n this.startColumn = this.tokenizer.column;\n };\n // Data\n Tokenizer.prototype.beginDoctype = function () {\n this.push({\n type: \"Doctype\" /* Doctype */,\n name: ''\n });\n };\n Tokenizer.prototype.appendToDoctypeName = function (char) {\n this.current(\"Doctype\" /* Doctype */).name += char;\n };\n Tokenizer.prototype.appendToDoctypePublicIdentifier = function (char) {\n var doctype = this.current(\"Doctype\" /* Doctype */);\n if (doctype.publicIdentifier === undefined) {\n doctype.publicIdentifier = char;\n } else {\n doctype.publicIdentifier += char;\n }\n };\n Tokenizer.prototype.appendToDoctypeSystemIdentifier = function (char) {\n var doctype = this.current(\"Doctype\" /* Doctype */);\n if (doctype.systemIdentifier === undefined) {\n doctype.systemIdentifier = char;\n } else {\n doctype.systemIdentifier += char;\n }\n };\n Tokenizer.prototype.endDoctype = function () {\n this.addLocInfo();\n };\n Tokenizer.prototype.beginData = function () {\n this.push({\n type: \"Chars\" /* Chars */,\n chars: ''\n });\n };\n Tokenizer.prototype.appendToData = function (char) {\n this.current(\"Chars\" /* Chars */).chars += char;\n };\n Tokenizer.prototype.finishData = function () {\n this.addLocInfo();\n };\n // Comment\n Tokenizer.prototype.beginComment = function () {\n this.push({\n type: \"Comment\" /* Comment */,\n chars: ''\n });\n };\n Tokenizer.prototype.appendToCommentData = function (char) {\n this.current(\"Comment\" /* Comment */).chars += char;\n };\n Tokenizer.prototype.finishComment = function () {\n this.addLocInfo();\n };\n // Tags - basic\n Tokenizer.prototype.tagOpen = function () {};\n Tokenizer.prototype.beginStartTag = function () {\n this.push({\n type: \"StartTag\" /* StartTag */,\n tagName: '',\n attributes: [],\n selfClosing: false\n });\n };\n Tokenizer.prototype.beginEndTag = function () {\n this.push({\n type: \"EndTag\" /* EndTag */,\n tagName: ''\n });\n };\n Tokenizer.prototype.finishTag = function () {\n this.addLocInfo();\n };\n Tokenizer.prototype.markTagAsSelfClosing = function () {\n this.current(\"StartTag\" /* StartTag */).selfClosing = true;\n };\n // Tags - name\n Tokenizer.prototype.appendToTagName = function (char) {\n this.current(\"StartTag\" /* StartTag */, \"EndTag\" /* EndTag */).tagName += char;\n };\n // Tags - attributes\n Tokenizer.prototype.beginAttribute = function () {\n this._currentAttribute = ['', '', false];\n };\n Tokenizer.prototype.appendToAttributeName = function (char) {\n this.currentAttribute()[0] += char;\n };\n Tokenizer.prototype.beginAttributeValue = function (isQuoted) {\n this.currentAttribute()[2] = isQuoted;\n };\n Tokenizer.prototype.appendToAttributeValue = function (char) {\n this.currentAttribute()[1] += char;\n };\n Tokenizer.prototype.finishAttributeValue = function () {\n this.current(\"StartTag\" /* StartTag */).attributes.push(this._currentAttribute);\n };\n Tokenizer.prototype.reportSyntaxError = function (message) {\n this.current().syntaxError = message;\n };\n return Tokenizer;\n }();\n _exports.Tokenizer = Tokenizer;\n function tokenize(input, options) {\n var tokenizer = new Tokenizer(new EntityParser(namedCharRefs), options);\n return tokenizer.tokenize(input);\n }\n});"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr0HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpmLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClwEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;","file":"ember-template-compiler.js"}
1
+ {"version":3,"sources":["license.js","loader.js","@ember/-internals/browser-environment/index.js","@ember/-internals/environment/index.js","@ember/-internals/utils/index.js","@ember/canary-features/index.js","@ember/debug/container-debug-adapter.js","@ember/debug/data-adapter.js","@ember/debug/index.js","@ember/debug/lib/capture-render-tree.js","@ember/debug/lib/deprecate.js","@ember/debug/lib/handlers.js","@ember/debug/lib/inspect.js","@ember/debug/lib/testing.js","@ember/debug/lib/warn.js","@ember/deprecated-features/index.js","@glimmer/compiler.js","@glimmer/env.js","@glimmer/syntax.js","@glimmer/util.js","@glimmer/wire-format.js","@handlebars/parser/index.js","ember-babel.js","ember-template-compiler/index.js","ember-template-compiler/lib/plugins/assert-against-attrs.js","ember-template-compiler/lib/plugins/assert-against-named-outlets.js","ember-template-compiler/lib/plugins/assert-input-helper-without-block.js","ember-template-compiler/lib/plugins/assert-reserved-named-arguments.js","ember-template-compiler/lib/plugins/assert-splattribute-expression.js","ember-template-compiler/lib/plugins/index.js","ember-template-compiler/lib/plugins/transform-action-syntax.js","ember-template-compiler/lib/plugins/transform-each-in-into-each.js","ember-template-compiler/lib/plugins/transform-each-track-array.js","ember-template-compiler/lib/plugins/transform-in-element.js","ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js","ember-template-compiler/lib/plugins/transform-resolutions.js","ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet.js","ember-template-compiler/lib/plugins/utils.js","ember-template-compiler/lib/system/bootstrap.js","ember-template-compiler/lib/system/calculate-location-display.js","ember-template-compiler/lib/system/compile-options.js","ember-template-compiler/lib/system/compile.js","ember-template-compiler/lib/system/dasherize-component-name.js","ember-template-compiler/lib/system/initializer.js","ember-template-compiler/lib/system/precompile.js","ember-template-compiler/lib/types.js","ember/version.js","simple-html-tokenizer.js"],"sourcesContent":["/*!\n * @overview Ember - JavaScript Application Framework\n * @copyright Copyright 2011 Tilde Inc. and contributors\n * Portions Copyright 2006-2011 Strobe Inc.\n * Portions Copyright 2008-2011 Apple Inc. All rights reserved.\n * @license Licensed under MIT license\n * See https://raw.github.com/emberjs/ember.js/master/LICENSE\n * @version 5.4.1\n */\n","/* eslint-disable no-var */\n/* globals global globalThis self */\n/* eslint-disable-next-line no-unused-vars */\nvar define, require;\n\n(function () {\n var globalObj =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : null;\n\n if (globalObj === null) {\n throw new Error('unable to locate global object');\n }\n\n if (typeof globalObj.define === 'function' && typeof globalObj.require === 'function') {\n define = globalObj.define;\n require = globalObj.require;\n\n return;\n }\n\n var registry = Object.create(null);\n var seen = Object.create(null);\n\n function missingModule(name, referrerName) {\n if (referrerName) {\n throw new Error('Could not find module ' + name + ' required by: ' + referrerName);\n } else {\n throw new Error('Could not find module ' + name);\n }\n }\n\n function internalRequire(_name, referrerName) {\n var name = _name;\n var mod = registry[name];\n\n if (!mod) {\n name = name + '/index';\n mod = registry[name];\n }\n\n var exports = seen[name];\n\n if (exports !== undefined) {\n return exports;\n }\n\n exports = seen[name] = {};\n\n if (!mod) {\n missingModule(_name, referrerName);\n }\n\n var deps = mod.deps;\n var callback = mod.callback;\n var reified = new Array(deps.length);\n\n for (var i = 0; i < deps.length; i++) {\n if (deps[i] === 'exports') {\n reified[i] = exports;\n } else if (deps[i] === 'require') {\n reified[i] = require;\n } else {\n reified[i] = require(deps[i], name);\n }\n }\n\n callback.apply(this, reified);\n\n return exports;\n }\n\n require = function (name) {\n return internalRequire(name, null);\n };\n\n define = function (name, deps, callback) {\n registry[name] = { deps: deps, callback: callback };\n };\n\n // setup `require` module\n require['default'] = require;\n\n require.has = function registryHas(moduleName) {\n return Boolean(registry[moduleName]) || Boolean(registry[moduleName + '/index']);\n };\n\n require._eak_seen = require.entries = registry;\n})();\n","define(\"@ember/-internals/browser-environment/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.window = _exports.userAgent = _exports.location = _exports.isFirefox = _exports.isChrome = _exports.history = _exports.hasDOM = void 0;\n // check if window exists and actually is the global\n var hasDom = typeof self === 'object' && self !== null && self.Object === Object && typeof Window !== 'undefined' && self.constructor === Window && typeof document === 'object' && document !== null && self.document === document && typeof location === 'object' && location !== null && self.location === location && typeof history === 'object' && history !== null && self.history === history && typeof navigator === 'object' && navigator !== null && self.navigator === navigator && typeof navigator.userAgent === 'string';\n _exports.hasDOM = hasDom;\n var window = hasDom ? self : null;\n _exports.window = window;\n var location$1 = hasDom ? self.location : null;\n _exports.location = location$1;\n var history$1 = hasDom ? self.history : null;\n _exports.history = history$1;\n var userAgent = hasDom ? self.navigator.userAgent : 'Lynx (textmode)';\n _exports.userAgent = userAgent;\n var isChrome = hasDom ? typeof chrome === 'object' && !(typeof opera === 'object') : false;\n _exports.isChrome = isChrome;\n var isFirefox = hasDom ? /Firefox|FxiOS/.test(userAgent) : false;\n _exports.isFirefox = isFirefox;\n});","define(\"@ember/-internals/environment/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.context = _exports.ENV = void 0;\n _exports.getENV = getENV;\n _exports.getLookup = getLookup;\n _exports.global = void 0;\n _exports.setLookup = setLookup;\n // from lodash to catch fake globals\n function checkGlobal(value) {\n return value && value.Object === Object ? value : undefined;\n }\n // element ids can ruin global miss checks\n function checkElementIdShadowing(value) {\n return value && value.nodeType === undefined ? value : undefined;\n }\n // export real global\n var global$1 = checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) || checkGlobal(typeof self === 'object' && self) || checkGlobal(typeof window === 'object' && window) || typeof mainContext !== 'undefined' && mainContext ||\n // set before strict mode in Ember loader/wrapper\n new Function('return this')(); // eval outside of strict mode\n\n // legacy imports/exports/lookup stuff (should we keep this??)\n _exports.global = global$1;\n var context = function (global, Ember) {\n return Ember === undefined ? {\n imports: global,\n exports: global,\n lookup: global\n } : {\n // import jQuery\n imports: Ember.imports || global,\n // export Ember\n exports: Ember.exports || global,\n // search for Namespaces\n lookup: Ember.lookup || global\n };\n }(global$1, global$1.Ember);\n _exports.context = context;\n function getLookup() {\n return context.lookup;\n }\n function setLookup(value) {\n context.lookup = value;\n }\n\n /**\n The hash of environment variables used to control various configuration\n settings. To specify your own or override default settings, add the\n desired properties to a global hash named `EmberENV` (or `ENV` for\n backwards compatibility with earlier versions of Ember). The `EmberENV`\n hash must be created before loading Ember.\n \n @class EmberENV\n @type Object\n @public\n */\n var ENV = {\n ENABLE_OPTIONAL_FEATURES: false,\n /**\n Determines whether Ember should add to `Array`\n native object prototypes, a few extra methods in order to provide a more\n friendly API.\n We generally recommend leaving this option set to true however, if you need\n to turn it off, you can add the configuration property\n `EXTEND_PROTOTYPES` to `EmberENV` and set it to `false`.\n Note, when disabled (the default configuration for Ember Addons), you will\n instead have to access all methods and functions from the Ember\n namespace.\n @property EXTEND_PROTOTYPES\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n EXTEND_PROTOTYPES: {\n Array: true\n },\n /**\n The `LOG_STACKTRACE_ON_DEPRECATION` property, when true, tells Ember to log\n a full stack trace during deprecation warnings.\n @property LOG_STACKTRACE_ON_DEPRECATION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_STACKTRACE_ON_DEPRECATION: true,\n /**\n The `LOG_VERSION` property, when true, tells Ember to log versions of all\n dependent libraries in use.\n @property LOG_VERSION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_VERSION: true,\n RAISE_ON_DEPRECATION: false,\n STRUCTURED_PROFILE: false,\n /**\n Whether to insert a `<div class=\"ember-view\" />` wrapper around the\n application template. See RFC #280.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _APPLICATION_TEMPLATE_WRAPPER\n @for EmberENV\n @type Boolean\n @default true\n @private\n */\n _APPLICATION_TEMPLATE_WRAPPER: true,\n /**\n Whether to use Glimmer Component semantics (as opposed to the classic \"Curly\"\n components semantics) for template-only components. See RFC #278.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _TEMPLATE_ONLY_GLIMMER_COMPONENTS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _TEMPLATE_ONLY_GLIMMER_COMPONENTS: false,\n /**\n Whether to perform extra bookkeeping needed to make the `captureRenderTree`\n API work.\n This has to be set before the ember JavaScript code is evaluated. This is\n usually done by setting `window.EmberENV = { _DEBUG_RENDER_TREE: true };`\n before the \"vendor\" `<script>` tag in `index.html`.\n Setting the flag after Ember is already loaded will not work correctly. It\n may appear to work somewhat, but fundamentally broken.\n This is not intended to be set directly. Ember Inspector will enable the\n flag on behalf of the user as needed.\n This flag is always on in development mode.\n The flag is off by default in production mode, due to the cost associated\n with the the bookkeeping work.\n The expected flow is that Ember Inspector will ask the user to refresh the\n page after enabling the feature. It could also offer a feature where the\n user add some domains to the \"always on\" list. In either case, Ember\n Inspector will inject the code on the page to set the flag if needed.\n @property _DEBUG_RENDER_TREE\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _DEBUG_RENDER_TREE: true /* DEBUG */,\n /**\n Whether the app defaults to using async observers.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _DEFAULT_ASYNC_OBSERVERS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _DEFAULT_ASYNC_OBSERVERS: false,\n /**\n Controls the maximum number of scheduled rerenders without \"settling\". In general,\n applications should not need to modify this environment variable, but please\n open an issue so that we can determine if a better default value is needed.\n @property _RERENDER_LOOP_LIMIT\n @for EmberENV\n @type number\n @default 1000\n @private\n */\n _RERENDER_LOOP_LIMIT: 1000,\n EMBER_LOAD_HOOKS: {},\n FEATURES: {}\n };\n _exports.ENV = ENV;\n (EmberENV => {\n if (typeof EmberENV !== 'object' || EmberENV === null) return;\n for (var flag in EmberENV) {\n if (!Object.prototype.hasOwnProperty.call(EmberENV, flag) || flag === 'EXTEND_PROTOTYPES' || flag === 'EMBER_LOAD_HOOKS') continue;\n var defaultValue = ENV[flag];\n if (defaultValue === true) {\n ENV[flag] = EmberENV[flag] !== false;\n } else if (defaultValue === false) {\n ENV[flag] = EmberENV[flag] === true;\n }\n }\n var {\n EXTEND_PROTOTYPES\n } = EmberENV;\n if (EXTEND_PROTOTYPES !== undefined) {\n if (typeof EXTEND_PROTOTYPES === 'object' && EXTEND_PROTOTYPES !== null) {\n ENV.EXTEND_PROTOTYPES.Array = EXTEND_PROTOTYPES.Array !== false;\n } else {\n ENV.EXTEND_PROTOTYPES.Array = EXTEND_PROTOTYPES !== false;\n }\n }\n // TODO this does not seem to be used by anything,\n // can we remove it? do we need to deprecate it?\n var {\n EMBER_LOAD_HOOKS\n } = EmberENV;\n if (typeof EMBER_LOAD_HOOKS === 'object' && EMBER_LOAD_HOOKS !== null) {\n for (var hookName in EMBER_LOAD_HOOKS) {\n if (!Object.prototype.hasOwnProperty.call(EMBER_LOAD_HOOKS, hookName)) continue;\n var hooks = EMBER_LOAD_HOOKS[hookName];\n if (Array.isArray(hooks)) {\n ENV.EMBER_LOAD_HOOKS[hookName] = hooks.filter(hook => typeof hook === 'function');\n }\n }\n }\n var {\n FEATURES\n } = EmberENV;\n if (typeof FEATURES === 'object' && FEATURES !== null) {\n for (var feature in FEATURES) {\n if (!Object.prototype.hasOwnProperty.call(FEATURES, feature)) continue;\n ENV.FEATURES[feature] = FEATURES[feature] === true;\n }\n }\n if (true /* DEBUG */) {\n ENV._DEBUG_RENDER_TREE = true;\n }\n })(global$1.EmberENV);\n function getENV() {\n return ENV;\n }\n});","define(\"@ember/-internals/utils/index\", [\"exports\", \"@glimmer/util\", \"@ember/debug\"], function (_exports, _util, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.ROOT = _exports.GUID_KEY = _exports.Cache = void 0;\n _exports.canInvoke = canInvoke;\n _exports.checkHasSuper = void 0;\n _exports.dictionary = makeDictionary;\n _exports.enumerableSymbol = enumerableSymbol;\n _exports.generateGuid = generateGuid;\n _exports.getDebugName = void 0;\n _exports.getName = getName;\n _exports.guidFor = guidFor;\n _exports.intern = intern;\n _exports.isInternalSymbol = isInternalSymbol;\n _exports.isObject = isObject;\n _exports.isProxy = isProxy;\n _exports.lookupDescriptor = lookupDescriptor;\n _exports.observerListenerMetaFor = observerListenerMetaFor;\n _exports.setListeners = setListeners;\n _exports.setName = setName;\n _exports.setObservers = setObservers;\n _exports.setProxy = setProxy;\n _exports.teardownMandatorySetter = _exports.symbol = _exports.setupMandatorySetter = _exports.setWithMandatorySetter = void 0;\n _exports.toString = toString;\n _exports.uuid = uuid;\n _exports.wrap = wrap;\n /**\n Strongly hint runtimes to intern the provided string.\n \n When do I need to use this function?\n \n For the most part, never. Pre-mature optimization is bad, and often the\n runtime does exactly what you need it to, and more often the trade-off isn't\n worth it.\n \n Why?\n \n Runtimes store strings in at least 2 different representations:\n Ropes and Symbols (interned strings). The Rope provides a memory efficient\n data-structure for strings created from concatenation or some other string\n manipulation like splitting.\n \n Unfortunately checking equality of different ropes can be quite costly as\n runtimes must resort to clever string comparison algorithms. These\n algorithms typically cost in proportion to the length of the string.\n Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n unique by their string content, equality checks can be done by pointer\n comparison.\n \n How do I know if my string is a rope or symbol?\n \n Typically (warning general sweeping statement, but truthy in runtimes at\n present) static strings created as part of the JS source are interned.\n Strings often used for comparisons can be interned at runtime if some\n criteria are met. One of these criteria can be the size of the entire rope.\n For example, in chrome 38 a rope longer then 12 characters will not\n intern, nor will segments of that rope.\n \n Some numbers: http://jsperf.com/eval-vs-keys/8\n \n Known Trick™\n \n @private\n @return {String} interned version of the provided string\n */\n function intern(str) {\n var obj = Object.create(null);\n obj[str] = 1;\n for (var key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n }\n\n /**\n Returns whether Type(value) is Object.\n \n Useful for checking whether a value is a valid WeakMap key.\n \n Refs: https://tc39.github.io/ecma262/#sec-typeof-operator-runtime-semantics-evaluation\n https://tc39.github.io/ecma262/#sec-weakmap.prototype.set\n \n @private\n @function isObject\n */\n function isObject(value) {\n return value !== null && (typeof value === 'object' || typeof value === 'function');\n }\n\n /**\n @module @ember/object\n */\n /**\n @private\n @return {Number} the uuid\n */\n var _uuid = 0;\n /**\n Generates a universally unique identifier. This method\n is used internally by Ember for assisting with\n the generation of GUID's and other unique identifiers.\n \n @public\n @return {Number} [description]\n */\n function uuid() {\n return ++_uuid;\n }\n /**\n Prefix used for guids through out Ember.\n @private\n @property GUID_PREFIX\n @for Ember\n @type String\n @final\n */\n var GUID_PREFIX = 'ember';\n // Used for guid generation...\n var OBJECT_GUIDS = new WeakMap();\n var NON_OBJECT_GUIDS = new Map();\n /**\n A unique key used to assign guids and other private metadata to objects.\n If you inspect an object in your browser debugger you will often see these.\n They can be safely ignored.\n \n On browsers that support it, these properties are added with enumeration\n disabled so they won't show up when you iterate over your properties.\n \n @private\n @property GUID_KEY\n @for Ember\n @type String\n @final\n */\n var GUID_KEY = intern(\"__ember\" + Date.now());\n /**\n Generates a new guid, optionally saving the guid to the object that you\n pass in. You will rarely need to use this method. Instead you should\n call `guidFor(obj)`, which return an existing guid if available.\n \n @private\n @method generateGuid\n @static\n @for @ember/object/internals\n @param {Object} [obj] Object the guid will be used for. If passed in, the guid will\n be saved on the object and reused whenever you pass the same object\n again.\n \n If no object is passed, just generate a new guid.\n @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to\n separate the guid into separate namespaces.\n @return {String} the guid\n */\n _exports.GUID_KEY = GUID_KEY;\n function generateGuid(obj, prefix) {\n if (prefix === void 0) {\n prefix = GUID_PREFIX;\n }\n var guid = prefix + uuid().toString();\n if (isObject(obj)) {\n OBJECT_GUIDS.set(obj, guid);\n }\n return guid;\n }\n /**\n Returns a unique id for the object. If the object does not yet have a guid,\n one will be assigned to it. You can call this on any object,\n `EmberObject`-based or not.\n \n You can also use this method on DOM Element objects.\n \n @public\n @static\n @method guidFor\n @for @ember/object/internals\n @param {Object} obj any object, string, number, Element, or primitive\n @return {String} the unique guid for this instance.\n */\n function guidFor(value) {\n var guid;\n if (isObject(value)) {\n guid = OBJECT_GUIDS.get(value);\n if (guid === undefined) {\n guid = \"\" + GUID_PREFIX + uuid();\n OBJECT_GUIDS.set(value, guid);\n }\n } else {\n guid = NON_OBJECT_GUIDS.get(value);\n if (guid === undefined) {\n var type = typeof value;\n if (type === 'string') {\n guid = \"st\" + uuid();\n } else if (type === 'number') {\n guid = \"nu\" + uuid();\n } else if (type === 'symbol') {\n guid = \"sy\" + uuid();\n } else {\n guid = \"(\" + value + \")\";\n }\n NON_OBJECT_GUIDS.set(value, guid);\n }\n }\n return guid;\n }\n var GENERATED_SYMBOLS = [];\n function isInternalSymbol(possibleSymbol) {\n return GENERATED_SYMBOLS.indexOf(possibleSymbol) !== -1;\n }\n // Some legacy symbols still need to be enumerable for a variety of reasons.\n // This code exists for that, and as a fallback in IE11. In general, prefer\n // `symbol` below when creating a new symbol.\n function enumerableSymbol(debugName) {\n // TODO: Investigate using platform symbols, but we do not\n // want to require non-enumerability for this API, which\n // would introduce a large cost.\n var id = GUID_KEY + Math.floor(Math.random() * Date.now()).toString();\n var symbol = intern(\"__\" + debugName + id + \"__\");\n if (true /* DEBUG */) {\n GENERATED_SYMBOLS.push(symbol);\n }\n return symbol;\n }\n var symbol = Symbol;\n\n // the delete is meant to hint at runtimes that this object should remain in\n // dictionary mode. This is clearly a runtime specific hack, but currently it\n // appears worthwhile in some usecases. Please note, these deletes do increase\n // the cost of creation dramatically over a plain Object.create. And as this\n // only makes sense for long-lived dictionaries that aren't instantiated often.\n _exports.symbol = symbol;\n function makeDictionary(parent) {\n var dict = Object.create(parent);\n dict['_dict'] = null;\n delete dict['_dict'];\n return dict;\n }\n var getDebugName;\n if (true /* DEBUG */) {\n var getFunctionName = fn => {\n var functionName = fn.name;\n if (functionName === undefined) {\n var match = Function.prototype.toString.call(fn).match(/function (\\w+)\\s*\\(/);\n functionName = match && match[1] || '';\n }\n return functionName.replace(/^bound /, '');\n };\n var getObjectName = obj => {\n var name;\n var className;\n if (obj.constructor && obj.constructor !== Object) {\n className = getFunctionName(obj.constructor);\n }\n if ('toString' in obj && obj.toString !== Object.prototype.toString && obj.toString !== Function.prototype.toString) {\n name = obj.toString();\n }\n // If the class has a decent looking name, and the `toString` is one of the\n // default Ember toStrings, replace the constructor portion of the toString\n // with the class name. We check the length of the class name to prevent doing\n // this when the value is minified.\n if (name && name.match(/<.*:ember\\d+>/) && className && className[0] !== '_' && className.length > 2 && className !== 'Class') {\n return name.replace(/<.*:/, \"<\" + className + \":\");\n }\n return name || className;\n };\n var getPrimitiveName = value => {\n return String(value);\n };\n getDebugName = value => {\n if (typeof value === 'function') {\n return getFunctionName(value) || \"(unknown function)\";\n } else if (typeof value === 'object' && value !== null) {\n return getObjectName(value) || \"(unknown object)\";\n } else {\n return getPrimitiveName(value);\n }\n };\n }\n var getDebugName$1 = getDebugName;\n _exports.getDebugName = getDebugName$1;\n var HAS_SUPER_PATTERN = /\\.(_super|call\\(this|apply\\(this)/;\n var fnToString = Function.prototype.toString;\n var checkHasSuper = (() => {\n var sourceAvailable = fnToString.call(function () {\n return this;\n }).indexOf('return this') > -1;\n if (sourceAvailable) {\n return function checkHasSuper(func) {\n return HAS_SUPER_PATTERN.test(fnToString.call(func));\n };\n }\n return function checkHasSuper() {\n return true;\n };\n })();\n _exports.checkHasSuper = checkHasSuper;\n var HAS_SUPER_MAP = new WeakMap();\n var ROOT = Object.freeze(function () {});\n _exports.ROOT = ROOT;\n HAS_SUPER_MAP.set(ROOT, false);\n function hasSuper(func) {\n var hasSuper = HAS_SUPER_MAP.get(func);\n if (hasSuper === undefined) {\n hasSuper = checkHasSuper(func);\n HAS_SUPER_MAP.set(func, hasSuper);\n }\n return hasSuper;\n }\n class ObserverListenerMeta {\n constructor() {\n this.listeners = undefined;\n this.observers = undefined;\n }\n }\n var OBSERVERS_LISTENERS_MAP = new WeakMap();\n function createObserverListenerMetaFor(fn) {\n var meta = OBSERVERS_LISTENERS_MAP.get(fn);\n if (meta === undefined) {\n meta = new ObserverListenerMeta();\n OBSERVERS_LISTENERS_MAP.set(fn, meta);\n }\n return meta;\n }\n function observerListenerMetaFor(fn) {\n return OBSERVERS_LISTENERS_MAP.get(fn);\n }\n function setObservers(func, observers) {\n var meta = createObserverListenerMetaFor(func);\n meta.observers = observers;\n }\n function setListeners(func, listeners) {\n var meta = createObserverListenerMetaFor(func);\n meta.listeners = listeners;\n }\n var IS_WRAPPED_FUNCTION_SET = new _util._WeakSet();\n /**\n Wraps the passed function so that `this._super` will point to the superFunc\n when the function is invoked. This is the primitive we use to implement\n calls to super.\n \n @private\n @method wrap\n @for Ember\n @param {Function} func The function to call\n @param {Function} superFunc The super function.\n @return {Function} wrapped function.\n */\n function wrap(func, superFunc) {\n if (!hasSuper(func)) {\n return func;\n }\n // ensure an unwrapped super that calls _super is wrapped with a terminal _super\n if (!IS_WRAPPED_FUNCTION_SET.has(superFunc) && hasSuper(superFunc)) {\n return _wrap(func, _wrap(superFunc, ROOT));\n }\n return _wrap(func, superFunc);\n }\n function _wrap(func, superFunc) {\n function superWrapper() {\n var orig = this._super;\n this._super = superFunc;\n var ret = func.apply(this, arguments);\n this._super = orig;\n return ret;\n }\n IS_WRAPPED_FUNCTION_SET.add(superWrapper);\n var meta = OBSERVERS_LISTENERS_MAP.get(func);\n if (meta !== undefined) {\n OBSERVERS_LISTENERS_MAP.set(superWrapper, meta);\n }\n return superWrapper;\n }\n function lookupDescriptor(obj, keyName) {\n var current = obj;\n do {\n var descriptor = Object.getOwnPropertyDescriptor(current, keyName);\n if (descriptor !== undefined) {\n return descriptor;\n }\n current = Object.getPrototypeOf(current);\n } while (current !== null);\n return null;\n }\n\n /**\n Checks to see if the `methodName` exists on the `obj`.\n \n ```javascript\n let foo = { bar: function() { return 'bar'; }, baz: null };\n \n Ember.canInvoke(foo, 'bar'); // true\n Ember.canInvoke(foo, 'baz'); // false\n Ember.canInvoke(foo, 'bat'); // false\n ```\n \n @method canInvoke\n @for Ember\n @param {Object} obj The object to check for the method\n @param {String} methodName The method name to check for\n @return {Boolean}\n @private\n */\n function canInvoke(obj, methodName) {\n return obj != null && typeof obj[methodName] === 'function';\n }\n /**\n @module @ember/utils\n */\n\n var NAMES = new WeakMap();\n function setName(obj, name) {\n if (isObject(obj)) NAMES.set(obj, name);\n }\n function getName(obj) {\n return NAMES.get(obj);\n }\n var objectToString = Object.prototype.toString;\n function isNone(obj) {\n return obj === null || obj === undefined;\n }\n /*\n A `toString` util function that supports objects without a `toString`\n method, e.g. an object created with `Object.create(null)`.\n */\n function toString(obj) {\n if (typeof obj === 'string') {\n return obj;\n }\n if (null === obj) return 'null';\n if (undefined === obj) return 'undefined';\n if (Array.isArray(obj)) {\n // Reimplement Array.prototype.join according to spec (22.1.3.13)\n // Changing ToString(element) with this safe version of ToString.\n var r = '';\n for (var k = 0; k < obj.length; k++) {\n if (k > 0) {\n r += ',';\n }\n if (!isNone(obj[k])) {\n r += toString(obj[k]);\n }\n }\n return r;\n }\n if (typeof obj.toString === 'function') {\n return obj.toString();\n }\n return objectToString.call(obj);\n }\n var PROXIES = new _util._WeakSet();\n function isProxy(value) {\n if (isObject(value)) {\n return PROXIES.has(value);\n }\n return false;\n }\n function setProxy(object) {\n if (isObject(object)) {\n PROXIES.add(object);\n }\n }\n class Cache {\n constructor(limit, func, store) {\n if (store === void 0) {\n store = new Map();\n }\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.size = 0;\n this.misses = 0;\n this.hits = 0;\n }\n get(key) {\n if (this.store.has(key)) {\n this.hits++;\n // SAFETY: we know the value is present because `.has(key)` was `true`.\n return this.store.get(key);\n } else {\n this.misses++;\n return this.set(key, this.func(key));\n }\n }\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n return value;\n }\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n }\n _exports.Cache = Cache;\n var setupMandatorySetter;\n _exports.setupMandatorySetter = setupMandatorySetter;\n var teardownMandatorySetter;\n _exports.teardownMandatorySetter = teardownMandatorySetter;\n var setWithMandatorySetter;\n _exports.setWithMandatorySetter = setWithMandatorySetter;\n function isElementKey(key) {\n return typeof key === 'number' ? isPositiveInt(key) : isStringInt(key);\n }\n function isStringInt(str) {\n var num = parseInt(str, 10);\n return isPositiveInt(num) && str === String(num);\n }\n function isPositiveInt(num) {\n return num >= 0 && num % 1 === 0;\n }\n if (true /* DEBUG */) {\n var SEEN_TAGS = new _util._WeakSet();\n var MANDATORY_SETTERS = new WeakMap();\n var _propertyIsEnumerable = function (obj, key) {\n return Object.prototype.propertyIsEnumerable.call(obj, key);\n };\n _exports.setupMandatorySetter = setupMandatorySetter = function (tag, obj, keyName) {\n if (SEEN_TAGS.has(tag)) {\n return;\n }\n SEEN_TAGS.add(tag);\n if (Array.isArray(obj) && isElementKey(keyName)) {\n return;\n }\n var desc = lookupDescriptor(obj, keyName) || {};\n if (desc.get || desc.set) {\n // if it has a getter or setter, we can't install the mandatory setter.\n // native setters are allowed, we have to assume that they will resolve\n // to tracked properties.\n return;\n }\n if (desc && (!desc.configurable || !desc.writable)) {\n // if it isn't writable anyways, so we shouldn't provide the setter.\n // if it isn't configurable, we can't overwrite it anyways.\n return;\n }\n var setters = MANDATORY_SETTERS.get(obj);\n if (setters === undefined) {\n setters = {};\n MANDATORY_SETTERS.set(obj, setters);\n }\n desc.hadOwnProperty = Object.hasOwnProperty.call(obj, keyName);\n setters[keyName] = desc;\n Object.defineProperty(obj, keyName, {\n configurable: true,\n enumerable: _propertyIsEnumerable(obj, keyName),\n get() {\n if (desc.get) {\n return desc.get.call(this);\n } else {\n return desc.value;\n }\n },\n set(value) {\n (true && !(false) && (0, _debug.assert)(\"You attempted to update \" + this + \".\" + String(keyName) + \" to \\\"\" + String(value) + \"\\\", but it is being tracked by a tracking context, such as a template, computed property, or observer. In order to make sure the context updates properly, you must invalidate the property when updating it. You can mark the property as `@tracked`, or use `@ember/object#set` to do this.\"));\n }\n });\n };\n _exports.teardownMandatorySetter = teardownMandatorySetter = function (obj, keyName) {\n var setters = MANDATORY_SETTERS.get(obj);\n if (setters !== undefined && setters[keyName] !== undefined) {\n Object.defineProperty(obj, keyName, setters[keyName]);\n delete setters[keyName];\n }\n };\n _exports.setWithMandatorySetter = setWithMandatorySetter = function (obj, keyName, value) {\n var setters = MANDATORY_SETTERS.get(obj);\n if (setters !== undefined && setters[keyName] !== undefined) {\n var setter = setters[keyName];\n if (setter.set) {\n setter.set.call(obj, value);\n } else {\n setter.value = value;\n // If the object didn't have own property before, it would have changed\n // the enumerability after setting the value the first time.\n if (!setter.hadOwnProperty) {\n var desc = lookupDescriptor(obj, keyName);\n desc.enumerable = true;\n Object.defineProperty(obj, keyName, desc);\n }\n }\n } else {\n obj[keyName] = value;\n }\n };\n }\n});","define(\"@ember/canary-features/index\", [\"exports\", \"@ember/-internals/environment\"], function (_exports, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.FEATURES = _exports.DEFAULT_FEATURES = void 0;\n _exports.isEnabled = isEnabled;\n /**\n Set `EmberENV.FEATURES` in your application's `config/environment.js` file\n to enable canary features in your application.\n \n See the [feature flag guide](https://guides.emberjs.com/release/configuring-ember/feature-flags/)\n for more details.\n \n @module @ember/canary-features\n @public\n */\n var DEFAULT_FEATURES = {\n // FLAG_NAME: true/false\n };\n /**\n The hash of enabled Canary features. Add to this, any canary features\n before creating your application.\n \n @class FEATURES\n @static\n @since 1.1.0\n @public\n */\n _exports.DEFAULT_FEATURES = DEFAULT_FEATURES;\n var FEATURES = Object.assign(DEFAULT_FEATURES, _environment.ENV.FEATURES);\n /**\n Determine whether the specified `feature` is enabled. Used by Ember's\n build tools to exclude experimental features from beta/stable builds.\n \n You can define the following configuration options:\n \n * `EmberENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly\n enabled/disabled.\n \n @method isEnabled\n @param {String} feature The feature to check\n @return {Boolean}\n @since 1.1.0\n @public\n */\n _exports.FEATURES = FEATURES;\n function isEnabled(feature) {\n var value = FEATURES[feature];\n if (value === true || value === false) {\n return value;\n } else if (_environment.ENV.ENABLE_OPTIONAL_FEATURES) {\n return true;\n } else {\n return false;\n }\n }\n // Uncomment the below when features are present:\n // function featureValue(value: null | boolean) {\n // if (ENV.ENABLE_OPTIONAL_FEATURES && value === null) {\n // return true;\n // }\n // return value;\n // }\n // export const FLAG_NAME = featureValue(FEATURES.FLAG_NAME);\n});","define(\"@ember/debug/container-debug-adapter\", [\"exports\", \"@ember/-internals/string\", \"@ember/object\", \"@ember/utils\", \"@ember/-internals/owner\", \"@ember/application/namespace\"], function (_exports, _string, _object, _utils, _owner, _namespace) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /**\n @module @ember/debug/container-debug-adapter\n */\n /**\n The `ContainerDebugAdapter` helps the container and resolver interface\n with tools that debug Ember such as the\n [Ember Inspector](https://github.com/emberjs/ember-inspector)\n for Chrome and Firefox.\n \n This class can be extended by a custom resolver implementer\n to override some of the methods with library-specific code.\n \n The methods likely to be overridden are:\n \n * `canCatalogEntriesByType`\n * `catalogEntriesByType`\n \n The adapter will need to be registered\n in the application's container as `container-debug-adapter:main`.\n \n Example:\n \n ```javascript\n Application.initializer({\n name: \"containerDebugAdapter\",\n \n initialize(application) {\n application.register('container-debug-adapter:main', require('app/container-debug-adapter'));\n }\n });\n ```\n \n @class ContainerDebugAdapter\n @extends EmberObject\n @since 1.5.0\n @public\n */\n class ContainerDebugAdapter extends _object.default {\n constructor(owner) {\n super(owner);\n this.resolver = (0, _owner.getOwner)(this).lookup('resolver-for-debugging:main');\n }\n /**\n Returns true if it is possible to catalog a list of available\n classes in the resolver for a given type.\n @method canCatalogEntriesByType\n @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n @return {boolean} whether a list is available for this type.\n @public\n */\n canCatalogEntriesByType(type) {\n if (type === 'model' || type === 'template') {\n return false;\n }\n return true;\n }\n /**\n Returns the available classes a given type.\n @method catalogEntriesByType\n @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n @return {Array} An array of strings.\n @public\n */\n catalogEntriesByType(type) {\n var namespaces = _namespace.default.NAMESPACES;\n var types = [];\n var typeSuffixRegex = new RegExp((0, _string.classify)(type) + \"$\");\n namespaces.forEach(namespace => {\n for (var key in namespace) {\n if (!Object.prototype.hasOwnProperty.call(namespace, key)) {\n continue;\n }\n if (typeSuffixRegex.test(key)) {\n var klass = namespace[key];\n if ((0, _utils.typeOf)(klass) === 'class') {\n types.push((0, _string.dasherize)(key.replace(typeSuffixRegex, '')));\n }\n }\n }\n });\n return types;\n }\n }\n _exports.default = ContainerDebugAdapter;\n});","define(\"@ember/debug/data-adapter\", [\"exports\", \"@ember/-internals/owner\", \"@ember/runloop\", \"@ember/object\", \"@ember/-internals/string\", \"@ember/application/namespace\", \"@ember/array\", \"@glimmer/validator\", \"@ember/debug\"], function (_exports, _owner, _runloop, _object, _string, _namespace, _array, _validator, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n function iterate(arr, fn) {\n if (Symbol.iterator in arr) {\n for (var item of arr) {\n fn(item);\n }\n } else {\n // SAFETY: this cast required to work this way to interop between TS 4.8\n // and 4.9. When we drop support for 4.8, it will narrow correctly via the\n // use of the `in` operator above. (Preferably we will solve this by just\n // switching to require `Symbol.iterator` instead.)\n (0, _debug.assert)('', typeof arr.forEach === 'function');\n arr.forEach(fn);\n }\n }\n class RecordsWatcher {\n getCacheForItem(record) {\n var recordCache = this.recordCaches.get(record);\n if (!recordCache) {\n var hasBeenAdded = false;\n recordCache = (0, _validator.createCache)(() => {\n if (!hasBeenAdded) {\n this.added.push(this.wrapRecord(record));\n hasBeenAdded = true;\n } else {\n this.updated.push(this.wrapRecord(record));\n }\n });\n this.recordCaches.set(record, recordCache);\n }\n return recordCache;\n }\n constructor(records, recordsAdded, recordsUpdated, recordsRemoved, wrapRecord, release) {\n this.wrapRecord = wrapRecord;\n this.release = release;\n this.recordCaches = new Map();\n this.added = [];\n this.updated = [];\n this.removed = [];\n this.recordArrayCache = (0, _validator.createCache)(() => {\n var seen = new Set();\n // Track `[]` for legacy support\n (0, _validator.consumeTag)((0, _validator.tagFor)(records, '[]'));\n iterate(records, record => {\n (0, _validator.getValue)(this.getCacheForItem(record));\n seen.add(record);\n });\n // Untrack this operation because these records are being removed, they\n // should not be polled again in the future\n (0, _validator.untrack)(() => {\n this.recordCaches.forEach((_cache, record) => {\n if (!seen.has(record)) {\n this.removed.push(wrapRecord(record));\n this.recordCaches.delete(record);\n }\n });\n });\n if (this.added.length > 0) {\n recordsAdded(this.added);\n this.added = [];\n }\n if (this.updated.length > 0) {\n recordsUpdated(this.updated);\n this.updated = [];\n }\n if (this.removed.length > 0) {\n recordsRemoved(this.removed);\n this.removed = [];\n }\n });\n }\n revalidate() {\n (0, _validator.getValue)(this.recordArrayCache);\n }\n }\n class TypeWatcher {\n constructor(records, onChange, release) {\n this.release = release;\n var hasBeenAccessed = false;\n this.cache = (0, _validator.createCache)(() => {\n // Empty iteration, we're doing this just\n // to track changes to the records array\n iterate(records, () => {});\n // Also track `[]` for legacy support\n (0, _validator.consumeTag)((0, _validator.tagFor)(records, '[]'));\n if (hasBeenAccessed === true) {\n (0, _runloop.next)(onChange);\n } else {\n hasBeenAccessed = true;\n }\n });\n this.release = release;\n }\n revalidate() {\n (0, _validator.getValue)(this.cache);\n }\n }\n /**\n The `DataAdapter` helps a data persistence library\n interface with tools that debug Ember such\n as the [Ember Inspector](https://github.com/emberjs/ember-inspector)\n for Chrome and Firefox.\n \n This class will be extended by a persistence library\n which will override some of the methods with\n library-specific code.\n \n The methods likely to be overridden are:\n \n * `getFilters`\n * `detect`\n * `columnsForType`\n * `getRecords`\n * `getRecordColumnValues`\n * `getRecordKeywords`\n * `getRecordFilterValues`\n * `getRecordColor`\n \n The adapter will need to be registered\n in the application's container as `dataAdapter:main`.\n \n Example:\n \n ```javascript\n Application.initializer({\n name: \"data-adapter\",\n \n initialize: function(application) {\n application.register('data-adapter:main', DS.DataAdapter);\n }\n });\n ```\n \n @class DataAdapter\n @extends EmberObject\n @public\n */\n class DataAdapter extends _object.default {\n constructor(owner) {\n super(owner);\n this.releaseMethods = (0, _array.A)();\n this.recordsWatchers = new Map();\n this.typeWatchers = new Map();\n this.flushWatchers = null;\n /**\n The container-debug-adapter which is used\n to list all models.\n @property containerDebugAdapter\n @default undefined\n @since 1.5.0\n @public\n **/\n /**\n The number of attributes to send\n as columns. (Enough to make the record\n identifiable).\n @private\n @property attributeLimit\n @default 3\n @since 1.3.0\n */\n this.attributeLimit = 3;\n /**\n Ember Data > v1.0.0-beta.18\n requires string model names to be passed\n around instead of the actual factories.\n This is a stamp for the Ember Inspector\n to differentiate between the versions\n to be able to support older versions too.\n @public\n @property acceptsModelName\n */\n this.acceptsModelName = true;\n this.containerDebugAdapter = (0, _owner.getOwner)(this).lookup('container-debug-adapter:main');\n }\n /**\n Map from records arrays to RecordsWatcher instances\n @private\n @property recordsWatchers\n @since 3.26.0\n */\n /**\n Map from records arrays to TypeWatcher instances\n @private\n @property typeWatchers\n @since 3.26.0\n */\n /**\n Callback that is currently scheduled on backburner end to flush and check\n all active watchers.\n @private\n @property flushWatchers\n @since 3.26.0\n */\n /**\n Stores all methods that clear observers.\n These methods will be called on destruction.\n @private\n @property releaseMethods\n @since 1.3.0\n */\n /**\n Specifies how records can be filtered.\n Records returned will need to have a `filterValues`\n property with a key for every name in the returned array.\n @public\n @method getFilters\n @return {Array} List of objects defining filters.\n The object should have a `name` and `desc` property.\n */\n getFilters() {\n return (0, _array.A)();\n }\n /**\n Fetch the model types and observe them for changes.\n @public\n @method watchModelTypes\n @param {Function} typesAdded Callback to call to add types.\n Takes an array of objects containing wrapped types (returned from `wrapModelType`).\n @param {Function} typesUpdated Callback to call when a type has changed.\n Takes an array of objects containing wrapped types.\n @return {Function} Method to call to remove all observers\n */\n watchModelTypes(typesAdded, typesUpdated) {\n var modelTypes = this.getModelTypes();\n var releaseMethods = (0, _array.A)();\n var typesToSend;\n typesToSend = modelTypes.map(type => {\n var klass = type.klass;\n var wrapped = this.wrapModelType(klass, type.name);\n releaseMethods.push(this.observeModelType(type.name, typesUpdated));\n return wrapped;\n });\n typesAdded(typesToSend);\n var release = () => {\n releaseMethods.forEach(fn => fn());\n this.releaseMethods.removeObject(release);\n };\n this.releaseMethods.pushObject(release);\n return release;\n }\n _nameToClass(type) {\n if (typeof type === 'string') {\n var owner = (0, _owner.getOwner)(this);\n var Factory = owner.factoryFor(\"model:\" + type);\n type = Factory && Factory.class;\n }\n return type;\n }\n /**\n Fetch the records of a given type and observe them for changes.\n @public\n @method watchRecords\n @param {String} modelName The model name.\n @param {Function} recordsAdded Callback to call to add records.\n Takes an array of objects containing wrapped records.\n The object should have the following properties:\n columnValues: {Object} The key and value of a table cell.\n object: {Object} The actual record object.\n @param {Function} recordsUpdated Callback to call when a record has changed.\n Takes an array of objects containing wrapped records.\n @param {Function} recordsRemoved Callback to call when a record has removed.\n Takes an array of objects containing wrapped records.\n @return {Function} Method to call to remove all observers.\n */\n watchRecords(modelName, recordsAdded, recordsUpdated, recordsRemoved) {\n var klass = this._nameToClass(modelName);\n var records = this.getRecords(klass, modelName);\n var {\n recordsWatchers\n } = this;\n var recordsWatcher = recordsWatchers.get(records);\n if (!recordsWatcher) {\n recordsWatcher = new RecordsWatcher(records, recordsAdded, recordsUpdated, recordsRemoved, record => this.wrapRecord(record), () => {\n recordsWatchers.delete(records);\n this.updateFlushWatchers();\n });\n recordsWatchers.set(records, recordsWatcher);\n this.updateFlushWatchers();\n recordsWatcher.revalidate();\n }\n return recordsWatcher.release;\n }\n updateFlushWatchers() {\n if (this.flushWatchers === null) {\n if (this.typeWatchers.size > 0 || this.recordsWatchers.size > 0) {\n this.flushWatchers = () => {\n this.typeWatchers.forEach(watcher => watcher.revalidate());\n this.recordsWatchers.forEach(watcher => watcher.revalidate());\n };\n _runloop._backburner.on('end', this.flushWatchers);\n }\n } else if (this.typeWatchers.size === 0 && this.recordsWatchers.size === 0) {\n _runloop._backburner.off('end', this.flushWatchers);\n this.flushWatchers = null;\n }\n }\n /**\n Clear all observers before destruction\n @private\n @method willDestroy\n */\n willDestroy() {\n this._super(...arguments);\n this.typeWatchers.forEach(watcher => watcher.release());\n this.recordsWatchers.forEach(watcher => watcher.release());\n this.releaseMethods.forEach(fn => fn());\n if (this.flushWatchers) {\n _runloop._backburner.off('end', this.flushWatchers);\n }\n }\n /**\n Detect whether a class is a model.\n Test that against the model class\n of your persistence library.\n @public\n @method detect\n @return boolean Whether the class is a model class or not.\n */\n detect(_klass) {\n return false;\n }\n /**\n Get the columns for a given model type.\n @public\n @method columnsForType\n @return {Array} An array of columns of the following format:\n name: {String} The name of the column.\n desc: {String} Humanized description (what would show in a table column name).\n */\n columnsForType(_klass) {\n return (0, _array.A)();\n }\n /**\n Adds observers to a model type class.\n @private\n @method observeModelType\n @param {String} modelName The model type name.\n @param {Function} typesUpdated Called when a type is modified.\n @return {Function} The function to call to remove observers.\n */\n observeModelType(modelName, typesUpdated) {\n var klass = this._nameToClass(modelName);\n var records = this.getRecords(klass, modelName);\n var onChange = () => {\n typesUpdated([this.wrapModelType(klass, modelName)]);\n };\n var {\n typeWatchers\n } = this;\n var typeWatcher = typeWatchers.get(records);\n if (!typeWatcher) {\n typeWatcher = new TypeWatcher(records, onChange, () => {\n typeWatchers.delete(records);\n this.updateFlushWatchers();\n });\n typeWatchers.set(records, typeWatcher);\n this.updateFlushWatchers();\n typeWatcher.revalidate();\n }\n return typeWatcher.release;\n }\n /**\n Wraps a given model type and observes changes to it.\n @private\n @method wrapModelType\n @param {Class} klass A model class.\n @param {String} modelName Name of the class.\n @return {Object} The wrapped type has the following format:\n name: {String} The name of the type.\n count: {Integer} The number of records available.\n columns: {Columns} An array of columns to describe the record.\n object: {Class} The actual Model type class.\n */\n wrapModelType(klass, name) {\n var records = this.getRecords(klass, name);\n return {\n name,\n count: (0, _object.get)(records, 'length'),\n columns: this.columnsForType(klass),\n object: klass\n };\n }\n /**\n Fetches all models defined in the application.\n @private\n @method getModelTypes\n @return {Array} Array of model types.\n */\n getModelTypes() {\n var containerDebugAdapter = this.containerDebugAdapter;\n var stringTypes = containerDebugAdapter.canCatalogEntriesByType('model') ? containerDebugAdapter.catalogEntriesByType('model') : this._getObjectsOnNamespaces();\n // New adapters return strings instead of classes.\n var klassTypes = stringTypes.map(name => {\n return {\n klass: this._nameToClass(name),\n name\n };\n });\n return klassTypes.filter(type => this.detect(type.klass));\n }\n /**\n Loops over all namespaces and all objects\n attached to them.\n @private\n @method _getObjectsOnNamespaces\n @return {Array} Array of model type strings.\n */\n _getObjectsOnNamespaces() {\n var namespaces = _namespace.default.NAMESPACES;\n var types = [];\n namespaces.forEach(namespace => {\n for (var key in namespace) {\n if (!Object.prototype.hasOwnProperty.call(namespace, key)) {\n continue;\n }\n // Even though we will filter again in `getModelTypes`,\n // we should not call `lookupFactory` on non-models\n if (!this.detect(namespace[key])) {\n continue;\n }\n var name = (0, _string.dasherize)(key);\n types.push(name);\n }\n });\n return types;\n }\n /**\n Fetches all loaded records for a given type.\n @public\n @method getRecords\n @return {Array} An array of records.\n This array will be observed for changes,\n so it should update when new records are added/removed.\n */\n getRecords(_klass, _name) {\n return (0, _array.A)();\n }\n /**\n Wraps a record and observers changes to it.\n @private\n @method wrapRecord\n @param {Object} record The record instance.\n @return {Object} The wrapped record. Format:\n columnValues: {Array}\n searchKeywords: {Array}\n */\n wrapRecord(record) {\n return {\n object: record,\n columnValues: this.getRecordColumnValues(record),\n searchKeywords: this.getRecordKeywords(record),\n filterValues: this.getRecordFilterValues(record),\n color: this.getRecordColor(record)\n };\n }\n /**\n Gets the values for each column.\n @public\n @method getRecordColumnValues\n @return {Object} Keys should match column names defined\n by the model type.\n */\n getRecordColumnValues(_record) {\n return {};\n }\n /**\n Returns keywords to match when searching records.\n @public\n @method getRecordKeywords\n @return {Array} Relevant keywords for search.\n */\n getRecordKeywords(_record) {\n return (0, _array.A)();\n }\n /**\n Returns the values of filters defined by `getFilters`.\n @public\n @method getRecordFilterValues\n @param {Object} record The record instance.\n @return {Object} The filter values.\n */\n getRecordFilterValues(_record) {\n return {};\n }\n /**\n Each record can have a color that represents its state.\n @public\n @method getRecordColor\n @param {Object} record The record instance\n @return {String} The records color.\n Possible options: black, red, blue, green.\n */\n getRecordColor(_record) {\n return null;\n }\n }\n _exports.default = DataAdapter;\n});","define(\"@ember/debug/index\", [\"exports\", \"@ember/-internals/browser-environment\", \"@ember/debug/lib/deprecate\", \"@ember/debug/lib/testing\", \"@ember/debug/lib/warn\", \"@ember/debug/lib/inspect\", \"@ember/debug/lib/capture-render-tree\"], function (_exports, _browserEnvironment, _deprecate2, _testing, _warn2, _inspect, _captureRenderTree) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.assert = _exports._warnIfUsingStrippedFeatureFlags = void 0;\n Object.defineProperty(_exports, \"captureRenderTree\", {\n enumerable: true,\n get: function () {\n return _captureRenderTree.default;\n }\n });\n _exports.info = _exports.getDebugFunction = _exports.deprecateFunc = _exports.deprecate = _exports.debugSeal = _exports.debugFreeze = _exports.debug = void 0;\n Object.defineProperty(_exports, \"inspect\", {\n enumerable: true,\n get: function () {\n return _inspect.default;\n }\n });\n Object.defineProperty(_exports, \"isTesting\", {\n enumerable: true,\n get: function () {\n return _testing.isTesting;\n }\n });\n Object.defineProperty(_exports, \"registerDeprecationHandler\", {\n enumerable: true,\n get: function () {\n return _deprecate2.registerHandler;\n }\n });\n Object.defineProperty(_exports, \"registerWarnHandler\", {\n enumerable: true,\n get: function () {\n return _warn2.registerHandler;\n }\n });\n _exports.setDebugFunction = _exports.runInDebug = void 0;\n Object.defineProperty(_exports, \"setTesting\", {\n enumerable: true,\n get: function () {\n return _testing.setTesting;\n }\n });\n _exports.warn = void 0;\n // These are the default production build versions:\n var noop = () => {};\n // SAFETY: these casts are just straight-up lies, but the point is that they do\n // not do anything in production builds.\n var assert = noop;\n _exports.assert = assert;\n var info = noop;\n _exports.info = info;\n var warn = noop;\n _exports.warn = warn;\n var debug = noop;\n _exports.debug = debug;\n var deprecate = noop;\n _exports.deprecate = deprecate;\n var debugSeal = noop;\n _exports.debugSeal = debugSeal;\n var debugFreeze = noop;\n _exports.debugFreeze = debugFreeze;\n var runInDebug = noop;\n _exports.runInDebug = runInDebug;\n var setDebugFunction = noop;\n _exports.setDebugFunction = setDebugFunction;\n var getDebugFunction = noop;\n _exports.getDebugFunction = getDebugFunction;\n var deprecateFunc = function () {\n return arguments[arguments.length - 1];\n };\n _exports.deprecateFunc = deprecateFunc;\n if (true /* DEBUG */) {\n _exports.setDebugFunction = setDebugFunction = function (type, callback) {\n switch (type) {\n case 'assert':\n return _exports.assert = assert = callback;\n case 'info':\n return _exports.info = info = callback;\n case 'warn':\n return _exports.warn = warn = callback;\n case 'debug':\n return _exports.debug = debug = callback;\n case 'deprecate':\n return _exports.deprecate = deprecate = callback;\n case 'debugSeal':\n return _exports.debugSeal = debugSeal = callback;\n case 'debugFreeze':\n return _exports.debugFreeze = debugFreeze = callback;\n case 'runInDebug':\n return _exports.runInDebug = runInDebug = callback;\n case 'deprecateFunc':\n return _exports.deprecateFunc = deprecateFunc = callback;\n }\n };\n _exports.getDebugFunction = getDebugFunction = function (type) {\n switch (type) {\n case 'assert':\n return assert;\n case 'info':\n return info;\n case 'warn':\n return warn;\n case 'debug':\n return debug;\n case 'deprecate':\n return deprecate;\n case 'debugSeal':\n return debugSeal;\n case 'debugFreeze':\n return debugFreeze;\n case 'runInDebug':\n return runInDebug;\n case 'deprecateFunc':\n return deprecateFunc;\n }\n };\n }\n /**\n @module @ember/debug\n */\n if (true /* DEBUG */) {\n // eslint-disable-next-line no-inner-declarations\n function _assert(desc, test) {\n if (!test) {\n throw new Error(\"Assertion Failed: \" + desc);\n }\n }\n setDebugFunction('assert', _assert);\n /**\n Display a debug notice.\n Calls to this function are not invoked in production builds.\n ```javascript\n import { debug } from '@ember/debug';\n debug('I\\'m a debug notice!');\n ```\n @method debug\n @for @ember/debug\n @static\n @param {String} message A debug message to display.\n @public\n */\n setDebugFunction('debug', function debug(message) {\n console.debug(\"DEBUG: \" + message); /* eslint-disable-line no-console */\n });\n /**\n Display an info notice.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n @method info\n @private\n */\n setDebugFunction('info', function info() {\n console.info(...arguments); /* eslint-disable-line no-console */\n });\n /**\n @module @ember/debug\n @public\n */\n /**\n Alias an old, deprecated method with its new counterpart.\n Display a deprecation warning with the provided message and a stack trace\n (Chrome and Firefox only) when the assigned method is called.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n ```javascript\n import { deprecateFunc } from '@ember/debug';\n Ember.oldMethod = deprecateFunc('Please use the new, updated method', options, Ember.newMethod);\n ```\n @method deprecateFunc\n @static\n @for @ember/debug\n @param {String} message A description of the deprecation.\n @param {Object} [options] The options object for `deprecate`.\n @param {Function} func The new function called to replace its deprecated counterpart.\n @return {Function} A new function that wraps the original function with a deprecation warning\n @private\n */\n setDebugFunction('deprecateFunc', function deprecateFunc() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 3) {\n var [message, options, func] = args;\n return function () {\n deprecate(message, false, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return func.apply(this, args);\n };\n } else {\n var [_message, _func] = args;\n return function () {\n deprecate(_message);\n return _func.apply(this, arguments);\n };\n }\n });\n /**\n @module @ember/debug\n @public\n */\n /**\n Run a function meant for debugging.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n ```javascript\n import Component from '@ember/component';\n import { runInDebug } from '@ember/debug';\n runInDebug(() => {\n Component.reopen({\n didInsertElement() {\n console.log(\"I'm happy\");\n }\n });\n });\n ```\n @method runInDebug\n @for @ember/debug\n @static\n @param {Function} func The function to be executed.\n @since 1.5.0\n @public\n */\n setDebugFunction('runInDebug', function runInDebug(func) {\n func();\n });\n setDebugFunction('debugSeal', function debugSeal(obj) {\n Object.seal(obj);\n });\n setDebugFunction('debugFreeze', function debugFreeze(obj) {\n // re-freezing an already frozen object introduces a significant\n // performance penalty on Chrome (tested through 59).\n //\n // See: https://bugs.chromium.org/p/v8/issues/detail?id=6450\n if (!Object.isFrozen(obj)) {\n Object.freeze(obj);\n }\n });\n setDebugFunction('deprecate', _deprecate2.default);\n setDebugFunction('warn', _warn2.default);\n }\n var _warnIfUsingStrippedFeatureFlags;\n _exports._warnIfUsingStrippedFeatureFlags = _warnIfUsingStrippedFeatureFlags;\n if (true /* DEBUG */ && !(0, _testing.isTesting)()) {\n if (typeof window !== 'undefined' && (_browserEnvironment.isFirefox || _browserEnvironment.isChrome) && window.addEventListener) {\n window.addEventListener('load', () => {\n if (document.documentElement && document.documentElement.dataset && !document.documentElement.dataset['emberExtension']) {\n var downloadURL;\n if (_browserEnvironment.isChrome) {\n downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi';\n } else if (_browserEnvironment.isFirefox) {\n downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/';\n }\n debug(\"For more advanced debugging, install the Ember Inspector from \" + downloadURL);\n }\n }, false);\n }\n }\n});","define(\"@ember/debug/lib/capture-render-tree\", [\"exports\", \"@glimmer/util\"], function (_exports, _util) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = captureRenderTree;\n /**\n @module @ember/debug\n */\n /**\n Ember Inspector calls this function to capture the current render tree.\n \n In production mode, this requires turning on `ENV._DEBUG_RENDER_TREE`\n before loading Ember.\n \n @private\n @static\n @method captureRenderTree\n @for @ember/debug\n @param app {ApplicationInstance} An `ApplicationInstance`.\n @since 3.14.0\n */\n function captureRenderTree(app) {\n // SAFETY: Ideally we'd assert here but that causes awkward circular requires since this is also in @ember/debug.\n // This is only for debug stuff so not very risky.\n var renderer = (0, _util.expect)(app.lookup('renderer:-dom'), \"BUG: owner is missing renderer\");\n return renderer.debugRenderTree.capture();\n }\n});","define(\"@ember/debug/lib/deprecate\", [\"exports\", \"@ember/-internals/environment\", \"@ember/debug/index\", \"@ember/debug/lib/handlers\"], function (_exports, _environment, _index, _handlers) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.missingOptionsIdDeprecation = _exports.missingOptionsDeprecation = _exports.missingOptionDeprecation = _exports.default = void 0;\n /**\n @module @ember/debug\n @public\n */\n /**\n Allows for runtime registration of handler functions that override the default deprecation behavior.\n Deprecations are invoked by calls to [@ember/debug/deprecate](/ember/release/classes/@ember%2Fdebug/methods/deprecate?anchor=deprecate).\n The following example demonstrates its usage by registering a handler that throws an error if the\n message contains the word \"should\", otherwise defers to the default handler.\n \n ```javascript\n import { registerDeprecationHandler } from '@ember/debug';\n \n registerDeprecationHandler((message, options, next) => {\n if (message.indexOf('should') !== -1) {\n throw new Error(`Deprecation message with should: ${message}`);\n } else {\n // defer to whatever handler was registered before this one\n next(message, options);\n }\n });\n ```\n \n The handler function takes the following arguments:\n \n <ul>\n <li> <code>message</code> - The message received from the deprecation call.</li>\n <li> <code>options</code> - An object passed in with the deprecation call containing additional information including:</li>\n <ul>\n <li> <code>id</code> - An id of the deprecation in the form of <code>package-name.specific-deprecation</code>.</li>\n <li> <code>until</code> - The Ember version number the feature and deprecation will be removed in.</li>\n </ul>\n <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n </ul>\n \n @public\n @static\n @method registerDeprecationHandler\n @for @ember/debug\n @param handler {Function} A function to handle deprecation calls.\n @since 2.1.0\n */\n var registerHandler = () => {};\n _exports.registerHandler = registerHandler;\n var missingOptionsDeprecation;\n _exports.missingOptionsDeprecation = missingOptionsDeprecation;\n var missingOptionsIdDeprecation;\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation;\n var missingOptionDeprecation = () => '';\n _exports.missingOptionDeprecation = missingOptionDeprecation;\n var deprecate = () => {};\n if (true /* DEBUG */) {\n _exports.registerHandler = registerHandler = function registerHandler(handler) {\n (0, _handlers.registerHandler)('deprecate', handler);\n };\n var formatMessage = function formatMessage(_message, options) {\n var message = _message;\n if (options != null && options.id) {\n message = message + (\" [deprecation id: \" + options.id + \"]\");\n }\n if (options != null && options.until) {\n message = message + (\" This will be removed in \" + options.for + \" \" + options.until + \".\");\n }\n if (options != null && options.url) {\n message += \" See \" + options.url + \" for more details.\";\n }\n return message;\n };\n registerHandler(function logDeprecationToConsole(message, options) {\n var updatedMessage = formatMessage(message, options);\n console.warn(\"DEPRECATION: \" + updatedMessage); // eslint-disable-line no-console\n });\n\n var captureErrorForStack;\n if (new Error().stack) {\n captureErrorForStack = () => new Error();\n } else {\n captureErrorForStack = () => {\n try {\n __fail__.fail();\n return;\n } catch (e) {\n return e;\n }\n };\n }\n registerHandler(function logDeprecationStackTrace(message, options, next) {\n if (_environment.ENV.LOG_STACKTRACE_ON_DEPRECATION) {\n var stackStr = '';\n var error = captureErrorForStack();\n var stack;\n if (error instanceof Error) {\n if (error.stack) {\n if (error['arguments']) {\n // Chrome\n stack = error.stack.replace(/^\\s+at\\s+/gm, '').replace(/^([^(]+?)([\\n$])/gm, '{anonymous}($1)$2').replace(/^Object.<anonymous>\\s*\\(([^)]+)\\)/gm, '{anonymous}($1)').split('\\n');\n stack.shift();\n } else {\n // Firefox\n stack = error.stack.replace(/(?:\\n@:0)?\\s+$/m, '').replace(/^\\(/gm, '{anonymous}(').split('\\n');\n }\n stackStr = \"\\n \" + stack.slice(2).join('\\n ');\n }\n }\n var updatedMessage = formatMessage(message, options);\n console.warn(\"DEPRECATION: \" + updatedMessage + stackStr); // eslint-disable-line no-console\n } else {\n next(message, options);\n }\n });\n registerHandler(function raiseOnDeprecation(message, options, next) {\n if (_environment.ENV.RAISE_ON_DEPRECATION) {\n var updatedMessage = formatMessage(message);\n throw new Error(updatedMessage);\n } else {\n next(message, options);\n }\n });\n _exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `deprecate` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include `id` and `until` properties.';\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `deprecate` you must provide `id` in options.';\n _exports.missingOptionDeprecation = missingOptionDeprecation = (id, missingOption) => {\n return \"When calling `deprecate` you must provide `\" + missingOption + \"` in options. Missing options.\" + missingOption + \" in \\\"\" + id + \"\\\" deprecation\";\n };\n /**\n @module @ember/debug\n @public\n */\n /**\n Display a deprecation warning with the provided message and a stack trace\n (Chrome and Firefox only).\n Ember itself leverages [Semantic Versioning](https://semver.org) to aid\n projects in keeping up with changes to the framework. Before any\n functionality or API is removed, it first flows linearly through a\n deprecation staging process. The staging process currently contains two\n stages: available and enabled.\n Deprecations are initially released into the 'available' stage.\n Deprecations will stay in this stage until the replacement API has been\n marked as a recommended practice via the RFC process and the addon\n ecosystem has generally adopted the change.\n Once a deprecation meets the above criteria, it will move into the\n 'enabled' stage where it will remain until the functionality or API is\n eventually removed.\n For application and addon developers, \"available\" deprecations are not\n urgent and \"enabled\" deprecations require action.\n * In a production build, this method is defined as an empty function (NOP).\n Uses of this method in Ember itself are stripped from the ember.prod.js build.\n ```javascript\n import { deprecate } from '@ember/debug';\n deprecate(\n 'Use of `assign` has been deprecated. Please use `Object.assign` or the spread operator instead.',\n false,\n {\n id: 'ember-polyfills.deprecate-assign',\n until: '5.0.0',\n url: 'https://deprecations.emberjs.com/v4.x/#toc_ember-polyfills-deprecate-assign',\n for: 'ember-source',\n since: {\n available: '4.0.0',\n enabled: '4.0.0',\n },\n }\n );\n ```\n @method deprecate\n @for @ember/debug\n @param {String} message A description of the deprecation.\n @param {Boolean} test A boolean. If falsy, the deprecation will be displayed.\n @param {Object} options\n @param {String} options.id A unique id for this deprecation. The id can be\n used by Ember debugging tools to change the behavior (raise, log or silence)\n for that specific deprecation. The id should be namespaced by dots, e.g.\n \"view.helper.select\".\n @param {string} options.until The version of Ember when this deprecation\n warning will be removed.\n @param {String} options.for A namespace for the deprecation, usually the package name\n @param {Object} options.since Describes when the deprecation became available and enabled.\n @param {String} [options.url] An optional url to the transition guide on the\n emberjs.com website.\n @static\n @public\n @since 1.0.0\n */\n deprecate = function deprecate(message, test, options) {\n (0, _index.assert)(missingOptionsDeprecation, Boolean(options && (options.id || options.until)));\n (0, _index.assert)(missingOptionsIdDeprecation, Boolean(options.id));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'until'), Boolean(options.until));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'for'), Boolean(options.for));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'since'), Boolean(options.since));\n (0, _handlers.invoke)('deprecate', message, test, options);\n };\n }\n var _default = deprecate;\n _exports.default = _default;\n});","define(\"@ember/debug/lib/handlers\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.invoke = _exports.HANDLERS = void 0;\n var HANDLERS = {};\n _exports.HANDLERS = HANDLERS;\n var registerHandler = function registerHandler(_type, _callback) {};\n _exports.registerHandler = registerHandler;\n var invoke = () => {};\n _exports.invoke = invoke;\n if (true /* DEBUG */) {\n _exports.registerHandler = registerHandler = function registerHandler(type, callback) {\n var nextHandler = HANDLERS[type] || (() => {});\n HANDLERS[type] = (message, options) => {\n callback(message, options, nextHandler);\n };\n };\n _exports.invoke = invoke = function invoke(type, message, test, options) {\n if (test) {\n return;\n }\n var handlerForType = HANDLERS[type];\n if (handlerForType) {\n handlerForType(message, options);\n }\n };\n }\n});","define(\"@ember/debug/lib/inspect\", [\"exports\", \"@glimmer/util\", \"@ember/debug\"], function (_exports, _util, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = inspect;\n var {\n toString: objectToString\n } = Object.prototype;\n var {\n toString: functionToString\n } = Function.prototype;\n var {\n isArray\n } = Array;\n var {\n keys: objectKeys\n } = Object;\n var {\n stringify\n } = JSON;\n var LIST_LIMIT = 100;\n var DEPTH_LIMIT = 4;\n var SAFE_KEY = /^[\\w$]+$/;\n /**\n @module @ember/debug\n */\n /**\n Convenience method to inspect an object. This method will attempt to\n convert the object into a useful string description.\n \n It is a pretty simple implementation. If you want something more robust,\n use something like JSDump: https://github.com/NV/jsDump\n \n @method inspect\n @static\n @param {Object} obj The object you want to inspect.\n @return {String} A description of the object\n @since 1.4.0\n @private\n */\n function inspect(obj) {\n // detect Node util.inspect call inspect(depth: number, opts: object)\n if (typeof obj === 'number' && arguments.length === 2) {\n return this;\n }\n return inspectValue(obj, 0);\n }\n function inspectValue(value, depth, seen) {\n var valueIsArray = false;\n switch (typeof value) {\n case 'undefined':\n return 'undefined';\n case 'object':\n if (value === null) return 'null';\n if (isArray(value)) {\n valueIsArray = true;\n break;\n }\n // is toString Object.prototype.toString or undefined then traverse\n if (value.toString === objectToString || value.toString === undefined) {\n break;\n }\n // custom toString\n return value.toString();\n case 'function':\n return value.toString === functionToString ? value.name ? \"[Function:\" + value.name + \"]\" : \"[Function]\" : value.toString();\n case 'string':\n return stringify(value);\n case 'symbol':\n case 'boolean':\n case 'number':\n default:\n return value.toString();\n }\n if (seen === undefined) {\n seen = new _util._WeakSet();\n } else {\n if (seen.has(value)) return \"[Circular]\";\n }\n seen.add(value);\n return valueIsArray ? inspectArray(value, depth + 1, seen) : inspectObject(value, depth + 1, seen);\n }\n function inspectKey(key) {\n return SAFE_KEY.test(key) ? key : stringify(key);\n }\n function inspectObject(obj, depth, seen) {\n if (depth > DEPTH_LIMIT) {\n return '[Object]';\n }\n var s = '{';\n var keys = objectKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n s += i === 0 ? ' ' : ', ';\n if (i >= LIST_LIMIT) {\n s += \"... \" + (keys.length - LIST_LIMIT) + \" more keys\";\n break;\n }\n var key = keys[i];\n (true && !(key) && (0, _debug.assert)('has key', key)); // Looping over array\n s += inspectKey(String(key)) + \": \" + inspectValue(obj[key], depth, seen);\n }\n s += ' }';\n return s;\n }\n function inspectArray(arr, depth, seen) {\n if (depth > DEPTH_LIMIT) {\n return '[Array]';\n }\n var s = '[';\n for (var i = 0; i < arr.length; i++) {\n s += i === 0 ? ' ' : ', ';\n if (i >= LIST_LIMIT) {\n s += \"... \" + (arr.length - LIST_LIMIT) + \" more items\";\n break;\n }\n s += inspectValue(arr[i], depth, seen);\n }\n s += ' ]';\n return s;\n }\n});","define(\"@ember/debug/lib/testing\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.isTesting = isTesting;\n _exports.setTesting = setTesting;\n var testing = false;\n function isTesting() {\n return testing;\n }\n function setTesting(value) {\n testing = Boolean(value);\n }\n});","define(\"@ember/debug/lib/warn\", [\"exports\", \"@ember/debug/index\", \"@ember/debug/lib/handlers\"], function (_exports, _index, _handlers) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.missingOptionsIdDeprecation = _exports.missingOptionsDeprecation = _exports.default = void 0;\n var registerHandler = () => {};\n _exports.registerHandler = registerHandler;\n var warn = () => {};\n var missingOptionsDeprecation;\n _exports.missingOptionsDeprecation = missingOptionsDeprecation;\n var missingOptionsIdDeprecation;\n /**\n @module @ember/debug\n */\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation;\n if (true /* DEBUG */) {\n /**\n Allows for runtime registration of handler functions that override the default warning behavior.\n Warnings are invoked by calls made to [@ember/debug/warn](/ember/release/classes/@ember%2Fdebug/methods/warn?anchor=warn).\n The following example demonstrates its usage by registering a handler that does nothing overriding Ember's\n default warning behavior.\n ```javascript\n import { registerWarnHandler } from '@ember/debug';\n // next is not called, so no warnings get the default behavior\n registerWarnHandler(() => {});\n ```\n The handler function takes the following arguments:\n <ul>\n <li> <code>message</code> - The message received from the warn call. </li>\n <li> <code>options</code> - An object passed in with the warn call containing additional information including:</li>\n <ul>\n <li> <code>id</code> - An id of the warning in the form of <code>package-name.specific-warning</code>.</li>\n </ul>\n <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n </ul>\n @public\n @static\n @method registerWarnHandler\n @for @ember/debug\n @param handler {Function} A function to handle warnings.\n @since 2.1.0\n */\n _exports.registerHandler = registerHandler = function registerHandler(handler) {\n (0, _handlers.registerHandler)('warn', handler);\n };\n registerHandler(function logWarning(message) {\n /* eslint-disable no-console */\n console.warn(\"WARNING: \" + message);\n /* eslint-enable no-console */\n });\n\n _exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `warn` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include an `id` property.';\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `warn` you must provide `id` in options.';\n /**\n Display a warning with the provided message.\n * In a production build, this method is defined as an empty function (NOP).\n Uses of this method in Ember itself are stripped from the ember.prod.js build.\n ```javascript\n import { warn } from '@ember/debug';\n import tomsterCount from './tomster-counter'; // a module in my project\n // Log a warning if we have more than 3 tomsters\n warn('Too many tomsters!', tomsterCount <= 3, {\n id: 'ember-debug.too-many-tomsters'\n });\n ```\n @method warn\n @for @ember/debug\n @static\n @param {String} message A warning to display.\n @param {Boolean} test An optional boolean. If falsy, the warning\n will be displayed.\n @param {Object} options An object that can be used to pass a unique\n `id` for this warning. The `id` can be used by Ember debugging tools\n to change the behavior (raise, log, or silence) for that specific warning.\n The `id` should be namespaced by dots, e.g. \"ember-debug.feature-flag-with-features-stripped\"\n @public\n @since 1.0.0\n */\n warn = function warn(message, test, options) {\n if (arguments.length === 2 && typeof test === 'object') {\n options = test;\n test = false;\n }\n (0, _index.assert)(missingOptionsDeprecation, Boolean(options));\n (0, _index.assert)(missingOptionsIdDeprecation, Boolean(options && options.id));\n // SAFETY: we checked this by way of the `arguments` check above.\n (0, _handlers.invoke)('warn', message, test, options);\n };\n }\n var _default = warn;\n _exports.default = _default;\n});","define(\"@ember/deprecated-features/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.ASSIGN = void 0;\n /* eslint-disable no-implicit-coercion */\n // These versions should be the version that the deprecation was _introduced_,\n // not the version that the feature will be removed.\n var ASSIGN = !!'4.0.0-beta.1';\n _exports.ASSIGN = ASSIGN;\n});","define(\"@glimmer/compiler\", [\"exports\", \"@glimmer/syntax\", \"@glimmer/util\"], function (_exports, _syntax, _util) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.WireFormatDebugger = _exports.ProgramSymbols = _exports.NEWLINE = void 0;\n _exports.buildStatement = buildStatement;\n _exports.buildStatements = buildStatements;\n _exports.c = c;\n _exports.defaultId = void 0;\n _exports.precompile = precompile;\n _exports.precompileJSON = precompileJSON;\n _exports.s = s;\n _exports.unicode = unicode;\n class Template extends (0, _syntax.node)('Template').fields() {}\n class InElement extends (0, _syntax.node)('InElement').fields() {}\n class Not extends (0, _syntax.node)('Not').fields() {}\n class If extends (0, _syntax.node)('If').fields() {}\n class IfInline extends (0, _syntax.node)('IfInline').fields() {}\n class Each extends (0, _syntax.node)('Each').fields() {}\n class With extends (0, _syntax.node)('With').fields() {}\n class Let extends (0, _syntax.node)('Let').fields() {}\n class WithDynamicVars extends (0, _syntax.node)('WithDynamicVars').fields() {}\n class GetDynamicVar extends (0, _syntax.node)('GetDynamicVar').fields() {}\n class Log extends (0, _syntax.node)('Log').fields() {}\n class InvokeComponent extends (0, _syntax.node)('InvokeComponent').fields() {}\n class NamedBlocks extends (0, _syntax.node)('NamedBlocks').fields() {}\n class NamedBlock extends (0, _syntax.node)('NamedBlock').fields() {}\n class EndBlock extends (0, _syntax.node)('EndBlock').fields() {}\n class AppendTrustedHTML extends (0, _syntax.node)('AppendTrustedHTML').fields() {}\n class AppendTextNode extends (0, _syntax.node)('AppendTextNode').fields() {}\n class AppendComment extends (0, _syntax.node)('AppendComment').fields() {}\n class Component extends (0, _syntax.node)('Component').fields() {}\n class StaticAttr extends (0, _syntax.node)('StaticAttr').fields() {}\n class DynamicAttr extends (0, _syntax.node)('DynamicAttr').fields() {}\n class SimpleElement extends (0, _syntax.node)('SimpleElement').fields() {}\n class ElementParameters extends (0, _syntax.node)('ElementParameters').fields() {}\n class Yield extends (0, _syntax.node)('Yield').fields() {}\n class Debugger extends (0, _syntax.node)('Debugger').fields() {}\n class CallExpression extends (0, _syntax.node)('CallExpression').fields() {}\n class DeprecatedCallExpression extends (0, _syntax.node)('DeprecatedCallExpression').fields() {}\n class Modifier extends (0, _syntax.node)('Modifier').fields() {}\n class InvokeBlock extends (0, _syntax.node)('InvokeBlock').fields() {}\n class SplatAttr extends (0, _syntax.node)('SplatAttr').fields() {}\n class PathExpression extends (0, _syntax.node)('PathExpression').fields() {}\n class GetWithResolver extends (0, _syntax.node)('GetWithResolver').fields() {}\n class GetSymbol extends (0, _syntax.node)('GetSymbol').fields() {}\n class GetFreeWithContext extends (0, _syntax.node)('GetFreeWithContext').fields() {}\n /** strict mode */\n\n class GetFree extends (0, _syntax.node)('GetFree').fields() {}\n class Missing extends (0, _syntax.node)('Missing').fields() {}\n class InterpolateExpression extends (0, _syntax.node)('InterpolateExpression').fields() {}\n class HasBlock extends (0, _syntax.node)('HasBlock').fields() {}\n class HasBlockParams extends (0, _syntax.node)('HasBlockParams').fields() {}\n class Curry extends (0, _syntax.node)('Curry').fields() {}\n class Positional extends (0, _syntax.node)('Positional').fields() {}\n class NamedArguments extends (0, _syntax.node)('NamedArguments').fields() {}\n class NamedArgument extends (0, _syntax.node)('NamedArgument').fields() {}\n class Args extends (0, _syntax.node)('Args').fields() {}\n class Tail extends (0, _syntax.node)('Tail').fields() {}\n class PresentList {\n constructor(list) {\n this.list = list;\n }\n toArray() {\n return this.list;\n }\n map(callback) {\n var result = (0, _util.mapPresent)(this.list, callback);\n return new PresentList(result);\n }\n filter(predicate) {\n var out = [];\n for (var item of this.list) {\n if (predicate(item)) {\n out.push(item);\n }\n }\n return OptionalList(out);\n }\n toPresentArray() {\n return this.list;\n }\n into(_ref) {\n var {\n ifPresent\n } = _ref;\n return ifPresent(this);\n }\n }\n class EmptyList {\n constructor() {\n this.list = [];\n }\n map(_callback) {\n return new EmptyList();\n }\n filter(_predicate) {\n return new EmptyList();\n }\n toArray() {\n return this.list;\n }\n toPresentArray() {\n return null;\n }\n into(_ref2) {\n var {\n ifEmpty\n } = _ref2;\n return ifEmpty();\n }\n } // export type OptionalList<T> = PresentList<T> | EmptyList<T>;\n\n function OptionalList(value) {\n if ((0, _util.isPresent)(value)) {\n return new PresentList(value);\n } else {\n return new EmptyList();\n }\n }\n class ResultImpl {\n static all() {\n var out = [];\n for (var _len = arguments.length, results = new Array(_len), _key = 0; _key < _len; _key++) {\n results[_key] = arguments[_key];\n }\n for (var result of results) {\n if (result.isErr) {\n return result.cast();\n } else {\n out.push(result.value);\n }\n }\n return Ok(out);\n }\n }\n var Result = ResultImpl;\n class OkImpl extends ResultImpl {\n constructor(value) {\n super();\n this.value = value;\n this.isOk = true;\n this.isErr = false;\n }\n expect(_message) {\n return this.value;\n }\n ifOk(callback) {\n callback(this.value);\n return this;\n }\n andThen(callback) {\n return callback(this.value);\n }\n mapOk(callback) {\n return Ok(callback(this.value));\n }\n ifErr(_callback) {\n return this;\n }\n mapErr(_callback) {\n return this;\n }\n }\n class ErrImpl extends ResultImpl {\n constructor(reason) {\n super();\n this.reason = reason;\n this.isOk = false;\n this.isErr = true;\n }\n expect(message) {\n throw new Error(message || 'expected an Ok, got Err');\n }\n andThen(_callback) {\n return this.cast();\n }\n mapOk(_callback) {\n return this.cast();\n }\n ifOk(_callback) {\n return this;\n }\n mapErr(callback) {\n return Err(callback(this.reason));\n }\n ifErr(callback) {\n callback(this.reason);\n return this;\n }\n cast() {\n return this;\n }\n }\n function Ok(value) {\n return new OkImpl(value);\n }\n function Err(reason) {\n return new ErrImpl(reason);\n }\n class ResultArray {\n constructor(items) {\n if (items === void 0) {\n items = [];\n }\n this.items = items;\n }\n add(item) {\n this.items.push(item);\n }\n toArray() {\n var err = this.items.filter(item => item instanceof ErrImpl)[0];\n if (err !== undefined) {\n return err.cast();\n } else {\n return Ok(this.items.map(item => item.value));\n }\n }\n toOptionalList() {\n return this.toArray().mapOk(arr => OptionalList(arr));\n }\n }\n class KeywordImpl {\n constructor(keyword, type, delegate) {\n this.keyword = keyword;\n this.delegate = delegate;\n var nodes = new Set();\n for (var nodeType of KEYWORD_NODES[type]) {\n nodes.add(nodeType);\n }\n this.types = nodes;\n }\n match(node) {\n if (!this.types.has(node.type)) {\n return false;\n }\n var path = getCalleeExpression(node);\n if (path !== null && path.type === 'Path' && path.ref.type === 'Free') {\n if (path.tail.length > 0) {\n if (path.ref.resolution.serialize() === 'Loose') {\n // cannot be a keyword reference, keywords do not allow paths (must be\n // relying on implicit this fallback)\n return false;\n }\n }\n return path.ref.name === this.keyword;\n } else {\n return false;\n }\n }\n translate(node, state) {\n if (this.match(node)) {\n var path = getCalleeExpression(node);\n if (path !== null && path.type === 'Path' && path.tail.length > 0) {\n return Err((0, _syntax.generateSyntaxError)(\"The `\" + this.keyword + \"` keyword was used incorrectly. It was used as `\" + path.loc.asString() + \"`, but it cannot be used with additional path segments. \\n\\nError caused by\", node.loc));\n }\n var param = this.delegate.assert(node, state);\n return param.andThen(param => this.delegate.translate({\n node,\n state\n }, param));\n } else {\n return null;\n }\n }\n }\n var KEYWORD_NODES = {\n Call: ['Call'],\n Block: ['InvokeBlock'],\n Append: ['AppendContent'],\n Modifier: ['ElementModifier']\n };\n function keyword(keyword, type, delegate) {\n return new KeywordImpl(keyword, type, delegate);\n }\n function getCalleeExpression(node) {\n switch (node.type) {\n // This covers the inside of attributes and expressions, as well as the callee\n // of call nodes\n case 'Path':\n return node;\n case 'AppendContent':\n return getCalleeExpression(node.value);\n case 'Call':\n case 'InvokeBlock':\n case 'ElementModifier':\n return node.callee;\n default:\n return null;\n }\n }\n class Keywords {\n constructor(type) {\n this._keywords = [];\n this._type = type;\n }\n kw(name, delegate) {\n this._keywords.push(keyword(name, this._type, delegate));\n return this;\n }\n translate(node, state) {\n for (var _keyword of this._keywords) {\n var result = _keyword.translate(node, state);\n if (result !== null) {\n return result;\n }\n }\n var path = getCalleeExpression(node);\n if (path && path.type === 'Path' && path.ref.type === 'Free' && (0, _syntax.isKeyword)(path.ref.name)) {\n var {\n name\n } = path.ref;\n var usedType = this._type;\n var validTypes = _syntax.KEYWORDS_TYPES[name];\n if (validTypes.indexOf(usedType) === -1) {\n return Err((0, _syntax.generateSyntaxError)(\"The `\" + name + \"` keyword was used incorrectly. It was used as \" + typesToReadableName[usedType] + \", but its valid usages are:\\n\\n\" + generateTypesMessage(name, validTypes) + \"\\n\\nError caused by\", node.loc));\n }\n }\n return null;\n }\n }\n var typesToReadableName = {\n Append: 'an append statement',\n Block: 'a block statement',\n Call: 'a call expression',\n Modifier: 'a modifier'\n };\n function generateTypesMessage(name, types) {\n return types.map(type => {\n switch (type) {\n case 'Append':\n return \"- As an append statement, as in: {{\" + name + \"}}\";\n case 'Block':\n return \"- As a block statement, as in: {{#\" + name + \"}}{{/\" + name + \"}}\";\n case 'Call':\n return \"- As an expression, as in: (\" + name + \")\";\n case 'Modifier':\n return \"- As a modifier, as in: <div {{\" + name + \"}}></div>\";\n default:\n return (0, _util.exhausted)(type);\n }\n }).join('\\n\\n');\n }\n /**\n * This function builds keyword definitions for a particular type of AST node (`KeywordType`).\n *\n * You can build keyword definitions for:\n *\n * - `Expr`: A `SubExpression` or `PathExpression`\n * - `Block`: A `BlockStatement`\n * - A `BlockStatement` is a keyword candidate if its head is a\n * `PathExpression`\n * - `Append`: An `AppendStatement`\n *\n * A node is a keyword candidate if:\n *\n * - A `PathExpression` is a keyword candidate if it has no tail, and its\n * head expression is a `LocalVarHead` or `FreeVarHead` whose name is\n * the keyword's name.\n * - A `SubExpression`, `AppendStatement`, or `BlockStatement` is a keyword\n * candidate if its head is a keyword candidate.\n *\n * The keyword infrastructure guarantees that:\n *\n * - If a node is not a keyword candidate, it is never passed to any keyword's\n * `assert` method.\n * - If a node is not the `KeywordType` for a particular keyword, it will not\n * be passed to the keyword's `assert` method.\n *\n * `Expr` keywords are used in expression positions and should return HIR\n * expressions. `Block` and `Append` keywords are used in statement\n * positions and should return HIR statements.\n *\n * A keyword definition has two parts:\n *\n * - `match`, which determines whether an AST node matches the keyword, and can\n * optionally return some information extracted from the AST node.\n * - `translate`, which takes a matching AST node as well as the extracted\n * information and returns an appropriate HIR instruction.\n *\n * # Example\n *\n * This keyword:\n *\n * - turns `(hello)` into `\"hello\"`\n * - as long as `hello` is not in scope\n * - makes it an error to pass any arguments (such as `(hello world)`)\n *\n * ```ts\n * keywords('SubExpr').kw('hello', {\n * assert(node: ExprKeywordNode): Result<void> | false {\n * // we don't want to transform `hello` as a `PathExpression`\n * if (node.type !== 'SubExpression') {\n * return false;\n * }\n *\n * // node.head would be `LocalVarHead` if `hello` was in scope\n * if (node.head.type !== 'FreeVarHead') {\n * return false;\n * }\n *\n * if (node.params.length || node.hash) {\n * return Err(generateSyntaxError(`(hello) does not take any arguments`), node.loc);\n * } else {\n * return Ok();\n * }\n * },\n *\n * translate(node: ASTv2.SubExpression): hir.Expression {\n * return ASTv2.builders.literal(\"hello\", node.loc)\n * }\n * })\n * ```\n *\n * The keyword infrastructure checks to make sure that the node is the right\n * type before calling `assert`, so you only need to consider `SubExpression`\n * and `PathExpression` here. It also checks to make sure that the node passed\n * to `assert` has the keyword name in the right place.\n *\n * Note the important difference between returning `false` from `assert`,\n * which just means that the node didn't match, and returning `Err`, which\n * means that the node matched, but there was a keyword-specific syntax\n * error.\n */\n\n function keywords(type) {\n return new Keywords(type);\n }\n function hasPath(node) {\n return node.callee.type === 'Path';\n }\n function isHelperInvocation(node) {\n if (!hasPath(node)) {\n return false;\n }\n return !node.args.isEmpty();\n }\n function isSimplePath(path) {\n if (path.type === 'Path') {\n var {\n ref: head,\n tail: parts\n } = path;\n return head.type === 'Free' && head.resolution !== _syntax.ASTv2.STRICT_RESOLUTION && parts.length === 0;\n } else {\n return false;\n }\n }\n function isStrictHelper(expr) {\n if (expr.callee.type !== 'Path') {\n return true;\n }\n if (expr.callee.ref.type !== 'Free') {\n return true;\n }\n return expr.callee.ref.resolution === _syntax.ASTv2.STRICT_RESOLUTION;\n }\n function assertIsValidModifier(helper) {\n if (isStrictHelper(helper) || isSimplePath(helper.callee)) {\n return;\n }\n throw (0, _syntax.generateSyntaxError)(\"`\" + printPath(helper.callee) + \"` is not a valid name for a modifier\", helper.loc);\n }\n function printPath(path) {\n switch (path.type) {\n case 'Literal':\n return JSON.stringify(path.value);\n case 'Path':\n {\n var printedPath = [printPathHead(path.ref)];\n printedPath.push(...path.tail.map(t => t.chars));\n return printedPath.join('.');\n }\n case 'Call':\n return \"(\" + printPath(path.callee) + \" ...)\";\n case 'DeprecatedCall':\n return \"\" + path.callee.name;\n case 'Interpolate':\n throw (0, _util.unreachable)('a concat statement cannot appear as the head of an expression');\n }\n }\n function printPathHead(head) {\n switch (head.type) {\n case 'Arg':\n return head.name.chars;\n case 'Free':\n case 'Local':\n return head.name;\n case 'This':\n return 'this';\n }\n }\n class NormalizeExpressions {\n visit(node, state) {\n switch (node.type) {\n case 'Literal':\n return Ok(this.Literal(node));\n case 'Interpolate':\n return this.Interpolate(node, state);\n case 'Path':\n return this.PathExpression(node);\n case 'Call':\n var translated = CALL_KEYWORDS.translate(node, state);\n if (translated !== null) {\n return translated;\n }\n return this.CallExpression(node, state);\n case 'DeprecatedCall':\n return this.DeprecaedCallExpression(node, state);\n }\n }\n visitList(nodes, state) {\n return new ResultArray(nodes.map(e => VISIT_EXPRS.visit(e, state))).toOptionalList();\n }\n /**\n * Normalize paths into `hir.Path` or a `hir.Expr` that corresponds to the ref.\n *\n * TODO since keywords don't support tails anyway, distinguish PathExpression from\n * VariableReference in ASTv2.\n */\n\n PathExpression(path) {\n var ref = this.VariableReference(path.ref);\n var {\n tail\n } = path;\n if ((0, _util.isPresent)(tail)) {\n var tailLoc = tail[0].loc.extend(tail[tail.length - 1].loc);\n return Ok(new PathExpression({\n loc: path.loc,\n head: ref,\n tail: new Tail({\n loc: tailLoc,\n members: tail\n })\n }));\n } else {\n return Ok(ref);\n }\n }\n VariableReference(ref) {\n return ref;\n }\n Literal(literal) {\n return literal;\n }\n Interpolate(expr, state) {\n var parts = expr.parts.map(convertPathToCallIfKeyword);\n return VISIT_EXPRS.visitList(parts, state).mapOk(parts => new InterpolateExpression({\n loc: expr.loc,\n parts: parts\n }));\n }\n CallExpression(expr, state) {\n if (!hasPath(expr)) {\n throw new Error(\"unimplemented subexpression at the head of a subexpression\");\n } else {\n return Result.all(VISIT_EXPRS.visit(expr.callee, state), VISIT_EXPRS.Args(expr.args, state)).mapOk(_ref3 => {\n var [callee, args] = _ref3;\n return new CallExpression({\n loc: expr.loc,\n callee,\n args\n });\n });\n }\n }\n DeprecaedCallExpression(_ref4, _state) {\n var {\n arg,\n callee,\n loc\n } = _ref4;\n return Ok(new DeprecatedCallExpression({\n loc,\n arg,\n callee\n }));\n }\n Args(_ref5, state) {\n var {\n positional,\n named,\n loc\n } = _ref5;\n return Result.all(this.Positional(positional, state), this.NamedArguments(named, state)).mapOk(_ref6 => {\n var [positional, named] = _ref6;\n return new Args({\n loc,\n positional,\n named\n });\n });\n }\n Positional(positional, state) {\n return VISIT_EXPRS.visitList(positional.exprs, state).mapOk(list => new Positional({\n loc: positional.loc,\n list\n }));\n }\n NamedArguments(named, state) {\n var pairs = named.entries.map(arg => {\n var value = convertPathToCallIfKeyword(arg.value);\n return VISIT_EXPRS.visit(value, state).mapOk(value => new NamedArgument({\n loc: arg.loc,\n key: arg.name,\n value\n }));\n });\n return new ResultArray(pairs).toOptionalList().mapOk(pairs => new NamedArguments({\n loc: named.loc,\n entries: pairs\n }));\n }\n }\n function convertPathToCallIfKeyword(path) {\n if (path.type === 'Path' && path.ref.type === 'Free' && path.ref.name in _syntax.KEYWORDS_TYPES) {\n return new _syntax.ASTv2.CallExpression({\n callee: path,\n args: _syntax.ASTv2.Args.empty(path.loc),\n loc: path.loc\n });\n }\n return path;\n }\n var VISIT_EXPRS = new NormalizeExpressions();\n var CurriedTypeToReadableType = {\n [0\n /* Component */]: 'component',\n [1\n /* Helper */]: 'helper',\n [2\n /* Modifier */]: 'modifier'\n };\n function assertCurryKeyword(curriedType) {\n return (node, state) => {\n var readableType = CurriedTypeToReadableType[curriedType];\n var stringsAllowed = curriedType === 0\n /* Component */;\n\n var {\n args\n } = node;\n var definition = args.nth(0);\n if (definition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") requires a \" + readableType + \" definition or identifier as its first positional parameter, did not receive any parameters.\", args.loc));\n }\n if (definition.type === 'Literal') {\n if (stringsAllowed && state.isStrict) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") cannot resolve string values in strict mode templates\", node.loc));\n } else if (!stringsAllowed) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") cannot resolve string values, you must pass a \" + readableType + \" definition directly\", node.loc));\n }\n }\n args = new _syntax.ASTv2.Args({\n positional: new _syntax.ASTv2.PositionalArguments({\n exprs: args.positional.exprs.slice(1),\n loc: args.positional.loc\n }),\n named: args.named,\n loc: args.loc\n });\n return Ok({\n definition,\n args\n });\n };\n }\n function translateCurryKeyword(curriedType) {\n return (_ref7, _ref8) => {\n var {\n node,\n state\n } = _ref7;\n var {\n definition,\n args\n } = _ref8;\n var definitionResult = VISIT_EXPRS.visit(definition, state);\n var argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref9 => {\n var [definition, args] = _ref9;\n return new Curry({\n loc: node.loc,\n curriedType,\n definition,\n args\n });\n });\n };\n }\n function curryKeyword(curriedType) {\n return {\n assert: assertCurryKeyword(curriedType),\n translate: translateCurryKeyword(curriedType)\n };\n }\n function assertGetDynamicVarKeyword(node) {\n var call = node.type === 'AppendContent' ? node.value : node;\n var named = call.type === 'Call' ? call.args.named : null;\n var positionals = call.type === 'Call' ? call.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) does not take any named arguments\", node.loc));\n }\n var varName = positionals === null || positionals === void 0 ? void 0 : positionals.nth(0);\n if (!varName) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) requires a var name to get\", node.loc));\n }\n if (positionals && positionals.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) only receives one positional arg\", node.loc));\n }\n return Ok(varName);\n }\n function translateGetDynamicVarKeyword(_ref10, name) {\n var {\n node,\n state\n } = _ref10;\n return VISIT_EXPRS.visit(name, state).mapOk(name => new GetDynamicVar({\n name,\n loc: node.loc\n }));\n }\n var getDynamicVarKeyword = {\n assert: assertGetDynamicVarKeyword,\n translate: translateGetDynamicVarKeyword\n };\n function assertHasBlockKeyword(type) {\n return node => {\n var call = node.type === 'AppendContent' ? node.value : node;\n var named = call.type === 'Call' ? call.args.named : null;\n var positionals = call.type === 'Call' ? call.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") does not take any named arguments\", call.loc));\n }\n if (!positionals || positionals.isEmpty()) {\n return Ok(_syntax.SourceSlice.synthetic('default'));\n } else if (positionals.exprs.length === 1) {\n var positional = positionals.exprs[0];\n if (_syntax.ASTv2.isLiteral(positional, 'string')) {\n return Ok(positional.toSlice());\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") can only receive a string literal as its first argument\", call.loc));\n }\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") only takes a single positional argument\", call.loc));\n }\n };\n }\n function translateHasBlockKeyword(type) {\n return (_ref11, target) => {\n var {\n node,\n state: {\n scope\n }\n } = _ref11;\n var block = type === 'has-block' ? new HasBlock({\n loc: node.loc,\n target,\n symbol: scope.allocateBlock(target.chars)\n }) : new HasBlockParams({\n loc: node.loc,\n target,\n symbol: scope.allocateBlock(target.chars)\n });\n return Ok(block);\n };\n }\n function hasBlockKeyword(type) {\n return {\n assert: assertHasBlockKeyword(type),\n translate: translateHasBlockKeyword(type)\n };\n }\n function assertIfUnlessInlineKeyword(type) {\n return originalNode => {\n var _a;\n var inverted = type === 'unless';\n var node = originalNode.type === 'AppendContent' ? originalNode.value : originalNode;\n var named = node.type === 'Call' ? node.args.named : null;\n var positional = node.type === 'Call' ? node.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") cannot receive named parameters, received \" + named.entries.map(e => e.name.chars).join(', '), originalNode.loc));\n }\n var condition = positional === null || positional === void 0 ? void 0 : positional.nth(0);\n if (!positional || !condition) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") requires at least two parameters 1. the condition that determines the state of the (\" + type + \"), and 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \". Did not receive any parameters\", originalNode.loc));\n }\n var truthy = positional.nth(1);\n var falsy = positional.nth(2);\n if (truthy === null) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") requires at least two parameters 1. the condition that determines the state of the (\" + type + \"), and 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \". Received only one parameter, the condition\", originalNode.loc));\n }\n if (positional.size > 3) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") can receive a maximum of three positional parameters 1. the condition that determines the state of the (\" + type + \"), 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \", and 3. the value to return if the condition is \" + (inverted ? 'true' : 'false') + \". Received \" + ((_a = positional === null || positional === void 0 ? void 0 : positional.size) !== null && _a !== void 0 ? _a : 0) + \" parameters\", originalNode.loc));\n }\n return Ok({\n condition,\n truthy,\n falsy\n });\n };\n }\n function translateIfUnlessInlineKeyword(type) {\n var inverted = type === 'unless';\n return (_ref12, _ref13) => {\n var {\n node,\n state\n } = _ref12;\n var {\n condition,\n truthy,\n falsy\n } = _ref13;\n var conditionResult = VISIT_EXPRS.visit(condition, state);\n var truthyResult = VISIT_EXPRS.visit(truthy, state);\n var falsyResult = falsy ? VISIT_EXPRS.visit(falsy, state) : Ok(null);\n return Result.all(conditionResult, truthyResult, falsyResult).mapOk(_ref14 => {\n var [condition, truthy, falsy] = _ref14;\n if (inverted) {\n condition = new Not({\n value: condition,\n loc: node.loc\n });\n }\n return new IfInline({\n loc: node.loc,\n condition,\n truthy,\n falsy\n });\n });\n };\n }\n function ifUnlessInlineKeyword(type) {\n return {\n assert: assertIfUnlessInlineKeyword(type),\n translate: translateIfUnlessInlineKeyword(type)\n };\n }\n function assertLogKeyword(node) {\n var {\n args: {\n named,\n positional\n }\n } = node;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(log) does not take any named arguments\", node.loc));\n }\n return Ok(positional);\n }\n function translateLogKeyword(_ref15, positional) {\n var {\n node,\n state\n } = _ref15;\n return VISIT_EXPRS.Positional(positional, state).mapOk(positional => new Log({\n positional,\n loc: node.loc\n }));\n }\n var logKeyword = {\n assert: assertLogKeyword,\n translate: translateLogKeyword\n };\n var CALL_KEYWORDS = keywords('Call').kw('has-block', hasBlockKeyword('has-block')).kw('has-block-params', hasBlockKeyword('has-block-params')).kw('-get-dynamic-var', getDynamicVarKeyword).kw('log', logKeyword).kw('if', ifUnlessInlineKeyword('if')).kw('unless', ifUnlessInlineKeyword('unless')).kw('component', curryKeyword(0\n /* Component */)).kw('helper', curryKeyword(1\n /* Helper */)).kw('modifier', curryKeyword(2\n /* Modifier */));\n\n function toAppend(_ref16) {\n var {\n assert,\n translate\n } = _ref16;\n return {\n assert,\n translate(_ref17, value) {\n var {\n node,\n state\n } = _ref17;\n var result = translate({\n node,\n state\n }, value);\n return result.mapOk(text => new AppendTextNode({\n text,\n loc: node.loc\n }));\n }\n };\n }\n var APPEND_KEYWORDS = keywords('Append').kw('has-block', toAppend(hasBlockKeyword('has-block'))).kw('has-block-params', toAppend(hasBlockKeyword('has-block-params'))).kw('-get-dynamic-var', toAppend(getDynamicVarKeyword)).kw('log', toAppend(logKeyword)).kw('if', toAppend(ifUnlessInlineKeyword('if'))).kw('unless', toAppend(ifUnlessInlineKeyword('unless'))).kw('yield', {\n assert(node) {\n var {\n args\n } = node;\n if (args.named.isEmpty()) {\n return Ok({\n target: _syntax.SourceSpan.synthetic('default').toSlice(),\n positional: args.positional\n });\n } else {\n var target = args.named.get('to');\n if (args.named.size > 1 || target === null) {\n return Err((0, _syntax.generateSyntaxError)(\"yield only takes a single named argument: 'to'\", args.named.loc));\n }\n if (_syntax.ASTv2.isLiteral(target, 'string')) {\n return Ok({\n target: target.toSlice(),\n positional: args.positional\n });\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"you can only yield to a literal string value\", target.loc));\n }\n }\n },\n translate(_ref18, _ref19) {\n var {\n node,\n state\n } = _ref18;\n var {\n target,\n positional\n } = _ref19;\n return VISIT_EXPRS.Positional(positional, state).mapOk(positional => new Yield({\n loc: node.loc,\n target,\n to: state.scope.allocateBlock(target.chars),\n positional\n }));\n }\n }).kw('debugger', {\n assert(node) {\n var {\n args\n } = node;\n var {\n positional\n } = args;\n if (args.isEmpty()) {\n return Ok(undefined);\n } else {\n if (positional.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"debugger does not take any named arguments\", node.loc));\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"debugger does not take any positional arguments\", node.loc));\n }\n }\n },\n translate(_ref20) {\n var {\n node,\n state: {\n scope\n }\n } = _ref20;\n scope.setHasEval();\n return Ok(new Debugger({\n loc: node.loc,\n scope\n }));\n }\n }).kw('component', {\n assert: assertCurryKeyword(0\n /* Component */),\n\n translate(_ref21, _ref22) {\n var {\n node,\n state\n } = _ref21;\n var {\n definition,\n args\n } = _ref22;\n var definitionResult = VISIT_EXPRS.visit(definition, state);\n var argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref23 => {\n var [definition, args] = _ref23;\n return new InvokeComponent({\n loc: node.loc,\n definition,\n args,\n blocks: null\n });\n });\n }\n }).kw('helper', {\n assert: assertCurryKeyword(1\n /* Helper */),\n\n translate(_ref24, _ref25) {\n var {\n node,\n state\n } = _ref24;\n var {\n definition,\n args\n } = _ref25;\n var definitionResult = VISIT_EXPRS.visit(definition, state);\n var argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref26 => {\n var [definition, args] = _ref26;\n var text = new CallExpression({\n callee: definition,\n args,\n loc: node.loc\n });\n return new AppendTextNode({\n loc: node.loc,\n text\n });\n });\n }\n });\n var BLOCK_KEYWORDS = keywords('Block').kw('in-element', {\n assert(node) {\n var {\n args\n } = node;\n var guid = args.get('guid');\n if (guid) {\n return Err((0, _syntax.generateSyntaxError)(\"Cannot pass `guid` to `{{#in-element}}`\", guid.loc));\n }\n var insertBefore = args.get('insertBefore');\n var destination = args.nth(0);\n if (destination === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#in-element}} requires a target element as its first positional parameter\", args.loc));\n } // TODO Better syntax checks\n\n return Ok({\n insertBefore,\n destination\n });\n },\n translate(_ref27, _ref28) {\n var {\n node,\n state\n } = _ref27;\n var {\n insertBefore,\n destination\n } = _ref28;\n var named = node.blocks.get('default');\n var body = VISIT_STMTS.NamedBlock(named, state);\n var destinationResult = VISIT_EXPRS.visit(destination, state);\n return Result.all(body, destinationResult).andThen(_ref29 => {\n var [body, destination] = _ref29;\n if (insertBefore) {\n return VISIT_EXPRS.visit(insertBefore, state).mapOk(insertBefore => ({\n body,\n destination,\n insertBefore\n }));\n } else {\n return Ok({\n body,\n destination,\n insertBefore: new Missing({\n loc: node.callee.loc.collapse('end')\n })\n });\n }\n }).mapOk(_ref30 => {\n var {\n body,\n destination,\n insertBefore\n } = _ref30;\n return new InElement({\n loc: node.loc,\n block: body,\n insertBefore,\n guid: state.generateUniqueCursor(),\n destination\n });\n });\n }\n }).kw('if', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), node.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} can only receive one positional parameter in block form, the conditional value. Received \" + args.positional.size + \" parameters\", node.loc));\n }\n var condition = args.nth(0);\n if (condition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} requires a condition as its first positional parameter, did not receive any parameters\", node.loc));\n }\n return Ok({\n condition\n });\n },\n translate(_ref31, _ref32) {\n var {\n node,\n state\n } = _ref31;\n var {\n condition\n } = _ref32;\n var block = node.blocks.get('default');\n var inverse = node.blocks.get('else');\n var conditionResult = VISIT_EXPRS.visit(condition, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n var inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(conditionResult, blockResult, inverseResult).mapOk(_ref33 => {\n var [condition, block, inverse] = _ref33;\n return new If({\n loc: node.loc,\n condition,\n block,\n inverse\n });\n });\n }\n }).kw('unless', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), node.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} can only receive one positional parameter in block form, the conditional value. Received \" + args.positional.size + \" parameters\", node.loc));\n }\n var condition = args.nth(0);\n if (condition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} requires a condition as its first positional parameter, did not receive any parameters\", node.loc));\n }\n return Ok({\n condition\n });\n },\n translate(_ref34, _ref35) {\n var {\n node,\n state\n } = _ref34;\n var {\n condition\n } = _ref35;\n var block = node.blocks.get('default');\n var inverse = node.blocks.get('else');\n var conditionResult = VISIT_EXPRS.visit(condition, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n var inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(conditionResult, blockResult, inverseResult).mapOk(_ref36 => {\n var [condition, block, inverse] = _ref36;\n return new If({\n loc: node.loc,\n condition: new Not({\n value: condition,\n loc: node.loc\n }),\n block,\n inverse\n });\n });\n }\n }).kw('each', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.entries.every(e => e.name.chars === 'key')) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} can only receive the 'key' named parameter, received \" + args.named.entries.filter(e => e.name.chars !== 'key').map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} can only receive one positional parameter, the collection being iterated. Received \" + args.positional.size + \" parameters\", args.positional.loc));\n }\n var value = args.nth(0);\n var key = args.get('key');\n if (value === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} requires an iterable value to be passed as its first positional parameter, did not receive any parameters\", args.loc));\n }\n return Ok({\n value,\n key\n });\n },\n translate(_ref37, _ref38) {\n var {\n node,\n state\n } = _ref37;\n var {\n value,\n key\n } = _ref38;\n var block = node.blocks.get('default');\n var inverse = node.blocks.get('else');\n var valueResult = VISIT_EXPRS.visit(value, state);\n var keyResult = key ? VISIT_EXPRS.visit(key, state) : Ok(null);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n var inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(valueResult, keyResult, blockResult, inverseResult).mapOk(_ref39 => {\n var [value, key, block, inverse] = _ref39;\n return new Each({\n loc: node.loc,\n value,\n key,\n block,\n inverse\n });\n });\n }\n }).kw('with', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} can only receive one positional parameter. Received \" + args.positional.size + \" parameters\", args.positional.loc));\n }\n var value = args.nth(0);\n if (value === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} requires a value as its first positional parameter, did not receive any parameters\", args.loc));\n }\n return Ok({\n value\n });\n },\n translate(_ref40, _ref41) {\n var {\n node,\n state\n } = _ref40;\n var {\n value\n } = _ref41;\n var block = node.blocks.get('default');\n var inverse = node.blocks.get('else');\n var valueResult = VISIT_EXPRS.visit(value, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n var inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(valueResult, blockResult, inverseResult).mapOk(_ref42 => {\n var [value, block, inverse] = _ref42;\n return new With({\n loc: node.loc,\n value,\n block,\n inverse\n });\n });\n }\n }).kw('let', {\n assert(node) {\n var {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size === 0) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} requires at least one value as its first positional parameter, did not receive any parameters\", args.positional.loc));\n }\n if (node.blocks.get('else')) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} cannot receive an {{else}} block\", args.positional.loc));\n }\n return Ok({\n positional: args.positional\n });\n },\n translate(_ref43, _ref44) {\n var {\n node,\n state\n } = _ref43;\n var {\n positional\n } = _ref44;\n var block = node.blocks.get('default');\n var positionalResult = VISIT_EXPRS.Positional(positional, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n return Result.all(positionalResult, blockResult).mapOk(_ref45 => {\n var [positional, block] = _ref45;\n return new Let({\n loc: node.loc,\n positional,\n block\n });\n });\n }\n }).kw('-with-dynamic-vars', {\n assert(node) {\n return Ok({\n named: node.args.named\n });\n },\n translate(_ref46, _ref47) {\n var {\n node,\n state\n } = _ref46;\n var {\n named\n } = _ref47;\n var block = node.blocks.get('default');\n var namedResult = VISIT_EXPRS.NamedArguments(named, state);\n var blockResult = VISIT_STMTS.NamedBlock(block, state);\n return Result.all(namedResult, blockResult).mapOk(_ref48 => {\n var [named, block] = _ref48;\n return new WithDynamicVars({\n loc: node.loc,\n named,\n block\n });\n });\n }\n }).kw('component', {\n assert: assertCurryKeyword(0\n /* Component */),\n\n translate(_ref49, _ref50) {\n var {\n node,\n state\n } = _ref49;\n var {\n definition,\n args\n } = _ref50;\n var definitionResult = VISIT_EXPRS.visit(definition, state);\n var argsResult = VISIT_EXPRS.Args(args, state);\n var blocksResult = VISIT_STMTS.NamedBlocks(node.blocks, state);\n return Result.all(definitionResult, argsResult, blocksResult).mapOk(_ref51 => {\n var [definition, args, blocks] = _ref51;\n return new InvokeComponent({\n loc: node.loc,\n definition,\n args,\n blocks\n });\n });\n }\n });\n var MODIFIER_KEYWORDS = keywords('Modifier');\n\n // There is a small whitelist of namespaced attributes specially\n // enumerated in\n // https://www.w3.org/TR/html/syntax.html#attributes-0\n //\n // > When a foreign element has one of the namespaced attributes given by\n // > the local name and namespace of the first and second cells of a row\n // > from the following table, it must be written using the name given by\n // > the third cell from the same row.\n //\n // In all other cases, colons are interpreted as a regular character\n // with no special meaning:\n //\n // > No other namespaced attribute can be expressed in the HTML syntax.\n var XLINK = 'http://www.w3.org/1999/xlink';\n var XML = 'http://www.w3.org/XML/1998/namespace';\n var XMLNS = 'http://www.w3.org/2000/xmlns/';\n var WHITELIST = {\n 'xlink:actuate': XLINK,\n 'xlink:arcrole': XLINK,\n 'xlink:href': XLINK,\n 'xlink:role': XLINK,\n 'xlink:show': XLINK,\n 'xlink:title': XLINK,\n 'xlink:type': XLINK,\n 'xml:base': XML,\n 'xml:lang': XML,\n 'xml:space': XML,\n xmlns: XMLNS,\n 'xmlns:xlink': XMLNS\n };\n function getAttrNamespace(attrName) {\n return WHITELIST[attrName];\n }\n var DEFLATE_TAG_TABLE = {\n div: 0\n /* div */,\n\n span: 1\n /* span */,\n\n p: 2\n /* p */,\n\n a: 3\n /* a */\n };\n\n var INFLATE_TAG_TABLE = ['div', 'span', 'p', 'a'];\n function deflateTagName(tagName) {\n var _a;\n return (_a = DEFLATE_TAG_TABLE[tagName]) !== null && _a !== void 0 ? _a : tagName;\n }\n function inflateTagName(tagName) {\n return typeof tagName === 'string' ? tagName : INFLATE_TAG_TABLE[tagName];\n }\n var DEFLATE_ATTR_TABLE = {\n class: 0\n /* class */,\n\n id: 1\n /* id */,\n\n value: 2\n /* value */,\n\n name: 3\n /* name */,\n\n type: 4\n /* type */,\n\n style: 5\n /* style */,\n\n href: 6\n /* href */\n };\n\n var INFLATE_ATTR_TABLE = ['class', 'id', 'value', 'name', 'type', 'style', 'href'];\n function deflateAttrName(attrName) {\n var _a;\n return (_a = DEFLATE_ATTR_TABLE[attrName]) !== null && _a !== void 0 ? _a : attrName;\n }\n function inflateAttrName(attrName) {\n return typeof attrName === 'string' ? attrName : INFLATE_ATTR_TABLE[attrName];\n }\n class ClassifiedElement {\n constructor(element, delegate, state) {\n this.element = element;\n this.state = state;\n this.delegate = delegate;\n }\n toStatement() {\n return this.prepare().andThen(prepared => this.delegate.toStatement(this, prepared));\n }\n attr(attr) {\n var name = attr.name;\n var rawValue = attr.value;\n var namespace = getAttrNamespace(name.chars) || undefined;\n if (_syntax.ASTv2.isLiteral(rawValue, 'string')) {\n return Ok(new StaticAttr({\n loc: attr.loc,\n name,\n value: rawValue.toSlice(),\n namespace,\n kind: {\n component: this.delegate.dynamicFeatures\n }\n }));\n }\n return VISIT_EXPRS.visit(convertPathToCallIfKeyword(rawValue), this.state).mapOk(value => {\n var isTrusting = attr.trusting;\n return new DynamicAttr({\n loc: attr.loc,\n name,\n value: value,\n namespace,\n kind: {\n trusting: isTrusting,\n component: this.delegate.dynamicFeatures\n }\n });\n });\n }\n modifier(modifier) {\n if (isHelperInvocation(modifier)) {\n assertIsValidModifier(modifier);\n }\n var translated = MODIFIER_KEYWORDS.translate(modifier, this.state);\n if (translated !== null) {\n return translated;\n }\n var head = VISIT_EXPRS.visit(modifier.callee, this.state);\n var args = VISIT_EXPRS.Args(modifier.args, this.state);\n return Result.all(head, args).mapOk(_ref52 => {\n var [head, args] = _ref52;\n return new Modifier({\n loc: modifier.loc,\n callee: head,\n args\n });\n });\n }\n attrs() {\n var attrs = new ResultArray();\n var args = new ResultArray(); // Unlike most attributes, the `type` attribute can change how\n // subsequent attributes are interpreted by the browser. To address\n // this, in simple cases, we special case the `type` attribute to be set\n // last. For elements with splattributes, where attribute order affects\n // precedence, this re-ordering happens at runtime instead.\n // See https://github.com/glimmerjs/glimmer-vm/pull/726\n\n var typeAttr = null;\n var simple = this.element.attrs.filter(attr => attr.type === 'SplatAttr').length === 0;\n for (var attr of this.element.attrs) {\n if (attr.type === 'SplatAttr') {\n attrs.add(Ok(new SplatAttr({\n loc: attr.loc,\n symbol: this.state.scope.allocateBlock('attrs')\n })));\n } else if (attr.name.chars === 'type' && simple) {\n typeAttr = attr;\n } else {\n attrs.add(this.attr(attr));\n }\n }\n for (var arg of this.element.componentArgs) {\n args.add(this.delegate.arg(arg, this));\n }\n if (typeAttr) {\n attrs.add(this.attr(typeAttr));\n }\n return Result.all(args.toArray(), attrs.toArray()).mapOk(_ref53 => {\n var [args, attrs] = _ref53;\n return {\n attrs,\n args: new NamedArguments({\n loc: (0, _syntax.maybeLoc)(args, _syntax.SourceSpan.NON_EXISTENT),\n entries: OptionalList(args)\n })\n };\n });\n }\n prepare() {\n var attrs = this.attrs();\n var modifiers = new ResultArray(this.element.modifiers.map(m => this.modifier(m))).toArray();\n return Result.all(attrs, modifiers).mapOk(_ref54 => {\n var [result, modifiers] = _ref54;\n var {\n attrs,\n args\n } = result;\n var elementParams = [...attrs, ...modifiers];\n var params = new ElementParameters({\n loc: (0, _syntax.maybeLoc)(elementParams, _syntax.SourceSpan.NON_EXISTENT),\n body: OptionalList(elementParams)\n });\n return {\n args,\n params\n };\n });\n }\n }\n function hasDynamicFeatures(_ref55) {\n var {\n attrs,\n modifiers\n } = _ref55;\n // ElementModifier needs the special ComponentOperations\n if (modifiers.length > 0) {\n return true;\n } // Splattributes need the special ComponentOperations to merge into\n\n return !!attrs.filter(attr => attr.type === 'SplatAttr')[0];\n }\n class ClassifiedComponent {\n constructor(tag, element) {\n this.tag = tag;\n this.element = element;\n this.dynamicFeatures = true;\n }\n arg(attr, _ref56) {\n var {\n state\n } = _ref56;\n var name = attr.name;\n return VISIT_EXPRS.visit(convertPathToCallIfKeyword(attr.value), state).mapOk(value => new NamedArgument({\n loc: attr.loc,\n key: name,\n value\n }));\n }\n toStatement(component, _ref57) {\n var {\n args,\n params\n } = _ref57;\n var {\n element,\n state\n } = component;\n return this.blocks(state).mapOk(blocks => new Component({\n loc: element.loc,\n tag: this.tag,\n params,\n args,\n blocks\n }));\n }\n blocks(state) {\n return VISIT_STMTS.NamedBlocks(this.element.blocks, state);\n }\n }\n class ClassifiedSimpleElement {\n constructor(tag, element, dynamicFeatures) {\n this.tag = tag;\n this.element = element;\n this.dynamicFeatures = dynamicFeatures;\n this.isComponent = false;\n }\n arg(attr) {\n return Err((0, _syntax.generateSyntaxError)(attr.name.chars + \" is not a valid attribute name. @arguments are only allowed on components, but the tag for this element (`\" + this.tag.chars + \"`) is a regular, non-component HTML element.\", attr.loc));\n }\n toStatement(classified, _ref58) {\n var {\n params\n } = _ref58;\n var {\n state,\n element\n } = classified;\n var body = VISIT_STMTS.visitList(this.element.body, state);\n return body.mapOk(body => new SimpleElement({\n loc: element.loc,\n tag: this.tag,\n params,\n body: body.toArray(),\n dynamicFeatures: this.dynamicFeatures\n }));\n }\n }\n class NormalizationStatements {\n visitList(nodes, state) {\n return new ResultArray(nodes.map(e => VISIT_STMTS.visit(e, state))).toOptionalList().mapOk(list => list.filter(s => s !== null));\n }\n visit(node, state) {\n switch (node.type) {\n case 'GlimmerComment':\n return Ok(null);\n case 'AppendContent':\n return this.AppendContent(node, state);\n case 'HtmlText':\n return Ok(this.TextNode(node));\n case 'HtmlComment':\n return Ok(this.HtmlComment(node));\n case 'InvokeBlock':\n return this.InvokeBlock(node, state);\n case 'InvokeComponent':\n return this.Component(node, state);\n case 'SimpleElement':\n return this.SimpleElement(node, state);\n }\n }\n InvokeBlock(node, state) {\n var translated = BLOCK_KEYWORDS.translate(node, state);\n if (translated !== null) {\n return translated;\n }\n var head = VISIT_EXPRS.visit(node.callee, state);\n var args = VISIT_EXPRS.Args(node.args, state);\n return Result.all(head, args).andThen(_ref59 => {\n var [head, args] = _ref59;\n return this.NamedBlocks(node.blocks, state).mapOk(blocks => new InvokeBlock({\n loc: node.loc,\n head,\n args,\n blocks\n }));\n });\n }\n NamedBlocks(blocks, state) {\n var list = new ResultArray(blocks.blocks.map(b => this.NamedBlock(b, state)));\n return list.toArray().mapOk(list => new NamedBlocks({\n loc: blocks.loc,\n blocks: OptionalList(list)\n }));\n }\n NamedBlock(named, state) {\n var body = state.visitBlock(named.block);\n return body.mapOk(body => {\n return new NamedBlock({\n loc: named.loc,\n name: named.name,\n body: body.toArray(),\n scope: named.block.scope\n });\n });\n }\n SimpleElement(element, state) {\n return new ClassifiedElement(element, new ClassifiedSimpleElement(element.tag, element, hasDynamicFeatures(element)), state).toStatement();\n }\n Component(component, state) {\n return VISIT_EXPRS.visit(component.callee, state).andThen(callee => new ClassifiedElement(component, new ClassifiedComponent(callee, component), state).toStatement());\n }\n AppendContent(append, state) {\n var translated = APPEND_KEYWORDS.translate(append, state);\n if (translated !== null) {\n return translated;\n }\n var value = VISIT_EXPRS.visit(append.value, state);\n return value.mapOk(value => {\n if (append.trusting) {\n return new AppendTrustedHTML({\n loc: append.loc,\n html: value\n });\n } else {\n return new AppendTextNode({\n loc: append.loc,\n text: value\n });\n }\n });\n }\n TextNode(text) {\n return new AppendTextNode({\n loc: text.loc,\n text: new _syntax.ASTv2.LiteralExpression({\n loc: text.loc,\n value: text.chars\n })\n });\n }\n HtmlComment(comment) {\n return new AppendComment({\n loc: comment.loc,\n value: comment.text\n });\n }\n }\n var VISIT_STMTS = new NormalizationStatements();\n\n /**\n * This is the mutable state for this compiler pass.\n */\n\n class NormalizationState {\n constructor(block, isStrict) {\n this.isStrict = isStrict;\n this._cursorCount = 0;\n this._currentScope = block;\n }\n generateUniqueCursor() {\n return \"%cursor:\" + this._cursorCount++ + \"%\";\n }\n get scope() {\n return this._currentScope;\n }\n visitBlock(block) {\n var oldBlock = this._currentScope;\n this._currentScope = block.scope;\n try {\n return VISIT_STMTS.visitList(block.body, this);\n } finally {\n this._currentScope = oldBlock;\n }\n }\n }\n\n /**\n * Normalize the AST from @glimmer/syntax into the HIR. The HIR has special\n * instructions for keywords like `{{yield}}`, `(has-block)` and\n * `{{#in-element}}`.\n *\n * Most importantly, it also classifies HTML element syntax into:\n *\n * 1. simple HTML element (with optional splattributes)\n * 2. component invocation\n *\n * Because the @glimmer/syntax AST gives us a string for an element's tag,\n * this pass also normalizes that string into an expression.\n *\n * ```\n * // normalized into a path expression whose head is `this` and tail is\n * // `[\"x\"]`\n * <this.x />\n *\n * {{#let expr as |t|}}\n * // `\"t\"` is normalized into a variable lookup.\n * <t />\n *\n * // normalized into a path expression whose head is the variable lookup\n * // `t` and tail is `[\"input\"]`.\n * <t.input />\n * {{/let}}\n *\n * // normalized into a free variable lookup for `SomeComponent` (with the\n * // context `ComponentHead`).\n * <SomeComponent />\n *\n * // normalized into a path expression whose head is the free variable\n * // `notInScope` (with the context `Expression`), and whose tail is\n * // `[\"SomeComponent\"]`. In resolver mode, this path will be rejected later,\n * // since it cannot serve as an input to the resolver.\n * <notInScope.SomeComponent />\n * ```\n */\n\n function normalize(source, root, isStrict) {\n // create a new context for the normalization pass\n var state = new NormalizationState(root.table, isStrict);\n var body = VISIT_STMTS.visitList(root.body, state);\n return body.mapOk(body => new Template({\n loc: root.loc,\n scope: root.table,\n body: body.toArray()\n }));\n }\n class WireFormatDebugger {\n constructor(_ref60) {\n var [_statements, symbols, _hasEval, upvars] = _ref60;\n this.upvars = upvars;\n this.symbols = symbols;\n }\n format(program) {\n var out = [];\n for (var statement of program[0]) {\n out.push(this.formatOpcode(statement));\n }\n return out;\n }\n formatOpcode(opcode) {\n if (Array.isArray(opcode)) {\n switch (opcode[0]) {\n case 1\n /* Append */:\n return ['append', this.formatOpcode(opcode[1])];\n case 2\n /* TrustingAppend */:\n return ['trusting-append', this.formatOpcode(opcode[1])];\n case 6\n /* Block */:\n return ['block', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n case 40\n /* InElement */:\n return ['in-element', opcode[1], this.formatOpcode(opcode[2]), opcode[3] ? this.formatOpcode(opcode[3]) : undefined];\n case 10\n /* OpenElement */:\n return ['open-element', inflateTagName(opcode[1])];\n case 11\n /* OpenElementWithSplat */:\n return ['open-element-with-splat', inflateTagName(opcode[1])];\n case 13\n /* CloseElement */:\n return ['close-element'];\n case 12\n /* FlushElement */:\n return ['flush-element'];\n case 14\n /* StaticAttr */:\n return ['static-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];\n case 24\n /* StaticComponentAttr */:\n return ['static-component-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];\n case 15\n /* DynamicAttr */:\n return ['dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case 16\n /* ComponentAttr */:\n return ['component-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case 17\n /* AttrSplat */:\n return ['attr-splat'];\n case 18\n /* Yield */:\n return ['yield', opcode[1], this.formatParams(opcode[2])];\n case 20\n /* DynamicArg */:\n return ['dynamic-arg', opcode[1], this.formatOpcode(opcode[2])];\n case 21\n /* StaticArg */:\n return ['static-arg', opcode[1], this.formatOpcode(opcode[2])];\n case 22\n /* TrustingDynamicAttr */:\n return ['trusting-dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case 23\n /* TrustingComponentAttr */:\n return ['trusting-component-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case 26\n /* Debugger */:\n return ['debugger', opcode[1]];\n case 3\n /* Comment */:\n return ['comment', opcode[1]];\n case 4\n /* Modifier */:\n return ['modifier', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];\n case 8\n /* Component */:\n return ['component', this.formatOpcode(opcode[1]), this.formatElementParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n case 48\n /* HasBlock */:\n return ['has-block', this.formatOpcode(opcode[1])];\n case 49\n /* HasBlockParams */:\n return ['has-block-params', this.formatOpcode(opcode[1])];\n case 50\n /* Curry */:\n return ['curry', this.formatOpcode(opcode[1]), this.formatCurryType(opcode[2]), this.formatParams(opcode[3]), this.formatHash(opcode[4])];\n case 27\n /* Undefined */:\n return ['undefined'];\n case 28\n /* Call */:\n return ['call', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];\n case 29\n /* Concat */:\n return ['concat', this.formatParams(opcode[1])];\n case 31\n /* GetStrictFree */:\n return ['get-strict-free', this.upvars[opcode[1]], opcode[2]];\n case 34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */:\n return ['GetFreeAsComponentOrHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];\n case 35\n /* GetFreeAsComponentOrHelperHead */:\n return ['GetFreeAsComponentOrHelperHead', this.upvars[opcode[1]], opcode[2]];\n case 36\n /* GetFreeAsHelperHeadOrThisFallback */:\n return ['GetFreeAsHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];\n case 99\n /* GetFreeAsDeprecatedHelperHeadOrThisFallback */:\n return ['GetFreeAsDeprecatedHelperHeadOrThisFallback', this.upvars[opcode[1]]];\n case 37\n /* GetFreeAsHelperHead */:\n return ['GetFreeAsHelperHead', this.upvars[opcode[1]], opcode[2]];\n case 39\n /* GetFreeAsComponentHead */:\n return ['GetFreeAsComponentHead', this.upvars[opcode[1]], opcode[2]];\n case 38\n /* GetFreeAsModifierHead */:\n return ['GetFreeAsModifierHead', this.upvars[opcode[1]], opcode[2]];\n case 30\n /* GetSymbol */:\n {\n if (opcode[1] === 0) {\n return ['get-symbol', 'this', opcode[2]];\n } else {\n return ['get-symbol', this.symbols[opcode[1] - 1], opcode[2]];\n }\n }\n case 32\n /* GetTemplateSymbol */:\n {\n return ['get-template-symbol', opcode[1], opcode[2]];\n }\n case 41\n /* If */:\n return ['if', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];\n case 52\n /* IfInline */:\n return ['if-inline'];\n case 51\n /* Not */:\n return ['not'];\n case 42\n /* Each */:\n return ['each', this.formatOpcode(opcode[1]), opcode[2] ? this.formatOpcode(opcode[2]) : null, this.formatBlock(opcode[3]), opcode[4] ? this.formatBlock(opcode[4]) : null];\n case 43\n /* With */:\n return ['with', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];\n case 44\n /* Let */:\n return ['let', this.formatParams(opcode[1]), this.formatBlock(opcode[2])];\n case 54\n /* Log */:\n return ['log', this.formatParams(opcode[1])];\n case 45\n /* WithDynamicVars */:\n return ['-with-dynamic-vars', this.formatHash(opcode[1]), this.formatBlock(opcode[2])];\n case 53\n /* GetDynamicVar */:\n return ['-get-dynamic-vars', this.formatOpcode(opcode[1])];\n case 46\n /* InvokeComponent */:\n return ['component', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n }\n } else {\n return opcode;\n }\n }\n formatCurryType(value) {\n switch (value) {\n case 0\n /* Component */:\n return 'component';\n case 1\n /* Helper */:\n return 'helper';\n case 2\n /* Modifier */:\n return 'modifier';\n default:\n throw (0, _util.exhausted)(value);\n }\n }\n formatElementParams(opcodes) {\n if (opcodes === null) return null;\n return opcodes.map(o => this.formatOpcode(o));\n }\n formatParams(opcodes) {\n if (opcodes === null) return null;\n return opcodes.map(o => this.formatOpcode(o));\n }\n formatHash(hash) {\n if (hash === null) return null;\n return hash[0].reduce((accum, key, index) => {\n accum[key] = this.formatOpcode(hash[1][index]);\n return accum;\n }, (0, _util.dict)());\n }\n formatBlocks(blocks) {\n if (blocks === null) return null;\n return blocks[0].reduce((accum, key, index) => {\n accum[key] = this.formatBlock(blocks[1][index]);\n return accum;\n }, (0, _util.dict)());\n }\n formatBlock(block) {\n return {\n statements: block[0].map(s => this.formatOpcode(s)),\n parameters: block[1]\n };\n }\n }\n _exports.WireFormatDebugger = WireFormatDebugger;\n class ExpressionEncoder {\n expr(expr) {\n switch (expr.type) {\n case 'Missing':\n return undefined;\n case 'Literal':\n return this.Literal(expr);\n case 'CallExpression':\n return this.CallExpression(expr);\n case 'DeprecatedCallExpression':\n return this.DeprecatedCallExpression(expr);\n case 'PathExpression':\n return this.PathExpression(expr);\n case 'Arg':\n return [30\n /* GetSymbol */, expr.symbol];\n case 'Local':\n return this.Local(expr);\n case 'This':\n return [30\n /* GetSymbol */, 0];\n case 'Free':\n return [expr.resolution.resolution(), expr.symbol];\n case 'HasBlock':\n return this.HasBlock(expr);\n case 'HasBlockParams':\n return this.HasBlockParams(expr);\n case 'Curry':\n return this.Curry(expr);\n case 'Not':\n return this.Not(expr);\n case 'IfInline':\n return this.IfInline(expr);\n case 'InterpolateExpression':\n return this.InterpolateExpression(expr);\n case 'GetDynamicVar':\n return this.GetDynamicVar(expr);\n case 'Log':\n return this.Log(expr);\n }\n }\n Literal(_ref61) {\n var {\n value\n } = _ref61;\n if (value === undefined) {\n return [27\n /* Undefined */];\n } else {\n return value;\n }\n }\n Missing() {\n return undefined;\n }\n HasBlock(_ref62) {\n var {\n symbol\n } = _ref62;\n return [48\n /* HasBlock */, [30\n /* GetSymbol */, symbol]];\n }\n HasBlockParams(_ref63) {\n var {\n symbol\n } = _ref63;\n return [49\n /* HasBlockParams */, [30\n /* GetSymbol */, symbol]];\n }\n Curry(_ref64) {\n var {\n definition,\n curriedType,\n args\n } = _ref64;\n return [50\n /* Curry */, EXPR.expr(definition), curriedType, EXPR.Positional(args.positional), EXPR.NamedArguments(args.named)];\n }\n Local(_ref65) {\n var {\n isTemplateLocal,\n symbol\n } = _ref65;\n return [isTemplateLocal ? 32\n /* GetTemplateSymbol */ : 30\n /* GetSymbol */, symbol];\n }\n GetWithResolver(_ref66) {\n var {\n symbol\n } = _ref66;\n return [34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */, symbol];\n }\n PathExpression(_ref67) {\n var {\n head,\n tail\n } = _ref67;\n var getOp = EXPR.expr(head);\n return [...getOp, EXPR.Tail(tail)];\n }\n InterpolateExpression(_ref68) {\n var {\n parts\n } = _ref68;\n return [29\n /* Concat */, parts.map(e => EXPR.expr(e)).toArray()];\n }\n CallExpression(_ref69) {\n var {\n callee,\n args\n } = _ref69;\n return [28\n /* Call */, EXPR.expr(callee), ...EXPR.Args(args)];\n }\n DeprecatedCallExpression(_ref70) {\n var {\n arg,\n callee\n } = _ref70;\n return [99\n /* GetFreeAsDeprecatedHelperHeadOrThisFallback */, callee.symbol, [arg.chars]];\n }\n Tail(_ref71) {\n var {\n members\n } = _ref71;\n return (0, _util.mapPresent)(members, member => member.chars);\n }\n Args(_ref72) {\n var {\n positional,\n named\n } = _ref72;\n return [this.Positional(positional), this.NamedArguments(named)];\n }\n Positional(_ref73) {\n var {\n list\n } = _ref73;\n return list.map(l => EXPR.expr(l)).toPresentArray();\n }\n NamedArgument(_ref74) {\n var {\n key,\n value\n } = _ref74;\n return [key.chars, EXPR.expr(value)];\n }\n NamedArguments(_ref75) {\n var {\n entries: pairs\n } = _ref75;\n var list = pairs.toArray();\n if ((0, _util.isPresent)(list)) {\n var names = [];\n var _values = [];\n for (var pair of list) {\n var [name, value] = EXPR.NamedArgument(pair);\n names.push(name);\n _values.push(value);\n }\n (0, _util.assertPresent)(names);\n (0, _util.assertPresent)(_values);\n return [names, _values];\n } else {\n return null;\n }\n }\n Not(_ref76) {\n var {\n value\n } = _ref76;\n return [51\n /* Not */, EXPR.expr(value)];\n }\n IfInline(_ref77) {\n var {\n condition,\n truthy,\n falsy\n } = _ref77;\n var expr = [52\n /* IfInline */, EXPR.expr(condition), EXPR.expr(truthy)];\n if (falsy) {\n expr.push(EXPR.expr(falsy));\n }\n return expr;\n }\n GetDynamicVar(_ref78) {\n var {\n name\n } = _ref78;\n return [53\n /* GetDynamicVar */, EXPR.expr(name)];\n }\n Log(_ref79) {\n var {\n positional\n } = _ref79;\n return [54\n /* Log */, this.Positional(positional)];\n }\n }\n var EXPR = new ExpressionEncoder();\n class WireStatements {\n constructor(statements) {\n this.statements = statements;\n }\n toArray() {\n return this.statements;\n }\n }\n class ContentEncoder {\n list(statements) {\n var out = [];\n for (var statement of statements) {\n var result = CONTENT.content(statement);\n if (result && result instanceof WireStatements) {\n out.push(...result.toArray());\n } else {\n out.push(result);\n }\n }\n return out;\n }\n content(stmt) {\n return this.visitContent(stmt);\n }\n visitContent(stmt) {\n switch (stmt.type) {\n case 'Debugger':\n return [26\n /* Debugger */, stmt.scope.getEvalInfo()];\n case 'AppendComment':\n return this.AppendComment(stmt);\n case 'AppendTextNode':\n return this.AppendTextNode(stmt);\n case 'AppendTrustedHTML':\n return this.AppendTrustedHTML(stmt);\n case 'Yield':\n return this.Yield(stmt);\n case 'Component':\n return this.Component(stmt);\n case 'SimpleElement':\n return this.SimpleElement(stmt);\n case 'InElement':\n return this.InElement(stmt);\n case 'InvokeBlock':\n return this.InvokeBlock(stmt);\n case 'If':\n return this.If(stmt);\n case 'Each':\n return this.Each(stmt);\n case 'With':\n return this.With(stmt);\n case 'Let':\n return this.Let(stmt);\n case 'WithDynamicVars':\n return this.WithDynamicVars(stmt);\n case 'InvokeComponent':\n return this.InvokeComponent(stmt);\n default:\n return (0, _util.exhausted)(stmt);\n }\n }\n Yield(_ref80) {\n var {\n to,\n positional\n } = _ref80;\n return [18\n /* Yield */, to, EXPR.Positional(positional)];\n }\n InElement(_ref81) {\n var {\n guid,\n insertBefore,\n destination,\n block\n } = _ref81;\n var wireBlock = CONTENT.NamedBlock(block)[1]; // let guid = args.guid;\n\n var wireDestination = EXPR.expr(destination);\n var wireInsertBefore = EXPR.expr(insertBefore);\n if (wireInsertBefore === undefined) {\n return [40\n /* InElement */, wireBlock, guid, wireDestination];\n } else {\n return [40\n /* InElement */, wireBlock, guid, wireDestination, wireInsertBefore];\n }\n }\n InvokeBlock(_ref82) {\n var {\n head,\n args,\n blocks\n } = _ref82;\n return [6\n /* Block */, EXPR.expr(head), ...EXPR.Args(args), CONTENT.NamedBlocks(blocks)];\n }\n AppendTrustedHTML(_ref83) {\n var {\n html\n } = _ref83;\n return [2\n /* TrustingAppend */, EXPR.expr(html)];\n }\n AppendTextNode(_ref84) {\n var {\n text\n } = _ref84;\n return [1\n /* Append */, EXPR.expr(text)];\n }\n AppendComment(_ref85) {\n var {\n value\n } = _ref85;\n return [3\n /* Comment */, value.chars];\n }\n SimpleElement(_ref86) {\n var {\n tag,\n params,\n body,\n dynamicFeatures\n } = _ref86;\n var op = dynamicFeatures ? 11\n /* OpenElementWithSplat */ : 10\n /* OpenElement */;\n\n return new WireStatements([[op, deflateTagName(tag.chars)], ...CONTENT.ElementParameters(params).toArray(), [12\n /* FlushElement */], ...CONTENT.list(body), [13\n /* CloseElement */]]);\n }\n\n Component(_ref87) {\n var {\n tag,\n params,\n args,\n blocks\n } = _ref87;\n var wireTag = EXPR.expr(tag);\n var wirePositional = CONTENT.ElementParameters(params);\n var wireNamed = EXPR.NamedArguments(args);\n var wireNamedBlocks = CONTENT.NamedBlocks(blocks);\n return [8\n /* Component */, wireTag, wirePositional.toPresentArray(), wireNamed, wireNamedBlocks];\n }\n ElementParameters(_ref88) {\n var {\n body\n } = _ref88;\n return body.map(p => CONTENT.ElementParameter(p));\n }\n ElementParameter(param) {\n switch (param.type) {\n case 'SplatAttr':\n return [17\n /* AttrSplat */, param.symbol];\n case 'DynamicAttr':\n return [dynamicAttrOp(param.kind), ...dynamicAttr(param)];\n case 'StaticAttr':\n return [staticAttrOp(param.kind), ...staticAttr(param)];\n case 'Modifier':\n return [4\n /* Modifier */, EXPR.expr(param.callee), ...EXPR.Args(param.args)];\n }\n }\n NamedBlocks(_ref89) {\n var {\n blocks\n } = _ref89;\n var names = [];\n var serializedBlocks = [];\n for (var block of blocks.toArray()) {\n var [name, serializedBlock] = CONTENT.NamedBlock(block);\n names.push(name);\n serializedBlocks.push(serializedBlock);\n }\n return names.length > 0 ? [names, serializedBlocks] : null;\n }\n NamedBlock(_ref90) {\n var {\n name,\n body,\n scope\n } = _ref90;\n var nameChars = name.chars;\n if (nameChars === 'inverse') {\n nameChars = 'else';\n }\n return [nameChars, [CONTENT.list(body), scope.slots]];\n }\n If(_ref91) {\n var {\n condition,\n block,\n inverse\n } = _ref91;\n return [41\n /* If */, EXPR.expr(condition), CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n Each(_ref92) {\n var {\n value,\n key,\n block,\n inverse\n } = _ref92;\n return [42\n /* Each */, EXPR.expr(value), key ? EXPR.expr(key) : null, CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n With(_ref93) {\n var {\n value,\n block,\n inverse\n } = _ref93;\n return [43\n /* With */, EXPR.expr(value), CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n Let(_ref94) {\n var {\n positional,\n block\n } = _ref94;\n return [44\n /* Let */, EXPR.Positional(positional), CONTENT.NamedBlock(block)[1]];\n }\n WithDynamicVars(_ref95) {\n var {\n named,\n block\n } = _ref95;\n return [45\n /* WithDynamicVars */, EXPR.NamedArguments(named), CONTENT.NamedBlock(block)[1]];\n }\n InvokeComponent(_ref96) {\n var {\n definition,\n args,\n blocks\n } = _ref96;\n return [46\n /* InvokeComponent */, EXPR.expr(definition), EXPR.Positional(args.positional), EXPR.NamedArguments(args.named), blocks ? CONTENT.NamedBlocks(blocks) : null];\n }\n }\n var CONTENT = new ContentEncoder();\n function staticAttr(_ref97) {\n var {\n name,\n value,\n namespace\n } = _ref97;\n var out = [deflateAttrName(name.chars), value.chars];\n if (namespace) {\n out.push(namespace);\n }\n return out;\n }\n function dynamicAttr(_ref98) {\n var {\n name,\n value,\n namespace\n } = _ref98;\n var out = [deflateAttrName(name.chars), EXPR.expr(value)];\n if (namespace) {\n out.push(namespace);\n }\n return out;\n }\n function staticAttrOp(kind) {\n if (kind.component) {\n return 24\n /* StaticComponentAttr */;\n } else {\n return 14\n /* StaticAttr */;\n }\n }\n\n function dynamicAttrOp(kind) {\n if (kind.component) {\n return kind.trusting ? 23\n /* TrustingComponentAttr */ : 16\n /* ComponentAttr */;\n } else {\n return kind.trusting ? 22\n /* TrustingDynamicAttr */ : 15\n /* DynamicAttr */;\n }\n }\n\n function visit(template) {\n var statements = CONTENT.list(template.body);\n var scope = template.scope;\n var block = [statements, scope.symbols, scope.hasEval, scope.upvars];\n return block;\n }\n var defaultId = (() => {\n var req = typeof module === 'object' && typeof module.require === 'function' ? module.require : require;\n if (req) {\n try {\n var crypto = req('crypto');\n var idFn = src => {\n var hash = crypto.createHash('sha1');\n hash.update(src, 'utf8'); // trim to 6 bytes of data (2^48 - 1)\n\n return hash.digest('base64').substring(0, 8);\n };\n idFn('test');\n return idFn;\n } catch (e) {}\n }\n return function idFn() {\n return null;\n };\n })();\n _exports.defaultId = defaultId;\n var defaultOptions = {\n id: defaultId\n };\n /*\n * Compile a string into a template javascript string.\n *\n * Example usage:\n * import { precompile } from '@glimmer/compiler';\n * import { templateFactory } from 'glimmer-runtime';\n * let templateJs = precompile(\"Howdy {{name}}\");\n * let factory = templateFactory(new Function(\"return \" + templateJs)());\n * let template = factory.create(env);\n *\n * @method precompile\n * @param {string} string a Glimmer template string\n * @return {string} a template javascript string\n */\n\n function precompileJSON(string, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n var _a, _b;\n var source = new _syntax.Source(string, (_a = options.meta) === null || _a === void 0 ? void 0 : _a.moduleName);\n var [ast, locals] = (0, _syntax.normalize)(source, options);\n var block = normalize(source, ast, (_b = options.strictMode) !== null && _b !== void 0 ? _b : false).mapOk(pass2In => {\n return visit(pass2In);\n });\n if (block.isOk) {\n return [block.value, locals];\n } else {\n throw block.reason;\n }\n } // UUID used as a unique placeholder for placing a snippet of JS code into\n // the otherwise JSON stringified value below.\n\n var SCOPE_PLACEHOLDER = '796d24e6-2450-4fb0-8cdf-b65638b5ef70';\n /*\n * Compile a string into a template javascript string.\n *\n * Example usage:\n * import { precompile } from '@glimmer/compiler';\n * import { templateFactory } from 'glimmer-runtime';\n * let templateJs = precompile(\"Howdy {{name}}\");\n * let factory = templateFactory(new Function(\"return \" + templateJs)());\n * let template = factory.create(env);\n *\n * @method precompile\n * @param {string} string a Glimmer template string\n * @return {string} a template javascript string\n */\n\n function precompile(source, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n var _a, _b;\n var [block, usedLocals] = precompileJSON(source, options);\n var moduleName = (_a = options.meta) === null || _a === void 0 ? void 0 : _a.moduleName;\n var idFn = options.id || defaultId;\n var blockJSON = JSON.stringify(block);\n var templateJSONObject = {\n id: idFn(JSON.stringify(options.meta) + blockJSON),\n block: blockJSON,\n moduleName: moduleName !== null && moduleName !== void 0 ? moduleName : '(unknown template module)',\n // lying to the type checker here because we're going to\n // replace it just below, after stringification\n scope: SCOPE_PLACEHOLDER,\n isStrictMode: (_b = options.strictMode) !== null && _b !== void 0 ? _b : false\n };\n if (usedLocals.length === 0) {\n delete templateJSONObject.scope;\n } // JSON is javascript\n\n var stringified = JSON.stringify(templateJSONObject);\n if (usedLocals.length > 0) {\n var scopeFn = \"()=>[\" + usedLocals.join(',') + \"]\";\n stringified = stringified.replace(\"\\\"\" + SCOPE_PLACEHOLDER + \"\\\"\", scopeFn);\n }\n return stringified;\n }\n var VariableKind;\n (function (VariableKind) {\n VariableKind[\"Local\"] = \"Local\";\n VariableKind[\"Free\"] = \"Free\";\n VariableKind[\"Arg\"] = \"Arg\";\n VariableKind[\"Block\"] = \"Block\";\n VariableKind[\"This\"] = \"This\";\n })(VariableKind || (VariableKind = {}));\n function normalizeStatement(statement) {\n if (Array.isArray(statement)) {\n if (statementIsExpression(statement)) {\n return normalizeAppendExpression(statement);\n } else if (isSugaryArrayStatement(statement)) {\n return normalizeSugaryArrayStatement(statement);\n } else {\n return normalizeVerboseStatement(statement);\n }\n } else if (typeof statement === 'string') {\n return normalizeAppendHead(normalizeDottedPath(statement), false);\n } else {\n throw (0, _util.assertNever)(statement);\n }\n }\n function normalizeAppendHead(head, trusted) {\n if (head.type === \"GetPath\"\n /* GetPath */) {\n return {\n kind: \"AppendPath\"\n /* AppendPath */,\n\n path: head,\n trusted\n };\n } else {\n return {\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n expr: head,\n trusted\n };\n }\n }\n function isSugaryArrayStatement(statement) {\n if (Array.isArray(statement) && typeof statement[0] === 'string') {\n switch (statement[0][0]) {\n case '(':\n case '#':\n case '<':\n case '!':\n return true;\n default:\n return false;\n }\n }\n return false;\n }\n function normalizeSugaryArrayStatement(statement) {\n var name = statement[0];\n switch (name[0]) {\n case '(':\n {\n var params = null;\n var hash = null;\n if (statement.length === 3) {\n params = normalizeParams(statement[1]);\n hash = normalizeHash(statement[2]);\n } else if (statement.length === 2) {\n if (Array.isArray(statement[1])) {\n params = normalizeParams(statement[1]);\n } else {\n hash = normalizeHash(statement[1]);\n }\n }\n return {\n kind: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(name),\n params,\n hash,\n trusted: false\n };\n }\n case '#':\n {\n var {\n head: path,\n params: _params,\n hash: _hash,\n blocks,\n blockParams\n } = normalizeBuilderBlockStatement(statement);\n return {\n kind: \"Block\"\n /* Block */,\n\n head: path,\n params: _params,\n hash: _hash,\n blocks,\n blockParams\n };\n }\n case '!':\n {\n var _name2 = statement[0].slice(1);\n var {\n params: _params2,\n hash: _hash2,\n blocks: _blocks,\n blockParams: _blockParams\n } = normalizeBuilderBlockStatement(statement);\n return {\n kind: \"Keyword\"\n /* Keyword */,\n\n name: _name2,\n params: _params2,\n hash: _hash2,\n blocks: _blocks,\n blockParams: _blockParams\n };\n }\n case '<':\n {\n var attrs = (0, _util.dict)();\n var block = [];\n if (statement.length === 3) {\n attrs = normalizeAttrs(statement[1]);\n block = normalizeBlock(statement[2]);\n } else if (statement.length === 2) {\n if (Array.isArray(statement[1])) {\n block = normalizeBlock(statement[1]);\n } else {\n attrs = normalizeAttrs(statement[1]);\n }\n }\n return {\n kind: \"Element\"\n /* Element */,\n\n name: extractElement(name),\n attrs,\n block\n };\n }\n default:\n throw new Error(\"Unreachable \" + JSON.stringify(statement) + \" in normalizeSugaryArrayStatement\");\n }\n }\n function normalizeVerboseStatement(statement) {\n switch (statement[0]) {\n case 0\n /* Literal */:\n {\n return {\n kind: \"Literal\"\n /* Literal */,\n\n value: statement[1]\n };\n }\n case 2\n /* Append */:\n {\n return normalizeAppendExpression(statement[1], statement[2]);\n }\n case 3\n /* Modifier */:\n {\n return {\n kind: \"Modifier\"\n /* Modifier */,\n\n params: normalizeParams(statement[1]),\n hash: normalizeHash(statement[2])\n };\n }\n case 4\n /* DynamicComponent */:\n {\n return {\n kind: \"DynamicComponent\"\n /* DynamicComponent */,\n\n expr: normalizeExpression(statement[1]),\n hash: normalizeHash(statement[2]),\n block: normalizeBlock(statement[3])\n };\n }\n case 1\n /* Comment */:\n {\n return {\n kind: \"Comment\"\n /* Comment */,\n\n value: statement[1]\n };\n }\n }\n }\n function extractBlockHead(name) {\n var result = /^(#|!)(.*)$/.exec(name);\n if (result === null) {\n throw new Error(\"Unexpected missing # in block head\");\n }\n return normalizeDottedPath(result[2]);\n }\n function normalizeCallHead(name) {\n var result = /^\\((.*)\\)$/.exec(name);\n if (result === null) {\n throw new Error(\"Unexpected missing () in call head\");\n }\n return normalizeDottedPath(result[1]);\n }\n function normalizePath(head, tail) {\n if (tail === void 0) {\n tail = [];\n }\n var pathHead = normalizePathHead(head);\n if ((0, _util.isPresent)(tail)) {\n return {\n type: \"GetPath\"\n /* GetPath */,\n\n path: {\n head: pathHead,\n tail\n }\n };\n } else {\n return {\n type: \"GetVar\"\n /* GetVar */,\n\n variable: pathHead\n };\n }\n }\n function normalizeDottedPath(whole) {\n var {\n kind,\n name: rest\n } = normalizePathHead(whole);\n var [name, ...tail] = rest.split('.');\n var variable = {\n kind,\n name,\n mode: 'loose'\n };\n if ((0, _util.isPresent)(tail)) {\n return {\n type: \"GetPath\"\n /* GetPath */,\n\n path: {\n head: variable,\n tail\n }\n };\n } else {\n return {\n type: \"GetVar\"\n /* GetVar */,\n\n variable\n };\n }\n }\n function normalizePathHead(whole) {\n var kind;\n var name;\n if (/^this(\\.|$)/.exec(whole)) {\n return {\n kind: VariableKind.This,\n name: whole,\n mode: 'loose'\n };\n }\n switch (whole[0]) {\n case '^':\n kind = VariableKind.Free;\n name = whole.slice(1);\n break;\n case '@':\n kind = VariableKind.Arg;\n name = whole.slice(1);\n break;\n case '&':\n kind = VariableKind.Block;\n name = whole.slice(1);\n break;\n default:\n kind = VariableKind.Local;\n name = whole;\n }\n return {\n kind,\n name,\n mode: 'loose'\n };\n }\n function normalizeBuilderBlockStatement(statement) {\n var head = statement[0];\n var blocks = (0, _util.dict)();\n var params = null;\n var hash = null;\n var blockParams = null;\n if (statement.length === 2) {\n blocks = normalizeBlocks(statement[1]);\n } else if (statement.length === 3) {\n if (Array.isArray(statement[1])) {\n params = normalizeParams(statement[1]);\n } else {\n ({\n hash,\n blockParams\n } = normalizeBlockHash(statement[1]));\n }\n blocks = normalizeBlocks(statement[2]);\n } else if (statement.length === 4) {\n params = normalizeParams(statement[1]);\n ({\n hash,\n blockParams\n } = normalizeBlockHash(statement[2]));\n blocks = normalizeBlocks(statement[3]);\n }\n return {\n head: extractBlockHead(head),\n params,\n hash,\n blockParams,\n blocks\n };\n }\n function normalizeBlockHash(hash) {\n if (hash === null) {\n return {\n hash: null,\n blockParams: null\n };\n }\n var out = null;\n var blockParams = null;\n entries(hash, (key, value) => {\n if (key === 'as') {\n blockParams = Array.isArray(value) ? value : [value];\n } else {\n out = out || (0, _util.dict)();\n out[key] = normalizeExpression(value);\n }\n });\n return {\n hash: out,\n blockParams\n };\n }\n function entries(dict, callback) {\n Object.keys(dict).forEach(key => {\n var value = dict[key];\n callback(key, value);\n });\n }\n function normalizeBlocks(value) {\n if (Array.isArray(value)) {\n return {\n default: normalizeBlock(value)\n };\n } else {\n return mapObject(value, normalizeBlock);\n }\n }\n function normalizeBlock(block) {\n return block.map(s => normalizeStatement(s));\n }\n function normalizeAttrs(attrs) {\n return mapObject(attrs, a => normalizeAttr(a).expr);\n }\n function normalizeAttr(attr) {\n if (attr === 'splat') {\n return {\n expr: \"Splat\"\n /* Splat */,\n\n trusted: false\n };\n } else {\n var expr = normalizeExpression(attr);\n return {\n expr,\n trusted: false\n };\n }\n }\n function mapObject(object, callback) {\n var out = (0, _util.dict)();\n Object.keys(object).forEach(k => {\n out[k] = callback(object[k], k);\n });\n return out;\n }\n function extractElement(input) {\n var match = /^<([a-z0-9\\-][a-zA-Z0-9\\-]*)>$/.exec(input);\n return match ? match[1] : null;\n }\n function normalizeAppendExpression(expression, forceTrusted) {\n if (forceTrusted === void 0) {\n forceTrusted = false;\n }\n if (expression === null || expression === undefined) {\n return {\n expr: {\n type: \"Literal\"\n /* Literal */,\n\n value: expression\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: false\n };\n } else if (Array.isArray(expression)) {\n switch (expression[0]) {\n case 0\n /* Literal */:\n return {\n expr: {\n type: \"Literal\"\n /* Literal */,\n\n value: expression[1]\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: false\n };\n case 5\n /* Get */:\n {\n return normalizeAppendHead(normalizePath(expression[1], expression[2]), forceTrusted);\n }\n case 6\n /* Concat */:\n {\n var expr = {\n type: \"Concat\"\n /* Concat */,\n\n params: normalizeParams(expression.slice(1))\n };\n return {\n expr,\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: forceTrusted\n };\n }\n case 7\n /* HasBlock */:\n return {\n expr: {\n type: \"HasBlock\"\n /* HasBlock */,\n\n name: expression[1]\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: forceTrusted\n };\n case 8\n /* HasBlockParams */:\n return {\n expr: {\n type: \"HasBlockParams\"\n /* HasBlockParams */,\n\n name: expression[1]\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: forceTrusted\n };\n default:\n {\n if (isBuilderCallExpression(expression)) {\n return {\n expr: normalizeCallExpression(expression),\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: forceTrusted\n };\n } else {\n throw new Error(\"Unexpected array in expression position (wasn't a tuple expression and \" + expression[0] + \" isn't wrapped in parens, so it isn't a call): \" + JSON.stringify(expression));\n }\n }\n // BuilderCallExpression\n }\n } else if (typeof expression !== 'object') {\n switch (typeof expression) {\n case 'string':\n {\n return normalizeAppendHead(normalizeDottedPath(expression), forceTrusted);\n }\n case 'boolean':\n case 'number':\n return {\n expr: {\n type: \"Literal\"\n /* Literal */,\n\n value: expression\n },\n kind: \"AppendExpr\"\n /* AppendExpr */,\n\n trusted: true\n };\n default:\n throw (0, _util.assertNever)(expression);\n }\n } else {\n throw (0, _util.assertNever)(expression);\n }\n }\n function normalizeExpression(expression) {\n if (expression === null || expression === undefined) {\n return {\n type: \"Literal\"\n /* Literal */,\n\n value: expression\n };\n } else if (Array.isArray(expression)) {\n switch (expression[0]) {\n case 0\n /* Literal */:\n return {\n type: \"Literal\"\n /* Literal */,\n\n value: expression[1]\n };\n case 5\n /* Get */:\n {\n return normalizePath(expression[1], expression[2]);\n }\n case 6\n /* Concat */:\n {\n var expr = {\n type: \"Concat\"\n /* Concat */,\n\n params: normalizeParams(expression.slice(1))\n };\n return expr;\n }\n case 7\n /* HasBlock */:\n return {\n type: \"HasBlock\"\n /* HasBlock */,\n\n name: expression[1]\n };\n case 8\n /* HasBlockParams */:\n return {\n type: \"HasBlockParams\"\n /* HasBlockParams */,\n\n name: expression[1]\n };\n default:\n {\n if (isBuilderCallExpression(expression)) {\n return normalizeCallExpression(expression);\n } else {\n throw new Error(\"Unexpected array in expression position (wasn't a tuple expression and \" + expression[0] + \" isn't wrapped in parens, so it isn't a call): \" + JSON.stringify(expression));\n }\n }\n // BuilderCallExpression\n }\n } else if (typeof expression !== 'object') {\n switch (typeof expression) {\n case 'string':\n {\n return normalizeDottedPath(expression);\n }\n case 'boolean':\n case 'number':\n return {\n type: \"Literal\"\n /* Literal */,\n\n value: expression\n };\n default:\n throw (0, _util.assertNever)(expression);\n }\n } else {\n throw (0, _util.assertNever)(expression);\n }\n }\n function statementIsExpression(statement) {\n if (!Array.isArray(statement)) {\n return false;\n }\n var name = statement[0];\n if (typeof name === 'number') {\n switch (name) {\n case 0\n /* Literal */:\n\n case 5\n /* Get */:\n\n case 6\n /* Concat */:\n\n case 7\n /* HasBlock */:\n\n case 8\n /* HasBlockParams */:\n return true;\n default:\n return false;\n }\n }\n if (name[0] === '(') {\n return true;\n }\n return false;\n }\n function isBuilderCallExpression(value) {\n return typeof value[0] === 'string' && value[0][0] === '(';\n }\n function normalizeParams(input) {\n return input.map(normalizeExpression);\n }\n function normalizeHash(input) {\n if (input === null) return null;\n return mapObject(input, normalizeExpression);\n }\n function normalizeCallExpression(expr) {\n switch (expr.length) {\n case 1:\n return {\n type: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(expr[0]),\n params: null,\n hash: null\n };\n case 2:\n {\n if (Array.isArray(expr[1])) {\n return {\n type: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(expr[0]),\n params: normalizeParams(expr[1]),\n hash: null\n };\n } else {\n return {\n type: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(expr[0]),\n params: null,\n hash: normalizeHash(expr[1])\n };\n }\n }\n case 3:\n return {\n type: \"Call\"\n /* Call */,\n\n head: normalizeCallHead(expr[0]),\n params: normalizeParams(expr[1]),\n hash: normalizeHash(expr[2])\n };\n }\n }\n class ProgramSymbols {\n constructor() {\n this._freeVariables = [];\n this._symbols = ['this'];\n this.top = this;\n }\n toSymbols() {\n return this._symbols.slice(1);\n }\n toUpvars() {\n return this._freeVariables;\n }\n freeVar(name) {\n return addString(this._freeVariables, name);\n }\n block(name) {\n return this.symbol(name);\n }\n arg(name) {\n return addString(this._symbols, name);\n }\n local(name) {\n throw new Error(\"No local \" + name + \" was found. Maybe you meant ^\" + name + \" for upvar, or !\" + name + \" for keyword?\");\n }\n this() {\n return 0;\n }\n hasLocal(_name) {\n return false;\n } // any symbol\n\n symbol(name) {\n return addString(this._symbols, name);\n }\n child(locals) {\n return new LocalSymbols(this, locals);\n }\n }\n _exports.ProgramSymbols = ProgramSymbols;\n class LocalSymbols {\n constructor(parent, locals) {\n this.parent = parent;\n this.locals = (0, _util.dict)();\n for (var local of locals) {\n this.locals[local] = parent.top.symbol(local);\n }\n }\n get paramSymbols() {\n return (0, _util.values)(this.locals);\n }\n get top() {\n return this.parent.top;\n }\n freeVar(name) {\n return this.parent.freeVar(name);\n }\n arg(name) {\n return this.parent.arg(name);\n }\n block(name) {\n return this.parent.block(name);\n }\n local(name) {\n if (name in this.locals) {\n return this.locals[name];\n } else {\n return this.parent.local(name);\n }\n }\n this() {\n return this.parent.this();\n }\n hasLocal(name) {\n if (name in this.locals) {\n return true;\n } else {\n return this.parent.hasLocal(name);\n }\n }\n child(locals) {\n return new LocalSymbols(this, locals);\n }\n }\n function addString(array, item) {\n var index = array.indexOf(item);\n if (index === -1) {\n index = array.length;\n array.push(item);\n return index;\n } else {\n return index;\n }\n }\n function unimpl(message) {\n return new Error(\"unimplemented \" + message);\n }\n function buildStatements(statements, symbols) {\n var out = [];\n statements.forEach(s => out.push(...buildStatement(normalizeStatement(s), symbols)));\n return out;\n }\n function buildNormalizedStatements(statements, symbols) {\n var out = [];\n statements.forEach(s => out.push(...buildStatement(s, symbols)));\n return out;\n }\n function buildStatement(normalized, symbols) {\n if (symbols === void 0) {\n symbols = new ProgramSymbols();\n }\n switch (normalized.kind) {\n case \"AppendPath\"\n /* AppendPath */:\n {\n return [[normalized.trusted ? 2\n /* TrustingAppend */ : 1\n /* Append */, buildGetPath(normalized.path, symbols)]];\n }\n case \"AppendExpr\"\n /* AppendExpr */:\n {\n return [[normalized.trusted ? 2\n /* TrustingAppend */ : 1\n /* Append */, buildExpression(normalized.expr, normalized.trusted ? 'TrustedAppend' : 'Append', symbols)]];\n }\n case \"Call\"\n /* Call */:\n {\n var {\n head: path,\n params,\n hash,\n trusted\n } = normalized;\n var builtParams = params ? buildParams(params, symbols) : null;\n var builtHash = hash ? buildHash(hash, symbols) : null;\n var builtExpr = buildCallHead(path, trusted ? 3\n /* AmbiguousInvoke */ : 2\n /* AmbiguousAppendInvoke */, symbols);\n return [[trusted ? 2\n /* TrustingAppend */ : 1\n /* Append */, [28\n /* Call */, builtExpr, builtParams, builtHash]]];\n }\n case \"Literal\"\n /* Literal */:\n {\n return [[1\n /* Append */, normalized.value]];\n }\n case \"Comment\"\n /* Comment */:\n {\n return [[3\n /* Comment */, normalized.value]];\n }\n case \"Block\"\n /* Block */:\n {\n var blocks = buildBlocks(normalized.blocks, normalized.blockParams, symbols);\n var _hash3 = buildHash(normalized.hash, symbols);\n var _params3 = buildParams(normalized.params, symbols);\n var _path = buildCallHead(normalized.head, 7\n /* ResolveAsComponentHead */, symbols);\n return [[6\n /* Block */, _path, _params3, _hash3, blocks]];\n }\n case \"Keyword\"\n /* Keyword */:\n {\n return [buildKeyword(normalized, symbols)];\n }\n case \"Element\"\n /* Element */:\n return buildElement(normalized, symbols);\n case \"Modifier\"\n /* Modifier */:\n throw unimpl('modifier');\n case \"DynamicComponent\"\n /* DynamicComponent */:\n throw unimpl('dynamic component');\n default:\n throw (0, _util.assertNever)(normalized);\n }\n }\n function s(arr) {\n for (var _len2 = arguments.length, interpolated = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n interpolated[_key2 - 1] = arguments[_key2];\n }\n var result = arr.reduce((result, string, i) => result + (\"\" + string + (interpolated[i] ? String(interpolated[i]) : '')), '');\n return [0\n /* Literal */, result];\n }\n function c(arr) {\n for (var _len3 = arguments.length, interpolated = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n interpolated[_key3 - 1] = arguments[_key3];\n }\n var result = arr.reduce((result, string, i) => result + (\"\" + string + (interpolated[i] ? String(interpolated[i]) : '')), '');\n return [1\n /* Comment */, result];\n }\n function unicode(charCode) {\n return String.fromCharCode(parseInt(charCode, 16));\n }\n var NEWLINE = '\\n';\n _exports.NEWLINE = NEWLINE;\n function buildKeyword(normalized, symbols) {\n var {\n name\n } = normalized;\n var params = buildParams(normalized.params, symbols);\n var childSymbols = symbols.child(normalized.blockParams || []);\n var block = buildBlock(normalized.blocks.default, childSymbols, childSymbols.paramSymbols);\n var inverse = normalized.blocks.else ? buildBlock(normalized.blocks.else, symbols, []) : null;\n switch (name) {\n case 'with':\n return [43\n /* With */, params[0], block, inverse];\n case 'if':\n return [41\n /* If */, params[0], block, inverse];\n case 'each':\n var keyExpr = normalized.hash ? normalized.hash['key'] : null;\n var key = keyExpr ? buildExpression(keyExpr, 'Strict', symbols) : null;\n return [42\n /* Each */, params[0], key, block, inverse];\n default:\n throw new Error('unimplemented keyword');\n }\n }\n function buildElement(_ref99, symbols) {\n var {\n name,\n attrs,\n block\n } = _ref99;\n var out = [hasSplat(attrs) ? [11\n /* OpenElementWithSplat */, name] : [10\n /* OpenElement */, name]];\n if (attrs) {\n var {\n params,\n args\n } = buildElementParams(attrs, symbols);\n out.push(...params);\n }\n out.push([12\n /* FlushElement */]);\n\n if (Array.isArray(block)) {\n block.forEach(s => out.push(...buildStatement(s, symbols)));\n } else if (block === null) ;else {\n throw (0, _util.assertNever)(block);\n }\n out.push([13\n /* CloseElement */]);\n\n return out;\n }\n function hasSplat(attrs) {\n if (attrs === null) return false;\n return Object.keys(attrs).some(a => attrs[a] === \"Splat\"\n /* Splat */);\n }\n\n function buildElementParams(attrs, symbols) {\n var params = [];\n var keys = [];\n var values = [];\n Object.keys(attrs).forEach(key => {\n var value = attrs[key];\n if (value === \"Splat\"\n /* Splat */) {\n params.push([17\n /* AttrSplat */, symbols.block('&attrs')]);\n } else if (key[0] === '@') {\n keys.push(key);\n values.push(buildExpression(value, 'Strict', symbols));\n } else {\n params.push(...buildAttributeValue(key, value,\n // TODO: extract namespace from key\n extractNamespace(key), symbols));\n }\n });\n return {\n params,\n args: (0, _util.isPresent)(keys) && (0, _util.isPresent)(values) ? [keys, values] : null\n };\n }\n function extractNamespace(name) {\n if (name === 'xmlns') {\n return \"http://www.w3.org/2000/xmlns/\"\n /* XMLNS */;\n }\n\n var match = /^([^:]*):([^:]*)$/.exec(name);\n if (match === null) {\n return null;\n }\n var namespace = match[1];\n switch (namespace) {\n case 'xlink':\n return \"http://www.w3.org/1999/xlink\"\n /* XLink */;\n\n case 'xml':\n return \"http://www.w3.org/XML/1998/namespace\"\n /* XML */;\n\n case 'xmlns':\n return \"http://www.w3.org/2000/xmlns/\"\n /* XMLNS */;\n }\n\n return null;\n }\n function buildAttributeValue(name, value, namespace, symbols) {\n switch (value.type) {\n case \"Literal\"\n /* Literal */:\n {\n var val = value.value;\n if (val === false) {\n return [];\n } else if (val === true) {\n return [[14\n /* StaticAttr */, name, '', namespace !== null && namespace !== void 0 ? namespace : undefined]];\n } else if (typeof val === 'string') {\n return [[14\n /* StaticAttr */, name, val, namespace !== null && namespace !== void 0 ? namespace : undefined]];\n } else {\n throw new Error(\"Unexpected/unimplemented literal attribute \" + JSON.stringify(val));\n }\n }\n default:\n return [[15\n /* DynamicAttr */, name, buildExpression(value, 'AttrValue', symbols), namespace !== null && namespace !== void 0 ? namespace : undefined]];\n }\n }\n function varContext(context, bare) {\n switch (context) {\n case 'Append':\n return bare ? 'AppendBare' : 'AppendInvoke';\n case 'TrustedAppend':\n return bare ? 'TrustedAppendBare' : 'TrustedAppendInvoke';\n case 'AttrValue':\n return bare ? 'AttrValueBare' : 'AttrValueInvoke';\n default:\n return context;\n }\n }\n function buildExpression(expr, context, symbols) {\n switch (expr.type) {\n case \"GetPath\"\n /* GetPath */:\n {\n return buildGetPath(expr, symbols);\n }\n case \"GetVar\"\n /* GetVar */:\n {\n return buildVar(expr.variable, varContext(context, true), symbols);\n }\n case \"Concat\"\n /* Concat */:\n {\n return [29\n /* Concat */, buildConcat(expr.params, symbols)];\n }\n case \"Call\"\n /* Call */:\n {\n var builtParams = buildParams(expr.params, symbols);\n var builtHash = buildHash(expr.hash, symbols);\n var builtExpr = buildCallHead(expr.head, context === 'Strict' ? 'SubExpression' : varContext(context, false), symbols);\n return [28\n /* Call */, builtExpr, builtParams, builtHash];\n }\n case \"HasBlock\"\n /* HasBlock */:\n {\n return [48\n /* HasBlock */, buildVar({\n kind: VariableKind.Block,\n name: expr.name,\n mode: 'loose'\n }, 0\n /* Strict */, symbols)];\n }\n case \"HasBlockParams\"\n /* HasBlockParams */:\n {\n return [49\n /* HasBlockParams */, buildVar({\n kind: VariableKind.Block,\n name: expr.name,\n mode: 'loose'\n }, 0\n /* Strict */, symbols)];\n }\n case \"Literal\"\n /* Literal */:\n {\n if (expr.value === undefined) {\n return [27\n /* Undefined */];\n } else {\n return expr.value;\n }\n }\n default:\n (0, _util.assertNever)(expr);\n }\n }\n function buildCallHead(callHead, context, symbols) {\n if (callHead.type === \"GetVar\"\n /* GetVar */) {\n return buildVar(callHead.variable, context, symbols);\n } else {\n return buildGetPath(callHead, symbols);\n }\n }\n function buildGetPath(head, symbols) {\n return buildVar(head.path.head, 0\n /* Strict */, symbols, head.path.tail);\n }\n function buildVar(head, context, symbols, path) {\n var op = 30\n /* GetSymbol */;\n\n var sym;\n switch (head.kind) {\n case VariableKind.Free:\n if (context === 'Strict') {\n op = 31\n /* GetStrictFree */;\n } else if (context === 'AppendBare') {\n op = 34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */;\n } else if (context === 'AppendInvoke') {\n op = 35\n /* GetFreeAsComponentOrHelperHead */;\n } else if (context === 'TrustedAppendBare') {\n op = 36\n /* GetFreeAsHelperHeadOrThisFallback */;\n } else if (context === 'TrustedAppendInvoke') {\n op = 37\n /* GetFreeAsHelperHead */;\n } else if (context === 'AttrValueBare') {\n op = 36\n /* GetFreeAsHelperHeadOrThisFallback */;\n } else if (context === 'AttrValueInvoke') {\n op = 37\n /* GetFreeAsHelperHead */;\n } else if (context === 'SubExpression') {\n op = 37\n /* GetFreeAsHelperHead */;\n } else {\n op = expressionContextOp(context);\n }\n sym = symbols.freeVar(head.name);\n break;\n default:\n op = 30\n /* GetSymbol */;\n\n sym = getSymbolForVar(head.kind, symbols, head.name);\n }\n if (path === undefined || path.length === 0) {\n return [op, sym];\n } else {\n return [op, sym, path];\n }\n }\n function getSymbolForVar(kind, symbols, name) {\n switch (kind) {\n case VariableKind.Arg:\n return symbols.arg(name);\n case VariableKind.Block:\n return symbols.block(name);\n case VariableKind.Local:\n return symbols.local(name);\n case VariableKind.This:\n return symbols.this();\n default:\n return (0, _util.exhausted)(kind);\n }\n }\n function expressionContextOp(context) {\n switch (context) {\n case 0\n /* Strict */:\n return 31\n /* GetStrictFree */;\n\n case 1\n /* AmbiguousAppend */:\n return 34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */;\n\n case 2\n /* AmbiguousAppendInvoke */:\n return 35\n /* GetFreeAsComponentOrHelperHead */;\n\n case 3\n /* AmbiguousInvoke */:\n return 36\n /* GetFreeAsHelperHeadOrThisFallback */;\n\n case 5\n /* ResolveAsCallHead */:\n return 37\n /* GetFreeAsHelperHead */;\n\n case 6\n /* ResolveAsModifierHead */:\n return 38\n /* GetFreeAsModifierHead */;\n\n case 7\n /* ResolveAsComponentHead */:\n return 39\n /* GetFreeAsComponentHead */;\n\n default:\n return (0, _util.exhausted)(context);\n }\n }\n function buildParams(exprs, symbols) {\n if (exprs === null || !(0, _util.isPresent)(exprs)) return null;\n return exprs.map(e => buildExpression(e, 'Strict', symbols));\n }\n function buildConcat(exprs, symbols) {\n return exprs.map(e => buildExpression(e, 'AttrValue', symbols));\n }\n function buildHash(exprs, symbols) {\n if (exprs === null) return null;\n var out = [[], []];\n Object.keys(exprs).forEach(key => {\n out[0].push(key);\n out[1].push(buildExpression(exprs[key], 'Strict', symbols));\n });\n return out;\n }\n function buildBlocks(blocks, blockParams, parent) {\n var keys = [];\n var values = [];\n Object.keys(blocks).forEach(name => {\n keys.push(name);\n if (name === 'default') {\n var symbols = parent.child(blockParams || []);\n values.push(buildBlock(blocks[name], symbols, symbols.paramSymbols));\n } else {\n values.push(buildBlock(blocks[name], parent, []));\n }\n });\n return [keys, values];\n }\n function buildBlock(block, symbols, locals) {\n if (locals === void 0) {\n locals = [];\n }\n return [buildNormalizedStatements(block, symbols), locals];\n }\n});","define(\"@glimmer/env\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.DEBUG = _exports.CI = void 0;\n var DEBUG = false;\n _exports.DEBUG = DEBUG;\n var CI = false;\n _exports.CI = CI;\n});","define(\"@glimmer/syntax\", [\"exports\", \"@glimmer/util\", \"@handlebars/parser\", \"simple-html-tokenizer\"], function (_exports, _util, _parser, _simpleHtmlTokenizer) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.builders = _exports.WalkerPath = _exports.Walker = _exports.SymbolTable = _exports.SpanList = _exports.SourceSpan = _exports.SourceSlice = _exports.Source = _exports.ProgramSymbolTable = _exports.Path = _exports.KEYWORDS_TYPES = _exports.BlockSymbolTable = _exports.ASTv2 = _exports.ASTv1 = _exports.AST = void 0;\n _exports.cannotRemoveNode = cannotRemoveNode;\n _exports.cannotReplaceNode = cannotReplaceNode;\n _exports.generateSyntaxError = generateSyntaxError;\n _exports.getTemplateLocals = getTemplateLocals;\n _exports.hasSpan = hasSpan;\n _exports.isKeyword = isKeyword;\n _exports.loc = loc;\n _exports.maybeLoc = maybeLoc;\n _exports.node = node;\n _exports.normalize = normalize;\n _exports.preprocess = preprocess;\n _exports.print = build;\n _exports.sortByLoc = sortByLoc;\n _exports.traverse = traverse;\n var UNKNOWN_POSITION = Object.freeze({\n line: 1,\n column: 0\n });\n var SYNTHETIC_LOCATION = Object.freeze({\n source: '(synthetic)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n var TEMPORARY_LOCATION = Object.freeze({\n source: '(temporary)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n var NON_EXISTENT_LOCATION = Object.freeze({\n source: '(nonexistent)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n var BROKEN_LOCATION = Object.freeze({\n source: '(broken)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n class SourceSlice {\n constructor(options) {\n this.loc = options.loc;\n this.chars = options.chars;\n }\n static synthetic(chars) {\n var offsets = SourceSpan.synthetic(chars);\n return new SourceSlice({\n loc: offsets,\n chars: chars\n });\n }\n static load(source, slice) {\n return new SourceSlice({\n loc: SourceSpan.load(source, slice[1]),\n chars: slice[0]\n });\n }\n getString() {\n return this.chars;\n }\n serialize() {\n return [this.chars, this.loc.serialize()];\n }\n }\n\n /**\n * This file implements the DSL used by span and offset in places where they need to exhaustively\n * consider all combinations of states (Handlebars offsets, character offsets and invisible/broken\n * offsets).\n *\n * It's probably overkill, but it makes the code that uses it clear. It could be refactored or\n * removed.\n */\n _exports.SourceSlice = SourceSlice;\n var MatchAny = 'MATCH_ANY';\n var IsInvisible = 'IS_INVISIBLE';\n class WhenList {\n constructor(whens) {\n this._whens = whens;\n }\n first(kind) {\n for (var when of this._whens) {\n var value = when.match(kind);\n if ((0, _util.isPresent)(value)) {\n return value[0];\n }\n }\n return null;\n }\n }\n class When {\n constructor() {\n this._map = new Map();\n }\n get(pattern, or) {\n var value = this._map.get(pattern);\n if (value) {\n return value;\n }\n value = or();\n this._map.set(pattern, value);\n return value;\n }\n add(pattern, out) {\n this._map.set(pattern, out);\n }\n match(kind) {\n var pattern = patternFor(kind);\n var out = [];\n var exact = this._map.get(pattern);\n var fallback = this._map.get(MatchAny);\n if (exact) {\n out.push(exact);\n }\n if (fallback) {\n out.push(fallback);\n }\n return out;\n }\n }\n function match(callback) {\n return callback(new Matcher()).check();\n }\n class Matcher {\n constructor() {\n this._whens = new When();\n }\n /**\n * You didn't exhaustively match all possibilities.\n */\n\n check() {\n return (left, right) => this.matchFor(left.kind, right.kind)(left, right);\n }\n matchFor(left, right) {\n var nesteds = this._whens.match(left);\n var callback = new WhenList(nesteds).first(right);\n return callback;\n }\n when(left, right,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n callback) {\n this._whens.get(left, () => new When()).add(right, callback);\n return this;\n }\n }\n function patternFor(kind) {\n switch (kind) {\n case \"Broken\"\n /* Broken */:\n\n case \"InternalsSynthetic\"\n /* InternalsSynthetic */:\n\n case \"NonExistent\"\n /* NonExistent */:\n return IsInvisible;\n default:\n return kind;\n }\n }\n\n // eslint-disable-next-line import/no-extraneous-dependencies\n /**\n * Used to indicate that an attempt to convert a `SourcePosition` to a character offset failed. It\n * is separate from `null` so that `null` can be used to indicate that the computation wasn't yet\n * attempted (and therefore to cache the failure)\n */\n\n var BROKEN = 'BROKEN';\n /**\n * A `SourceOffset` represents a single position in the source.\n *\n * There are three kinds of backing data for `SourceOffset` objects:\n *\n * - `CharPosition`, which contains a character offset into the raw source string\n * - `HbsPosition`, which contains a `SourcePosition` from the Handlebars AST, which can be\n * converted to a `CharPosition` on demand.\n * - `InvisiblePosition`, which represents a position not in source (@see {InvisiblePosition})\n */\n\n class SourceOffset {\n constructor(data) {\n this.data = data;\n }\n /**\n * Create a `SourceOffset` from a Handlebars `SourcePosition`. It's stored as-is, and converted\n * into a character offset on demand, which avoids unnecessarily computing the offset of every\n * `SourceLocation`, but also means that broken `SourcePosition`s are not always detected.\n */\n\n static forHbsPos(source, pos) {\n return new HbsPosition(source, pos, null).wrap();\n }\n /**\n * Create a `SourceOffset` that corresponds to a broken `SourcePosition`. This means that the\n * calling code determined (or knows) that the `SourceLocation` doesn't correspond correctly to\n * any part of the source.\n */\n\n static broken(pos) {\n if (pos === void 0) {\n pos = UNKNOWN_POSITION;\n }\n return new InvisiblePosition(\"Broken\"\n /* Broken */, pos).wrap();\n }\n /**\n * Get the character offset for this `SourceOffset`, if possible.\n */\n\n get offset() {\n var charPos = this.data.toCharPos();\n return charPos === null ? null : charPos.offset;\n }\n /**\n * Compare this offset with another one.\n *\n * If both offsets are `HbsPosition`s, they're equivalent as long as their lines and columns are\n * the same. This avoids computing offsets unnecessarily.\n *\n * Otherwise, two `SourceOffset`s are equivalent if their successfully computed character offsets\n * are the same.\n */\n\n eql(right) {\n return eql(this.data, right.data);\n }\n /**\n * Create a span that starts from this source offset and ends with another source offset. Avoid\n * computing character offsets if both `SourceOffset`s are still lazy.\n */\n\n until(other) {\n return span(this.data, other.data);\n }\n /**\n * Create a `SourceOffset` by moving the character position represented by this source offset\n * forward or backward (if `by` is negative), if possible.\n *\n * If this `SourceOffset` can't compute a valid character offset, `move` returns a broken offset.\n *\n * If the resulting character offset is less than 0 or greater than the size of the source, `move`\n * returns a broken offset.\n */\n\n move(by) {\n var charPos = this.data.toCharPos();\n if (charPos === null) {\n return SourceOffset.broken();\n } else {\n var result = charPos.offset + by;\n if (charPos.source.check(result)) {\n return new CharPosition(charPos.source, result).wrap();\n } else {\n return SourceOffset.broken();\n }\n }\n }\n /**\n * Create a new `SourceSpan` that represents a collapsed range at this source offset. Avoid\n * computing the character offset if it has not already been computed.\n */\n\n collapsed() {\n return span(this.data, this.data);\n }\n /**\n * Convert this `SourceOffset` into a Handlebars {@see SourcePosition} for compatibility with\n * existing plugins.\n */\n\n toJSON() {\n return this.data.toJSON();\n }\n }\n class CharPosition {\n constructor(source, charPos) {\n this.source = source;\n this.charPos = charPos;\n this.kind = \"CharPosition\"\n /* CharPosition */;\n /** Computed from char offset */\n\n this._locPos = null;\n }\n /**\n * This is already a `CharPosition`.\n *\n * {@see HbsPosition} for the alternative.\n *\n * @implements {PositionData}\n */\n\n toCharPos() {\n return this;\n }\n /**\n * Produce a Handlebars {@see SourcePosition} for this `CharPosition`. If this `CharPosition` was\n * computed using {@see SourceOffset#move}, this will compute the `SourcePosition` for the offset.\n *\n * @implements {PositionData}\n */\n\n toJSON() {\n var hbs = this.toHbsPos();\n return hbs === null ? UNKNOWN_POSITION : hbs.toJSON();\n }\n wrap() {\n return new SourceOffset(this);\n }\n /**\n * A `CharPosition` always has an offset it can produce without any additional computation.\n */\n\n get offset() {\n return this.charPos;\n }\n /**\n * Convert the current character offset to an `HbsPosition`, if it was not already computed. Once\n * a `CharPosition` has computed its `HbsPosition`, it will not need to do compute it again, and\n * the same `CharPosition` is retained when used as one of the ends of a `SourceSpan`, so\n * computing the `HbsPosition` should be a one-time operation.\n */\n\n toHbsPos() {\n var locPos = this._locPos;\n if (locPos === null) {\n var hbsPos = this.source.hbsPosFor(this.charPos);\n if (hbsPos === null) {\n this._locPos = locPos = BROKEN;\n } else {\n this._locPos = locPos = new HbsPosition(this.source, hbsPos, this.charPos);\n }\n }\n return locPos === BROKEN ? null : locPos;\n }\n }\n class HbsPosition {\n constructor(source, hbsPos, charPos) {\n if (charPos === void 0) {\n charPos = null;\n }\n this.source = source;\n this.hbsPos = hbsPos;\n this.kind = \"HbsPosition\"\n /* HbsPosition */;\n\n this._charPos = charPos === null ? null : new CharPosition(source, charPos);\n }\n /**\n * Lazily compute the character offset from the {@see SourcePosition}. Once an `HbsPosition` has\n * computed its `CharPosition`, it will not need to do compute it again, and the same\n * `HbsPosition` is retained when used as one of the ends of a `SourceSpan`, so computing the\n * `CharPosition` should be a one-time operation.\n *\n * @implements {PositionData}\n */\n\n toCharPos() {\n var charPos = this._charPos;\n if (charPos === null) {\n var charPosNumber = this.source.charPosFor(this.hbsPos);\n if (charPosNumber === null) {\n this._charPos = charPos = BROKEN;\n } else {\n this._charPos = charPos = new CharPosition(this.source, charPosNumber);\n }\n }\n return charPos === BROKEN ? null : charPos;\n }\n /**\n * Return the {@see SourcePosition} that this `HbsPosition` was instantiated with. This operation\n * does not need to compute anything.\n *\n * @implements {PositionData}\n */\n\n toJSON() {\n return this.hbsPos;\n }\n wrap() {\n return new SourceOffset(this);\n }\n /**\n * This is already an `HbsPosition`.\n *\n * {@see CharPosition} for the alternative.\n */\n\n toHbsPos() {\n return this;\n }\n }\n class InvisiblePosition {\n constructor(kind,\n // whatever was provided, possibly broken\n pos) {\n this.kind = kind;\n this.pos = pos;\n }\n /**\n * A broken position cannot be turned into a {@see CharacterPosition}.\n */\n\n toCharPos() {\n return null;\n }\n /**\n * The serialization of an `InvisiblePosition is whatever Handlebars {@see SourcePosition} was\n * originally identified as broken, non-existent or synthetic.\n *\n * If an `InvisiblePosition` never had an source offset at all, this method returns\n * {@see UNKNOWN_POSITION} for compatibility.\n */\n\n toJSON() {\n return this.pos;\n }\n wrap() {\n return new SourceOffset(this);\n }\n get offset() {\n return null;\n }\n }\n /**\n * Compare two {@see AnyPosition} and determine whether they are equal.\n *\n * @see {SourceOffset#eql}\n */\n\n var eql = match(m => m.when(\"HbsPosition\"\n /* HbsPosition */, \"HbsPosition\"\n /* HbsPosition */, (_ref, _ref2) => {\n var {\n hbsPos: left\n } = _ref;\n var {\n hbsPos: right\n } = _ref2;\n return left.column === right.column && left.line === right.line;\n }).when(\"CharPosition\"\n /* CharPosition */, \"CharPosition\"\n /* CharPosition */, (_ref3, _ref4) => {\n var {\n charPos: left\n } = _ref3;\n var {\n charPos: right\n } = _ref4;\n return left === right;\n }).when(\"CharPosition\"\n /* CharPosition */, \"HbsPosition\"\n /* HbsPosition */, (_ref5, right) => {\n var {\n offset: left\n } = _ref5;\n var _a;\n return left === ((_a = right.toCharPos()) === null || _a === void 0 ? void 0 : _a.offset);\n }).when(\"HbsPosition\"\n /* HbsPosition */, \"CharPosition\"\n /* CharPosition */, (left, _ref6) => {\n var {\n offset: right\n } = _ref6;\n var _a;\n return ((_a = left.toCharPos()) === null || _a === void 0 ? void 0 : _a.offset) === right;\n }).when(MatchAny, MatchAny, () => false));\n\n // eslint-disable-next-line import/no-extraneous-dependencies\n /**\n * A `SourceSpan` object represents a span of characters inside of a template source.\n *\n * There are three kinds of `SourceSpan` objects:\n *\n * - `ConcreteSourceSpan`, which contains byte offsets\n * - `LazySourceSpan`, which contains `SourceLocation`s from the Handlebars AST, which can be\n * converted to byte offsets on demand.\n * - `InvisibleSourceSpan`, which represent source strings that aren't present in the source,\n * because:\n * - they were created synthetically\n * - their location is nonsensical (the span is broken)\n * - they represent nothing in the source (this currently happens only when a bug in the\n * upstream Handlebars parser fails to assign a location to empty blocks)\n *\n * At a high level, all `SourceSpan` objects provide:\n *\n * - byte offsets\n * - source in column and line format\n *\n * And you can do these operations on `SourceSpan`s:\n *\n * - collapse it to a `SourceSpan` representing its starting or ending position\n * - slice out some characters, optionally skipping some characters at the beginning or end\n * - create a new `SourceSpan` with a different starting or ending offset\n *\n * All SourceSpan objects implement `SourceLocation`, for compatibility. All SourceSpan\n * objects have a `toJSON` that emits `SourceLocation`, also for compatibility.\n *\n * For compatibility, subclasses of `AbstractSourceSpan` must implement `locDidUpdate`, which\n * happens when an AST plugin attempts to modify the `start` or `end` of a span directly.\n *\n * The goal is to avoid creating any problems for use-cases like AST Explorer.\n */\n\n class SourceSpan {\n constructor(data) {\n this.data = data;\n this.isInvisible = data.kind !== \"CharPosition\"\n /* CharPosition */ && data.kind !== \"HbsPosition\"\n /* HbsPosition */;\n }\n\n static get NON_EXISTENT() {\n return new InvisibleSpan(\"NonExistent\"\n /* NonExistent */, NON_EXISTENT_LOCATION).wrap();\n }\n static load(source, serialized) {\n if (typeof serialized === 'number') {\n return SourceSpan.forCharPositions(source, serialized, serialized);\n } else if (typeof serialized === 'string') {\n return SourceSpan.synthetic(serialized);\n } else if (Array.isArray(serialized)) {\n return SourceSpan.forCharPositions(source, serialized[0], serialized[1]);\n } else if (serialized === \"NonExistent\"\n /* NonExistent */) {\n return SourceSpan.NON_EXISTENT;\n } else if (serialized === \"Broken\"\n /* Broken */) {\n return SourceSpan.broken(BROKEN_LOCATION);\n }\n (0, _util.assertNever)(serialized);\n }\n static forHbsLoc(source, loc) {\n var start = new HbsPosition(source, loc.start);\n var end = new HbsPosition(source, loc.end);\n return new HbsSpan(source, {\n start,\n end\n }, loc).wrap();\n }\n static forCharPositions(source, startPos, endPos) {\n var start = new CharPosition(source, startPos);\n var end = new CharPosition(source, endPos);\n return new CharPositionSpan(source, {\n start,\n end\n }).wrap();\n }\n static synthetic(chars) {\n return new InvisibleSpan(\"InternalsSynthetic\"\n /* InternalsSynthetic */, NON_EXISTENT_LOCATION, chars).wrap();\n }\n static broken(pos) {\n if (pos === void 0) {\n pos = BROKEN_LOCATION;\n }\n return new InvisibleSpan(\"Broken\"\n /* Broken */, pos).wrap();\n }\n getStart() {\n return this.data.getStart().wrap();\n }\n getEnd() {\n return this.data.getEnd().wrap();\n }\n get loc() {\n var span = this.data.toHbsSpan();\n return span === null ? BROKEN_LOCATION : span.toHbsLoc();\n }\n get module() {\n return this.data.getModule();\n }\n /**\n * Get the starting `SourcePosition` for this `SourceSpan`, lazily computing it if needed.\n */\n\n get startPosition() {\n return this.loc.start;\n }\n /**\n * Get the ending `SourcePosition` for this `SourceSpan`, lazily computing it if needed.\n */\n\n get endPosition() {\n return this.loc.end;\n }\n /**\n * Support converting ASTv1 nodes into a serialized format using JSON.stringify.\n */\n\n toJSON() {\n return this.loc;\n }\n /**\n * Create a new span with the current span's end and a new beginning.\n */\n\n withStart(other) {\n return span(other.data, this.data.getEnd());\n }\n /**\n * Create a new span with the current span's beginning and a new ending.\n */\n\n withEnd(other) {\n return span(this.data.getStart(), other.data);\n }\n asString() {\n return this.data.asString();\n }\n /**\n * Convert this `SourceSpan` into a `SourceSlice`. In debug mode, this method optionally checks\n * that the byte offsets represented by this `SourceSpan` actually correspond to the expected\n * string.\n */\n\n toSlice(expected) {\n var chars = this.data.asString();\n if (true /* DEBUG */) {\n if (expected !== undefined && chars !== expected) {\n // eslint-disable-next-line no-console\n console.warn(\"unexpectedly found \" + JSON.stringify(chars) + \" when slicing source, but expected \" + JSON.stringify(expected));\n }\n }\n return new SourceSlice({\n loc: this,\n chars: expected || chars\n });\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use startPosition instead\n */\n\n get start() {\n return this.loc.start;\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use withStart instead\n */\n\n set start(position) {\n this.data.locDidUpdate({\n start: position\n });\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use endPosition instead\n */\n\n get end() {\n return this.loc.end;\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use withEnd instead\n */\n\n set end(position) {\n this.data.locDidUpdate({\n end: position\n });\n }\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use module instead\n */\n\n get source() {\n return this.module;\n }\n collapse(where) {\n switch (where) {\n case 'start':\n return this.getStart().collapsed();\n case 'end':\n return this.getEnd().collapsed();\n }\n }\n extend(other) {\n return span(this.data.getStart(), other.data.getEnd());\n }\n serialize() {\n return this.data.serialize();\n }\n slice(_ref7) {\n var {\n skipStart = 0,\n skipEnd = 0\n } = _ref7;\n return span(this.getStart().move(skipStart).data, this.getEnd().move(-skipEnd).data);\n }\n sliceStartChars(_ref8) {\n var {\n skipStart = 0,\n chars\n } = _ref8;\n return span(this.getStart().move(skipStart).data, this.getStart().move(skipStart + chars).data);\n }\n sliceEndChars(_ref9) {\n var {\n skipEnd = 0,\n chars\n } = _ref9;\n return span(this.getEnd().move(skipEnd - chars).data, this.getStart().move(-skipEnd).data);\n }\n }\n _exports.SourceSpan = SourceSpan;\n class CharPositionSpan {\n constructor(source, charPositions) {\n this.source = source;\n this.charPositions = charPositions;\n this.kind = \"CharPosition\"\n /* CharPosition */;\n\n this._locPosSpan = null;\n }\n wrap() {\n return new SourceSpan(this);\n }\n asString() {\n return this.source.slice(this.charPositions.start.charPos, this.charPositions.end.charPos);\n }\n getModule() {\n return this.source.module;\n }\n getStart() {\n return this.charPositions.start;\n }\n getEnd() {\n return this.charPositions.end;\n }\n locDidUpdate() {}\n toHbsSpan() {\n var locPosSpan = this._locPosSpan;\n if (locPosSpan === null) {\n var start = this.charPositions.start.toHbsPos();\n var end = this.charPositions.end.toHbsPos();\n if (start === null || end === null) {\n locPosSpan = this._locPosSpan = BROKEN;\n } else {\n locPosSpan = this._locPosSpan = new HbsSpan(this.source, {\n start,\n end\n });\n }\n }\n return locPosSpan === BROKEN ? null : locPosSpan;\n }\n serialize() {\n var {\n start: {\n charPos: start\n },\n end: {\n charPos: end\n }\n } = this.charPositions;\n if (start === end) {\n return start;\n } else {\n return [start, end];\n }\n }\n toCharPosSpan() {\n return this;\n }\n }\n class HbsSpan {\n constructor(source, hbsPositions, providedHbsLoc) {\n if (providedHbsLoc === void 0) {\n providedHbsLoc = null;\n }\n this.source = source;\n this.hbsPositions = hbsPositions;\n this.kind = \"HbsPosition\"\n /* HbsPosition */;\n\n this._charPosSpan = null;\n this._providedHbsLoc = providedHbsLoc;\n }\n serialize() {\n var charPos = this.toCharPosSpan();\n return charPos === null ? \"Broken\"\n /* Broken */ : charPos.wrap().serialize();\n }\n wrap() {\n return new SourceSpan(this);\n }\n updateProvided(pos, edge) {\n if (this._providedHbsLoc) {\n this._providedHbsLoc[edge] = pos;\n } // invalidate computed character offsets\n\n this._charPosSpan = null;\n this._providedHbsLoc = {\n start: pos,\n end: pos\n };\n }\n locDidUpdate(_ref10) {\n var {\n start,\n end\n } = _ref10;\n if (start !== undefined) {\n this.updateProvided(start, 'start');\n this.hbsPositions.start = new HbsPosition(this.source, start, null);\n }\n if (end !== undefined) {\n this.updateProvided(end, 'end');\n this.hbsPositions.end = new HbsPosition(this.source, end, null);\n }\n }\n asString() {\n var span = this.toCharPosSpan();\n return span === null ? '' : span.asString();\n }\n getModule() {\n return this.source.module;\n }\n getStart() {\n return this.hbsPositions.start;\n }\n getEnd() {\n return this.hbsPositions.end;\n }\n toHbsLoc() {\n return {\n start: this.hbsPositions.start.hbsPos,\n end: this.hbsPositions.end.hbsPos\n };\n }\n toHbsSpan() {\n return this;\n }\n toCharPosSpan() {\n var charPosSpan = this._charPosSpan;\n if (charPosSpan === null) {\n var start = this.hbsPositions.start.toCharPos();\n var end = this.hbsPositions.end.toCharPos();\n if (start && end) {\n charPosSpan = this._charPosSpan = new CharPositionSpan(this.source, {\n start,\n end\n });\n } else {\n charPosSpan = this._charPosSpan = BROKEN;\n return null;\n }\n }\n return charPosSpan === BROKEN ? null : charPosSpan;\n }\n }\n class InvisibleSpan {\n constructor(kind,\n // whatever was provided, possibly broken\n loc,\n // if the span represents a synthetic string\n string) {\n if (string === void 0) {\n string = null;\n }\n this.kind = kind;\n this.loc = loc;\n this.string = string;\n }\n serialize() {\n switch (this.kind) {\n case \"Broken\"\n /* Broken */:\n\n case \"NonExistent\"\n /* NonExistent */:\n return this.kind;\n case \"InternalsSynthetic\"\n /* InternalsSynthetic */:\n return this.string || '';\n }\n }\n wrap() {\n return new SourceSpan(this);\n }\n asString() {\n return this.string || '';\n }\n locDidUpdate(_ref11) {\n var {\n start,\n end\n } = _ref11;\n if (start !== undefined) {\n this.loc.start = start;\n }\n if (end !== undefined) {\n this.loc.end = end;\n }\n }\n getModule() {\n // TODO: Make this reflect the actual module this span originated from\n return 'an unknown module';\n }\n getStart() {\n return new InvisiblePosition(this.kind, this.loc.start);\n }\n getEnd() {\n return new InvisiblePosition(this.kind, this.loc.end);\n }\n toCharPosSpan() {\n return this;\n }\n toHbsSpan() {\n return null;\n }\n toHbsLoc() {\n return BROKEN_LOCATION;\n }\n }\n var span = match(m => m.when(\"HbsPosition\"\n /* HbsPosition */, \"HbsPosition\"\n /* HbsPosition */, (left, right) => new HbsSpan(left.source, {\n start: left,\n end: right\n }).wrap()).when(\"CharPosition\"\n /* CharPosition */, \"CharPosition\"\n /* CharPosition */, (left, right) => new CharPositionSpan(left.source, {\n start: left,\n end: right\n }).wrap()).when(\"CharPosition\"\n /* CharPosition */, \"HbsPosition\"\n /* HbsPosition */, (left, right) => {\n var rightCharPos = right.toCharPos();\n if (rightCharPos === null) {\n return new InvisibleSpan(\"Broken\"\n /* Broken */, BROKEN_LOCATION).wrap();\n } else {\n return span(left, rightCharPos);\n }\n }).when(\"HbsPosition\"\n /* HbsPosition */, \"CharPosition\"\n /* CharPosition */, (left, right) => {\n var leftCharPos = left.toCharPos();\n if (leftCharPos === null) {\n return new InvisibleSpan(\"Broken\"\n /* Broken */, BROKEN_LOCATION).wrap();\n } else {\n return span(leftCharPos, right);\n }\n }).when(IsInvisible, MatchAny, left => new InvisibleSpan(left.kind, BROKEN_LOCATION).wrap()).when(MatchAny, IsInvisible, (_, right) => new InvisibleSpan(right.kind, BROKEN_LOCATION).wrap()));\n\n // eslint-disable-next-line import/no-extraneous-dependencies\n class Source {\n constructor(source, module) {\n if (module === void 0) {\n module = 'an unknown module';\n }\n this.source = source;\n this.module = module;\n }\n /**\n * Validate that the character offset represents a position in the source string.\n */\n\n check(offset) {\n return offset >= 0 && offset <= this.source.length;\n }\n slice(start, end) {\n return this.source.slice(start, end);\n }\n offsetFor(line, column) {\n return SourceOffset.forHbsPos(this, {\n line,\n column\n });\n }\n spanFor(_ref12) {\n var {\n start,\n end\n } = _ref12;\n return SourceSpan.forHbsLoc(this, {\n start: {\n line: start.line,\n column: start.column\n },\n end: {\n line: end.line,\n column: end.column\n }\n });\n }\n hbsPosFor(offset) {\n var seenLines = 0;\n var seenChars = 0;\n if (offset > this.source.length) {\n return null;\n }\n while (true) {\n var nextLine = this.source.indexOf('\\n', seenChars);\n if (offset <= nextLine || nextLine === -1) {\n return {\n line: seenLines + 1,\n column: offset - seenChars\n };\n } else {\n seenLines += 1;\n seenChars = nextLine + 1;\n }\n }\n }\n charPosFor(position) {\n var {\n line,\n column\n } = position;\n var sourceString = this.source;\n var sourceLength = sourceString.length;\n var seenLines = 0;\n var seenChars = 0;\n while (true) {\n if (seenChars >= sourceLength) return sourceLength;\n var nextLine = this.source.indexOf('\\n', seenChars);\n if (nextLine === -1) nextLine = this.source.length;\n if (seenLines === line - 1) {\n if (seenChars + column > nextLine) return nextLine;\n if (true /* DEBUG */) {\n var roundTrip = this.hbsPosFor(seenChars + column);\n }\n return seenChars + column;\n } else if (nextLine === -1) {\n return 0;\n } else {\n seenLines += 1;\n seenChars = nextLine + 1;\n }\n }\n }\n }\n _exports.Source = Source;\n class PathExpressionImplV1 {\n constructor(original, head, tail, loc) {\n this.original = original;\n this.loc = loc;\n this.type = 'PathExpression';\n this.this = false;\n this.data = false; // Cache for the head value.\n\n this._head = undefined;\n var parts = tail.slice();\n if (head.type === 'ThisHead') {\n this.this = true;\n } else if (head.type === 'AtHead') {\n this.data = true;\n parts.unshift(head.name.slice(1));\n } else {\n parts.unshift(head.name);\n }\n this.parts = parts;\n }\n get head() {\n if (this._head) {\n return this._head;\n }\n var firstPart;\n if (this.this) {\n firstPart = 'this';\n } else if (this.data) {\n firstPart = \"@\" + this.parts[0];\n } else {\n firstPart = this.parts[0];\n }\n var firstPartLoc = this.loc.collapse('start').sliceStartChars({\n chars: firstPart.length\n }).loc;\n return this._head = publicBuilder.head(firstPart, firstPartLoc);\n }\n get tail() {\n return this.this ? this.parts : this.parts.slice(1);\n }\n }\n var _SOURCE;\n function SOURCE() {\n if (!_SOURCE) {\n _SOURCE = new Source('', '(synthetic)');\n }\n return _SOURCE;\n }\n function buildMustache(path, params, hash, raw, loc, strip) {\n if (typeof path === 'string') {\n path = buildPath(path);\n }\n return {\n type: 'MustacheStatement',\n path,\n params: params || [],\n hash: hash || buildHash([]),\n escaped: !raw,\n trusting: !!raw,\n loc: buildLoc(loc || null),\n strip: strip || {\n open: false,\n close: false\n }\n };\n }\n function buildBlock(path, params, hash, _defaultBlock, _elseBlock, loc, openStrip, inverseStrip, closeStrip) {\n var defaultBlock;\n var elseBlock;\n if (_defaultBlock.type === 'Template') {\n defaultBlock = (0, _util.assign)({}, _defaultBlock, {\n type: 'Block'\n });\n } else {\n defaultBlock = _defaultBlock;\n }\n if (_elseBlock !== undefined && _elseBlock !== null && _elseBlock.type === 'Template') {\n elseBlock = (0, _util.assign)({}, _elseBlock, {\n type: 'Block'\n });\n } else {\n elseBlock = _elseBlock;\n }\n return {\n type: 'BlockStatement',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n program: defaultBlock || null,\n inverse: elseBlock || null,\n loc: buildLoc(loc || null),\n openStrip: openStrip || {\n open: false,\n close: false\n },\n inverseStrip: inverseStrip || {\n open: false,\n close: false\n },\n closeStrip: closeStrip || {\n open: false,\n close: false\n }\n };\n }\n function buildElementModifier(path, params, hash, loc) {\n return {\n type: 'ElementModifierStatement',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n loc: buildLoc(loc || null)\n };\n }\n function buildPartial(name, params, hash, indent, loc) {\n return {\n type: 'PartialStatement',\n name: name,\n params: params || [],\n hash: hash || buildHash([]),\n indent: indent || '',\n strip: {\n open: false,\n close: false\n },\n loc: buildLoc(loc || null)\n };\n }\n function buildComment(value, loc) {\n return {\n type: 'CommentStatement',\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildMustacheComment(value, loc) {\n return {\n type: 'MustacheCommentStatement',\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildConcat(parts, loc) {\n if (!(0, _util.isPresent)(parts)) {\n throw new Error(\"b.concat requires at least one part\");\n }\n return {\n type: 'ConcatStatement',\n parts: parts || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildElement(tag, options) {\n if (options === void 0) {\n options = {};\n }\n var {\n attrs,\n blockParams,\n modifiers,\n comments,\n children,\n loc\n } = options;\n var tagName; // this is used for backwards compat, prior to `selfClosing` being part of the ElementNode AST\n\n var selfClosing = false;\n if (typeof tag === 'object') {\n selfClosing = tag.selfClosing;\n tagName = tag.name;\n } else if (tag.slice(-1) === '/') {\n tagName = tag.slice(0, -1);\n selfClosing = true;\n } else {\n tagName = tag;\n }\n return {\n type: 'ElementNode',\n tag: tagName,\n selfClosing: selfClosing,\n attributes: attrs || [],\n blockParams: blockParams || [],\n modifiers: modifiers || [],\n comments: comments || [],\n children: children || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildAttr(name, value, loc) {\n return {\n type: 'AttrNode',\n name: name,\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildText(chars, loc) {\n return {\n type: 'TextNode',\n chars: chars || '',\n loc: buildLoc(loc || null)\n };\n } // Expressions\n\n function buildSexpr(path, params, hash, loc) {\n return {\n type: 'SubExpression',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n loc: buildLoc(loc || null)\n };\n }\n function headToString(head) {\n switch (head.type) {\n case 'AtHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n case 'ThisHead':\n return {\n original: \"this\",\n parts: []\n };\n case 'VarHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n }\n }\n function buildHead(original, loc) {\n var [head, ...tail] = original.split('.');\n var headNode;\n if (head === 'this') {\n headNode = {\n type: 'ThisHead',\n loc: buildLoc(loc || null)\n };\n } else if (head[0] === '@') {\n headNode = {\n type: 'AtHead',\n name: head,\n loc: buildLoc(loc || null)\n };\n } else {\n headNode = {\n type: 'VarHead',\n name: head,\n loc: buildLoc(loc || null)\n };\n }\n return {\n head: headNode,\n tail\n };\n }\n function buildThis(loc) {\n return {\n type: 'ThisHead',\n loc: buildLoc(loc || null)\n };\n }\n function buildAtName(name, loc) {\n return {\n type: 'AtHead',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildVar(name, loc) {\n return {\n type: 'VarHead',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildHeadFromString(head, loc) {\n if (head[0] === '@') {\n return buildAtName(head, loc);\n } else if (head === 'this') {\n return buildThis(loc);\n } else {\n return buildVar(head, loc);\n }\n }\n function buildNamedBlockName(name, loc) {\n return {\n type: 'NamedBlockName',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildCleanPath(head, tail, loc) {\n var {\n original: originalHead,\n parts: headParts\n } = headToString(head);\n var parts = [...headParts, ...tail];\n var original = [...originalHead, ...parts].join('.');\n return new PathExpressionImplV1(original, head, tail, buildLoc(loc || null));\n }\n function buildPath(path, loc) {\n if (typeof path !== 'string') {\n if ('type' in path) {\n return path;\n } else {\n var {\n head: _head,\n tail: _tail\n } = buildHead(path.head, SourceSpan.broken());\n var {\n original: originalHead\n } = headToString(_head);\n return new PathExpressionImplV1([originalHead, ..._tail].join('.'), _head, _tail, buildLoc(loc || null));\n }\n }\n var {\n head,\n tail\n } = buildHead(path, SourceSpan.broken());\n return new PathExpressionImplV1(path, head, tail, buildLoc(loc || null));\n }\n function buildLiteral(type, value, loc) {\n return {\n type,\n value,\n original: value,\n loc: buildLoc(loc || null)\n };\n } // Miscellaneous\n\n function buildHash(pairs, loc) {\n return {\n type: 'Hash',\n pairs: pairs || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildPair(key, value, loc) {\n return {\n type: 'HashPair',\n key: key,\n value,\n loc: buildLoc(loc || null)\n };\n }\n function buildProgram(body, blockParams, loc) {\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildBlockItself(body, blockParams, chained, loc) {\n if (chained === void 0) {\n chained = false;\n }\n return {\n type: 'Block',\n body: body || [],\n blockParams: blockParams || [],\n chained,\n loc: buildLoc(loc || null)\n };\n }\n function buildTemplate(body, blockParams, loc) {\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildPosition(line, column) {\n return {\n line,\n column\n };\n }\n function buildLoc() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1) {\n var _loc = args[0];\n if (_loc && typeof _loc === 'object') {\n return SourceSpan.forHbsLoc(SOURCE(), _loc);\n } else {\n return SourceSpan.forHbsLoc(SOURCE(), SYNTHETIC_LOCATION);\n }\n } else {\n var [startLine, startColumn, endLine, endColumn, _source] = args;\n var source = _source ? new Source('', _source) : SOURCE();\n return SourceSpan.forHbsLoc(source, {\n start: {\n line: startLine,\n column: startColumn\n },\n end: {\n line: endLine,\n column: endColumn\n }\n });\n }\n }\n var publicBuilder = {\n mustache: buildMustache,\n block: buildBlock,\n partial: buildPartial,\n comment: buildComment,\n mustacheComment: buildMustacheComment,\n element: buildElement,\n elementModifier: buildElementModifier,\n attr: buildAttr,\n text: buildText,\n sexpr: buildSexpr,\n concat: buildConcat,\n hash: buildHash,\n pair: buildPair,\n literal: buildLiteral,\n program: buildProgram,\n blockItself: buildBlockItself,\n template: buildTemplate,\n loc: buildLoc,\n pos: buildPosition,\n path: buildPath,\n fullPath: buildCleanPath,\n head: buildHeadFromString,\n at: buildAtName,\n var: buildVar,\n this: buildThis,\n blockName: buildNamedBlockName,\n string: literal('StringLiteral'),\n boolean: literal('BooleanLiteral'),\n number: literal('NumberLiteral'),\n undefined() {\n return buildLiteral('UndefinedLiteral', undefined);\n },\n null() {\n return buildLiteral('NullLiteral', null);\n }\n };\n _exports.builders = publicBuilder;\n function literal(type) {\n return function (value, loc) {\n return buildLiteral(type, value, loc);\n };\n }\n var api = /*#__PURE__*/Object.freeze({\n __proto__: null\n });\n\n /**\n * A free variable is resolved according to a resolution rule:\n *\n * 1. Strict resolution\n * 2. Namespaced resolution\n * 3. Fallback resolution\n */\n\n /**\n * Strict resolution is used:\n *\n * 1. in a strict mode template\n * 2. in an unambiguous invocation with dot paths\n */\n _exports.ASTv1 = _exports.AST = api;\n class StrictResolution {\n constructor() {\n this.isAngleBracket = false;\n }\n resolution() {\n return 31\n /* GetStrictFree */;\n }\n\n serialize() {\n return 'Strict';\n }\n }\n var STRICT_RESOLUTION = new StrictResolution();\n /**\n * A `LooseModeResolution` includes:\n *\n * - 0 or more namespaces to resolve the variable in\n * - optional fallback behavior\n *\n * In practice, there are a limited number of possible combinations of these degrees of freedom,\n * and they are captured by the `Ambiguity` union below.\n */\n\n class LooseModeResolution {\n constructor(ambiguity, isAngleBracket) {\n if (isAngleBracket === void 0) {\n isAngleBracket = false;\n }\n this.ambiguity = ambiguity;\n this.isAngleBracket = isAngleBracket;\n }\n /**\n * Namespaced resolution is used in an unambiguous syntax position:\n *\n * 1. `(sexp)` (namespace: `Helper`)\n * 2. `{{#block}}` (namespace: `Component`)\n * 3. `<a {{modifier}}>` (namespace: `Modifier`)\n * 4. `<Component />` (namespace: `Component`)\n *\n * @see {NamespacedAmbiguity}\n */\n\n static namespaced(namespace, isAngleBracket) {\n if (isAngleBracket === void 0) {\n isAngleBracket = false;\n }\n return new LooseModeResolution({\n namespaces: [namespace],\n fallback: false\n }, isAngleBracket);\n }\n /**\n * Fallback resolution is used when no namespaced resolutions are possible, but fallback\n * resolution is still allowed.\n *\n * ```hbs\n * {{x.y}}\n * ```\n *\n * @see {FallbackAmbiguity}\n */\n\n static fallback() {\n return new LooseModeResolution({\n namespaces: [],\n fallback: true\n });\n }\n /**\n * Append resolution is used when the variable should be resolved in both the `component` and\n * `helper` namespaces. Fallback resolution is optional.\n *\n * ```hbs\n * {{x}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces with fallback resolution.\n *\n * ```hbs\n * {{x y}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces without fallback\n * resolution.\n *\n * @see {ComponentOrHelperAmbiguity}\n */\n\n static append(_ref13) {\n var {\n invoke\n } = _ref13;\n return new LooseModeResolution({\n namespaces: [\"Component\"\n /* Component */, \"Helper\"\n /* Helper */],\n\n fallback: !invoke\n });\n }\n /**\n * Trusting append resolution is used when the variable should be resolved in both the `component` and\n * `helper` namespaces. Fallback resolution is optional.\n *\n * ```hbs\n * {{{x}}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces with fallback resolution.\n *\n * ```hbs\n * {{{x y}}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces without fallback\n * resolution.\n *\n * @see {HelperAmbiguity}\n */\n\n static trustingAppend(_ref14) {\n var {\n invoke\n } = _ref14;\n return new LooseModeResolution({\n namespaces: [\"Helper\"\n /* Helper */],\n\n fallback: !invoke\n });\n }\n /**\n * Attribute resolution is used when the variable should be resolved as a `helper` with fallback\n * resolution.\n *\n * ```hbs\n * <a href={{x}} />\n * <a href=\"{{x}}.html\" />\n * ```\n *\n * ^ resolved in the `helper` namespace with fallback\n *\n * @see {HelperAmbiguity}\n */\n\n static attr() {\n return new LooseModeResolution({\n namespaces: [\"Helper\"\n /* Helper */],\n\n fallback: true\n });\n }\n resolution() {\n if (this.ambiguity.namespaces.length === 0) {\n return 31\n /* GetStrictFree */;\n } else if (this.ambiguity.namespaces.length === 1) {\n if (this.ambiguity.fallback) {\n // simple namespaced resolution with fallback must be attr={{x}}\n return 36\n /* GetFreeAsHelperHeadOrThisFallback */;\n } else {\n // simple namespaced resolution without fallback\n switch (this.ambiguity.namespaces[0]) {\n case \"Helper\"\n /* Helper */:\n return 37\n /* GetFreeAsHelperHead */;\n\n case \"Modifier\"\n /* Modifier */:\n return 38\n /* GetFreeAsModifierHead */;\n\n case \"Component\"\n /* Component */:\n return 39\n /* GetFreeAsComponentHead */;\n }\n }\n } else if (this.ambiguity.fallback) {\n // component or helper + fallback ({{something}})\n return 34\n /* GetFreeAsComponentOrHelperHeadOrThisFallback */;\n } else {\n // component or helper without fallback ({{something something}})\n return 35\n /* GetFreeAsComponentOrHelperHead */;\n }\n }\n\n serialize() {\n if (this.ambiguity.namespaces.length === 0) {\n return 'Loose';\n } else if (this.ambiguity.namespaces.length === 1) {\n if (this.ambiguity.fallback) {\n // simple namespaced resolution with fallback must be attr={{x}}\n return ['ambiguous', \"Attr\"\n /* Attr */];\n } else {\n return ['ns', this.ambiguity.namespaces[0]];\n }\n } else if (this.ambiguity.fallback) {\n // component or helper + fallback ({{something}})\n return ['ambiguous', \"Append\"\n /* Append */];\n } else {\n // component or helper without fallback ({{something something}})\n return ['ambiguous', \"Invoke\"\n /* Invoke */];\n }\n }\n }\n\n var ARGUMENT_RESOLUTION = LooseModeResolution.fallback();\n function loadResolution(resolution) {\n if (typeof resolution === 'string') {\n switch (resolution) {\n case 'Loose':\n return LooseModeResolution.fallback();\n case 'Strict':\n return STRICT_RESOLUTION;\n }\n }\n switch (resolution[0]) {\n case 'ambiguous':\n switch (resolution[1]) {\n case \"Append\"\n /* Append */:\n return LooseModeResolution.append({\n invoke: false\n });\n case \"Attr\"\n /* Attr */:\n return LooseModeResolution.attr();\n case \"Invoke\"\n /* Invoke */:\n return LooseModeResolution.append({\n invoke: true\n });\n }\n case 'ns':\n return LooseModeResolution.namespaced(resolution[1]);\n }\n }\n function node(name) {\n if (name !== undefined) {\n var type = name;\n return {\n fields() {\n return class {\n constructor(fields) {\n this.type = type;\n (0, _util.assign)(this, fields);\n }\n };\n }\n };\n } else {\n return {\n fields() {\n return class {\n constructor(fields) {\n (0, _util.assign)(this, fields);\n }\n };\n }\n };\n }\n }\n\n /**\n * Corresponds to syntaxes with positional and named arguments:\n *\n * - SubExpression\n * - Invoking Append\n * - Invoking attributes\n * - InvokeBlock\n *\n * If `Args` is empty, the `SourceOffsets` for this node should be the collapsed position\n * immediately after the parent call node's `callee`.\n */\n\n class Args extends node().fields() {\n static empty(loc) {\n return new Args({\n loc,\n positional: PositionalArguments.empty(loc),\n named: NamedArguments.empty(loc)\n });\n }\n static named(named) {\n return new Args({\n loc: named.loc,\n positional: PositionalArguments.empty(named.loc.collapse('end')),\n named\n });\n }\n nth(offset) {\n return this.positional.nth(offset);\n }\n get(name) {\n return this.named.get(name);\n }\n isEmpty() {\n return this.positional.isEmpty() && this.named.isEmpty();\n }\n }\n /**\n * Corresponds to positional arguments.\n *\n * If `PositionalArguments` is empty, the `SourceOffsets` for this node should be the collapsed\n * position immediately after the parent call node's `callee`.\n */\n\n class PositionalArguments extends node().fields() {\n static empty(loc) {\n return new PositionalArguments({\n loc,\n exprs: []\n });\n }\n get size() {\n return this.exprs.length;\n }\n nth(offset) {\n return this.exprs[offset] || null;\n }\n isEmpty() {\n return this.exprs.length === 0;\n }\n }\n /**\n * Corresponds to named arguments.\n *\n * If `PositionalArguments` and `NamedArguments` are empty, the `SourceOffsets` for this node should\n * be the same as the `Args` node that contains this node.\n *\n * If `PositionalArguments` is not empty but `NamedArguments` is empty, the `SourceOffsets` for this\n * node should be the collapsed position immediately after the last positional argument.\n */\n\n class NamedArguments extends node().fields() {\n static empty(loc) {\n return new NamedArguments({\n loc,\n entries: []\n });\n }\n get size() {\n return this.entries.length;\n }\n get(name) {\n var entry = this.entries.filter(e => e.name.chars === name)[0];\n return entry ? entry.value : null;\n }\n isEmpty() {\n return this.entries.length === 0;\n }\n }\n /**\n * Corresponds to a single named argument.\n *\n * ```hbs\n * x=<expr>\n * ```\n */\n\n class NamedArgument {\n constructor(options) {\n this.loc = options.name.loc.extend(options.value.loc);\n this.name = options.name;\n this.value = options.value;\n }\n }\n\n /**\n * `HtmlAttr` nodes are valid HTML attributes, with or without a value.\n *\n * Exceptions:\n *\n * - `...attributes` is `SplatAttr`\n * - `@x=<value>` is `ComponentArg`\n */\n\n class HtmlAttr extends node('HtmlAttr').fields() {}\n class SplatAttr extends node('SplatAttr').fields() {}\n /**\n * Corresponds to an argument passed by a component (`@x=<value>`)\n */\n\n class ComponentArg extends node().fields() {\n /**\n * Convert the component argument into a named argument node\n */\n toNamedArgument() {\n return new NamedArgument({\n name: this.name,\n value: this.value\n });\n }\n }\n /**\n * An `ElementModifier` is just a normal call node in modifier position.\n */\n\n class ElementModifier extends node('ElementModifier').fields() {}\n class SpanList {\n constructor(span) {\n if (span === void 0) {\n span = [];\n }\n this._span = span;\n }\n static range(span, fallback) {\n if (fallback === void 0) {\n fallback = SourceSpan.NON_EXISTENT;\n }\n return new SpanList(span.map(loc)).getRangeOffset(fallback);\n }\n add(offset) {\n this._span.push(offset);\n }\n getRangeOffset(fallback) {\n if (this._span.length === 0) {\n return fallback;\n } else {\n var first = this._span[0];\n var last = this._span[this._span.length - 1];\n return first.extend(last);\n }\n }\n }\n _exports.SpanList = SpanList;\n function loc(span) {\n if (Array.isArray(span)) {\n var first = span[0];\n var last = span[span.length - 1];\n return loc(first).extend(loc(last));\n } else if (span instanceof SourceSpan) {\n return span;\n } else {\n return span.loc;\n }\n }\n function hasSpan(span) {\n if (Array.isArray(span) && span.length === 0) {\n return false;\n }\n return true;\n }\n function maybeLoc(location, fallback) {\n if (hasSpan(location)) {\n return loc(location);\n } else {\n return fallback;\n }\n }\n class GlimmerComment extends node('GlimmerComment').fields() {}\n class HtmlText extends node('HtmlText').fields() {}\n class HtmlComment extends node('HtmlComment').fields() {}\n class AppendContent extends node('AppendContent').fields() {\n get callee() {\n if (this.value.type === 'Call') {\n return this.value.callee;\n } else {\n return this.value;\n }\n }\n get args() {\n if (this.value.type === 'Call') {\n return this.value.args;\n } else {\n return Args.empty(this.value.loc.collapse('end'));\n }\n }\n }\n class InvokeBlock extends node('InvokeBlock').fields() {}\n /**\n * Corresponds to a component invocation. When the content of a component invocation contains no\n * named blocks, `blocks` contains a single named block named `\"default\"`. When a component\n * invocation is self-closing, `blocks` is empty.\n */\n\n class InvokeComponent extends node('InvokeComponent').fields() {\n get args() {\n var entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.callee.loc.collapse('end')),\n entries\n }));\n }\n }\n /**\n * Corresponds to a simple HTML element. The AST allows component arguments and modifiers to support\n * future extensions.\n */\n\n class SimpleElement extends node('SimpleElement').fields() {\n get args() {\n var entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.tag.loc.collapse('end')),\n entries\n }));\n }\n }\n\n /**\n * Corresponds to a Handlebars literal.\n *\n * @see {LiteralValue}\n */\n\n class LiteralExpression extends node('Literal').fields() {\n toSlice() {\n return new SourceSlice({\n loc: this.loc,\n chars: this.value\n });\n }\n }\n /**\n * Returns true if an input {@see ExpressionNode} is a literal.\n */\n\n function isLiteral(node, kind) {\n if (node.type === 'Literal') {\n if (kind === undefined) {\n return true;\n } else if (kind === 'null') {\n return node.value === null;\n } else {\n return typeof node.value === kind;\n }\n } else {\n return false;\n }\n }\n /**\n * Corresponds to a path in expression position.\n *\n * ```hbs\n * this\n * this.x\n * @x\n * @x.y\n * x\n * x.y\n * ```\n */\n\n class PathExpression extends node('Path').fields() {}\n /**\n * Corresponds to a parenthesized call expression.\n *\n * ```hbs\n * (x)\n * (x.y)\n * (x y)\n * (x.y z)\n * ```\n */\n\n class CallExpression extends node('Call').fields() {}\n /**\n * Corresponds to a possible deprecated helper call. Must be:\n *\n * 1. A free variable (not this.foo, not @foo, not local).\n * 2. Argument-less.\n * 3. In a component invocation's named argument position.\n * 4. Not parenthesized (not @bar={{(helper)}}).\n * 5. Not interpolated (not @bar=\"{{helper}}\").\n *\n * ```hbs\n * <Foo @bar={{helper}} />\n * ```\n */\n\n class DeprecatedCallExpression extends node('DeprecatedCall').fields() {}\n /**\n * Corresponds to an interpolation in attribute value position.\n *\n * ```hbs\n * <a href=\"{{url}}.html\"\n * ```\n */\n\n class InterpolateExpression extends node('Interpolate').fields() {}\n\n /**\n * Corresponds to `this` at the head of an expression.\n */\n\n class ThisReference extends node('This').fields() {}\n /**\n * Corresponds to `@<ident>` at the beginning of an expression.\n */\n\n class ArgReference extends node('Arg').fields() {}\n /**\n * Corresponds to `<ident>` at the beginning of an expression, when `<ident>` is in the current\n * block's scope.\n */\n\n class LocalVarReference extends node('Local').fields() {}\n /**\n * Corresponds to `<ident>` at the beginning of an expression, when `<ident>` is *not* in the\n * current block's scope.\n *\n * The `resolution: FreeVarResolution` field describes how to resolve the free variable.\n *\n * Note: In strict mode, it must always be a variable that is in a concrete JavaScript scope that\n * the template will be installed into.\n */\n\n class FreeVarReference extends node('Free').fields() {}\n\n /**\n * Corresponds to an entire template.\n */\n\n class Template extends node().fields() {}\n /**\n * Represents a block. In principle this could be merged with `NamedBlock`, because all cases\n * involving blocks have at least a notional name.\n */\n\n class Block extends node().fields() {}\n /**\n * Corresponds to a collection of named blocks.\n */\n\n class NamedBlocks extends node().fields() {\n get(name) {\n return this.blocks.filter(block => block.name.chars === name)[0] || null;\n }\n }\n /**\n * Corresponds to a single named block. This is used for anonymous named blocks (`default` and\n * `else`).\n */\n\n class NamedBlock extends node().fields() {\n get args() {\n var entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.name.loc.collapse('end')),\n entries\n }));\n }\n }\n var api$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n StrictResolution: StrictResolution,\n STRICT_RESOLUTION: STRICT_RESOLUTION,\n LooseModeResolution: LooseModeResolution,\n ARGUMENT_RESOLUTION: ARGUMENT_RESOLUTION,\n loadResolution: loadResolution,\n node: node,\n Args: Args,\n PositionalArguments: PositionalArguments,\n NamedArguments: NamedArguments,\n NamedArgument: NamedArgument,\n HtmlAttr: HtmlAttr,\n SplatAttr: SplatAttr,\n ComponentArg: ComponentArg,\n ElementModifier: ElementModifier,\n GlimmerComment: GlimmerComment,\n HtmlText: HtmlText,\n HtmlComment: HtmlComment,\n AppendContent: AppendContent,\n InvokeBlock: InvokeBlock,\n InvokeComponent: InvokeComponent,\n SimpleElement: SimpleElement,\n LiteralExpression: LiteralExpression,\n isLiteral: isLiteral,\n PathExpression: PathExpression,\n CallExpression: CallExpression,\n DeprecatedCallExpression: DeprecatedCallExpression,\n InterpolateExpression: InterpolateExpression,\n ThisReference: ThisReference,\n ArgReference: ArgReference,\n LocalVarReference: LocalVarReference,\n FreeVarReference: FreeVarReference,\n Template: Template,\n Block: Block,\n NamedBlocks: NamedBlocks,\n NamedBlock: NamedBlock\n });\n _exports.ASTv2 = api$1;\n var ATTR_VALUE_REGEX_TEST = /[\\xA0\"&]/;\n var ATTR_VALUE_REGEX_REPLACE = new RegExp(ATTR_VALUE_REGEX_TEST.source, 'g');\n var TEXT_REGEX_TEST = /[\\xA0&<>]/;\n var TEXT_REGEX_REPLACE = new RegExp(TEXT_REGEX_TEST.source, 'g');\n function attrValueReplacer(char) {\n switch (char.charCodeAt(0)) {\n case 160\n /* NBSP */:\n return '&nbsp;';\n case 34\n /* QUOT */:\n return '&quot;';\n case 38\n /* AMP */:\n return '&amp;';\n default:\n return char;\n }\n }\n function textReplacer(char) {\n switch (char.charCodeAt(0)) {\n case 160\n /* NBSP */:\n return '&nbsp;';\n case 38\n /* AMP */:\n return '&amp;';\n case 60\n /* LT */:\n return '&lt;';\n case 62\n /* GT */:\n return '&gt;';\n default:\n return char;\n }\n }\n function escapeAttrValue(attrValue) {\n if (ATTR_VALUE_REGEX_TEST.test(attrValue)) {\n return attrValue.replace(ATTR_VALUE_REGEX_REPLACE, attrValueReplacer);\n }\n return attrValue;\n }\n function escapeText(text) {\n if (TEXT_REGEX_TEST.test(text)) {\n return text.replace(TEXT_REGEX_REPLACE, textReplacer);\n }\n return text;\n }\n function sortByLoc(a, b) {\n // If either is invisible, don't try to order them\n if (a.loc.isInvisible || b.loc.isInvisible) {\n return 0;\n }\n if (a.loc.startPosition.line < b.loc.startPosition.line) {\n return -1;\n }\n if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column < b.loc.startPosition.column) {\n return -1;\n }\n if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column === b.loc.startPosition.column) {\n return 0;\n }\n return 1;\n }\n var voidMap = Object.create(null);\n var voidTagNames = 'area base br col command embed hr img input keygen link meta param source track wbr';\n voidTagNames.split(' ').forEach(tagName => {\n voidMap[tagName] = true;\n });\n var NON_WHITESPACE = /\\S/;\n /**\n * Examples when true:\n * - link\n * - liNK\n *\n * Examples when false:\n * - Link (component)\n */\n\n function isVoidTag(tag) {\n return voidMap[tag.toLowerCase()] && tag[0].toLowerCase() === tag[0];\n }\n class Printer {\n constructor(options) {\n this.buffer = '';\n this.options = options;\n }\n /*\n This is used by _all_ methods on this Printer class that add to `this.buffer`,\n it allows consumers of the printer to use alternate string representations for\n a given node.\n The primary use case for this are things like source -> source codemod utilities.\n For example, ember-template-recast attempts to always preserve the original string\n formatting in each AST node if no modifications are made to it.\n */\n\n handledByOverride(node, ensureLeadingWhitespace) {\n if (ensureLeadingWhitespace === void 0) {\n ensureLeadingWhitespace = false;\n }\n if (this.options.override !== undefined) {\n var result = this.options.override(node, this.options);\n if (typeof result === 'string') {\n if (ensureLeadingWhitespace && result !== '' && NON_WHITESPACE.test(result[0])) {\n result = \" \" + result;\n }\n this.buffer += result;\n return true;\n }\n }\n return false;\n }\n Node(node) {\n switch (node.type) {\n case 'MustacheStatement':\n case 'BlockStatement':\n case 'PartialStatement':\n case 'MustacheCommentStatement':\n case 'CommentStatement':\n case 'TextNode':\n case 'ElementNode':\n case 'AttrNode':\n case 'Block':\n case 'Template':\n return this.TopLevelStatement(node);\n case 'StringLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'UndefinedLiteral':\n case 'NullLiteral':\n case 'PathExpression':\n case 'SubExpression':\n return this.Expression(node);\n case 'Program':\n return this.Block(node);\n case 'ConcatStatement':\n // should have an AttrNode parent\n return this.ConcatStatement(node);\n case 'Hash':\n return this.Hash(node);\n case 'HashPair':\n return this.HashPair(node);\n case 'ElementModifierStatement':\n return this.ElementModifierStatement(node);\n }\n }\n Expression(expression) {\n switch (expression.type) {\n case 'StringLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'UndefinedLiteral':\n case 'NullLiteral':\n return this.Literal(expression);\n case 'PathExpression':\n return this.PathExpression(expression);\n case 'SubExpression':\n return this.SubExpression(expression);\n }\n }\n Literal(literal) {\n switch (literal.type) {\n case 'StringLiteral':\n return this.StringLiteral(literal);\n case 'BooleanLiteral':\n return this.BooleanLiteral(literal);\n case 'NumberLiteral':\n return this.NumberLiteral(literal);\n case 'UndefinedLiteral':\n return this.UndefinedLiteral(literal);\n case 'NullLiteral':\n return this.NullLiteral(literal);\n }\n }\n TopLevelStatement(statement) {\n switch (statement.type) {\n case 'MustacheStatement':\n return this.MustacheStatement(statement);\n case 'BlockStatement':\n return this.BlockStatement(statement);\n case 'PartialStatement':\n return this.PartialStatement(statement);\n case 'MustacheCommentStatement':\n return this.MustacheCommentStatement(statement);\n case 'CommentStatement':\n return this.CommentStatement(statement);\n case 'TextNode':\n return this.TextNode(statement);\n case 'ElementNode':\n return this.ElementNode(statement);\n case 'Block':\n case 'Template':\n return this.Block(statement);\n case 'AttrNode':\n // should have element\n return this.AttrNode(statement);\n }\n }\n Block(block) {\n /*\n When processing a template like:\n ```hbs\n {{#if whatever}}\n whatever\n {{else if somethingElse}}\n something else\n {{else}}\n fallback\n {{/if}}\n ```\n The AST still _effectively_ looks like:\n ```hbs\n {{#if whatever}}\n whatever\n {{else}}{{#if somethingElse}}\n something else\n {{else}}\n fallback\n {{/if}}{{/if}}\n ```\n The only way we can tell if that is the case is by checking for\n `block.chained`, but unfortunately when the actual statements are\n processed the `block.body[0]` node (which will always be a\n `BlockStatement`) has no clue that its ancestor `Block` node was\n chained.\n This \"forwards\" the `chained` setting so that we can check\n it later when processing the `BlockStatement`.\n */\n if (block.chained) {\n var firstChild = block.body[0];\n firstChild.chained = true;\n }\n if (this.handledByOverride(block)) {\n return;\n }\n this.TopLevelStatements(block.body);\n }\n TopLevelStatements(statements) {\n statements.forEach(statement => this.TopLevelStatement(statement));\n }\n ElementNode(el) {\n if (this.handledByOverride(el)) {\n return;\n }\n this.OpenElementNode(el);\n this.TopLevelStatements(el.children);\n this.CloseElementNode(el);\n }\n OpenElementNode(el) {\n this.buffer += \"<\" + el.tag;\n var parts = [...el.attributes, ...el.modifiers, ...el.comments].sort(sortByLoc);\n for (var part of parts) {\n this.buffer += ' ';\n switch (part.type) {\n case 'AttrNode':\n this.AttrNode(part);\n break;\n case 'ElementModifierStatement':\n this.ElementModifierStatement(part);\n break;\n case 'MustacheCommentStatement':\n this.MustacheCommentStatement(part);\n break;\n }\n }\n if (el.blockParams.length) {\n this.BlockParams(el.blockParams);\n }\n if (el.selfClosing) {\n this.buffer += ' /';\n }\n this.buffer += '>';\n }\n CloseElementNode(el) {\n if (el.selfClosing || isVoidTag(el.tag)) {\n return;\n }\n this.buffer += \"</\" + el.tag + \">\";\n }\n AttrNode(attr) {\n if (this.handledByOverride(attr)) {\n return;\n }\n var {\n name,\n value\n } = attr;\n this.buffer += name;\n if (value.type !== 'TextNode' || value.chars.length > 0) {\n this.buffer += '=';\n this.AttrNodeValue(value);\n }\n }\n AttrNodeValue(value) {\n if (value.type === 'TextNode') {\n this.buffer += '\"';\n this.TextNode(value, true);\n this.buffer += '\"';\n } else {\n this.Node(value);\n }\n }\n TextNode(text, isAttr) {\n if (this.handledByOverride(text)) {\n return;\n }\n if (this.options.entityEncoding === 'raw') {\n this.buffer += text.chars;\n } else if (isAttr) {\n this.buffer += escapeAttrValue(text.chars);\n } else {\n this.buffer += escapeText(text.chars);\n }\n }\n MustacheStatement(mustache) {\n if (this.handledByOverride(mustache)) {\n return;\n }\n this.buffer += mustache.escaped ? '{{' : '{{{';\n if (mustache.strip.open) {\n this.buffer += '~';\n }\n this.Expression(mustache.path);\n this.Params(mustache.params);\n this.Hash(mustache.hash);\n if (mustache.strip.close) {\n this.buffer += '~';\n }\n this.buffer += mustache.escaped ? '}}' : '}}}';\n }\n BlockStatement(block) {\n if (this.handledByOverride(block)) {\n return;\n }\n if (block.chained) {\n this.buffer += block.inverseStrip.open ? '{{~' : '{{';\n this.buffer += 'else ';\n } else {\n this.buffer += block.openStrip.open ? '{{~#' : '{{#';\n }\n this.Expression(block.path);\n this.Params(block.params);\n this.Hash(block.hash);\n if (block.program.blockParams.length) {\n this.BlockParams(block.program.blockParams);\n }\n if (block.chained) {\n this.buffer += block.inverseStrip.close ? '~}}' : '}}';\n } else {\n this.buffer += block.openStrip.close ? '~}}' : '}}';\n }\n this.Block(block.program);\n if (block.inverse) {\n if (!block.inverse.chained) {\n this.buffer += block.inverseStrip.open ? '{{~' : '{{';\n this.buffer += 'else';\n this.buffer += block.inverseStrip.close ? '~}}' : '}}';\n }\n this.Block(block.inverse);\n }\n if (!block.chained) {\n this.buffer += block.closeStrip.open ? '{{~/' : '{{/';\n this.Expression(block.path);\n this.buffer += block.closeStrip.close ? '~}}' : '}}';\n }\n }\n BlockParams(blockParams) {\n this.buffer += \" as |\" + blockParams.join(' ') + \"|\";\n }\n PartialStatement(partial) {\n if (this.handledByOverride(partial)) {\n return;\n }\n this.buffer += '{{>';\n this.Expression(partial.name);\n this.Params(partial.params);\n this.Hash(partial.hash);\n this.buffer += '}}';\n }\n ConcatStatement(concat) {\n if (this.handledByOverride(concat)) {\n return;\n }\n this.buffer += '\"';\n concat.parts.forEach(part => {\n if (part.type === 'TextNode') {\n this.TextNode(part, true);\n } else {\n this.Node(part);\n }\n });\n this.buffer += '\"';\n }\n MustacheCommentStatement(comment) {\n if (this.handledByOverride(comment)) {\n return;\n }\n this.buffer += \"{{!--\" + comment.value + \"--}}\";\n }\n ElementModifierStatement(mod) {\n if (this.handledByOverride(mod)) {\n return;\n }\n this.buffer += '{{';\n this.Expression(mod.path);\n this.Params(mod.params);\n this.Hash(mod.hash);\n this.buffer += '}}';\n }\n CommentStatement(comment) {\n if (this.handledByOverride(comment)) {\n return;\n }\n this.buffer += \"<!--\" + comment.value + \"-->\";\n }\n PathExpression(path) {\n if (this.handledByOverride(path)) {\n return;\n }\n this.buffer += path.original;\n }\n SubExpression(sexp) {\n if (this.handledByOverride(sexp)) {\n return;\n }\n this.buffer += '(';\n this.Expression(sexp.path);\n this.Params(sexp.params);\n this.Hash(sexp.hash);\n this.buffer += ')';\n }\n Params(params) {\n // TODO: implement a top level Params AST node (just like the Hash object)\n // so that this can also be overridden\n if (params.length) {\n params.forEach(param => {\n this.buffer += ' ';\n this.Expression(param);\n });\n }\n }\n Hash(hash) {\n if (this.handledByOverride(hash, true)) {\n return;\n }\n hash.pairs.forEach(pair => {\n this.buffer += ' ';\n this.HashPair(pair);\n });\n }\n HashPair(pair) {\n if (this.handledByOverride(pair)) {\n return;\n }\n this.buffer += pair.key;\n this.buffer += '=';\n this.Node(pair.value);\n }\n StringLiteral(str) {\n if (this.handledByOverride(str)) {\n return;\n }\n this.buffer += JSON.stringify(str.value);\n }\n BooleanLiteral(bool) {\n if (this.handledByOverride(bool)) {\n return;\n }\n this.buffer += bool.value;\n }\n NumberLiteral(number) {\n if (this.handledByOverride(number)) {\n return;\n }\n this.buffer += number.value;\n }\n UndefinedLiteral(node) {\n if (this.handledByOverride(node)) {\n return;\n }\n this.buffer += 'undefined';\n }\n NullLiteral(node) {\n if (this.handledByOverride(node)) {\n return;\n }\n this.buffer += 'null';\n }\n print(node) {\n var {\n options\n } = this;\n if (options.override) {\n var result = options.override(node, options);\n if (result !== undefined) {\n return result;\n }\n }\n this.buffer = '';\n this.Node(node);\n return this.buffer;\n }\n }\n function build(ast, options) {\n if (options === void 0) {\n options = {\n entityEncoding: 'transformed'\n };\n }\n if (!ast) {\n return '';\n }\n var printer = new Printer(options);\n return printer.print(ast);\n }\n function generateSyntaxError(message, location) {\n var {\n module,\n loc\n } = location;\n var {\n line,\n column\n } = loc.start;\n var code = location.asString();\n var quotedCode = code ? \"\\n\\n|\\n| \" + code.split('\\n').join('\\n| ') + \"\\n|\\n\\n\" : '';\n var error = new Error(message + \": \" + quotedCode + \"(error occurred in '\" + module + \"' @ line \" + line + \" : column \" + column + \")\");\n error.name = 'SyntaxError';\n error.location = location;\n error.code = code;\n return error;\n }\n\n // ParentNode and ChildKey types are derived from VisitorKeysMap\n\n var visitorKeys = {\n Program: (0, _util.tuple)('body'),\n Template: (0, _util.tuple)('body'),\n Block: (0, _util.tuple)('body'),\n MustacheStatement: (0, _util.tuple)('path', 'params', 'hash'),\n BlockStatement: (0, _util.tuple)('path', 'params', 'hash', 'program', 'inverse'),\n ElementModifierStatement: (0, _util.tuple)('path', 'params', 'hash'),\n PartialStatement: (0, _util.tuple)('name', 'params', 'hash'),\n CommentStatement: (0, _util.tuple)(),\n MustacheCommentStatement: (0, _util.tuple)(),\n ElementNode: (0, _util.tuple)('attributes', 'modifiers', 'children', 'comments'),\n AttrNode: (0, _util.tuple)('value'),\n TextNode: (0, _util.tuple)(),\n ConcatStatement: (0, _util.tuple)('parts'),\n SubExpression: (0, _util.tuple)('path', 'params', 'hash'),\n PathExpression: (0, _util.tuple)(),\n PathHead: (0, _util.tuple)(),\n StringLiteral: (0, _util.tuple)(),\n BooleanLiteral: (0, _util.tuple)(),\n NumberLiteral: (0, _util.tuple)(),\n NullLiteral: (0, _util.tuple)(),\n UndefinedLiteral: (0, _util.tuple)(),\n Hash: (0, _util.tuple)('pairs'),\n HashPair: (0, _util.tuple)('value'),\n // v2 new nodes\n NamedBlock: (0, _util.tuple)('attributes', 'modifiers', 'children', 'comments'),\n SimpleElement: (0, _util.tuple)('attributes', 'modifiers', 'children', 'comments'),\n Component: (0, _util.tuple)('head', 'attributes', 'modifiers', 'children', 'comments')\n };\n var TraversalError = function () {\n TraversalError.prototype = Object.create(Error.prototype);\n TraversalError.prototype.constructor = TraversalError;\n function TraversalError(message, node, parent, key) {\n var error = Error.call(this, message);\n this.key = key;\n this.message = message;\n this.node = node;\n this.parent = parent;\n this.stack = error.stack;\n }\n return TraversalError;\n }();\n function cannotRemoveNode(node, parent, key) {\n return new TraversalError('Cannot remove a node unless it is part of an array', node, parent, key);\n }\n function cannotReplaceNode(node, parent, key) {\n return new TraversalError('Cannot replace a node with multiple nodes unless it is part of an array', node, parent, key);\n }\n function cannotReplaceOrRemoveInKeyHandlerYet(node, key) {\n return new TraversalError('Replacing and removing in key handlers is not yet supported.', node, null, key);\n }\n class WalkerPath {\n constructor(node, parent, parentKey) {\n if (parent === void 0) {\n parent = null;\n }\n if (parentKey === void 0) {\n parentKey = null;\n }\n this.node = node;\n this.parent = parent;\n this.parentKey = parentKey;\n }\n get parentNode() {\n return this.parent ? this.parent.node : null;\n }\n parents() {\n return {\n [Symbol.iterator]: () => {\n return new PathParentsIterator(this);\n }\n };\n }\n }\n _exports.WalkerPath = WalkerPath;\n class PathParentsIterator {\n constructor(path) {\n this.path = path;\n }\n next() {\n if (this.path.parent) {\n this.path = this.path.parent;\n return {\n done: false,\n value: this.path\n };\n } else {\n return {\n done: true,\n value: null\n };\n }\n }\n }\n function getEnterFunction(handler) {\n if (typeof handler === 'function') {\n return handler;\n } else {\n return handler.enter;\n }\n }\n function getExitFunction(handler) {\n if (typeof handler === 'function') {\n return undefined;\n } else {\n return handler.exit;\n }\n }\n function getKeyHandler(handler, key) {\n var keyVisitor = typeof handler !== 'function' ? handler.keys : undefined;\n if (keyVisitor === undefined) return;\n var keyHandler = keyVisitor[key];\n if (keyHandler !== undefined) {\n return keyHandler;\n }\n return keyVisitor.All;\n }\n function getNodeHandler(visitor, nodeType) {\n if (nodeType === 'Template' || nodeType === 'Block') {\n if (visitor.Program) {\n return visitor.Program;\n }\n }\n var handler = visitor[nodeType];\n if (handler !== undefined) {\n return handler;\n }\n return visitor.All;\n }\n function visitNode(visitor, path) {\n var {\n node,\n parent,\n parentKey\n } = path;\n var handler = getNodeHandler(visitor, node.type);\n var enter;\n var exit;\n if (handler !== undefined) {\n enter = getEnterFunction(handler);\n exit = getExitFunction(handler);\n }\n var result;\n if (enter !== undefined) {\n result = enter(node, path);\n }\n if (result !== undefined && result !== null) {\n if (JSON.stringify(node) === JSON.stringify(result)) {\n result = undefined;\n } else if (Array.isArray(result)) {\n visitArray(visitor, result, parent, parentKey);\n return result;\n } else {\n var _path = new WalkerPath(result, parent, parentKey);\n return visitNode(visitor, _path) || result;\n }\n }\n if (result === undefined) {\n var keys = visitorKeys[node.type];\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]; // we know if it has child keys we can widen to a ParentNode\n\n visitKey(visitor, handler, path, key);\n }\n if (exit !== undefined) {\n result = exit(node, path);\n }\n }\n return result;\n }\n function get(node, key) {\n return node[key];\n }\n function set(node, key, value) {\n node[key] = value;\n }\n function visitKey(visitor, handler, path, key) {\n var {\n node\n } = path;\n var value = get(node, key);\n if (!value) {\n return;\n }\n var keyEnter;\n var keyExit;\n if (handler !== undefined) {\n var keyHandler = getKeyHandler(handler, key);\n if (keyHandler !== undefined) {\n keyEnter = getEnterFunction(keyHandler);\n keyExit = getExitFunction(keyHandler);\n }\n }\n if (keyEnter !== undefined) {\n if (keyEnter(node, key) !== undefined) {\n throw cannotReplaceOrRemoveInKeyHandlerYet(node, key);\n }\n }\n if (Array.isArray(value)) {\n visitArray(visitor, value, path, key);\n } else {\n var keyPath = new WalkerPath(value, path, key);\n var result = visitNode(visitor, keyPath);\n if (result !== undefined) {\n // TODO: dynamically check the results by having a table of\n // expected node types in value space, not just type space\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n assignKey(node, key, value, result);\n }\n }\n if (keyExit !== undefined) {\n if (keyExit(node, key) !== undefined) {\n throw cannotReplaceOrRemoveInKeyHandlerYet(node, key);\n }\n }\n }\n function visitArray(visitor, array, parent, parentKey) {\n for (var i = 0; i < array.length; i++) {\n var _node = array[i];\n var path = new WalkerPath(_node, parent, parentKey);\n var result = visitNode(visitor, path);\n if (result !== undefined) {\n i += spliceArray(array, i, result) - 1;\n }\n }\n }\n function assignKey(node, key, value, result) {\n if (result === null) {\n throw cannotRemoveNode(value, node, key);\n } else if (Array.isArray(result)) {\n if (result.length === 1) {\n set(node, key, result[0]);\n } else {\n if (result.length === 0) {\n throw cannotRemoveNode(value, node, key);\n } else {\n throw cannotReplaceNode(value, node, key);\n }\n }\n } else {\n set(node, key, result);\n }\n }\n function spliceArray(array, index, result) {\n if (result === null) {\n array.splice(index, 1);\n return 0;\n } else if (Array.isArray(result)) {\n array.splice(index, 1, ...result);\n return result.length;\n } else {\n array.splice(index, 1, result);\n return 1;\n }\n }\n function traverse(node, visitor) {\n var path = new WalkerPath(node);\n visitNode(visitor, path);\n }\n class Walker {\n constructor(order) {\n this.order = order;\n this.stack = [];\n }\n visit(node, callback) {\n if (!node) {\n return;\n }\n this.stack.push(node);\n if (this.order === 'post') {\n this.children(node, callback);\n callback(node, this);\n } else {\n callback(node, this);\n this.children(node, callback);\n }\n this.stack.pop();\n }\n children(node, callback) {\n switch (node.type) {\n case 'Block':\n case 'Template':\n return visitors.Program(this, node, callback);\n case 'ElementNode':\n return visitors.ElementNode(this, node, callback);\n case 'BlockStatement':\n return visitors.BlockStatement(this, node, callback);\n default:\n return;\n }\n }\n }\n _exports.Walker = _exports.Path = Walker;\n var visitors = {\n Program(walker, node, callback) {\n for (var i = 0; i < node.body.length; i++) {\n walker.visit(node.body[i], callback);\n }\n },\n Template(walker, node, callback) {\n for (var i = 0; i < node.body.length; i++) {\n walker.visit(node.body[i], callback);\n }\n },\n Block(walker, node, callback) {\n for (var i = 0; i < node.body.length; i++) {\n walker.visit(node.body[i], callback);\n }\n },\n ElementNode(walker, node, callback) {\n for (var i = 0; i < node.children.length; i++) {\n walker.visit(node.children[i], callback);\n }\n },\n BlockStatement(walker, node, callback) {\n walker.visit(node.program, callback);\n walker.visit(node.inverse || null, callback);\n }\n };\n\n // Based on the ID validation regex in Handlebars.\n\n var ID_INVERSE_PATTERN = /[!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]/; // Checks the element's attributes to see if it uses block params.\n // If it does, registers the block params with the program and\n // removes the corresponding attributes from the element.\n\n function parseElementBlockParams(element) {\n var params = parseBlockParams(element);\n if (params) element.blockParams = params;\n }\n function parseBlockParams(element) {\n var l = element.attributes.length;\n var attrNames = [];\n for (var i = 0; i < l; i++) {\n attrNames.push(element.attributes[i].name);\n }\n var asIndex = attrNames.indexOf('as');\n if (asIndex === -1 && attrNames.length > 0 && attrNames[attrNames.length - 1].charAt(0) === '|') {\n throw generateSyntaxError('Block parameters must be preceded by the `as` keyword, detected block parameters without `as`', element.loc);\n }\n if (asIndex !== -1 && l > asIndex && attrNames[asIndex + 1].charAt(0) === '|') {\n // Some basic validation, since we're doing the parsing ourselves\n var paramsString = attrNames.slice(asIndex).join(' ');\n if (paramsString.charAt(paramsString.length - 1) !== '|' || paramsString.match(/\\|/g).length !== 2) {\n throw generateSyntaxError(\"Invalid block parameters syntax, '\" + paramsString + \"'\", element.loc);\n }\n var params = [];\n for (var _i = asIndex + 1; _i < l; _i++) {\n var param = attrNames[_i].replace(/\\|/g, '');\n if (param !== '') {\n if (ID_INVERSE_PATTERN.test(param)) {\n throw generateSyntaxError(\"Invalid identifier for block parameters, '\" + param + \"'\", element.loc);\n }\n params.push(param);\n }\n }\n if (params.length === 0) {\n throw generateSyntaxError('Cannot use zero block parameters', element.loc);\n }\n element.attributes = element.attributes.slice(0, asIndex);\n return params;\n }\n return null;\n }\n function childrenFor(node) {\n switch (node.type) {\n case 'Block':\n case 'Template':\n return node.body;\n case 'ElementNode':\n return node.children;\n }\n }\n function appendChild(parent, node) {\n childrenFor(parent).push(node);\n }\n function isHBSLiteral(path) {\n return path.type === 'StringLiteral' || path.type === 'BooleanLiteral' || path.type === 'NumberLiteral' || path.type === 'NullLiteral' || path.type === 'UndefinedLiteral';\n }\n function printLiteral(literal) {\n if (literal.type === 'UndefinedLiteral') {\n return 'undefined';\n } else {\n return JSON.stringify(literal.value);\n }\n }\n function isUpperCase(tag) {\n return tag[0] === tag[0].toUpperCase() && tag[0] !== tag[0].toLowerCase();\n }\n function isLowerCase(tag) {\n return tag[0] === tag[0].toLowerCase() && tag[0] !== tag[0].toUpperCase();\n }\n var DEFAULT_STRIP = {\n close: false,\n open: false\n };\n /**\n * The Parser Builder differentiates from the public builder API by:\n *\n * 1. Offering fewer different ways to instantiate nodes\n * 2. Mandating source locations\n */\n\n class Builders {\n pos(line, column) {\n return {\n line,\n column\n };\n }\n blockItself(_ref15) {\n var {\n body,\n blockParams,\n chained = false,\n loc\n } = _ref15;\n return {\n type: 'Block',\n body: body || [],\n blockParams: blockParams || [],\n chained,\n loc\n };\n }\n template(_ref16) {\n var {\n body,\n blockParams,\n loc\n } = _ref16;\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc\n };\n }\n mustache(_ref17) {\n var {\n path,\n params,\n hash,\n trusting,\n loc,\n strip = DEFAULT_STRIP\n } = _ref17;\n return {\n type: 'MustacheStatement',\n path,\n params,\n hash,\n escaped: !trusting,\n trusting,\n loc,\n strip: strip || {\n open: false,\n close: false\n }\n };\n }\n block(_ref18) {\n var {\n path,\n params,\n hash,\n defaultBlock,\n elseBlock = null,\n loc,\n openStrip = DEFAULT_STRIP,\n inverseStrip = DEFAULT_STRIP,\n closeStrip = DEFAULT_STRIP\n } = _ref18;\n return {\n type: 'BlockStatement',\n path: path,\n params,\n hash,\n program: defaultBlock,\n inverse: elseBlock,\n loc: loc,\n openStrip: openStrip,\n inverseStrip: inverseStrip,\n closeStrip: closeStrip\n };\n }\n comment(value, loc) {\n return {\n type: 'CommentStatement',\n value: value,\n loc\n };\n }\n mustacheComment(value, loc) {\n return {\n type: 'MustacheCommentStatement',\n value: value,\n loc\n };\n }\n concat(parts, loc) {\n return {\n type: 'ConcatStatement',\n parts,\n loc\n };\n }\n element(_ref19) {\n var {\n tag,\n selfClosing,\n attrs,\n blockParams,\n modifiers,\n comments,\n children,\n loc\n } = _ref19;\n return {\n type: 'ElementNode',\n tag,\n selfClosing: selfClosing,\n attributes: attrs || [],\n blockParams: blockParams || [],\n modifiers: modifiers || [],\n comments: comments || [],\n children: children || [],\n loc\n };\n }\n elementModifier(_ref20) {\n var {\n path,\n params,\n hash,\n loc\n } = _ref20;\n return {\n type: 'ElementModifierStatement',\n path,\n params,\n hash,\n loc\n };\n }\n attr(_ref21) {\n var {\n name,\n value,\n loc\n } = _ref21;\n return {\n type: 'AttrNode',\n name: name,\n value: value,\n loc\n };\n }\n text(_ref22) {\n var {\n chars,\n loc\n } = _ref22;\n return {\n type: 'TextNode',\n chars,\n loc\n };\n }\n sexpr(_ref23) {\n var {\n path,\n params,\n hash,\n loc\n } = _ref23;\n return {\n type: 'SubExpression',\n path,\n params,\n hash,\n loc\n };\n }\n path(_ref24) {\n var {\n head,\n tail,\n loc\n } = _ref24;\n var {\n original: originalHead\n } = headToString$1(head);\n var original = [...originalHead, ...tail].join('.');\n return new PathExpressionImplV1(original, head, tail, loc);\n }\n head(head, loc) {\n if (head[0] === '@') {\n return this.atName(head, loc);\n } else if (head === 'this') {\n return this.this(loc);\n } else {\n return this.var(head, loc);\n }\n }\n this(loc) {\n return {\n type: 'ThisHead',\n loc\n };\n }\n atName(name, loc) {\n return {\n type: 'AtHead',\n name,\n loc\n };\n }\n var(name, loc) {\n return {\n type: 'VarHead',\n name,\n loc\n };\n }\n hash(pairs, loc) {\n return {\n type: 'Hash',\n pairs: pairs || [],\n loc\n };\n }\n pair(_ref25) {\n var {\n key,\n value,\n loc\n } = _ref25;\n return {\n type: 'HashPair',\n key: key,\n value,\n loc\n };\n }\n literal(_ref26) {\n var {\n type,\n value,\n loc\n } = _ref26;\n return {\n type,\n value,\n original: value,\n loc\n };\n }\n undefined() {\n return this.literal({\n type: 'UndefinedLiteral',\n value: undefined\n });\n }\n null() {\n return this.literal({\n type: 'NullLiteral',\n value: null\n });\n }\n string(value, loc) {\n return this.literal({\n type: 'StringLiteral',\n value,\n loc\n });\n }\n boolean(value, loc) {\n return this.literal({\n type: 'BooleanLiteral',\n value,\n loc\n });\n }\n number(value, loc) {\n return this.literal({\n type: 'NumberLiteral',\n value,\n loc\n });\n }\n } // Expressions\n\n function headToString$1(head) {\n switch (head.type) {\n case 'AtHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n case 'ThisHead':\n return {\n original: \"this\",\n parts: []\n };\n case 'VarHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n }\n }\n var b = new Builders();\n class Parser {\n constructor(source, entityParser, mode) {\n if (entityParser === void 0) {\n entityParser = new _simpleHtmlTokenizer.EntityParser(_simpleHtmlTokenizer.HTML5NamedCharRefs);\n }\n if (mode === void 0) {\n mode = 'precompile';\n }\n this.elementStack = [];\n this.currentAttribute = null;\n this.currentNode = null;\n this.source = source;\n this.lines = source.source.split(/(?:\\r\\n?|\\n)/g);\n this.tokenizer = new _simpleHtmlTokenizer.EventedTokenizer(this, entityParser, mode);\n }\n offset() {\n var {\n line,\n column\n } = this.tokenizer;\n return this.source.offsetFor(line, column);\n }\n pos(_ref27) {\n var {\n line,\n column\n } = _ref27;\n return this.source.offsetFor(line, column);\n }\n finish(node) {\n return (0, _util.assign)({}, node, {\n loc: node.loc.until(this.offset())\n }); // node.loc = node.loc.withEnd(end);\n }\n\n get currentAttr() {\n return this.currentAttribute;\n }\n get currentTag() {\n var node = this.currentNode;\n return node;\n }\n get currentStartTag() {\n var node = this.currentNode;\n return node;\n }\n get currentEndTag() {\n var node = this.currentNode;\n return node;\n }\n get currentComment() {\n var node = this.currentNode;\n return node;\n }\n get currentData() {\n var node = this.currentNode;\n return node;\n }\n acceptTemplate(node) {\n return this[node.type](node);\n }\n acceptNode(node) {\n return this[node.type](node);\n }\n currentElement() {\n return this.elementStack[this.elementStack.length - 1];\n }\n sourceForNode(node, endNode) {\n var firstLine = node.loc.start.line - 1;\n var currentLine = firstLine - 1;\n var firstColumn = node.loc.start.column;\n var string = [];\n var line;\n var lastLine;\n var lastColumn;\n if (endNode) {\n lastLine = endNode.loc.end.line - 1;\n lastColumn = endNode.loc.end.column;\n } else {\n lastLine = node.loc.end.line - 1;\n lastColumn = node.loc.end.column;\n }\n while (currentLine < lastLine) {\n currentLine++;\n line = this.lines[currentLine];\n if (currentLine === firstLine) {\n if (firstLine === lastLine) {\n string.push(line.slice(firstColumn, lastColumn));\n } else {\n string.push(line.slice(firstColumn));\n }\n } else if (currentLine === lastLine) {\n string.push(line.slice(0, lastColumn));\n } else {\n string.push(line);\n }\n }\n return string.join('\\n');\n }\n }\n class HandlebarsNodeVisitors extends Parser {\n get isTopLevel() {\n return this.elementStack.length === 0;\n }\n Program(program) {\n var body = [];\n var node;\n if (this.isTopLevel) {\n node = b.template({\n body,\n blockParams: program.blockParams,\n loc: this.source.spanFor(program.loc)\n });\n } else {\n node = b.blockItself({\n body,\n blockParams: program.blockParams,\n chained: program.chained,\n loc: this.source.spanFor(program.loc)\n });\n }\n var i,\n l = program.body.length;\n this.elementStack.push(node);\n if (l === 0) {\n return this.elementStack.pop();\n }\n for (i = 0; i < l; i++) {\n this.acceptNode(program.body[i]);\n } // Ensure that that the element stack is balanced properly.\n\n var poppedNode = this.elementStack.pop();\n if (poppedNode !== node) {\n var elementNode = poppedNode;\n throw generateSyntaxError(\"Unclosed element `\" + elementNode.tag + \"`\", elementNode.loc);\n }\n return node;\n }\n BlockStatement(block) {\n if (this.tokenizer.state === \"comment\"\n /* comment */) {\n this.appendToCommentData(this.sourceForNode(block));\n return;\n }\n if (this.tokenizer.state !== \"data\"\n /* data */ && this.tokenizer.state !== \"beforeData\"\n /* beforeData */) {\n throw generateSyntaxError('A block may only be used inside an HTML element or another block.', this.source.spanFor(block.loc));\n }\n var {\n path,\n params,\n hash\n } = acceptCallNodes(this, block); // These are bugs in Handlebars upstream\n\n if (!block.program.loc) {\n block.program.loc = NON_EXISTENT_LOCATION;\n }\n if (block.inverse && !block.inverse.loc) {\n block.inverse.loc = NON_EXISTENT_LOCATION;\n }\n var program = this.Program(block.program);\n var inverse = block.inverse ? this.Program(block.inverse) : null;\n var node = b.block({\n path,\n params,\n hash,\n defaultBlock: program,\n elseBlock: inverse,\n loc: this.source.spanFor(block.loc),\n openStrip: block.openStrip,\n inverseStrip: block.inverseStrip,\n closeStrip: block.closeStrip\n });\n var parentProgram = this.currentElement();\n appendChild(parentProgram, node);\n }\n MustacheStatement(rawMustache) {\n var {\n tokenizer\n } = this;\n if (tokenizer.state === 'comment') {\n this.appendToCommentData(this.sourceForNode(rawMustache));\n return;\n }\n var mustache;\n var {\n escaped,\n loc,\n strip\n } = rawMustache;\n if (isHBSLiteral(rawMustache.path)) {\n mustache = b.mustache({\n path: this.acceptNode(rawMustache.path),\n params: [],\n hash: b.hash([], this.source.spanFor(rawMustache.path.loc).collapse('end')),\n trusting: !escaped,\n loc: this.source.spanFor(loc),\n strip\n });\n } else {\n var {\n path,\n params,\n hash\n } = acceptCallNodes(this, rawMustache);\n mustache = b.mustache({\n path,\n params,\n hash,\n trusting: !escaped,\n loc: this.source.spanFor(loc),\n strip\n });\n }\n switch (tokenizer.state) {\n // Tag helpers\n case \"tagOpen\"\n /* tagOpen */:\n\n case \"tagName\"\n /* tagName */:\n throw generateSyntaxError(\"Cannot use mustaches in an elements tagname\", mustache.loc);\n case \"beforeAttributeName\"\n /* beforeAttributeName */:\n addElementModifier(this.currentStartTag, mustache);\n break;\n case \"attributeName\"\n /* attributeName */:\n\n case \"afterAttributeName\"\n /* afterAttributeName */:\n this.beginAttributeValue(false);\n this.finishAttributeValue();\n addElementModifier(this.currentStartTag, mustache);\n tokenizer.transitionTo(\"beforeAttributeName\"\n /* beforeAttributeName */);\n\n break;\n case \"afterAttributeValueQuoted\"\n /* afterAttributeValueQuoted */:\n addElementModifier(this.currentStartTag, mustache);\n tokenizer.transitionTo(\"beforeAttributeName\"\n /* beforeAttributeName */);\n\n break;\n // Attribute values\n\n case \"beforeAttributeValue\"\n /* beforeAttributeValue */:\n this.beginAttributeValue(false);\n this.appendDynamicAttributeValuePart(mustache);\n tokenizer.transitionTo(\"attributeValueUnquoted\"\n /* attributeValueUnquoted */);\n\n break;\n case \"attributeValueDoubleQuoted\"\n /* attributeValueDoubleQuoted */:\n\n case \"attributeValueSingleQuoted\"\n /* attributeValueSingleQuoted */:\n\n case \"attributeValueUnquoted\"\n /* attributeValueUnquoted */:\n this.appendDynamicAttributeValuePart(mustache);\n break;\n // TODO: Only append child when the tokenizer state makes\n // sense to do so, otherwise throw an error.\n\n default:\n appendChild(this.currentElement(), mustache);\n }\n return mustache;\n }\n appendDynamicAttributeValuePart(part) {\n this.finalizeTextPart();\n var attr = this.currentAttr;\n attr.isDynamic = true;\n attr.parts.push(part);\n }\n finalizeTextPart() {\n var attr = this.currentAttr;\n var text = attr.currentPart;\n if (text !== null) {\n this.currentAttr.parts.push(text);\n this.startTextPart();\n }\n }\n startTextPart() {\n this.currentAttr.currentPart = null;\n }\n ContentStatement(content) {\n updateTokenizerLocation(this.tokenizer, content);\n this.tokenizer.tokenizePart(content.value);\n this.tokenizer.flushData();\n }\n CommentStatement(rawComment) {\n var {\n tokenizer\n } = this;\n if (tokenizer.state === \"comment\"\n /* comment */) {\n this.appendToCommentData(this.sourceForNode(rawComment));\n return null;\n }\n var {\n value,\n loc\n } = rawComment;\n var comment = b.mustacheComment(value, this.source.spanFor(loc));\n switch (tokenizer.state) {\n case \"beforeAttributeName\"\n /* beforeAttributeName */:\n\n case \"afterAttributeName\"\n /* afterAttributeName */:\n this.currentStartTag.comments.push(comment);\n break;\n case \"beforeData\"\n /* beforeData */:\n\n case \"data\"\n /* data */:\n appendChild(this.currentElement(), comment);\n break;\n default:\n throw generateSyntaxError(\"Using a Handlebars comment when in the `\" + tokenizer['state'] + \"` state is not supported\", this.source.spanFor(rawComment.loc));\n }\n return comment;\n }\n PartialStatement(partial) {\n throw generateSyntaxError(\"Handlebars partials are not supported\", this.source.spanFor(partial.loc));\n }\n PartialBlockStatement(partialBlock) {\n throw generateSyntaxError(\"Handlebars partial blocks are not supported\", this.source.spanFor(partialBlock.loc));\n }\n Decorator(decorator) {\n throw generateSyntaxError(\"Handlebars decorators are not supported\", this.source.spanFor(decorator.loc));\n }\n DecoratorBlock(decoratorBlock) {\n throw generateSyntaxError(\"Handlebars decorator blocks are not supported\", this.source.spanFor(decoratorBlock.loc));\n }\n SubExpression(sexpr) {\n var {\n path,\n params,\n hash\n } = acceptCallNodes(this, sexpr);\n return b.sexpr({\n path,\n params,\n hash,\n loc: this.source.spanFor(sexpr.loc)\n });\n }\n PathExpression(path) {\n var {\n original\n } = path;\n var parts;\n if (original.indexOf('/') !== -1) {\n if (original.slice(0, 2) === './') {\n throw generateSyntaxError(\"Using \\\"./\\\" is not supported in Glimmer and unnecessary\", this.source.spanFor(path.loc));\n }\n if (original.slice(0, 3) === '../') {\n throw generateSyntaxError(\"Changing context using \\\"../\\\" is not supported in Glimmer\", this.source.spanFor(path.loc));\n }\n if (original.indexOf('.') !== -1) {\n throw generateSyntaxError(\"Mixing '.' and '/' in paths is not supported in Glimmer; use only '.' to separate property paths\", this.source.spanFor(path.loc));\n }\n parts = [path.parts.join('/')];\n } else if (original === '.') {\n throw generateSyntaxError(\"'.' is not a supported path in Glimmer; check for a path with a trailing '.'\", this.source.spanFor(path.loc));\n } else {\n parts = path.parts;\n }\n var thisHead = false; // This is to fix a bug in the Handlebars AST where the path expressions in\n // `{{this.foo}}` (and similarly `{{foo-bar this.foo named=this.foo}}` etc)\n // are simply turned into `{{foo}}`. The fix is to push it back onto the\n // parts array and let the runtime see the difference. However, we cannot\n // simply use the string `this` as it means literally the property called\n // \"this\" in the current context (it can be expressed in the syntax as\n // `{{[this]}}`, where the square bracket are generally for this kind of\n // escaping – such as `{{foo.[\"bar.baz\"]}}` would mean lookup a property\n // named literally \"bar.baz\" on `this.foo`). By convention, we use `null`\n // for this purpose.\n\n if (original.match(/^this(\\..+)?$/)) {\n thisHead = true;\n }\n var pathHead;\n if (thisHead) {\n pathHead = {\n type: 'ThisHead',\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + 4\n }\n }\n };\n } else if (path.data) {\n var head = parts.shift();\n if (head === undefined) {\n throw generateSyntaxError(\"Attempted to parse a path expression, but it was not valid. Paths beginning with @ must start with a-z.\", this.source.spanFor(path.loc));\n }\n pathHead = {\n type: 'AtHead',\n name: \"@\" + head,\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + head.length + 1\n }\n }\n };\n } else {\n var _head2 = parts.shift();\n if (_head2 === undefined) {\n throw generateSyntaxError(\"Attempted to parse a path expression, but it was not valid. Paths must start with a-z or A-Z.\", this.source.spanFor(path.loc));\n }\n pathHead = {\n type: 'VarHead',\n name: _head2,\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + _head2.length\n }\n }\n };\n }\n return new PathExpressionImplV1(path.original, pathHead, parts, this.source.spanFor(path.loc));\n }\n Hash(hash) {\n var pairs = [];\n for (var i = 0; i < hash.pairs.length; i++) {\n var pair = hash.pairs[i];\n pairs.push(b.pair({\n key: pair.key,\n value: this.acceptNode(pair.value),\n loc: this.source.spanFor(pair.loc)\n }));\n }\n return b.hash(pairs, this.source.spanFor(hash.loc));\n }\n StringLiteral(string) {\n return b.literal({\n type: 'StringLiteral',\n value: string.value,\n loc: string.loc\n });\n }\n BooleanLiteral(boolean) {\n return b.literal({\n type: 'BooleanLiteral',\n value: boolean.value,\n loc: boolean.loc\n });\n }\n NumberLiteral(number) {\n return b.literal({\n type: 'NumberLiteral',\n value: number.value,\n loc: number.loc\n });\n }\n UndefinedLiteral(undef) {\n return b.literal({\n type: 'UndefinedLiteral',\n value: undefined,\n loc: undef.loc\n });\n }\n NullLiteral(nul) {\n return b.literal({\n type: 'NullLiteral',\n value: null,\n loc: nul.loc\n });\n }\n }\n function calculateRightStrippedOffsets(original, value) {\n if (value === '') {\n // if it is empty, just return the count of newlines\n // in original\n return {\n lines: original.split('\\n').length - 1,\n columns: 0\n };\n } // otherwise, return the number of newlines prior to\n // `value`\n\n var difference = original.split(value)[0];\n var lines = difference.split(/\\n/);\n var lineCount = lines.length - 1;\n return {\n lines: lineCount,\n columns: lines[lineCount].length\n };\n }\n function updateTokenizerLocation(tokenizer, content) {\n var line = content.loc.start.line;\n var column = content.loc.start.column;\n var offsets = calculateRightStrippedOffsets(content.original, content.value);\n line = line + offsets.lines;\n if (offsets.lines) {\n column = offsets.columns;\n } else {\n column = column + offsets.columns;\n }\n tokenizer.line = line;\n tokenizer.column = column;\n }\n function acceptCallNodes(compiler, node) {\n if (node.path.type.endsWith('Literal')) {\n var _path2 = node.path;\n var value = '';\n if (_path2.type === 'BooleanLiteral') {\n value = _path2.original.toString();\n } else if (_path2.type === 'StringLiteral') {\n value = \"\\\"\" + _path2.original + \"\\\"\";\n } else if (_path2.type === 'NullLiteral') {\n value = 'null';\n } else if (_path2.type === 'NumberLiteral') {\n value = _path2.value.toString();\n } else {\n value = 'undefined';\n }\n throw generateSyntaxError(_path2.type + \" \\\"\" + (_path2.type === 'StringLiteral' ? _path2.original : value) + \"\\\" cannot be called as a sub-expression, replace (\" + value + \") with \" + value, compiler.source.spanFor(_path2.loc));\n }\n var path = node.path.type === 'PathExpression' ? compiler.PathExpression(node.path) : compiler.SubExpression(node.path);\n var params = node.params ? node.params.map(e => compiler.acceptNode(e)) : []; // if there is no hash, position it as a collapsed node immediately after the last param (or the\n // path, if there are also no params)\n\n var end = params.length > 0 ? params[params.length - 1].loc : path.loc;\n var hash = node.hash ? compiler.Hash(node.hash) : {\n type: 'Hash',\n pairs: [],\n loc: compiler.source.spanFor(end).collapse('end')\n };\n return {\n path,\n params,\n hash\n };\n }\n function addElementModifier(element, mustache) {\n var {\n path,\n params,\n hash,\n loc\n } = mustache;\n if (isHBSLiteral(path)) {\n var _modifier = \"{{\" + printLiteral(path) + \"}}\";\n var tag = \"<\" + element.name + \" ... \" + _modifier + \" ...\";\n throw generateSyntaxError(\"In \" + tag + \", \" + _modifier + \" is not a valid modifier\", mustache.loc);\n }\n var modifier = b.elementModifier({\n path,\n params,\n hash,\n loc\n });\n element.modifiers.push(modifier);\n }\n class TokenizerEventHandlers extends HandlebarsNodeVisitors {\n constructor() {\n super(...arguments);\n this.tagOpenLine = 0;\n this.tagOpenColumn = 0;\n }\n reset() {\n this.currentNode = null;\n } // Comment\n\n beginComment() {\n this.currentNode = b.comment('', this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn));\n }\n appendToCommentData(char) {\n this.currentComment.value += char;\n }\n finishComment() {\n appendChild(this.currentElement(), this.finish(this.currentComment));\n } // Data\n\n beginData() {\n this.currentNode = b.text({\n chars: '',\n loc: this.offset().collapsed()\n });\n }\n appendToData(char) {\n this.currentData.chars += char;\n }\n finishData() {\n this.currentData.loc = this.currentData.loc.withEnd(this.offset());\n appendChild(this.currentElement(), this.currentData);\n } // Tags - basic\n\n tagOpen() {\n this.tagOpenLine = this.tokenizer.line;\n this.tagOpenColumn = this.tokenizer.column;\n }\n beginStartTag() {\n this.currentNode = {\n type: 'StartTag',\n name: '',\n attributes: [],\n modifiers: [],\n comments: [],\n selfClosing: false,\n loc: this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn)\n };\n }\n beginEndTag() {\n this.currentNode = {\n type: 'EndTag',\n name: '',\n attributes: [],\n modifiers: [],\n comments: [],\n selfClosing: false,\n loc: this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn)\n };\n }\n finishTag() {\n var tag = this.finish(this.currentTag);\n if (tag.type === 'StartTag') {\n this.finishStartTag();\n if (tag.name === ':') {\n throw generateSyntaxError('Invalid named block named detected, you may have created a named block without a name, or you may have began your name with a number. Named blocks must have names that are at least one character long, and begin with a lower case letter', this.source.spanFor({\n start: this.currentTag.loc.toJSON(),\n end: this.offset().toJSON()\n }));\n }\n if (voidMap[tag.name] || tag.selfClosing) {\n this.finishEndTag(true);\n }\n } else if (tag.type === 'EndTag') {\n this.finishEndTag(false);\n }\n }\n finishStartTag() {\n var {\n name,\n attributes: attrs,\n modifiers,\n comments,\n selfClosing,\n loc\n } = this.finish(this.currentStartTag);\n var element = b.element({\n tag: name,\n selfClosing,\n attrs,\n modifiers,\n comments,\n children: [],\n blockParams: [],\n loc\n });\n this.elementStack.push(element);\n }\n finishEndTag(isVoid) {\n var tag = this.finish(this.currentTag);\n var element = this.elementStack.pop();\n var parent = this.currentElement();\n this.validateEndTag(tag, element, isVoid);\n element.loc = element.loc.withEnd(this.offset());\n parseElementBlockParams(element);\n appendChild(parent, element);\n }\n markTagAsSelfClosing() {\n this.currentTag.selfClosing = true;\n } // Tags - name\n\n appendToTagName(char) {\n this.currentTag.name += char;\n } // Tags - attributes\n\n beginAttribute() {\n var offset = this.offset();\n this.currentAttribute = {\n name: '',\n parts: [],\n currentPart: null,\n isQuoted: false,\n isDynamic: false,\n start: offset,\n valueSpan: offset.collapsed()\n };\n }\n appendToAttributeName(char) {\n this.currentAttr.name += char;\n }\n beginAttributeValue(isQuoted) {\n this.currentAttr.isQuoted = isQuoted;\n this.startTextPart();\n this.currentAttr.valueSpan = this.offset().collapsed();\n }\n appendToAttributeValue(char) {\n var parts = this.currentAttr.parts;\n var lastPart = parts[parts.length - 1];\n var current = this.currentAttr.currentPart;\n if (current) {\n current.chars += char; // update end location for each added char\n\n current.loc = current.loc.withEnd(this.offset());\n } else {\n // initially assume the text node is a single char\n var _loc2 = this.offset(); // the tokenizer line/column have already been advanced, correct location info\n\n if (char === '\\n') {\n _loc2 = lastPart ? lastPart.loc.getEnd() : this.currentAttr.valueSpan.getStart();\n } else {\n _loc2 = _loc2.move(-1);\n }\n this.currentAttr.currentPart = b.text({\n chars: char,\n loc: _loc2.collapsed()\n });\n }\n }\n finishAttributeValue() {\n this.finalizeTextPart();\n var tag = this.currentTag;\n var tokenizerPos = this.offset();\n if (tag.type === 'EndTag') {\n throw generateSyntaxError(\"Invalid end tag: closing tag must not have attributes\", this.source.spanFor({\n start: tag.loc.toJSON(),\n end: tokenizerPos.toJSON()\n }));\n }\n var {\n name,\n parts,\n start,\n isQuoted,\n isDynamic,\n valueSpan\n } = this.currentAttr;\n var value = this.assembleAttributeValue(parts, isQuoted, isDynamic, start.until(tokenizerPos));\n value.loc = valueSpan.withEnd(tokenizerPos);\n var attribute = b.attr({\n name,\n value,\n loc: start.until(tokenizerPos)\n });\n this.currentStartTag.attributes.push(attribute);\n }\n reportSyntaxError(message) {\n throw generateSyntaxError(message, this.offset().collapsed());\n }\n assembleConcatenatedValue(parts) {\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n if (part.type !== 'MustacheStatement' && part.type !== 'TextNode') {\n throw generateSyntaxError('Unsupported node in quoted attribute value: ' + part['type'], part.loc);\n }\n }\n (0, _util.assertPresent)(parts, \"the concatenation parts of an element should not be empty\");\n var first = parts[0];\n var last = parts[parts.length - 1];\n return b.concat(parts, this.source.spanFor(first.loc).extend(this.source.spanFor(last.loc)));\n }\n validateEndTag(tag, element, selfClosing) {\n var error;\n if (voidMap[tag.name] && !selfClosing) {\n // EngTag is also called by StartTag for void and self-closing tags (i.e.\n // <input> or <br />, so we need to check for that here. Otherwise, we would\n // throw an error for those cases.\n error = \"<\" + tag.name + \"> elements do not need end tags. You should remove it\";\n } else if (element.tag === undefined) {\n error = \"Closing tag </\" + tag.name + \"> without an open tag\";\n } else if (element.tag !== tag.name) {\n error = \"Closing tag </\" + tag.name + \"> did not match last open tag <\" + element.tag + \"> (on line \" + element.loc.startPosition.line + \")\";\n }\n if (error) {\n throw generateSyntaxError(error, tag.loc);\n }\n }\n assembleAttributeValue(parts, isQuoted, isDynamic, span) {\n if (isDynamic) {\n if (isQuoted) {\n return this.assembleConcatenatedValue(parts);\n } else {\n if (parts.length === 1 || parts.length === 2 && parts[1].type === 'TextNode' && parts[1].chars === '/') {\n return parts[0];\n } else {\n throw generateSyntaxError(\"An unquoted attribute value must be a string or a mustache, \" + \"preceded by whitespace or a '=' character, and \" + \"followed by whitespace, a '>' character, or '/>'\", span);\n }\n }\n } else {\n return parts.length > 0 ? parts[0] : b.text({\n chars: '',\n loc: span\n });\n }\n }\n }\n var syntax = {\n parse: preprocess,\n builders: publicBuilder,\n print: build,\n traverse,\n Walker\n };\n class CodemodEntityParser extends _simpleHtmlTokenizer.EntityParser {\n // match upstream types, but never match an entity\n constructor() {\n super({});\n }\n parse() {\n return undefined;\n }\n }\n function preprocess(input, options) {\n if (options === void 0) {\n options = {};\n }\n var _a, _b, _c;\n var mode = options.mode || 'precompile';\n var source;\n var ast;\n if (typeof input === 'string') {\n source = new Source(input, (_a = options.meta) === null || _a === void 0 ? void 0 : _a.moduleName);\n if (mode === 'codemod') {\n ast = (0, _parser.parseWithoutProcessing)(input, options.parseOptions);\n } else {\n ast = (0, _parser.parse)(input, options.parseOptions);\n }\n } else if (input instanceof Source) {\n source = input;\n if (mode === 'codemod') {\n ast = (0, _parser.parseWithoutProcessing)(input.source, options.parseOptions);\n } else {\n ast = (0, _parser.parse)(input.source, options.parseOptions);\n }\n } else {\n source = new Source('', (_b = options.meta) === null || _b === void 0 ? void 0 : _b.moduleName);\n ast = input;\n }\n var entityParser = undefined;\n if (mode === 'codemod') {\n entityParser = new CodemodEntityParser();\n }\n var offsets = SourceSpan.forCharPositions(source, 0, source.source.length);\n ast.loc = {\n source: '(program)',\n start: offsets.startPosition,\n end: offsets.endPosition\n };\n var program = new TokenizerEventHandlers(source, entityParser, mode).acceptTemplate(ast);\n if (options.strictMode) {\n program.blockParams = (_c = options.locals) !== null && _c !== void 0 ? _c : [];\n }\n if (options && options.plugins && options.plugins.ast) {\n for (var i = 0, l = options.plugins.ast.length; i < l; i++) {\n var transform = options.plugins.ast[i];\n var env = (0, _util.assign)({}, options, {\n syntax\n }, {\n plugins: undefined\n });\n var pluginResult = transform(env);\n traverse(program, pluginResult.visitor);\n }\n }\n return program;\n }\n class SymbolTable {\n static top(locals, customizeComponentName) {\n return new ProgramSymbolTable(locals, customizeComponentName);\n }\n child(locals) {\n var symbols = locals.map(name => this.allocate(name));\n return new BlockSymbolTable(this, locals, symbols);\n }\n }\n _exports.SymbolTable = SymbolTable;\n class ProgramSymbolTable extends SymbolTable {\n constructor(templateLocals, customizeComponentName) {\n super();\n this.templateLocals = templateLocals;\n this.customizeComponentName = customizeComponentName;\n this.symbols = [];\n this.upvars = [];\n this.size = 1;\n this.named = (0, _util.dict)();\n this.blocks = (0, _util.dict)();\n this.usedTemplateLocals = [];\n this._hasEval = false;\n }\n getUsedTemplateLocals() {\n return this.usedTemplateLocals;\n }\n setHasEval() {\n this._hasEval = true;\n }\n get hasEval() {\n return this._hasEval;\n }\n has(name) {\n return this.templateLocals.indexOf(name) !== -1;\n }\n get(name) {\n var index = this.usedTemplateLocals.indexOf(name);\n if (index !== -1) {\n return [index, true];\n }\n index = this.usedTemplateLocals.length;\n this.usedTemplateLocals.push(name);\n return [index, true];\n }\n getLocalsMap() {\n return (0, _util.dict)();\n }\n getEvalInfo() {\n var locals = this.getLocalsMap();\n return Object.keys(locals).map(symbol => locals[symbol]);\n }\n allocateFree(name, resolution) {\n // If the name in question is an uppercase (i.e. angle-bracket) component invocation, run\n // the optional `customizeComponentName` function provided to the precompiler.\n if (resolution.resolution() === 39\n /* GetFreeAsComponentHead */ && resolution.isAngleBracket && isUpperCase(name)) {\n name = this.customizeComponentName(name);\n }\n var index = this.upvars.indexOf(name);\n if (index !== -1) {\n return index;\n }\n index = this.upvars.length;\n this.upvars.push(name);\n return index;\n }\n allocateNamed(name) {\n var named = this.named[name];\n if (!named) {\n named = this.named[name] = this.allocate(name);\n }\n return named;\n }\n allocateBlock(name) {\n if (name === 'inverse') {\n name = 'else';\n }\n var block = this.blocks[name];\n if (!block) {\n block = this.blocks[name] = this.allocate(\"&\" + name);\n }\n return block;\n }\n allocate(identifier) {\n this.symbols.push(identifier);\n return this.size++;\n }\n }\n _exports.ProgramSymbolTable = ProgramSymbolTable;\n class BlockSymbolTable extends SymbolTable {\n constructor(parent, symbols, slots) {\n super();\n this.parent = parent;\n this.symbols = symbols;\n this.slots = slots;\n }\n get locals() {\n return this.symbols;\n }\n has(name) {\n return this.symbols.indexOf(name) !== -1 || this.parent.has(name);\n }\n get(name) {\n var slot = this.symbols.indexOf(name);\n return slot === -1 ? this.parent.get(name) : [this.slots[slot], false];\n }\n getLocalsMap() {\n var dict = this.parent.getLocalsMap();\n this.symbols.forEach(symbol => dict[symbol] = this.get(symbol)[0]);\n return dict;\n }\n getEvalInfo() {\n var locals = this.getLocalsMap();\n return Object.keys(locals).map(symbol => locals[symbol]);\n }\n setHasEval() {\n this.parent.setHasEval();\n }\n allocateFree(name, resolution) {\n return this.parent.allocateFree(name, resolution);\n }\n allocateNamed(name) {\n return this.parent.allocateNamed(name);\n }\n allocateBlock(name) {\n return this.parent.allocateBlock(name);\n }\n allocate(identifier) {\n return this.parent.allocate(identifier);\n }\n }\n _exports.BlockSymbolTable = BlockSymbolTable;\n var __rest = undefined && undefined.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n };\n class Builder {\n // TEMPLATE //\n template(symbols, body, loc) {\n return new Template({\n table: symbols,\n body,\n loc\n });\n } // INTERNAL (these nodes cannot be reached when doing general-purpose visiting) //\n\n block(symbols, body, loc) {\n return new Block({\n scope: symbols,\n body,\n loc\n });\n }\n namedBlock(name, block, loc) {\n return new NamedBlock({\n name,\n block,\n attrs: [],\n componentArgs: [],\n modifiers: [],\n loc\n });\n }\n simpleNamedBlock(name, block, loc) {\n return new BuildElement({\n selfClosing: false,\n attrs: [],\n componentArgs: [],\n modifiers: [],\n comments: []\n }).named(name, block, loc);\n }\n slice(chars, loc) {\n return new SourceSlice({\n loc,\n chars\n });\n }\n args(positional, named, loc) {\n return new Args({\n loc,\n positional,\n named\n });\n }\n positional(exprs, loc) {\n return new PositionalArguments({\n loc,\n exprs\n });\n }\n namedArgument(key, value) {\n return new NamedArgument({\n name: key,\n value\n });\n }\n named(entries, loc) {\n return new NamedArguments({\n loc,\n entries\n });\n }\n attr(_ref28, loc) {\n var {\n name,\n value,\n trusting\n } = _ref28;\n return new HtmlAttr({\n loc,\n name,\n value,\n trusting\n });\n }\n splatAttr(symbol, loc) {\n return new SplatAttr({\n symbol,\n loc\n });\n }\n arg(_ref29, loc) {\n var {\n name,\n value,\n trusting\n } = _ref29;\n return new ComponentArg({\n name,\n value,\n trusting,\n loc\n });\n } // EXPRESSIONS //\n\n path(head, tail, loc) {\n return new PathExpression({\n loc,\n ref: head,\n tail\n });\n }\n self(loc) {\n return new ThisReference({\n loc\n });\n }\n at(name, symbol, loc) {\n return new ArgReference({\n loc,\n name: new SourceSlice({\n loc,\n chars: name\n }),\n symbol\n });\n }\n freeVar(_ref30) {\n var {\n name,\n context,\n symbol,\n loc\n } = _ref30;\n return new FreeVarReference({\n name,\n resolution: context,\n symbol,\n loc\n });\n }\n localVar(name, symbol, isTemplateLocal, loc) {\n return new LocalVarReference({\n loc,\n name,\n isTemplateLocal,\n symbol\n });\n }\n sexp(parts, loc) {\n return new CallExpression({\n loc,\n callee: parts.callee,\n args: parts.args\n });\n }\n deprecatedCall(arg, callee, loc) {\n return new DeprecatedCallExpression({\n loc,\n arg,\n callee\n });\n }\n interpolate(parts, loc) {\n (0, _util.assertPresent)(parts);\n return new InterpolateExpression({\n loc,\n parts\n });\n }\n literal(value, loc) {\n return new LiteralExpression({\n loc,\n value\n });\n } // STATEMENTS //\n\n append(_ref31, loc) {\n var {\n table,\n trusting,\n value\n } = _ref31;\n return new AppendContent({\n table,\n trusting,\n value,\n loc\n });\n }\n modifier(_ref32, loc) {\n var {\n callee,\n args\n } = _ref32;\n return new ElementModifier({\n loc,\n callee,\n args\n });\n }\n namedBlocks(blocks, loc) {\n return new NamedBlocks({\n loc,\n blocks\n });\n }\n blockStatement(_a, loc) {\n var {\n symbols,\n program,\n inverse = null\n } = _a,\n call = __rest(_a, [\"symbols\", \"program\", \"inverse\"]);\n var blocksLoc = program.loc;\n var blocks = [this.namedBlock(SourceSlice.synthetic('default'), program, program.loc)];\n if (inverse) {\n blocksLoc = blocksLoc.extend(inverse.loc);\n blocks.push(this.namedBlock(SourceSlice.synthetic('else'), inverse, inverse.loc));\n }\n return new InvokeBlock({\n loc,\n blocks: this.namedBlocks(blocks, blocksLoc),\n callee: call.callee,\n args: call.args\n });\n }\n element(options) {\n return new BuildElement(options);\n }\n }\n class BuildElement {\n constructor(base) {\n this.base = base;\n this.builder = new Builder();\n }\n simple(tag, body, loc) {\n return new SimpleElement((0, _util.assign)({\n tag,\n body,\n componentArgs: [],\n loc\n }, this.base));\n }\n named(name, block, loc) {\n return new NamedBlock((0, _util.assign)({\n name,\n block,\n componentArgs: [],\n loc\n }, this.base));\n }\n selfClosingComponent(callee, loc) {\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n // point the empty named blocks at the `/` self-closing tag\n blocks: new NamedBlocks({\n blocks: [],\n loc: loc.sliceEndChars({\n skipEnd: 1,\n chars: 1\n })\n })\n }, this.base));\n }\n componentWithDefaultBlock(callee, children, symbols, loc) {\n var block = this.builder.block(symbols, children, loc);\n var namedBlock = this.builder.namedBlock(SourceSlice.synthetic('default'), block, loc); // BUILDER.simpleNamedBlock('default', children, symbols, loc);\n\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n blocks: this.builder.namedBlocks([namedBlock], namedBlock.loc)\n }, this.base));\n }\n componentWithNamedBlocks(callee, blocks, loc) {\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n blocks: this.builder.namedBlocks(blocks, SpanList.range(blocks))\n }, this.base));\n }\n }\n function SexpSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(\"Helper\"\n /* Helper */);\n } else {\n return null;\n }\n }\n function ModifierSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(\"Modifier\"\n /* Modifier */);\n } else {\n return null;\n }\n }\n function BlockSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(\"Component\"\n /* Component */);\n } else {\n return LooseModeResolution.fallback();\n }\n }\n function ComponentSyntaxContext(node) {\n if (isSimplePath(node)) {\n return LooseModeResolution.namespaced(\"Component\"\n /* Component */, true);\n } else {\n return null;\n }\n }\n /**\n * This corresponds to append positions (text curlies or attribute\n * curlies). In strict mode, this also corresponds to arg curlies.\n */\n\n function AttrValueSyntaxContext(node) {\n var isSimple = isSimpleCallee(node);\n var isInvoke = isInvokeNode(node);\n if (isSimple) {\n return isInvoke ? LooseModeResolution.namespaced(\"Helper\"\n /* Helper */) : LooseModeResolution.attr();\n } else {\n return isInvoke ? STRICT_RESOLUTION : LooseModeResolution.fallback();\n }\n }\n /**\n * This corresponds to append positions (text curlies or attribute\n * curlies). In strict mode, this also corresponds to arg curlies.\n */\n\n function AppendSyntaxContext(node) {\n var isSimple = isSimpleCallee(node);\n var isInvoke = isInvokeNode(node);\n var trusting = node.trusting;\n if (isSimple) {\n return trusting ? LooseModeResolution.trustingAppend({\n invoke: isInvoke\n }) : LooseModeResolution.append({\n invoke: isInvoke\n });\n } else {\n return LooseModeResolution.fallback();\n }\n } // UTILITIES\n\n /**\n * A call node has a simple callee if its head is:\n *\n * - a `PathExpression`\n * - the `PathExpression`'s head is a `VarHead`\n * - it has no tail\n *\n * Simple heads:\n *\n * ```\n * {{x}}\n * {{x y}}\n * ```\n *\n * Not simple heads:\n *\n * ```\n * {{x.y}}\n * {{x.y z}}\n * {{@x}}\n * {{@x a}}\n * {{this}}\n * {{this a}}\n * ```\n */\n\n function isSimpleCallee(node) {\n var path = node.path;\n return isSimplePath(path);\n }\n function isSimplePath(node) {\n if (node.type === 'PathExpression' && node.head.type === 'VarHead') {\n return node.tail.length === 0;\n } else {\n return false;\n }\n }\n /**\n * The call expression has at least one argument.\n */\n\n function isInvokeNode(node) {\n return node.params.length > 0 || node.hash.pairs.length > 0;\n }\n function normalize(source, options) {\n if (options === void 0) {\n options = {};\n }\n var _a;\n var ast = preprocess(source, options);\n var normalizeOptions = (0, _util.assign)({\n strictMode: false,\n locals: []\n }, options);\n var top = SymbolTable.top(normalizeOptions.locals, (_a =\n // eslint-disable-next-line @typescript-eslint/unbound-method\n options.customizeComponentName) !== null && _a !== void 0 ? _a : name => name);\n var block = new BlockContext(source, normalizeOptions, top);\n var normalizer = new StatementNormalizer(block);\n var astV2 = new TemplateChildren(block.loc(ast.loc), ast.body.map(b => normalizer.normalize(b)), block).assertTemplate(top);\n var locals = top.getUsedTemplateLocals();\n return [astV2, locals];\n }\n /**\n * A `BlockContext` represents the block that a particular AST node is contained inside of.\n *\n * `BlockContext` is aware of template-wide options (such as strict mode), as well as the bindings\n * that are in-scope within that block.\n *\n * Concretely, it has the `PrecompileOptions` and current `SymbolTable`, and provides\n * facilities for working with those options.\n *\n * `BlockContext` is stateless.\n */\n\n class BlockContext {\n constructor(source, options, table) {\n this.source = source;\n this.options = options;\n this.table = table;\n this.builder = new Builder();\n }\n get strict() {\n return this.options.strictMode || false;\n }\n loc(loc) {\n return this.source.spanFor(loc);\n }\n resolutionFor(node, resolution) {\n if (this.strict) {\n return {\n resolution: STRICT_RESOLUTION\n };\n }\n if (this.isFreeVar(node)) {\n var r = resolution(node);\n if (r === null) {\n return {\n resolution: 'error',\n path: printPath(node),\n head: printHead(node)\n };\n }\n return {\n resolution: r\n };\n } else {\n return {\n resolution: STRICT_RESOLUTION\n };\n }\n }\n isFreeVar(callee) {\n if (callee.type === 'PathExpression') {\n if (callee.head.type !== 'VarHead') {\n return false;\n }\n return !this.table.has(callee.head.name);\n } else if (callee.path.type === 'PathExpression') {\n return this.isFreeVar(callee.path);\n } else {\n return false;\n }\n }\n hasBinding(name) {\n return this.table.has(name);\n }\n child(blockParams) {\n return new BlockContext(this.source, this.options, this.table.child(blockParams));\n }\n customizeComponentName(input) {\n if (this.options.customizeComponentName) {\n return this.options.customizeComponentName(input);\n } else {\n return input;\n }\n }\n }\n /**\n * An `ExpressionNormalizer` normalizes expressions within a block.\n *\n * `ExpressionNormalizer` is stateless.\n */\n\n class ExpressionNormalizer {\n constructor(block) {\n this.block = block;\n }\n normalize(expr, resolution) {\n switch (expr.type) {\n case 'NullLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'StringLiteral':\n case 'UndefinedLiteral':\n return this.block.builder.literal(expr.value, this.block.loc(expr.loc));\n case 'PathExpression':\n return this.path(expr, resolution);\n case 'SubExpression':\n {\n var _resolution = this.block.resolutionFor(expr, SexpSyntaxContext);\n if (_resolution.resolution === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`\" + _resolution.path + \"`) but \" + _resolution.head + \" was not in scope\", expr.loc);\n }\n return this.block.builder.sexp(this.callParts(expr, _resolution.resolution), this.block.loc(expr.loc));\n }\n }\n }\n path(expr, resolution) {\n var headOffsets = this.block.loc(expr.head.loc);\n var tail = []; // start with the head\n\n var offset = headOffsets;\n for (var part of expr.tail) {\n offset = offset.sliceStartChars({\n chars: part.length,\n skipStart: 1\n });\n tail.push(new SourceSlice({\n loc: offset,\n chars: part\n }));\n }\n return this.block.builder.path(this.ref(expr.head, resolution), tail, this.block.loc(expr.loc));\n }\n /**\n * The `callParts` method takes ASTv1.CallParts as well as a syntax context and normalizes\n * it to an ASTv2 CallParts.\n */\n\n callParts(parts, context) {\n var {\n path,\n params,\n hash\n } = parts;\n var callee = this.normalize(path, context);\n var paramList = params.map(p => this.normalize(p, ARGUMENT_RESOLUTION));\n var paramLoc = SpanList.range(paramList, callee.loc.collapse('end'));\n var namedLoc = this.block.loc(hash.loc);\n var argsLoc = SpanList.range([paramLoc, namedLoc]);\n var positional = this.block.builder.positional(params.map(p => this.normalize(p, ARGUMENT_RESOLUTION)), paramLoc);\n var named = this.block.builder.named(hash.pairs.map(p => this.namedArgument(p)), this.block.loc(hash.loc));\n return {\n callee,\n args: this.block.builder.args(positional, named, argsLoc)\n };\n }\n namedArgument(pair) {\n var offsets = this.block.loc(pair.loc);\n var keyOffsets = offsets.sliceStartChars({\n chars: pair.key.length\n });\n return this.block.builder.namedArgument(new SourceSlice({\n chars: pair.key,\n loc: keyOffsets\n }), this.normalize(pair.value, ARGUMENT_RESOLUTION));\n }\n /**\n * The `ref` method normalizes an `ASTv1.PathHead` into an `ASTv2.VariableReference`.\n * This method is extremely important, because it is responsible for normalizing free\n * variables into an an ASTv2.PathHead *with appropriate context*.\n *\n * The syntax context is originally determined by the syntactic position that this `PathHead`\n * came from, and is ultimately attached to the `ASTv2.VariableReference` here. In ASTv2,\n * the `VariableReference` node bears full responsibility for loose mode rules that control\n * the behavior of free variables.\n */\n\n ref(head, resolution) {\n var {\n block\n } = this;\n var {\n builder,\n table\n } = block;\n var offsets = block.loc(head.loc);\n switch (head.type) {\n case 'ThisHead':\n return builder.self(offsets);\n case 'AtHead':\n {\n var symbol = table.allocateNamed(head.name);\n return builder.at(head.name, symbol, offsets);\n }\n case 'VarHead':\n {\n if (block.hasBinding(head.name)) {\n var [_symbol, isRoot] = table.get(head.name);\n return block.builder.localVar(head.name, _symbol, isRoot, offsets);\n } else {\n var context = block.strict ? STRICT_RESOLUTION : resolution;\n var _symbol2 = block.table.allocateFree(head.name, context);\n return block.builder.freeVar({\n name: head.name,\n context,\n symbol: _symbol2,\n loc: offsets\n });\n }\n }\n }\n }\n }\n /**\n * `TemplateNormalizer` normalizes top-level ASTv1 statements to ASTv2.\n */\n\n class StatementNormalizer {\n constructor(block) {\n this.block = block;\n }\n normalize(node) {\n switch (node.type) {\n case 'PartialStatement':\n throw new Error(\"Handlebars partial syntax ({{> ...}}) is not allowed in Glimmer\");\n case 'BlockStatement':\n return this.BlockStatement(node);\n case 'ElementNode':\n return new ElementNormalizer(this.block).ElementNode(node);\n case 'MustacheStatement':\n return this.MustacheStatement(node);\n // These are the same in ASTv2\n\n case 'MustacheCommentStatement':\n return this.MustacheCommentStatement(node);\n case 'CommentStatement':\n {\n var _loc3 = this.block.loc(node.loc);\n return new HtmlComment({\n loc: _loc3,\n text: _loc3.slice({\n skipStart: 4,\n skipEnd: 3\n }).toSlice(node.value)\n });\n }\n case 'TextNode':\n return new HtmlText({\n loc: this.block.loc(node.loc),\n chars: node.chars\n });\n }\n }\n MustacheCommentStatement(node) {\n var loc = this.block.loc(node.loc);\n var textLoc;\n if (loc.asString().slice(0, 5) === '{{!--') {\n textLoc = loc.slice({\n skipStart: 5,\n skipEnd: 4\n });\n } else {\n textLoc = loc.slice({\n skipStart: 3,\n skipEnd: 2\n });\n }\n return new GlimmerComment({\n loc,\n text: textLoc.toSlice(node.value)\n });\n }\n /**\n * Normalizes an ASTv1.MustacheStatement to an ASTv2.AppendStatement\n */\n\n MustacheStatement(mustache) {\n var {\n escaped\n } = mustache;\n var loc = this.block.loc(mustache.loc); // Normalize the call parts in AppendSyntaxContext\n\n var callParts = this.expr.callParts({\n path: mustache.path,\n params: mustache.params,\n hash: mustache.hash\n }, AppendSyntaxContext(mustache));\n var value = callParts.args.isEmpty() ? callParts.callee : this.block.builder.sexp(callParts, loc);\n return this.block.builder.append({\n table: this.block.table,\n trusting: !escaped,\n value\n }, loc);\n }\n /**\n * Normalizes a ASTv1.BlockStatement to an ASTv2.BlockStatement\n */\n\n BlockStatement(block) {\n var {\n program,\n inverse\n } = block;\n var loc = this.block.loc(block.loc);\n var resolution = this.block.resolutionFor(block, BlockSyntaxContext);\n if (resolution.resolution === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`{{#\" + resolution.path + \"}}`) but \" + resolution.head + \" was not in scope\", loc);\n }\n var callParts = this.expr.callParts(block, resolution.resolution);\n return this.block.builder.blockStatement((0, _util.assign)({\n symbols: this.block.table,\n program: this.Block(program),\n inverse: inverse ? this.Block(inverse) : null\n }, callParts), loc);\n }\n Block(_ref33) {\n var {\n body,\n loc,\n blockParams\n } = _ref33;\n var child = this.block.child(blockParams);\n var normalizer = new StatementNormalizer(child);\n return new BlockChildren(this.block.loc(loc), body.map(b => normalizer.normalize(b)), this.block).assertBlock(child.table);\n }\n get expr() {\n return new ExpressionNormalizer(this.block);\n }\n }\n class ElementNormalizer {\n constructor(ctx) {\n this.ctx = ctx;\n }\n /**\n * Normalizes an ASTv1.ElementNode to:\n *\n * - ASTv2.NamedBlock if the tag name begins with `:`\n * - ASTv2.Component if the tag name matches the component heuristics\n * - ASTv2.SimpleElement if the tag name doesn't match the component heuristics\n *\n * A tag name represents a component if:\n *\n * - it begins with `@`\n * - it is exactly `this` or begins with `this.`\n * - the part before the first `.` is a reference to an in-scope variable binding\n * - it begins with an uppercase character\n */\n\n ElementNode(element) {\n var {\n tag,\n selfClosing,\n comments\n } = element;\n var loc = this.ctx.loc(element.loc);\n var [tagHead, ...rest] = tag.split('.'); // the head, attributes and modifiers are in the current scope\n\n var path = this.classifyTag(tagHead, rest, element.loc);\n var attrs = element.attributes.filter(a => a.name[0] !== '@').map(a => this.attr(a));\n var args = element.attributes.filter(a => a.name[0] === '@').map(a => this.arg(a));\n var modifiers = element.modifiers.map(m => this.modifier(m)); // the element's block params are in scope for the children\n\n var child = this.ctx.child(element.blockParams);\n var normalizer = new StatementNormalizer(child);\n var childNodes = element.children.map(s => normalizer.normalize(s));\n var el = this.ctx.builder.element({\n selfClosing,\n attrs,\n componentArgs: args,\n modifiers,\n comments: comments.map(c => new StatementNormalizer(this.ctx).MustacheCommentStatement(c))\n });\n var children = new ElementChildren(el, loc, childNodes, this.ctx);\n var offsets = this.ctx.loc(element.loc);\n var tagOffsets = offsets.sliceStartChars({\n chars: tag.length,\n skipStart: 1\n });\n if (path === 'ElementHead') {\n if (tag[0] === ':') {\n return children.assertNamedBlock(tagOffsets.slice({\n skipStart: 1\n }).toSlice(tag.slice(1)), child.table);\n } else {\n return children.assertElement(tagOffsets.toSlice(tag), element.blockParams.length > 0);\n }\n }\n if (element.selfClosing) {\n return el.selfClosingComponent(path, loc);\n } else {\n var blocks = children.assertComponent(tag, child.table, element.blockParams.length > 0);\n return el.componentWithNamedBlocks(path, blocks, loc);\n }\n }\n modifier(m) {\n var resolution = this.ctx.resolutionFor(m, ModifierSyntaxContext);\n if (resolution.resolution === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`{{#\" + resolution.path + \"}}`) as a modifier, but \" + resolution.head + \" was not in scope. Try adding `this` to the beginning of the path\", m.loc);\n }\n var callParts = this.expr.callParts(m, resolution.resolution);\n return this.ctx.builder.modifier(callParts, this.ctx.loc(m.loc));\n }\n /**\n * This method handles attribute values that are curlies, as well as curlies nested inside of\n * interpolations:\n *\n * ```hbs\n * <a href={{url}} />\n * <a href=\"{{url}}.html\" />\n * ```\n */\n\n mustacheAttr(mustache) {\n // Normalize the call parts in AttrValueSyntaxContext\n var sexp = this.ctx.builder.sexp(this.expr.callParts(mustache, AttrValueSyntaxContext(mustache)), this.ctx.loc(mustache.loc)); // If there are no params or hash, just return the function part as its own expression\n\n if (sexp.args.isEmpty()) {\n return sexp.callee;\n } else {\n return sexp;\n }\n }\n /**\n * attrPart is the narrowed down list of valid attribute values that are also\n * allowed as a concat part (you can't nest concats).\n */\n\n attrPart(part) {\n switch (part.type) {\n case 'MustacheStatement':\n return {\n expr: this.mustacheAttr(part),\n trusting: !part.escaped\n };\n case 'TextNode':\n return {\n expr: this.ctx.builder.literal(part.chars, this.ctx.loc(part.loc)),\n trusting: true\n };\n }\n }\n attrValue(part) {\n switch (part.type) {\n case 'ConcatStatement':\n {\n var parts = part.parts.map(p => this.attrPart(p).expr);\n return {\n expr: this.ctx.builder.interpolate(parts, this.ctx.loc(part.loc)),\n trusting: false\n };\n }\n default:\n return this.attrPart(part);\n }\n }\n attr(m) {\n if (m.name === '...attributes') {\n return this.ctx.builder.splatAttr(this.ctx.table.allocateBlock('attrs'), this.ctx.loc(m.loc));\n }\n var offsets = this.ctx.loc(m.loc);\n var nameSlice = offsets.sliceStartChars({\n chars: m.name.length\n }).toSlice(m.name);\n var value = this.attrValue(m.value);\n return this.ctx.builder.attr({\n name: nameSlice,\n value: value.expr,\n trusting: value.trusting\n }, offsets);\n }\n maybeDeprecatedCall(arg, part) {\n if (this.ctx.strict) {\n return null;\n }\n if (part.type !== 'MustacheStatement') {\n return null;\n }\n var {\n path\n } = part;\n if (path.type !== 'PathExpression') {\n return null;\n }\n if (path.head.type !== 'VarHead') {\n return null;\n }\n var {\n name\n } = path.head;\n if (name === 'has-block' || name === 'has-block-params') {\n return null;\n }\n if (this.ctx.hasBinding(name)) {\n return null;\n }\n if (path.tail.length !== 0) {\n return null;\n }\n if (part.params.length !== 0 || part.hash.pairs.length !== 0) {\n return null;\n }\n var context = LooseModeResolution.attr();\n var callee = this.ctx.builder.freeVar({\n name,\n context,\n symbol: this.ctx.table.allocateFree(name, context),\n loc: path.loc\n });\n return {\n expr: this.ctx.builder.deprecatedCall(arg, callee, part.loc),\n trusting: false\n };\n }\n arg(arg) {\n var offsets = this.ctx.loc(arg.loc);\n var nameSlice = offsets.sliceStartChars({\n chars: arg.name.length\n }).toSlice(arg.name);\n var value = this.maybeDeprecatedCall(nameSlice, arg.value) || this.attrValue(arg.value);\n return this.ctx.builder.arg({\n name: nameSlice,\n value: value.expr,\n trusting: value.trusting\n }, offsets);\n }\n /**\n * This function classifies the head of an ASTv1.Element into an ASTv2.PathHead (if the\n * element is a component) or `'ElementHead'` (if the element is a simple element).\n *\n * Rules:\n *\n * 1. If the variable is an `@arg`, return an `AtHead`\n * 2. If the variable is `this`, return a `ThisHead`\n * 3. If the variable is in the current scope:\n * a. If the scope is the root scope, then return a Free `LocalVarHead`\n * b. Else, return a standard `LocalVarHead`\n * 4. If the tag name is a path and the variable is not in the current scope, Syntax Error\n * 5. If the variable is uppercase return a FreeVar(ResolveAsComponentHead)\n * 6. Otherwise, return `'ElementHead'`\n */\n\n classifyTag(variable, tail, loc) {\n var uppercase = isUpperCase(variable);\n var inScope = variable[0] === '@' || variable === 'this' || this.ctx.hasBinding(variable);\n if (this.ctx.strict && !inScope) {\n if (uppercase) {\n throw generateSyntaxError(\"Attempted to invoke a component that was not in scope in a strict mode template, `<\" + variable + \">`. If you wanted to create an element with that name, convert it to lowercase - `<\" + variable.toLowerCase() + \">`\", loc);\n } // In strict mode, values are always elements unless they are in scope\n\n return 'ElementHead';\n } // Since the parser handed us the HTML element name as a string, we need\n // to convert it into an ASTv1 path so it can be processed using the\n // expression normalizer.\n\n var isComponent = inScope || uppercase;\n var variableLoc = loc.sliceStartChars({\n skipStart: 1,\n chars: variable.length\n });\n var tailLength = tail.reduce((accum, part) => accum + 1 + part.length, 0);\n var pathEnd = variableLoc.getEnd().move(tailLength);\n var pathLoc = variableLoc.withEnd(pathEnd);\n if (isComponent) {\n var path = b.path({\n head: b.head(variable, variableLoc),\n tail,\n loc: pathLoc\n });\n var resolution = this.ctx.resolutionFor(path, ComponentSyntaxContext);\n if (resolution.resolution === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`<\" + resolution.path + \">`) but \" + resolution.head + \" was not in scope\", loc);\n }\n return new ExpressionNormalizer(this.ctx).normalize(path, resolution.resolution);\n } // If the tag name wasn't a valid component but contained a `.`, it's\n // a syntax error.\n\n if (tail.length > 0) {\n throw generateSyntaxError(\"You used \" + variable + \".\" + tail.join('.') + \" as a tag name, but \" + variable + \" is not in scope\", loc);\n }\n return 'ElementHead';\n }\n get expr() {\n return new ExpressionNormalizer(this.ctx);\n }\n }\n class Children {\n constructor(loc, children, block) {\n this.loc = loc;\n this.children = children;\n this.block = block;\n this.namedBlocks = children.filter(c => c instanceof NamedBlock);\n this.hasSemanticContent = Boolean(children.filter(c => {\n if (c instanceof NamedBlock) {\n return false;\n }\n switch (c.type) {\n case 'GlimmerComment':\n case 'HtmlComment':\n return false;\n case 'HtmlText':\n return !/^\\s*$/.exec(c.chars);\n default:\n return true;\n }\n }).length);\n this.nonBlockChildren = children.filter(c => !(c instanceof NamedBlock));\n }\n }\n class TemplateChildren extends Children {\n assertTemplate(table) {\n if ((0, _util.isPresent)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block at the top-level of a template\", this.loc);\n }\n return this.block.builder.template(table, this.nonBlockChildren, this.block.loc(this.loc));\n }\n }\n class BlockChildren extends Children {\n assertBlock(table) {\n if ((0, _util.isPresent)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block nested in a normal block\", this.loc);\n }\n return this.block.builder.block(table, this.nonBlockChildren, this.loc);\n }\n }\n class ElementChildren extends Children {\n constructor(el, loc, children, block) {\n super(loc, children, block);\n this.el = el;\n }\n assertNamedBlock(name, table) {\n if (this.el.base.selfClosing) {\n throw generateSyntaxError(\"<:\" + name.chars + \"/> is not a valid named block: named blocks cannot be self-closing\", this.loc);\n }\n if ((0, _util.isPresent)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block inside <:\" + name.chars + \"> named block: named blocks cannot contain nested named blocks\", this.loc);\n }\n if (!isLowerCase(name.chars)) {\n throw generateSyntaxError(\"<:\" + name.chars + \"> is not a valid named block, and named blocks must begin with a lowercase letter\", this.loc);\n }\n if (this.el.base.attrs.length > 0 || this.el.base.componentArgs.length > 0 || this.el.base.modifiers.length > 0) {\n throw generateSyntaxError(\"named block <:\" + name.chars + \"> cannot have attributes, arguments, or modifiers\", this.loc);\n }\n var offsets = SpanList.range(this.nonBlockChildren, this.loc);\n return this.block.builder.namedBlock(name, this.block.builder.block(table, this.nonBlockChildren, offsets), this.loc);\n }\n assertElement(name, hasBlockParams) {\n if (hasBlockParams) {\n throw generateSyntaxError(\"Unexpected block params in <\" + name + \">: simple elements cannot have block params\", this.loc);\n }\n if ((0, _util.isPresent)(this.namedBlocks)) {\n var names = this.namedBlocks.map(b => b.name);\n if (names.length === 1) {\n throw generateSyntaxError(\"Unexpected named block <:foo> inside <\" + name.chars + \"> HTML element\", this.loc);\n } else {\n var printedNames = names.map(n => \"<:\" + n.chars + \">\").join(', ');\n throw generateSyntaxError(\"Unexpected named blocks inside <\" + name.chars + \"> HTML element (\" + printedNames + \")\", this.loc);\n }\n }\n return this.el.simple(name, this.nonBlockChildren, this.loc);\n }\n assertComponent(name, table, hasBlockParams) {\n if ((0, _util.isPresent)(this.namedBlocks) && this.hasSemanticContent) {\n throw generateSyntaxError(\"Unexpected content inside <\" + name + \"> component invocation: when using named blocks, the tag cannot contain other content\", this.loc);\n }\n if ((0, _util.isPresent)(this.namedBlocks)) {\n if (hasBlockParams) {\n throw generateSyntaxError(\"Unexpected block params list on <\" + name + \"> component invocation: when passing named blocks, the invocation tag cannot take block params\", this.loc);\n }\n var seenNames = new Set();\n for (var block of this.namedBlocks) {\n var _name = block.name.chars;\n if (seenNames.has(_name)) {\n throw generateSyntaxError(\"Component had two named blocks with the same name, `<:\" + _name + \">`. Only one block with a given name may be passed\", this.loc);\n }\n if (_name === 'inverse' && seenNames.has('else') || _name === 'else' && seenNames.has('inverse')) {\n throw generateSyntaxError(\"Component has both <:else> and <:inverse> block. <:inverse> is an alias for <:else>\", this.loc);\n }\n seenNames.add(_name);\n }\n return this.namedBlocks;\n } else {\n return [this.block.builder.namedBlock(SourceSlice.synthetic('default'), this.block.builder.block(table, this.nonBlockChildren, this.loc), this.loc)];\n }\n }\n }\n function printPath(node) {\n if (node.type !== 'PathExpression' && node.path.type === 'PathExpression') {\n return printPath(node.path);\n } else {\n return new Printer({\n entityEncoding: 'raw'\n }).print(node);\n }\n }\n function printHead(node) {\n if (node.type === 'PathExpression') {\n switch (node.head.type) {\n case 'AtHead':\n case 'VarHead':\n return node.head.name;\n case 'ThisHead':\n return 'this';\n }\n } else if (node.path.type === 'PathExpression') {\n return printHead(node.path);\n } else {\n return new Printer({\n entityEncoding: 'raw'\n }).print(node);\n }\n }\n function isKeyword(word) {\n return word in KEYWORDS_TYPES;\n }\n /**\n * This includes the full list of keywords currently in use in the template\n * language, and where their valid usages are.\n */\n\n var KEYWORDS_TYPES = {\n component: ['Call', 'Append', 'Block'],\n debugger: ['Append'],\n 'each-in': ['Block'],\n each: ['Block'],\n 'has-block-params': ['Call', 'Append'],\n 'has-block': ['Call', 'Append'],\n helper: ['Call', 'Append'],\n if: ['Call', 'Append', 'Block'],\n 'in-element': ['Block'],\n let: ['Block'],\n 'link-to': ['Append', 'Block'],\n log: ['Call', 'Append'],\n modifier: ['Call'],\n mount: ['Append'],\n mut: ['Call', 'Append'],\n outlet: ['Append'],\n 'query-params': ['Call'],\n readonly: ['Call', 'Append'],\n unbound: ['Call', 'Append'],\n unless: ['Call', 'Append', 'Block'],\n with: ['Block'],\n yield: ['Append']\n };\n\n /**\n * Gets the correct Token from the Node based on it's type\n */\n _exports.KEYWORDS_TYPES = KEYWORDS_TYPES;\n function tokensFromType(node, scopedTokens, options) {\n if (node.type === 'PathExpression') {\n if (node.head.type === 'AtHead' || node.head.type === 'ThisHead') {\n return;\n }\n var possbleToken = node.head.name;\n if (scopedTokens.indexOf(possbleToken) === -1) {\n return possbleToken;\n }\n } else if (node.type === 'ElementNode') {\n var {\n tag\n } = node;\n var char = tag.charAt(0);\n if (char === ':' || char === '@') {\n return;\n }\n if (!options.includeHtmlElements && tag.indexOf('.') === -1 && tag.toLowerCase() === tag) {\n return;\n }\n if (tag.substr(0, 5) === 'this.') {\n return;\n }\n if (scopedTokens.indexOf(tag) !== -1) {\n return;\n }\n return tag;\n }\n }\n /**\n * Adds tokens to the tokensSet based on their node.type\n */\n\n function addTokens(tokensSet, node, scopedTokens, options) {\n var maybeTokens = tokensFromType(node, scopedTokens, options);\n (Array.isArray(maybeTokens) ? maybeTokens : [maybeTokens]).forEach(maybeToken => {\n if (maybeToken !== undefined && maybeToken[0] !== '@') {\n var maybeTokenFirstSegment = maybeToken.split('.')[0];\n if (!scopedTokens.includes(maybeTokenFirstSegment)) {\n tokensSet.add(maybeToken.split('.')[0]);\n }\n }\n });\n }\n /**\n * Parses and traverses a given handlebars html template to extract all template locals\n * referenced that could possible come from the parent scope. Can exclude known keywords\n * optionally.\n */\n\n function getTemplateLocals(html, options) {\n if (options === void 0) {\n options = {\n includeHtmlElements: false,\n includeKeywords: false\n };\n }\n var ast = preprocess(html);\n var tokensSet = new Set();\n var scopedTokens = [];\n traverse(ast, {\n Block: {\n enter(_ref34) {\n var {\n blockParams\n } = _ref34;\n blockParams.forEach(param => {\n scopedTokens.push(param);\n });\n },\n exit(_ref35) {\n var {\n blockParams\n } = _ref35;\n blockParams.forEach(() => {\n scopedTokens.pop();\n });\n }\n },\n ElementNode: {\n enter(node) {\n node.blockParams.forEach(param => {\n scopedTokens.push(param);\n });\n addTokens(tokensSet, node, scopedTokens, options);\n },\n exit(_ref36) {\n var {\n blockParams\n } = _ref36;\n blockParams.forEach(() => {\n scopedTokens.pop();\n });\n }\n },\n PathExpression(node) {\n addTokens(tokensSet, node, scopedTokens, options);\n }\n });\n var tokens = [];\n tokensSet.forEach(s => tokens.push(s));\n if (!(options === null || options === void 0 ? void 0 : options.includeKeywords)) {\n tokens = tokens.filter(token => !isKeyword(token));\n }\n return tokens;\n }\n});","define(\"@glimmer/util\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports._WeakSet = _exports.Stack = _exports.SERIALIZATION_FIRST_NODE_STRING = _exports.LOGGER = _exports.LOCAL_LOGGER = _exports.HAS_NATIVE_SYMBOL = _exports.HAS_NATIVE_PROXY = _exports.EMPTY_STRING_ARRAY = _exports.EMPTY_NUMBER_ARRAY = _exports.EMPTY_ARRAY = void 0;\n _exports.assert = debugAssert;\n _exports.assertNever = assertNever;\n _exports.assertPresent = assertPresent;\n _exports.beginTestSteps = _exports.assign = void 0;\n _exports.buildUntouchableThis = buildUntouchableThis;\n _exports.castToBrowser = castToBrowser;\n _exports.castToSimple = castToSimple;\n _exports.checkNode = checkNode;\n _exports.clearElement = clearElement;\n _exports.constants = constants;\n _exports.debugToString = void 0;\n _exports.decodeHandle = decodeHandle;\n _exports.decodeImmediate = decodeImmediate;\n _exports.decodeNegative = decodeNegative;\n _exports.decodePositive = decodePositive;\n _exports.deprecate = deprecate;\n _exports.dict = dict;\n _exports.emptyArray = emptyArray;\n _exports.encodeHandle = encodeHandle;\n _exports.encodeImmediate = encodeImmediate;\n _exports.encodeNegative = encodeNegative;\n _exports.encodePositive = encodePositive;\n _exports.endTestSteps = void 0;\n _exports.enumerableSymbol = enumerableSymbol;\n _exports.exhausted = exhausted;\n _exports.expect = expect;\n _exports.extractHandle = extractHandle;\n _exports.fillNulls = fillNulls;\n _exports.ifPresent = ifPresent;\n _exports.intern = intern;\n _exports.isDict = isDict;\n _exports.isEmptyArray = isEmptyArray;\n _exports.isErrHandle = isErrHandle;\n _exports.isHandle = isHandle;\n _exports.isNonPrimitiveHandle = isNonPrimitiveHandle;\n _exports.isObject = isObject;\n _exports.isOkHandle = isOkHandle;\n _exports.isPresent = isPresent;\n _exports.isSerializationFirstNode = isSerializationFirstNode;\n _exports.isSmallInt = isSmallInt;\n _exports.keys = keys;\n _exports.logStep = void 0;\n _exports.mapPresent = mapPresent;\n _exports.strip = strip;\n _exports.symbol = void 0;\n _exports.toPresentOption = toPresentOption;\n _exports.tuple = void 0;\n _exports.unreachable = unreachable;\n _exports.unwrap = unwrap;\n _exports.unwrapHandle = unwrapHandle;\n _exports.unwrapTemplate = unwrapTemplate;\n _exports.values = values;\n _exports.verifySteps = void 0;\n var EMPTY_ARRAY = Object.freeze([]);\n _exports.EMPTY_ARRAY = EMPTY_ARRAY;\n function emptyArray() {\n return EMPTY_ARRAY;\n }\n var EMPTY_STRING_ARRAY = emptyArray();\n _exports.EMPTY_STRING_ARRAY = EMPTY_STRING_ARRAY;\n var EMPTY_NUMBER_ARRAY = emptyArray();\n /**\n * This function returns `true` if the input array is the special empty array sentinel,\n * which is sometimes used for optimizations.\n */\n _exports.EMPTY_NUMBER_ARRAY = EMPTY_NUMBER_ARRAY;\n function isEmptyArray(input) {\n return input === EMPTY_ARRAY;\n }\n\n // import Logger from './logger';\n\n function debugAssert(test, msg) {\n // if (!alreadyWarned) {\n // alreadyWarned = true;\n // Logger.warn(\"Don't leave debug assertions on in public builds\");\n // }\n if (!test) {\n throw new Error(msg || 'assertion failure');\n }\n }\n function deprecate(desc) {\n LOCAL_LOGGER.warn(\"DEPRECATION: \" + desc);\n }\n function dict() {\n return Object.create(null);\n }\n function isDict(u) {\n return u !== null && u !== undefined;\n }\n function isObject(u) {\n return typeof u === 'function' || typeof u === 'object' && u !== null;\n }\n class StackImpl {\n constructor(values) {\n if (values === void 0) {\n values = [];\n }\n this.current = null;\n this.stack = values;\n }\n get size() {\n return this.stack.length;\n }\n push(item) {\n this.current = item;\n this.stack.push(item);\n }\n pop() {\n var item = this.stack.pop();\n var len = this.stack.length;\n this.current = len === 0 ? null : this.stack[len - 1];\n return item === undefined ? null : item;\n }\n nth(from) {\n var len = this.stack.length;\n return len < from ? null : this.stack[len - from];\n }\n isEmpty() {\n return this.stack.length === 0;\n }\n toArray() {\n return this.stack;\n }\n }\n _exports.Stack = StackImpl;\n function clearElement(parent) {\n var current = parent.firstChild;\n while (current) {\n var next = current.nextSibling;\n parent.removeChild(current);\n current = next;\n }\n }\n var SERIALIZATION_FIRST_NODE_STRING = '%+b:0%';\n _exports.SERIALIZATION_FIRST_NODE_STRING = SERIALIZATION_FIRST_NODE_STRING;\n function isSerializationFirstNode(node) {\n return node.nodeValue === SERIALIZATION_FIRST_NODE_STRING;\n }\n var assign = Object.assign;\n _exports.assign = assign;\n function fillNulls(count) {\n var arr = new Array(count);\n for (var i = 0; i < count; i++) {\n arr[i] = null;\n }\n return arr;\n }\n function values(obj) {\n var vals = [];\n for (var key in obj) {\n vals.push(obj[key]);\n }\n return vals;\n }\n\n /**\n Strongly hint runtimes to intern the provided string.\n \n When do I need to use this function?\n \n For the most part, never. Pre-mature optimization is bad, and often the\n runtime does exactly what you need it to, and more often the trade-off isn't\n worth it.\n \n Why?\n \n Runtimes store strings in at least 2 different representations:\n Ropes and Symbols (interned strings). The Rope provides a memory efficient\n data-structure for strings created from concatenation or some other string\n manipulation like splitting.\n \n Unfortunately checking equality of different ropes can be quite costly as\n runtimes must resort to clever string comparison algorithms. These\n algorithms typically cost in proportion to the length of the string.\n Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n unique by their string content, equality checks can be done by pointer\n comparison.\n \n How do I know if my string is a rope or symbol?\n \n Typically (warning general sweeping statement, but truthy in runtimes at\n present) static strings created as part of the JS source are interned.\n Strings often used for comparisons can be interned at runtime if some\n criteria are met. One of these criteria can be the size of the entire rope.\n For example, in chrome 38 a rope longer then 12 characters will not\n intern, nor will segments of that rope.\n \n Some numbers: http://jsperf.com/eval-vs-keys/8\n \n Known Trick™\n \n @private\n @return {String} interned version of the provided string\n */\n function intern(str) {\n var obj = {};\n obj[str] = 1;\n for (var key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n }\n var HAS_NATIVE_PROXY = typeof Proxy === 'function';\n _exports.HAS_NATIVE_PROXY = HAS_NATIVE_PROXY;\n var HAS_NATIVE_SYMBOL = function () {\n if (typeof Symbol !== 'function') {\n return false;\n } // eslint-disable-next-line symbol-description\n\n return typeof Symbol() === 'symbol';\n }();\n _exports.HAS_NATIVE_SYMBOL = HAS_NATIVE_SYMBOL;\n function keys(obj) {\n return Object.keys(obj);\n }\n function unwrap(val) {\n if (val === null || val === undefined) throw new Error(\"Expected value to be present\");\n return val;\n }\n function expect(val, message) {\n if (val === null || val === undefined) throw new Error(message);\n return val;\n }\n function unreachable(message) {\n if (message === void 0) {\n message = 'unreachable';\n }\n return new Error(message);\n }\n function exhausted(value) {\n throw new Error(\"Exhausted \" + value);\n }\n var tuple = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return args;\n };\n _exports.tuple = tuple;\n function enumerableSymbol(key) {\n return intern(\"__\" + key + Math.floor(Math.random() * Date.now()) + \"__\");\n }\n var symbol = HAS_NATIVE_SYMBOL ? Symbol : enumerableSymbol;\n _exports.symbol = symbol;\n function strip(strings) {\n var out = '';\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n for (var i = 0; i < strings.length; i++) {\n var string = strings[i];\n var dynamic = args[i] !== undefined ? String(args[i]) : '';\n out += \"\" + string + dynamic;\n }\n var lines = out.split('\\n');\n while (lines.length && lines[0].match(/^\\s*$/)) {\n lines.shift();\n }\n while (lines.length && lines[lines.length - 1].match(/^\\s*$/)) {\n lines.pop();\n }\n var min = Infinity;\n for (var line of lines) {\n var leading = line.match(/^\\s*/)[0].length;\n min = Math.min(min, leading);\n }\n var stripped = [];\n for (var _line of lines) {\n stripped.push(_line.slice(min));\n }\n return stripped.join('\\n');\n }\n function isHandle(value) {\n return value >= 0;\n }\n function isNonPrimitiveHandle(value) {\n return value > 3\n /* ENCODED_UNDEFINED_HANDLE */;\n }\n\n function constants() {\n for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n return [false, true, null, undefined, ...values];\n }\n function isSmallInt(value) {\n return value % 1 === 0 && value <= 536870911\n /* MAX_INT */ && value >= -536870912\n /* MIN_INT */;\n }\n\n function encodeNegative(num) {\n return num & -536870913\n /* SIGN_BIT */;\n }\n\n function decodeNegative(num) {\n return num | ~-536870913\n /* SIGN_BIT */;\n }\n\n function encodePositive(num) {\n return ~num;\n }\n function decodePositive(num) {\n return ~num;\n }\n function encodeHandle(num) {\n return num;\n }\n function decodeHandle(num) {\n return num;\n }\n function encodeImmediate(num) {\n num |= 0;\n return num < 0 ? encodeNegative(num) : encodePositive(num);\n }\n function decodeImmediate(num) {\n num |= 0;\n return num > -536870913\n /* SIGN_BIT */ ? decodePositive(num) : decodeNegative(num);\n } // Warm\n [1, -1].forEach(x => decodeImmediate(encodeImmediate(x)));\n function unwrapHandle(handle) {\n if (typeof handle === 'number') {\n return handle;\n } else {\n var error = handle.errors[0];\n throw new Error(\"Compile Error: \" + error.problem + \" @ \" + error.span.start + \"..\" + error.span.end);\n }\n }\n function unwrapTemplate(template) {\n if (template.result === 'error') {\n throw new Error(\"Compile Error: \" + template.problem + \" @ \" + template.span.start + \"..\" + template.span.end);\n }\n return template;\n }\n function extractHandle(handle) {\n if (typeof handle === 'number') {\n return handle;\n } else {\n return handle.handle;\n }\n }\n function isOkHandle(handle) {\n return typeof handle === 'number';\n }\n function isErrHandle(handle) {\n return typeof handle === 'number';\n }\n var weakSet = typeof WeakSet === 'function' ? WeakSet : class WeakSetPolyFill {\n constructor() {\n this._map = new WeakMap();\n }\n add(val) {\n this._map.set(val, true);\n return this;\n }\n delete(val) {\n return this._map.delete(val);\n }\n has(val) {\n return this._map.has(val);\n }\n };\n _exports._WeakSet = weakSet;\n function castToSimple(node) {\n if (isDocument(node)) {\n return node;\n } else if (isElement(node)) {\n return node;\n } else {\n return node;\n }\n }\n function castToBrowser(node, sugaryCheck) {\n if (node === null || node === undefined) {\n return null;\n }\n if (typeof document === undefined) {\n throw new Error('Attempted to cast to a browser node in a non-browser context');\n }\n if (isDocument(node)) {\n return node;\n }\n if (node.ownerDocument !== document) {\n throw new Error('Attempted to cast to a browser node with a node that was not created from this document');\n }\n return checkNode(node, sugaryCheck);\n }\n function checkError(from, check) {\n return new Error(\"cannot cast a \" + from + \" into \" + check);\n }\n function isDocument(node) {\n return node.nodeType === 9\n /* DOCUMENT_NODE */;\n }\n\n function isElement(node) {\n return node.nodeType === 1\n /* ELEMENT_NODE */;\n }\n\n function checkNode(node, check) {\n var isMatch = false;\n if (node !== null) {\n if (typeof check === 'string') {\n isMatch = stringCheckNode(node, check);\n } else if (Array.isArray(check)) {\n isMatch = check.some(c => stringCheckNode(node, c));\n } else {\n throw unreachable();\n }\n }\n if (isMatch) {\n return node;\n } else {\n throw checkError(\"SimpleElement(\" + node + \")\", check);\n }\n }\n function stringCheckNode(node, check) {\n switch (check) {\n case 'NODE':\n return true;\n case 'HTML':\n return node instanceof HTMLElement;\n case 'SVG':\n return node instanceof SVGElement;\n case 'ELEMENT':\n return node instanceof Element;\n default:\n if (check.toUpperCase() === check) {\n throw new Error(\"BUG: this code is missing handling for a generic node type\");\n }\n return node instanceof Element && node.tagName.toLowerCase() === check;\n }\n }\n function isPresent(list) {\n return list.length > 0;\n }\n function ifPresent(list, ifPresent, otherwise) {\n if (isPresent(list)) {\n return ifPresent(list);\n } else {\n return otherwise();\n }\n }\n function toPresentOption(list) {\n if (isPresent(list)) {\n return list;\n } else {\n return null;\n }\n }\n function assertPresent(list, message) {\n if (message === void 0) {\n message = \"unexpected empty list\";\n }\n if (!isPresent(list)) {\n throw new Error(message);\n }\n }\n function mapPresent(list, callback) {\n if (list === null) {\n return null;\n }\n var out = [];\n for (var item of list) {\n out.push(callback(item));\n }\n return out;\n }\n function buildUntouchableThis(source) {\n var context = null;\n if (true /* DEBUG */ && HAS_NATIVE_PROXY) {\n var assertOnProperty = property => {\n throw new Error(\"You accessed `this.\" + String(property) + \"` from a function passed to the \" + source + \", but the function itself was not bound to a valid `this` context. Consider updating to use a bound function (for instance, use an arrow function, `() => {}`).\");\n };\n context = new Proxy({}, {\n get(_target, property) {\n assertOnProperty(property);\n },\n set(_target, property) {\n assertOnProperty(property);\n return false;\n },\n has(_target, property) {\n assertOnProperty(property);\n return false;\n }\n });\n }\n return context;\n }\n var debugToString;\n if (true /* DEBUG */) {\n var getFunctionName = fn => {\n var functionName = fn.name;\n if (functionName === undefined) {\n var match = Function.prototype.toString.call(fn).match(/function (\\w+)\\s*\\(/);\n functionName = match && match[1] || '';\n }\n return functionName.replace(/^bound /, '');\n };\n var getObjectName = obj => {\n var name;\n var className;\n if (obj.constructor && typeof obj.constructor === 'function') {\n className = getFunctionName(obj.constructor);\n }\n if ('toString' in obj && obj.toString !== Object.prototype.toString && obj.toString !== Function.prototype.toString) {\n name = obj.toString();\n } // If the class has a decent looking name, and the `toString` is one of the\n // default Ember toStrings, replace the constructor portion of the toString\n // with the class name. We check the length of the class name to prevent doing\n // this when the value is minified.\n\n if (name && name.match(/<.*:ember\\d+>/) && className && className[0] !== '_' && className.length > 2 && className !== 'Class') {\n return name.replace(/<.*:/, \"<\" + className + \":\");\n }\n return name || className;\n };\n var getPrimitiveName = value => {\n return String(value);\n };\n debugToString = value => {\n if (typeof value === 'function') {\n return getFunctionName(value) || \"(unknown function)\";\n } else if (typeof value === 'object' && value !== null) {\n return getObjectName(value) || \"(unknown object)\";\n } else {\n return getPrimitiveName(value);\n }\n };\n }\n var debugToString$1 = debugToString;\n _exports.debugToString = debugToString$1;\n var beginTestSteps;\n _exports.beginTestSteps = beginTestSteps;\n var endTestSteps;\n _exports.endTestSteps = endTestSteps;\n var verifySteps;\n _exports.verifySteps = verifySteps;\n var logStep;\n\n /**\n * This constant exists to make it easier to differentiate normal logs from\n * errant console.logs. LOCAL_LOGGER should only be used inside a\n * LOCAL_SHOULD_LOG check.\n *\n * It does not alleviate the need to check LOCAL_SHOULD_LOG, which is used\n * for stripping.\n */\n _exports.logStep = logStep;\n var LOCAL_LOGGER = console;\n /**\n * This constant exists to make it easier to differentiate normal logs from\n * errant console.logs. LOGGER can be used outside of LOCAL_SHOULD_LOG checks,\n * and is meant to be used in the rare situation where a console.* call is\n * actually appropriate.\n */\n _exports.LOCAL_LOGGER = LOCAL_LOGGER;\n var LOGGER = console;\n _exports.LOGGER = LOGGER;\n function assertNever(value, desc) {\n if (desc === void 0) {\n desc = 'unexpected unreachable branch';\n }\n LOGGER.log('unreachable', value);\n LOGGER.log(desc + \" :: \" + JSON.stringify(value) + \" (\" + value + \")\");\n throw new Error(\"code reached unreachable\");\n }\n});","define(\"@glimmer/wire-format\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.getStringFromValue = getStringFromValue;\n _exports.is = is;\n _exports.isArgument = isArgument;\n _exports.isAttribute = isAttribute;\n _exports.isGet = _exports.isFlushElement = void 0;\n _exports.isHelper = isHelper;\n _exports.isStringLiteral = isStringLiteral;\n function is(variant) {\n return function (value) {\n return Array.isArray(value) && value[0] === variant;\n };\n } // Statements\n\n var isFlushElement = is(12\n /* FlushElement */);\n _exports.isFlushElement = isFlushElement;\n function isAttribute(val) {\n return val[0] === 14\n /* StaticAttr */ || val[0] === 15\n /* DynamicAttr */ || val[0] === 22\n /* TrustingDynamicAttr */ || val[0] === 16\n /* ComponentAttr */ || val[0] === 24\n /* StaticComponentAttr */ || val[0] === 23\n /* TrustingComponentAttr */ || val[0] === 17\n /* AttrSplat */ || val[0] === 4\n /* Modifier */;\n }\n\n function isStringLiteral(expr) {\n return typeof expr === 'string';\n }\n function getStringFromValue(expr) {\n return expr;\n }\n function isArgument(val) {\n return val[0] === 21\n /* StaticArg */ || val[0] === 20\n /* DynamicArg */;\n }\n\n function isHelper(expr) {\n return Array.isArray(expr) && expr[0] === 28\n /* Call */;\n } // Expressions\n\n var isGet = is(30\n /* GetSymbol */);\n _exports.isGet = isGet;\n});","define(\"@handlebars/parser/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.Exception = Exception;\n _exports.PrintVisitor = PrintVisitor;\n _exports.Visitor = Visitor;\n _exports.WhitespaceControl = WhitespaceControl;\n _exports.parse = parse;\n _exports.parseWithoutProcessing = parseWithoutProcessing;\n _exports.parser = void 0;\n _exports.print = print;\n var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n function Exception(message, node) {\n var loc = node && node.loc,\n line,\n endLineNumber,\n column,\n endColumn;\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n message += ' - ' + line + ':' + column;\n }\n var tmp = Error.prototype.constructor.call(this, message);\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n }\n Exception.prototype = new Error();\n function Visitor() {\n this.parents = [];\n }\n Visitor.prototype = {\n constructor: Visitor,\n mutating: false,\n // Visits a given value. If mutating, will replace the value if necessary.\n acceptKey: function (node, name) {\n var value = this.accept(node[name]);\n if (this.mutating) {\n // Hacky sanity check: This may have a few false positives for type for the helper\n // methods but will generally do the right thing without a lot of overhead.\n if (value && !Visitor.prototype[value.type]) {\n throw new Exception('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n }\n node[name] = value;\n }\n },\n // Performs an accept operation with added sanity check to ensure\n // required keys are not removed.\n acceptRequired: function (node, name) {\n this.acceptKey(node, name);\n if (!node[name]) {\n throw new Exception(node.type + ' requires ' + name);\n }\n },\n // Traverses a given array. If mutating, empty respnses will be removed\n // for child elements.\n acceptArray: function (array) {\n for (var i = 0, l = array.length; i < l; i++) {\n this.acceptKey(array, i);\n if (!array[i]) {\n array.splice(i, 1);\n i--;\n l--;\n }\n }\n },\n accept: function (object) {\n if (!object) {\n return;\n }\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new Exception('Unknown type: ' + object.type, object);\n }\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n var ret = this[object.type](object);\n this.current = this.parents.shift();\n if (!this.mutating || ret) {\n return ret;\n } else if (ret !== false) {\n return object;\n }\n },\n Program: function (program) {\n this.acceptArray(program.body);\n },\n MustacheStatement: visitSubExpression,\n Decorator: visitSubExpression,\n BlockStatement: visitBlock,\n DecoratorBlock: visitBlock,\n PartialStatement: visitPartial,\n PartialBlockStatement: function (partial) {\n visitPartial.call(this, partial);\n this.acceptKey(partial, 'program');\n },\n ContentStatement: function /* content */ () {},\n CommentStatement: function /* comment */ () {},\n SubExpression: visitSubExpression,\n PathExpression: function /* path */ () {},\n StringLiteral: function /* string */ () {},\n NumberLiteral: function /* number */ () {},\n BooleanLiteral: function /* bool */ () {},\n UndefinedLiteral: function /* literal */ () {},\n NullLiteral: function /* literal */ () {},\n Hash: function (hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function (pair) {\n this.acceptRequired(pair, 'value');\n }\n };\n function visitSubExpression(mustache) {\n this.acceptRequired(mustache, 'path');\n this.acceptArray(mustache.params);\n this.acceptKey(mustache, 'hash');\n }\n function visitBlock(block) {\n visitSubExpression.call(this, block);\n this.acceptKey(block, 'program');\n this.acceptKey(block, 'inverse');\n }\n function visitPartial(partial) {\n this.acceptRequired(partial, 'name');\n this.acceptArray(partial.params);\n this.acceptKey(partial, 'hash');\n }\n function WhitespaceControl(options) {\n if (options === void 0) {\n options = {};\n }\n this.options = options;\n }\n WhitespaceControl.prototype = new Visitor();\n WhitespaceControl.prototype.Program = function (program) {\n var doStandalone = !this.options.ignoreStandalone;\n var isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n var body = program.body;\n for (var i = 0, l = body.length; i < l; i++) {\n var current = body[i],\n strip = this.accept(current);\n if (!strip) {\n continue;\n }\n var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n if (strip.close) {\n omitRight(body, i, true);\n }\n if (strip.open) {\n omitLeft(body, i, true);\n }\n if (doStandalone && inlineStandalone) {\n omitRight(body, i);\n if (omitLeft(body, i)) {\n // If we are on a standalone node, save the indent info for partials\n if (current.type === 'PartialStatement') {\n // Pull out the whitespace from the final line\n current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n }\n }\n }\n if (doStandalone && openStandalone) {\n omitRight((current.program || current.inverse).body);\n // Strip out the previous content node if it's whitespace only\n omitLeft(body, i);\n }\n if (doStandalone && closeStandalone) {\n // Always strip the next node\n omitRight(body, i);\n omitLeft((current.inverse || current.program).body);\n }\n }\n return program;\n };\n WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n this.accept(block.program);\n this.accept(block.inverse);\n // Find the inverse program that is involed with whitespace stripping.\n var program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n if (inverse && inverse.chained) {\n firstInverse = inverse.body[0].program;\n // Walk the inverse chain to find the last inverse that is actually in the chain.\n while (lastInverse.chained) {\n lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n }\n }\n var strip = {\n open: block.openStrip.open,\n close: block.closeStrip.close,\n // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n // so our parent can determine if we actually are standalone\n openStandalone: isNextWhitespace(program.body),\n closeStandalone: isPrevWhitespace((firstInverse || program).body)\n };\n if (block.openStrip.close) {\n omitRight(program.body, null, true);\n }\n if (inverse) {\n var inverseStrip = block.inverseStrip;\n if (inverseStrip.open) {\n omitLeft(program.body, null, true);\n }\n if (inverseStrip.close) {\n omitRight(firstInverse.body, null, true);\n }\n if (block.closeStrip.open) {\n omitLeft(lastInverse.body, null, true);\n }\n // Find standalone else statments\n if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n return strip;\n };\n WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n return mustache.strip;\n };\n WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n /* istanbul ignore next */\n var strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n };\n function isPrevWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = body.length;\n }\n // Nodes that end with newlines are considered whitespace (but are special\n // cased for strip operations)\n var prev = body[i - 1],\n sibling = body[i - 2];\n if (!prev) {\n return isRoot;\n }\n if (prev.type === 'ContentStatement') {\n return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n }\n }\n function isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n var next = body[i + 1],\n sibling = body[i + 2];\n if (!next) {\n return isRoot;\n }\n if (next.type === 'ContentStatement') {\n return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n }\n }\n // Marks the node to the right of the position as omitted.\n // I.e. {{foo}}' ' will mark the ' ' node as omitted.\n //\n // If i is undefined, then the first child will be marked as such.\n //\n // If multiple is truthy then all whitespace will be stripped out until non-whitespace\n // content is met.\n function omitRight(body, i, multiple) {\n var current = body[i == null ? 0 : i + 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n return;\n }\n var original = current.value;\n current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n current.rightStripped = current.value !== original;\n }\n // Marks the node to the left of the position as omitted.\n // I.e. ' '{{foo}} will mark the ' ' node as omitted.\n //\n // If i is undefined then the last child will be marked as such.\n //\n // If multiple is truthy then all whitespace will be stripped out until non-whitespace\n // content is met.\n function omitLeft(body, i, multiple) {\n var current = body[i == null ? body.length - 1 : i - 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n return;\n }\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n var original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n }\n\n /* parser generated by jison 0.4.18 */\n /*\n Returns a Parser object of the following structure:\n \n Parser: {\n yy: {}\n }\n \n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n \n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n \n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n \n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n \n \n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n \n \n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n */\n var parser = function () {\n var o = function (k, v, o, l) {\n for (o = o || {}, l = k.length; l--; o[k[l]] = v);\n return o;\n },\n $V0 = [2, 44],\n $V1 = [1, 20],\n $V2 = [5, 14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60],\n $V3 = [1, 35],\n $V4 = [1, 38],\n $V5 = [1, 30],\n $V6 = [1, 31],\n $V7 = [1, 32],\n $V8 = [1, 33],\n $V9 = [1, 34],\n $Va = [1, 37],\n $Vb = [14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60],\n $Vc = [14, 15, 19, 29, 34, 44, 47, 48, 52, 56, 60],\n $Vd = [15, 18],\n $Ve = [14, 15, 19, 29, 34, 47, 48, 52, 56, 60],\n $Vf = [33, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vg = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84],\n $Vh = [1, 51],\n $Vi = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84, 86],\n $Vj = [2, 43],\n $Vk = [55, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vl = [1, 58],\n $Vm = [1, 59],\n $Vn = [1, 66],\n $Vo = [33, 64, 71, 74, 79, 80, 81, 82, 83, 84],\n $Vp = [23, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vq = [1, 76],\n $Vr = [64, 67, 71, 79, 80, 81, 82, 83, 84],\n $Vs = [33, 74],\n $Vt = [23, 33, 55, 67, 71, 74],\n $Vu = [1, 106],\n $Vv = [1, 118],\n $Vw = [71, 76];\n var parser = {\n trace: function trace() {},\n yy: {},\n symbols_: {\n \"error\": 2,\n \"root\": 3,\n \"program\": 4,\n \"EOF\": 5,\n \"program_repetition0\": 6,\n \"statement\": 7,\n \"mustache\": 8,\n \"block\": 9,\n \"rawBlock\": 10,\n \"partial\": 11,\n \"partialBlock\": 12,\n \"content\": 13,\n \"COMMENT\": 14,\n \"CONTENT\": 15,\n \"openRawBlock\": 16,\n \"rawBlock_repetition0\": 17,\n \"END_RAW_BLOCK\": 18,\n \"OPEN_RAW_BLOCK\": 19,\n \"helperName\": 20,\n \"openRawBlock_repetition0\": 21,\n \"openRawBlock_option0\": 22,\n \"CLOSE_RAW_BLOCK\": 23,\n \"openBlock\": 24,\n \"block_option0\": 25,\n \"closeBlock\": 26,\n \"openInverse\": 27,\n \"block_option1\": 28,\n \"OPEN_BLOCK\": 29,\n \"openBlock_repetition0\": 30,\n \"openBlock_option0\": 31,\n \"openBlock_option1\": 32,\n \"CLOSE\": 33,\n \"OPEN_INVERSE\": 34,\n \"openInverse_repetition0\": 35,\n \"openInverse_option0\": 36,\n \"openInverse_option1\": 37,\n \"openInverseChain\": 38,\n \"OPEN_INVERSE_CHAIN\": 39,\n \"openInverseChain_repetition0\": 40,\n \"openInverseChain_option0\": 41,\n \"openInverseChain_option1\": 42,\n \"inverseAndProgram\": 43,\n \"INVERSE\": 44,\n \"inverseChain\": 45,\n \"inverseChain_option0\": 46,\n \"OPEN_ENDBLOCK\": 47,\n \"OPEN\": 48,\n \"expr\": 49,\n \"mustache_repetition0\": 50,\n \"mustache_option0\": 51,\n \"OPEN_UNESCAPED\": 52,\n \"mustache_repetition1\": 53,\n \"mustache_option1\": 54,\n \"CLOSE_UNESCAPED\": 55,\n \"OPEN_PARTIAL\": 56,\n \"partial_repetition0\": 57,\n \"partial_option0\": 58,\n \"openPartialBlock\": 59,\n \"OPEN_PARTIAL_BLOCK\": 60,\n \"openPartialBlock_repetition0\": 61,\n \"openPartialBlock_option0\": 62,\n \"sexpr\": 63,\n \"OPEN_SEXPR\": 64,\n \"sexpr_repetition0\": 65,\n \"sexpr_option0\": 66,\n \"CLOSE_SEXPR\": 67,\n \"hash\": 68,\n \"hash_repetition_plus0\": 69,\n \"hashSegment\": 70,\n \"ID\": 71,\n \"EQUALS\": 72,\n \"blockParams\": 73,\n \"OPEN_BLOCK_PARAMS\": 74,\n \"blockParams_repetition_plus0\": 75,\n \"CLOSE_BLOCK_PARAMS\": 76,\n \"path\": 77,\n \"dataName\": 78,\n \"STRING\": 79,\n \"NUMBER\": 80,\n \"BOOLEAN\": 81,\n \"UNDEFINED\": 82,\n \"NULL\": 83,\n \"DATA\": 84,\n \"pathSegments\": 85,\n \"SEP\": 86,\n \"$accept\": 0,\n \"$end\": 1\n },\n terminals_: {\n 2: \"error\",\n 5: \"EOF\",\n 14: \"COMMENT\",\n 15: \"CONTENT\",\n 18: \"END_RAW_BLOCK\",\n 19: \"OPEN_RAW_BLOCK\",\n 23: \"CLOSE_RAW_BLOCK\",\n 29: \"OPEN_BLOCK\",\n 33: \"CLOSE\",\n 34: \"OPEN_INVERSE\",\n 39: \"OPEN_INVERSE_CHAIN\",\n 44: \"INVERSE\",\n 47: \"OPEN_ENDBLOCK\",\n 48: \"OPEN\",\n 52: \"OPEN_UNESCAPED\",\n 55: \"CLOSE_UNESCAPED\",\n 56: \"OPEN_PARTIAL\",\n 60: \"OPEN_PARTIAL_BLOCK\",\n 64: \"OPEN_SEXPR\",\n 67: \"CLOSE_SEXPR\",\n 71: \"ID\",\n 72: \"EQUALS\",\n 74: \"OPEN_BLOCK_PARAMS\",\n 76: \"CLOSE_BLOCK_PARAMS\",\n 79: \"STRING\",\n 80: \"NUMBER\",\n 81: \"BOOLEAN\",\n 82: \"UNDEFINED\",\n 83: \"NULL\",\n 84: \"DATA\",\n 86: \"SEP\"\n },\n productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [49, 1], [49, 1], [63, 5], [68, 1], [70, 3], [73, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [78, 2], [77, 1], [85, 3], [85, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [50, 0], [50, 2], [51, 0], [51, 1], [53, 0], [53, 2], [54, 0], [54, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [65, 0], [65, 2], [66, 0], [66, 1], [69, 1], [69, 2], [75, 1], [75, 2]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n /* this == yyval */\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n case 2:\n this.$ = yy.prepareProgram($$[$0]);\n break;\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 20:\n case 27:\n case 28:\n case 33:\n case 34:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 11:\n this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 12:\n this.$ = {\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1]\n };\n break;\n case 13:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n break;\n case 14:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n break;\n case 15:\n this.$ = {\n open: $$[$0 - 5],\n path: $$[$0 - 4],\n params: $$[$0 - 3],\n hash: $$[$0 - 2],\n blockParams: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 5], $$[$0])\n };\n break;\n case 16:\n case 17:\n this.$ = {\n path: $$[$0 - 4],\n params: $$[$0 - 3],\n hash: $$[$0 - 2],\n blockParams: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 5], $$[$0])\n };\n break;\n case 18:\n this.$ = {\n strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]),\n program: $$[$0]\n };\n break;\n case 19:\n var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n program.chained = true;\n this.$ = {\n strip: $$[$0 - 2].strip,\n program: program,\n chain: true\n };\n break;\n case 21:\n this.$ = {\n path: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 2], $$[$0])\n };\n break;\n case 22:\n case 23:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 24:\n this.$ = {\n type: 'PartialStatement',\n name: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n indent: '',\n strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 25:\n this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 26:\n this.$ = {\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 4], $$[$0])\n };\n break;\n case 29:\n this.$ = {\n type: 'SubExpression',\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n loc: yy.locInfo(this._$)\n };\n break;\n case 30:\n this.$ = {\n type: 'Hash',\n pairs: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 31:\n this.$ = {\n type: 'HashPair',\n key: yy.id($$[$0 - 2]),\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 32:\n this.$ = yy.id($$[$0 - 1]);\n break;\n case 35:\n this.$ = {\n type: 'StringLiteral',\n value: $$[$0],\n original: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 36:\n this.$ = {\n type: 'NumberLiteral',\n value: Number($$[$0]),\n original: Number($$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 37:\n this.$ = {\n type: 'BooleanLiteral',\n value: $$[$0] === 'true',\n original: $$[$0] === 'true',\n loc: yy.locInfo(this._$)\n };\n break;\n case 38:\n this.$ = {\n type: 'UndefinedLiteral',\n original: undefined,\n value: undefined,\n loc: yy.locInfo(this._$)\n };\n break;\n case 39:\n this.$ = {\n type: 'NullLiteral',\n original: null,\n value: null,\n loc: yy.locInfo(this._$)\n };\n break;\n case 40:\n this.$ = yy.preparePath(true, $$[$0], this._$);\n break;\n case 41:\n this.$ = yy.preparePath(false, $$[$0], this._$);\n break;\n case 42:\n $$[$0 - 2].push({\n part: yy.id($$[$0]),\n original: $$[$0],\n separator: $$[$0 - 1]\n });\n this.$ = $$[$0 - 2];\n break;\n case 43:\n this.$ = [{\n part: yy.id($$[$0]),\n original: $$[$0]\n }];\n break;\n case 44:\n case 46:\n case 48:\n case 56:\n case 62:\n case 68:\n case 76:\n case 80:\n case 84:\n case 88:\n case 92:\n this.$ = [];\n break;\n case 45:\n case 47:\n case 49:\n case 57:\n case 63:\n case 69:\n case 77:\n case 81:\n case 85:\n case 89:\n case 93:\n case 97:\n case 99:\n $$[$0 - 1].push($$[$0]);\n break;\n case 96:\n case 98:\n this.$ = [$$[$0]];\n break;\n }\n },\n table: [o([5, 14, 15, 19, 29, 34, 48, 52, 56, 60], $V0, {\n 3: 1,\n 4: 2,\n 6: 3\n }), {\n 1: [3]\n }, {\n 5: [1, 4]\n }, o([5, 39, 44, 47], [2, 2], {\n 7: 5,\n 8: 6,\n 9: 7,\n 10: 8,\n 11: 9,\n 12: 10,\n 13: 11,\n 24: 15,\n 27: 16,\n 16: 17,\n 59: 19,\n 14: [1, 12],\n 15: $V1,\n 19: [1, 23],\n 29: [1, 21],\n 34: [1, 22],\n 48: [1, 13],\n 52: [1, 14],\n 56: [1, 18],\n 60: [1, 24]\n }), {\n 1: [2, 1]\n }, o($V2, [2, 45]), o($V2, [2, 3]), o($V2, [2, 4]), o($V2, [2, 5]), o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 8]), o($V2, [2, 9]), {\n 20: 26,\n 49: 25,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 49: 39,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vb, $V0, {\n 6: 3,\n 4: 40\n }), o($Vc, $V0, {\n 6: 3,\n 4: 41\n }), o($Vd, [2, 46], {\n 17: 42\n }), {\n 20: 26,\n 49: 43,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Ve, $V0, {\n 6: 3,\n 4: 44\n }), o([5, 14, 15, 18, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60], [2, 10]), {\n 20: 45,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 46,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 47,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 49: 48,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vf, [2, 76], {\n 50: 49\n }), o($Vg, [2, 27]), o($Vg, [2, 28]), o($Vg, [2, 33]), o($Vg, [2, 34]), o($Vg, [2, 35]), o($Vg, [2, 36]), o($Vg, [2, 37]), o($Vg, [2, 38]), o($Vg, [2, 39]), {\n 20: 26,\n 49: 50,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vg, [2, 41], {\n 86: $Vh\n }), {\n 71: $V4,\n 85: 52\n }, o($Vi, $Vj), o($Vk, [2, 80], {\n 53: 53\n }), {\n 25: 54,\n 38: 56,\n 39: $Vl,\n 43: 57,\n 44: $Vm,\n 45: 55,\n 47: [2, 52]\n }, {\n 28: 60,\n 43: 61,\n 44: $Vm,\n 47: [2, 54]\n }, {\n 13: 63,\n 15: $V1,\n 18: [1, 62]\n }, o($Vf, [2, 84], {\n 57: 64\n }), {\n 26: 65,\n 47: $Vn\n }, o($Vo, [2, 56], {\n 30: 67\n }), o($Vo, [2, 62], {\n 35: 68\n }), o($Vp, [2, 48], {\n 21: 69\n }), o($Vf, [2, 88], {\n 61: 70\n }), {\n 20: 26,\n 33: [2, 78],\n 49: 72,\n 51: 71,\n 63: 27,\n 64: $V3,\n 68: 73,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vr, [2, 92], {\n 65: 77\n }), {\n 71: [1, 78]\n }, o($Vg, [2, 40], {\n 86: $Vh\n }), {\n 20: 26,\n 49: 80,\n 54: 79,\n 55: [2, 82],\n 63: 27,\n 64: $V3,\n 68: 81,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 26: 82,\n 47: $Vn\n }, {\n 47: [2, 53]\n }, o($Vb, $V0, {\n 6: 3,\n 4: 83\n }), {\n 47: [2, 20]\n }, {\n 20: 84,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Ve, $V0, {\n 6: 3,\n 4: 85\n }), {\n 26: 86,\n 47: $Vn\n }, {\n 47: [2, 55]\n }, o($V2, [2, 11]), o($Vd, [2, 47]), {\n 20: 26,\n 33: [2, 86],\n 49: 88,\n 58: 87,\n 63: 27,\n 64: $V3,\n 68: 89,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($V2, [2, 25]), {\n 20: 90,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vs, [2, 58], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 31: 91,\n 49: 92,\n 68: 93,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), o($Vs, [2, 64], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 36: 94,\n 49: 95,\n 68: 96,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), {\n 20: 26,\n 22: 97,\n 23: [2, 50],\n 49: 98,\n 63: 27,\n 64: $V3,\n 68: 99,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 33: [2, 90],\n 49: 101,\n 62: 100,\n 63: 27,\n 64: $V3,\n 68: 102,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 33: [1, 103]\n }, o($Vf, [2, 77]), {\n 33: [2, 79]\n }, o([23, 33, 55, 67, 74], [2, 30], {\n 70: 104,\n 71: [1, 105]\n }), o($Vt, [2, 96]), o($Vi, $Vj, {\n 72: $Vu\n }), {\n 20: 26,\n 49: 108,\n 63: 27,\n 64: $V3,\n 66: 107,\n 67: [2, 94],\n 68: 109,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vi, [2, 42]), {\n 55: [1, 110]\n }, o($Vk, [2, 81]), {\n 55: [2, 83]\n }, o($V2, [2, 13]), {\n 38: 56,\n 39: $Vl,\n 43: 57,\n 44: $Vm,\n 45: 112,\n 46: 111,\n 47: [2, 74]\n }, o($Vo, [2, 68], {\n 40: 113\n }), {\n 47: [2, 18]\n }, o($V2, [2, 14]), {\n 33: [1, 114]\n }, o($Vf, [2, 85]), {\n 33: [2, 87]\n }, {\n 33: [1, 115]\n }, {\n 32: 116,\n 33: [2, 60],\n 73: 117,\n 74: $Vv\n }, o($Vo, [2, 57]), o($Vs, [2, 59]), {\n 33: [2, 66],\n 37: 119,\n 73: 120,\n 74: $Vv\n }, o($Vo, [2, 63]), o($Vs, [2, 65]), {\n 23: [1, 121]\n }, o($Vp, [2, 49]), {\n 23: [2, 51]\n }, {\n 33: [1, 122]\n }, o($Vf, [2, 89]), {\n 33: [2, 91]\n }, o($V2, [2, 22]), o($Vt, [2, 97]), {\n 72: $Vu\n }, {\n 20: 26,\n 49: 123,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 67: [1, 124]\n }, o($Vr, [2, 93]), {\n 67: [2, 95]\n }, o($V2, [2, 23]), {\n 47: [2, 19]\n }, {\n 47: [2, 75]\n }, o($Vs, [2, 70], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 41: 125,\n 49: 126,\n 68: 127,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), o($V2, [2, 24]), o($V2, [2, 21]), {\n 33: [1, 128]\n }, {\n 33: [2, 61]\n }, {\n 71: [1, 130],\n 75: 129\n }, {\n 33: [1, 131]\n }, {\n 33: [2, 67]\n }, o($Vd, [2, 12]), o($Ve, [2, 26]), o($Vt, [2, 31]), o($Vg, [2, 29]), {\n 33: [2, 72],\n 42: 132,\n 73: 133,\n 74: $Vv\n }, o($Vo, [2, 69]), o($Vs, [2, 71]), o($Vb, [2, 15]), {\n 71: [1, 135],\n 76: [1, 134]\n }, o($Vw, [2, 98]), o($Vc, [2, 16]), {\n 33: [1, 136]\n }, {\n 33: [2, 73]\n }, {\n 33: [2, 32]\n }, o($Vw, [2, 99]), o($Vb, [2, 17])],\n defaultActions: {\n 4: [2, 1],\n 55: [2, 53],\n 57: [2, 20],\n 61: [2, 55],\n 73: [2, 79],\n 81: [2, 83],\n 85: [2, 18],\n 89: [2, 87],\n 99: [2, 51],\n 102: [2, 91],\n 109: [2, 95],\n 111: [2, 19],\n 112: [2, 75],\n 117: [2, 61],\n 120: [2, 67],\n 133: [2, 73],\n 134: [2, 32]\n },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n TERROR = 2,\n EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = {\n yy: {}\n };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol,\n state,\n action,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n /* generated by jison-lex 0.3.4 */\n var lexer = function () {\n var lexer = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function () {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function (n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function (match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n\n return false;\n },\n // return next match in input\n next: function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n function strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n }\n switch ($avoiding_name_collisions) {\n case 0:\n if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n strip(0, 1);\n this.begin(\"mu\");\n } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n strip(0, 1);\n this.begin(\"emu\");\n } else {\n this.begin(\"mu\");\n }\n if (yy_.yytext) return 15;\n break;\n case 1:\n return 15;\n case 2:\n this.popState();\n return 15;\n case 3:\n this.begin('raw');\n return 15;\n case 4:\n this.popState();\n // Should be using `this.topState()` below, but it currently\n // returns the second top instead of the first top. Opened an\n // issue about it at https://github.com/zaach/jison/issues/291\n if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n return 15;\n } else {\n strip(5, 9);\n return 18;\n }\n case 5:\n return 15;\n case 6:\n this.popState();\n return 14;\n case 7:\n return 64;\n case 8:\n return 67;\n case 9:\n return 19;\n case 10:\n this.popState();\n this.begin('raw');\n return 23;\n case 11:\n return 56;\n case 12:\n return 60;\n case 13:\n return 29;\n case 14:\n return 47;\n case 15:\n this.popState();\n return 44;\n case 16:\n this.popState();\n return 44;\n case 17:\n return 34;\n case 18:\n return 39;\n case 19:\n return 52;\n case 20:\n return 48;\n case 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n break;\n case 22:\n this.popState();\n return 14;\n case 23:\n return 48;\n case 24:\n return 72;\n case 25:\n return 71;\n case 26:\n return 71;\n case 27:\n return 86;\n case 28:\n // ignore whitespace\n break;\n case 29:\n this.popState();\n return 55;\n case 30:\n this.popState();\n return 33;\n case 31:\n yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');\n return 79;\n case 32:\n yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");\n return 79;\n case 33:\n return 84;\n case 34:\n return 81;\n case 35:\n return 81;\n case 36:\n return 82;\n case 37:\n return 83;\n case 38:\n return 80;\n case 39:\n return 74;\n case 40:\n return 76;\n case 41:\n return 71;\n case 42:\n yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');\n return 71;\n case 43:\n return 'INVALID';\n case 44:\n return 5;\n }\n },\n rules: [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/],\n conditions: {\n \"mu\": {\n \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44],\n \"inclusive\": false\n },\n \"emu\": {\n \"rules\": [2],\n \"inclusive\": false\n },\n \"com\": {\n \"rules\": [6],\n \"inclusive\": false\n },\n \"raw\": {\n \"rules\": [3, 4, 5],\n \"inclusive\": false\n },\n \"INITIAL\": {\n \"rules\": [0, 1, 44],\n \"inclusive\": true\n }\n }\n };\n return lexer;\n }();\n parser.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser;\n parser.Parser = Parser;\n return new Parser();\n }();\n\n /* eslint-disable new-cap */\n _exports.parser = parser;\n function print(ast) {\n return new PrintVisitor().accept(ast);\n }\n function PrintVisitor() {\n this.padding = 0;\n }\n PrintVisitor.prototype = new Visitor();\n PrintVisitor.prototype.pad = function (string) {\n var out = '';\n for (var i = 0, l = this.padding; i < l; i++) {\n out += ' ';\n }\n out += string + '\\n';\n return out;\n };\n PrintVisitor.prototype.Program = function (program) {\n var out = '',\n body = program.body,\n i,\n l;\n if (program.blockParams) {\n var blockParams = 'BLOCK PARAMS: [';\n for (i = 0, l = program.blockParams.length; i < l; i++) {\n blockParams += ' ' + program.blockParams[i];\n }\n blockParams += ' ]';\n out += this.pad(blockParams);\n }\n for (i = 0, l = body.length; i < l; i++) {\n out += this.accept(body[i]);\n }\n this.padding--;\n return out;\n };\n PrintVisitor.prototype.MustacheStatement = function (mustache) {\n return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');\n };\n PrintVisitor.prototype.Decorator = function (mustache) {\n return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');\n };\n PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {\n var out = '';\n out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');\n this.padding++;\n out += this.pad(this.SubExpression(block));\n if (block.program) {\n out += this.pad('PROGRAM:');\n this.padding++;\n out += this.accept(block.program);\n this.padding--;\n }\n if (block.inverse) {\n if (block.program) {\n this.padding++;\n }\n out += this.pad('{{^}}');\n this.padding++;\n out += this.accept(block.inverse);\n this.padding--;\n if (block.program) {\n this.padding--;\n }\n }\n this.padding--;\n return out;\n };\n PrintVisitor.prototype.PartialStatement = function (partial) {\n var content = 'PARTIAL:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n return this.pad('{{> ' + content + ' }}');\n };\n PrintVisitor.prototype.PartialBlockStatement = function (partial) {\n var content = 'PARTIAL BLOCK:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n content += ' ' + this.pad('PROGRAM:');\n this.padding++;\n content += this.accept(partial.program);\n this.padding--;\n return this.pad('{{> ' + content + ' }}');\n };\n PrintVisitor.prototype.ContentStatement = function (content) {\n return this.pad(\"CONTENT[ '\" + content.value + \"' ]\");\n };\n PrintVisitor.prototype.CommentStatement = function (comment) {\n return this.pad(\"{{! '\" + comment.value + \"' }}\");\n };\n PrintVisitor.prototype.SubExpression = function (sexpr) {\n var params = sexpr.params,\n paramStrings = [],\n hash;\n for (var i = 0, l = params.length; i < l; i++) {\n paramStrings.push(this.accept(params[i]));\n }\n params = '[' + paramStrings.join(', ') + ']';\n hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';\n return this.accept(sexpr.path) + ' ' + params + hash;\n };\n PrintVisitor.prototype.PathExpression = function (id) {\n var path = id.parts.join('/');\n return (id.data ? '@' : '') + 'PATH:' + path;\n };\n PrintVisitor.prototype.StringLiteral = function (string) {\n return '\"' + string.value + '\"';\n };\n PrintVisitor.prototype.NumberLiteral = function (number) {\n return 'NUMBER{' + number.value + '}';\n };\n PrintVisitor.prototype.BooleanLiteral = function (bool) {\n return 'BOOLEAN{' + bool.value + '}';\n };\n PrintVisitor.prototype.UndefinedLiteral = function () {\n return 'UNDEFINED';\n };\n PrintVisitor.prototype.NullLiteral = function () {\n return 'NULL';\n };\n PrintVisitor.prototype.Hash = function (hash) {\n var pairs = hash.pairs,\n joinedPairs = [];\n for (var i = 0, l = pairs.length; i < l; i++) {\n joinedPairs.push(this.accept(pairs[i]));\n }\n return 'HASH{' + joinedPairs.join(', ') + '}';\n };\n PrintVisitor.prototype.HashPair = function (pair) {\n return pair.key + '=' + this.accept(pair.value);\n };\n /* eslint-enable new-cap */\n\n function validateClose(open, close) {\n close = close.path ? close.path.original : close;\n if (open.path.original !== close) {\n var errorNode = {\n loc: open.path.loc\n };\n throw new Exception(open.path.original + \" doesn't match \" + close, errorNode);\n }\n }\n function SourceLocation(source, locInfo) {\n this.source = source;\n this.start = {\n line: locInfo.first_line,\n column: locInfo.first_column\n };\n this.end = {\n line: locInfo.last_line,\n column: locInfo.last_column\n };\n }\n function id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n }\n function stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n }\n function stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n }\n function preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n var original = data ? '@' : '',\n dig = [],\n depth = 0;\n for (var i = 0, l = parts.length; i < l; i++) {\n var part = parts[i].part,\n // If we have [] syntax then we do not treat path references as operators,\n // i.e. foo.[this] resolves to approximately context.foo['this']\n isLiteral = parts[i].original !== part;\n original += (parts[i].separator || '') + part;\n if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n if (dig.length > 0) {\n throw new Exception('Invalid path: ' + original, {\n loc: loc\n });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n return {\n type: 'PathExpression',\n data: data,\n depth: depth,\n parts: dig,\n original: original,\n loc: loc\n };\n }\n function prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n var escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n var decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path: path,\n params: params,\n hash: hash,\n escaped: escaped,\n strip: strip,\n loc: this.locInfo(locInfo)\n };\n }\n function prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n locInfo = this.locInfo(locInfo);\n var program = {\n type: 'Program',\n body: contents,\n strip: {},\n loc: locInfo\n };\n return {\n type: 'BlockStatement',\n path: openRawBlock.path,\n params: openRawBlock.params,\n hash: openRawBlock.hash,\n program: program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n }\n function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n var decorator = /\\*/.test(openBlock.open);\n program.blockParams = openBlock.blockParams;\n var inverse, inverseStrip;\n if (inverseAndProgram) {\n if (decorator) {\n throw new Exception('Unexpected inverse block on decorator', inverseAndProgram);\n }\n if (inverseAndProgram.chain) {\n inverseAndProgram.program.body[0].closeStrip = close.strip;\n }\n inverseStrip = inverseAndProgram.strip;\n inverse = inverseAndProgram.program;\n }\n if (inverted) {\n inverted = inverse;\n inverse = program;\n program = inverted;\n }\n return {\n type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n path: openBlock.path,\n params: openBlock.params,\n hash: openBlock.hash,\n program: program,\n inverse: inverse,\n openStrip: openBlock.strip,\n inverseStrip: inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n }\n function prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n var firstLoc = statements[0].loc,\n lastLoc = statements[statements.length - 1].loc;\n /* istanbul ignore else */\n if (firstLoc && lastLoc) {\n loc = {\n source: firstLoc.source,\n start: {\n line: firstLoc.start.line,\n column: firstLoc.start.column\n },\n end: {\n line: lastLoc.end.line,\n column: lastLoc.end.column\n }\n };\n }\n }\n return {\n type: 'Program',\n body: statements,\n strip: {},\n loc: loc\n };\n }\n function preparePartialBlock(open, program, close, locInfo) {\n validateClose(open, close);\n return {\n type: 'PartialBlockStatement',\n name: open.path,\n params: open.params,\n hash: open.hash,\n program: program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n }\n var Helpers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n SourceLocation: SourceLocation,\n id: id,\n stripFlags: stripFlags,\n stripComment: stripComment,\n preparePath: preparePath,\n prepareMustache: prepareMustache,\n prepareRawBlock: prepareRawBlock,\n prepareBlock: prepareBlock,\n prepareProgram: prepareProgram,\n preparePartialBlock: preparePartialBlock\n });\n var baseHelpers = {};\n for (var helper in Helpers) {\n if (Object.prototype.hasOwnProperty.call(Helpers, helper)) {\n baseHelpers[helper] = Helpers[helper];\n }\n }\n function parseWithoutProcessing(input, options) {\n // Just return if an already-compiled AST was passed in.\n if (input.type === 'Program') {\n return input;\n }\n parser.yy = baseHelpers;\n // Altering the shared object here, but this is ok as parser is a sync operation\n parser.yy.locInfo = function (locInfo) {\n return new SourceLocation(options && options.srcName, locInfo);\n };\n var ast = parser.parse(input);\n return ast;\n }\n function parse(input, options) {\n var ast = parseWithoutProcessing(input, options);\n var strip = new WhitespaceControl(options);\n return strip.accept(ast);\n }\n});","define(\"ember-babel\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.assertThisInitialized = assertThisInitialized;\n _exports.classCallCheck = classCallCheck;\n _exports.createClass = createClass;\n _exports.createForOfIteratorHelperLoose = createForOfIteratorHelperLoose;\n _exports.createSuper = createSuper;\n _exports.inheritsLoose = inheritsLoose;\n _exports.objectDestructuringEmpty = objectDestructuringEmpty;\n _exports.possibleConstructorReturn = possibleConstructorReturn;\n _exports.taggedTemplateLiteralLoose = taggedTemplateLiteralLoose;\n _exports.wrapNativeSuper = wrapNativeSuper;\n /* globals Reflect */\n\n var setPrototypeOf = Object.setPrototypeOf;\n var getPrototypeOf = Object.getPrototypeOf;\n var hasReflectConstruct = typeof Reflect === 'object' && typeof Reflect.construct === 'function';\n var nativeWrapperCache = new Map();\n\n // Super minimal version of Babel's wrapNativeSuper. We only use this for\n // extending Function, for ComputedDecoratorImpl and AliasDecoratorImpl. We know\n // we will never directly create an instance of these classes so no need to\n // include `construct` code or other helpers.\n function wrapNativeSuper(Class) {\n if (nativeWrapperCache.has(Class)) {\n return nativeWrapperCache.get(Class);\n }\n function Wrapper() {}\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n nativeWrapperCache.set(Class, Wrapper);\n return setPrototypeOf(Wrapper, Class);\n }\n function classCallCheck(instance, Constructor) {\n if (true /* DEBUG */) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n }\n }\n\n /*\n Overrides default `inheritsLoose` to _also_ call `Object.setPrototypeOf`.\n This is needed so that we can use `loose` option with the\n `@babel/plugin-transform-classes` (because we want simple assignment to the\n prototype wherever possible) but also keep our constructor based prototypal\n inheritance working properly\n */\n function inheritsLoose(subClass, superClass) {\n if (true /* DEBUG */) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function');\n }\n }\n subClass.prototype = Object.create(superClass === null ? null : superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass !== null) {\n setPrototypeOf(subClass, superClass);\n }\n }\n function taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n strings.raw = raw;\n return strings;\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n /*\n Differs from default implementation by avoiding boolean coercion of\n `protoProps` and `staticProps`.\n */\n function createClass(Constructor, protoProps, staticProps) {\n if (protoProps !== null && protoProps !== undefined) {\n _defineProperties(Constructor.prototype, protoProps);\n }\n if (staticProps !== null && staticProps !== undefined) {\n _defineProperties(Constructor, staticProps);\n }\n return Constructor;\n }\n function assertThisInitialized(self) {\n if (true /* DEBUG */ && self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n }\n\n /*\n Adds `DEBUG` guard to error being thrown, and avoids boolean coercion of `call`.\n */\n function possibleConstructorReturn(self, call) {\n if (typeof call === 'object' && call !== null || typeof call === 'function') {\n return call;\n }\n return assertThisInitialized(self);\n }\n function objectDestructuringEmpty(obj) {\n if (true /* DEBUG */ && (obj === null || obj === undefined)) {\n throw new TypeError('Cannot destructure undefined');\n }\n }\n\n /*\n Differs from default implementation by checking for _any_ `Reflect.construct`\n (the default implementation tries to ensure that `Reflect.construct` is truly\n the native one).\n \n Original source: https://github.com/babel/babel/blob/v7.9.2/packages/babel-helpers/src/helpers.js#L738-L757\n */\n function createSuper(Derived) {\n return function () {\n var Super = getPrototypeOf(Derived);\n var result;\n if (hasReflectConstruct) {\n // NOTE: This doesn't work if this.__proto__.constructor has been modified.\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return possibleConstructorReturn(this, result);\n };\n }\n\n /*\n Does not differ from default implementation.\n */\n function arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n var arr2 = new Array(len);\n for (var i = 0; i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n }\n\n /*\n Does not differ from default implementation.\n */\n function unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === 'string') return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === 'Object' && o.constructor) n = o.constructor.name;\n if (n === 'Map' || n === 'Set') return Array.from(n);\n if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n }\n\n /*\n Does not differ from default implementation.\n */\n function createForOfIteratorHelperLoose(o) {\n var i = 0;\n if (typeof Symbol === 'undefined' || o[Symbol.iterator] == null) {\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n throw new TypeError('Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n }\n i = o[Symbol.iterator]();\n return i.next.bind(i);\n }\n});","define(\"ember-template-compiler/index\", [\"exports\", \"@ember/-internals/environment\", \"@ember/canary-features\", \"@glimmer/syntax\", \"ember/version\", \"require\", \"ember-template-compiler/lib/system/precompile\", \"ember-template-compiler/lib/system/compile\", \"ember-template-compiler/lib/system/compile-options\", \"ember-template-compiler/lib/plugins\", \"@glimmer/compiler\", \"ember-template-compiler/lib/system/bootstrap\", \"ember-template-compiler/lib/system/initializer\"], function (_exports, _environment, _canaryFeatures, _GlimmerSyntax, _version, _require, _precompile, _compile, _compileOptions, _plugins, _compiler, _bootstrap, _initializer) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"RESOLUTION_MODE_TRANSFORMS\", {\n enumerable: true,\n get: function () {\n return _plugins.RESOLUTION_MODE_TRANSFORMS;\n }\n });\n Object.defineProperty(_exports, \"STRICT_MODE_TRANSFORMS\", {\n enumerable: true,\n get: function () {\n return _plugins.STRICT_MODE_TRANSFORMS;\n }\n });\n Object.defineProperty(_exports, \"VERSION\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n });\n _exports._GlimmerSyntax = _exports._Ember = void 0;\n Object.defineProperty(_exports, \"_buildCompileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.buildCompileOptions;\n }\n });\n Object.defineProperty(_exports, \"_precompile\", {\n enumerable: true,\n get: function () {\n return _compiler.precompile;\n }\n });\n Object.defineProperty(_exports, \"_preprocess\", {\n enumerable: true,\n get: function () {\n return _GlimmerSyntax.preprocess;\n }\n });\n Object.defineProperty(_exports, \"_print\", {\n enumerable: true,\n get: function () {\n return _GlimmerSyntax.print;\n }\n });\n Object.defineProperty(_exports, \"_transformsFor\", {\n enumerable: true,\n get: function () {\n return _compileOptions.transformsFor;\n }\n });\n Object.defineProperty(_exports, \"compile\", {\n enumerable: true,\n get: function () {\n return _compile.default;\n }\n });\n Object.defineProperty(_exports, \"compileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.default;\n }\n });\n Object.defineProperty(_exports, \"precompile\", {\n enumerable: true,\n get: function () {\n return _precompile.default;\n }\n });\n _exports._GlimmerSyntax = _GlimmerSyntax;\n var _Ember;\n _exports._Ember = _Ember;\n try {\n _exports._Ember = _Ember = (0, _require.default)(\"ember\");\n } catch (e) {\n _exports._Ember = _Ember = {\n ENV: _environment.ENV,\n FEATURES: _canaryFeatures.FEATURES,\n VERSION: _version.default\n };\n }\n\n // used to bootstrap templates\n\n // add domTemplates initializer (only does something if `ember-template-compiler`\n // is loaded already)\n});","define(\"ember-template-compiler/lib/plugins/assert-against-attrs\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertAgainstAttrs;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that asserts against\n \n ```handlebars\n {{attrs.foo.bar}}\n ```\n \n ...as well as `{{#if attrs.foo}}`, `{{deeply (nested attrs.foobar.baz)}}`.\n \n @private\n @class AssertAgainstAttrs\n */\n function assertAgainstAttrs(env) {\n var _env$meta;\n var {\n builders: b\n } = env.syntax;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n var stack = [[]];\n function updateBlockParamsStack(blockParams) {\n var parent = stack[stack.length - 1];\n (true && !(parent) && (0, _debug.assert)('has parent', parent));\n stack.push(parent.concat(blockParams));\n }\n return {\n name: 'assert-against-attrs',\n visitor: {\n Program: {\n enter(node) {\n updateBlockParamsStack(node.blockParams);\n },\n exit() {\n stack.pop();\n }\n },\n ElementNode: {\n enter(node) {\n updateBlockParamsStack(node.blockParams);\n },\n exit() {\n stack.pop();\n }\n },\n PathExpression(node) {\n if (isAttrs(node, stack[stack.length - 1])) {\n var path = b.path(node.original.substring(6));\n (true && !(node.this !== false) && (0, _debug.assert)(\"Using {{attrs}} to reference named arguments is not supported. {{attrs.\" + path.original + \"}} should be updated to {{@\" + path.original + \"}}. \" + (0, _calculateLocationDisplay.default)(moduleName, node.loc), node.this !== false));\n }\n }\n }\n };\n }\n function isAttrs(node, symbols) {\n var name = node.parts[0];\n if (name && symbols.indexOf(name) !== -1) {\n return false;\n }\n if (name === 'attrs') {\n if (node.this === true) {\n node.parts.shift();\n node.original = node.original.slice(5);\n }\n return true;\n }\n return false;\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-against-named-outlets\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertAgainstNamedOutlets;\n /**\n @module ember\n */\n /**\n Prevents usage of named outlets, a legacy concept in Ember removed in 4.0.\n \n @private\n @class AssertAgainstNamedOutlets\n */\n function assertAgainstNamedOutlets(env) {\n var _env$meta;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-against-named-outlets',\n visitor: {\n MustacheStatement(node) {\n if (node.path.type === 'PathExpression' && node.path.original === 'outlet' && node.params[0]) {\n var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n (true && !(false) && (0, _debug.assert)(\"Named outlets were removed in Ember 4.0. See https://deprecations.emberjs.com/v3.x#toc_route-render-template for guidance on alternative APIs for named outlet use cases. \" + sourceInformation));\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-input-helper-without-block\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _calculateLocationDisplay, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = errorOnInputWithContent;\n function errorOnInputWithContent(env) {\n var _env$meta;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-input-helper-without-block',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'input') {\n (true && !(false) && (0, _debug.assert)(assertMessage(moduleName, node)));\n }\n }\n }\n };\n }\n function assertMessage(moduleName, node) {\n var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n return \"The {{input}} helper cannot be used in block form. \" + sourceInformation;\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-reserved-named-arguments\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertReservedNamedArguments;\n function assertReservedNamedArguments(env) {\n var _env$meta;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-reserved-named-arguments',\n visitor: {\n // In general, we don't assert on the invocation side to avoid creating migration\n // hazards (e.g. using angle bracket to invoke a classic component that uses\n // `this.someReservedName`. However, we want to avoid leaking special internal\n // things, such as `__ARGS__`, so those would need to be asserted on both sides.\n AttrNode(_ref) {\n var {\n name,\n loc\n } = _ref;\n if (name === '@__ARGS__') {\n (true && !(false) && (0, _debug.assert)(assertMessage(name) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n },\n HashPair(_ref2) {\n var {\n key,\n loc\n } = _ref2;\n if (key === '__ARGS__') {\n (true && !(false) && (0, _debug.assert)(assertMessage(key) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n },\n PathExpression(_ref3) {\n var {\n original,\n loc\n } = _ref3;\n if (isReserved(original)) {\n (true && !(false) && (0, _debug.assert)(assertMessage(original) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n }\n }\n };\n }\n var RESERVED = ['@arguments', '@args', '@block', '@else'];\n function isReserved(name) {\n return RESERVED.indexOf(name) !== -1 || Boolean(name.match(/^@[^a-z]/));\n }\n function assertMessage(name) {\n return \"'\" + name + \"' is reserved.\";\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-splattribute-expression\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertSplattributeExpressions;\n function assertSplattributeExpressions(env) {\n var _env$meta;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-splattribute-expressions',\n visitor: {\n PathExpression(_ref) {\n var {\n original,\n loc\n } = _ref;\n if (original === '...attributes') {\n (true && !(false) && (0, _debug.assert)(errorMessage() + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n }\n }\n };\n }\n function errorMessage() {\n return '`...attributes` can only be used in the element position e.g. `<div ...attributes />`. It cannot be used as a path.';\n }\n});","define(\"ember-template-compiler/lib/plugins/index\", [\"exports\", \"ember-template-compiler/lib/plugins/assert-against-attrs\", \"ember-template-compiler/lib/plugins/assert-against-named-outlets\", \"ember-template-compiler/lib/plugins/assert-input-helper-without-block\", \"ember-template-compiler/lib/plugins/assert-reserved-named-arguments\", \"ember-template-compiler/lib/plugins/assert-splattribute-expression\", \"ember-template-compiler/lib/plugins/transform-action-syntax\", \"ember-template-compiler/lib/plugins/transform-each-in-into-each\", \"ember-template-compiler/lib/plugins/transform-each-track-array\", \"ember-template-compiler/lib/plugins/transform-in-element\", \"ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings\", \"ember-template-compiler/lib/plugins/transform-resolutions\", \"ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet\"], function (_exports, _assertAgainstAttrs, _assertAgainstNamedOutlets, _assertInputHelperWithoutBlock, _assertReservedNamedArguments, _assertSplattributeExpression, _transformActionSyntax, _transformEachInIntoEach, _transformEachTrackArray, _transformInElement, _transformQuotedBindingsIntoJustBindings, _transformResolutions, _transformWrapMountAndOutlet) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.STRICT_MODE_TRANSFORMS = _exports.RESOLUTION_MODE_TRANSFORMS = void 0;\n // order of plugins is important\n var RESOLUTION_MODE_TRANSFORMS = Object.freeze([_transformQuotedBindingsIntoJustBindings.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _assertAgainstAttrs.default, _transformEachInIntoEach.default, _assertInputHelperWithoutBlock.default, _transformInElement.default, _assertSplattributeExpression.default, _transformEachTrackArray.default, _assertAgainstNamedOutlets.default, _transformWrapMountAndOutlet.default, _transformResolutions.default].filter(notNull));\n _exports.RESOLUTION_MODE_TRANSFORMS = RESOLUTION_MODE_TRANSFORMS;\n var STRICT_MODE_TRANSFORMS = Object.freeze([_transformQuotedBindingsIntoJustBindings.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _transformEachInIntoEach.default, _transformInElement.default, _assertSplattributeExpression.default, _transformEachTrackArray.default, _assertAgainstNamedOutlets.default, _transformWrapMountAndOutlet.default].filter(notNull));\n _exports.STRICT_MODE_TRANSFORMS = STRICT_MODE_TRANSFORMS;\n function notNull(value) {\n return value !== null;\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-action-syntax\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformActionSyntax;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n <button {{action 'foo'}}>\n <button onblur={{action 'foo'}}>\n <button onblur={{action (action 'foo') 'bar'}}>\n ```\n \n with\n \n ```handlebars\n <button {{action this 'foo'}}>\n <button onblur={{action this 'foo'}}>\n <button onblur={{action this (action this 'foo') 'bar'}}>\n ```\n \n @private\n @class TransformActionSyntax\n */\n function transformActionSyntax(_ref) {\n var {\n syntax\n } = _ref;\n var {\n builders: b\n } = syntax;\n return {\n name: 'transform-action-syntax',\n visitor: {\n ElementModifierStatement(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n },\n MustacheStatement(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n },\n SubExpression(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n }\n }\n };\n }\n function isAction(node) {\n return (0, _utils.isPath)(node.path) && node.path.original === 'action';\n }\n function insertThisAsFirstParam(node, builders) {\n node.params.unshift(builders.path('this'));\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-each-in-into-each\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformEachInIntoEach;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{#each-in iterableThing as |key value|}}\n ```\n \n with\n \n ```handlebars\n {{#each (-each-in iterableThing) as |value key|}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformEachInIntoEach(env) {\n var {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-each-in-into-each',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'each-in') {\n node.params[0] = b.sexpr(b.path('-each-in'), [node.params[0]]);\n var blockParams = node.program.blockParams;\n if (!blockParams || blockParams.length === 0) {\n // who uses {{#each-in}} without block params?!\n } else if (blockParams.length === 1) {\n // insert a dummy variable for the first slot\n // pick a name that won't parse so it won't shadow any real variables\n blockParams = ['( unused value )', blockParams[0]];\n } else {\n var key = blockParams.shift();\n var value = blockParams.shift();\n blockParams = [value, key, ...blockParams];\n }\n node.program.blockParams = blockParams;\n return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-each-track-array\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformEachTrackArray;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{#each iterableThing as |key value|}}\n ```\n \n with\n \n ```handlebars\n {{#each (-track-array iterableThing) as |key value|}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformEachTrackArray(env) {\n var {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-each-track-array',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'each') {\n var firstParam = node.params[0];\n (true && !(firstParam) && (0, _debug.assert)('has firstParam', firstParam));\n if (firstParam.type === 'SubExpression' && firstParam.path.type === 'PathExpression' && firstParam.path.original === '-each-in') {\n return;\n }\n node.params[0] = b.sexpr(b.path('-track-array'), [firstParam]);\n return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-in-element\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformInElement;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that handles the public `{{in-element}}` as per RFC287.\n \n Issues a build time assertion for:\n \n ```handlebars\n {{#in-element someElement insertBefore=\"some-none-null-value\"}}\n {{modal-display text=text}}\n {{/in-element}}\n ```\n \n @private\n @class TransformInElement\n */\n function transformInElement(env) {\n var {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-in-element',\n visitor: {\n BlockStatement(node) {\n if (!(0, _utils.isPath)(node.path)) return;\n if (node.path.original === 'in-element') {\n var originalValue = node.params[0];\n if (originalValue && !env.isProduction) {\n var subExpr = b.sexpr('-in-el-null', [originalValue]);\n node.params.shift();\n node.params.unshift(subExpr);\n }\n node.hash.pairs.forEach(pair => {\n if (pair.key === 'insertBefore') {\n (true && !(pair.value.type === 'NullLiteral' || pair.value.type === 'UndefinedLiteral') && (0, _debug.assert)(\"Can only pass null to insertBefore in in-element, received: \" + JSON.stringify(pair.value), pair.value.type === 'NullLiteral' || pair.value.type === 'UndefinedLiteral'));\n }\n });\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformQuotedBindingsIntoJustBindings;\n function transformQuotedBindingsIntoJustBindings( /* env */\n ) {\n return {\n name: 'transform-quoted-bindings-into-just-bindings',\n visitor: {\n ElementNode(node) {\n var styleAttr = getStyleAttr(node);\n if (!validStyleAttr(styleAttr)) {\n return;\n }\n styleAttr.value = styleAttr.value.parts[0];\n }\n }\n };\n }\n function validStyleAttr(attr) {\n if (!attr) {\n return false;\n }\n var value = attr.value;\n if (!value || value.type !== 'ConcatStatement' || value.parts.length !== 1) {\n return false;\n }\n var onlyPart = value.parts[0];\n return onlyPart.type === 'MustacheStatement';\n }\n function getStyleAttr(node) {\n var attributes = node.attributes;\n for (var attribute of attributes) {\n if (attribute.name === 'style') {\n return attribute;\n }\n }\n return undefined;\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-resolutions\", [\"exports\", \"@ember/debug\", \"@glimmer/syntax\", \"ember-template-compiler/lib/system/calculate-location-display\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _syntax, _calculateLocationDisplay, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformResolutions;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{helper \"...\" ...}}\n ```\n \n with\n \n ```handlebars\n {{helper (-resolve \"helper:...\") ...}}\n ```\n \n and\n \n ```handlebars\n {{helper ... ...}}\n ```\n \n with\n \n ```handlebars\n {{helper (-disallow-dynamic-resolution ...) ...}}\n ```\n \n and\n \n ```handlebars\n {{modifier \"...\" ...}}\n ```\n \n with\n \n ```handlebars\n {{modifier (-resolve \"modifier:...\") ...}}\n ```\n and\n \n ```handlebars\n {{modifier ... ...}}\n ```\n \n with\n \n ```handlebars\n {{modifier (-disallow-dynamic-resolution ...) ...}}\n ```\n \n @private\n @class TransformResolutions\n */\n var TARGETS = Object.freeze(['helper', 'modifier']);\n function transformResolutions(env) {\n var _env$meta;\n var {\n builders: b\n } = env.syntax;\n var moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n var {\n hasLocal,\n node: tracker\n } = (0, _utils.trackLocals)();\n var seen;\n return {\n name: 'transform-resolutions',\n visitor: {\n Template: {\n enter() {\n seen = new Set();\n },\n exit() {\n seen = undefined;\n }\n },\n Block: tracker,\n ElementNode: {\n keys: {\n children: tracker\n }\n },\n MustacheStatement(node) {\n (true && !(seen) && (0, _debug.assert)('[BUG] seen set should be available', seen));\n if (seen.has(node)) {\n return;\n }\n if ((0, _utils.isPath)(node.path) && !isLocalVariable(node.path, hasLocal) && TARGETS.indexOf(node.path.original) !== -1) {\n var result = b.mustache(node.path, transformParams(b, node.params, node.path.original, moduleName, node.loc), node.hash, node.trusting, node.loc, node.strip);\n // Avoid double/infinite-processing\n seen.add(result);\n return result;\n }\n },\n SubExpression(node) {\n (true && !(seen) && (0, _debug.assert)('[BUG] seen set should be available', seen));\n if (seen.has(node)) {\n return;\n }\n if ((0, _utils.isPath)(node.path) && !isLocalVariable(node.path, hasLocal) && TARGETS.indexOf(node.path.original) !== -1) {\n var result = b.sexpr(node.path, transformParams(b, node.params, node.path.original, moduleName, node.loc), node.hash, node.loc);\n // Avoid double/infinite-processing\n seen.add(result);\n return result;\n }\n }\n }\n };\n }\n function isLocalVariable(node, hasLocal) {\n return !node.this && node.parts.length === 1 && hasLocal(node.parts[0]);\n }\n function transformParams(b, params, type, moduleName, loc) {\n var [first, ...rest] = params;\n (true && !(first) && (0, _debug.assert)(\"The \" + type + \" keyword requires at least one positional arguments \" + (0, _calculateLocationDisplay.default)(moduleName, loc), first));\n if ((0, _utils.isStringLiteral)(first)) {\n return [b.sexpr(b.path('-resolve', first.loc), [b.string(type + \":\" + first.value)], undefined, first.loc), ...rest];\n } else if (true /* DEBUG */) {\n return [b.sexpr(b.path('-disallow-dynamic-resolution', first.loc), [first], b.hash([b.pair('type', b.string(type), first.loc), b.pair('loc', b.string((0, _calculateLocationDisplay.default)(moduleName, loc)), first.loc), b.pair('original', b.string((0, _syntax.print)(first)))]), first.loc), ...rest];\n } else {\n return params;\n }\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformWrapMountAndOutlet;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{mount \"engine\" model=this.model}}\n ```\n \n with\n \n ```handlebars\n {{component (-mount \"engine\" model=this.model)}}\n ```\n \n and\n \n ```handlebars\n {{outlet}}\n ```\n \n with\n \n ```handlebars\n {{component (-outlet)}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformWrapMountAndOutlet(env) {\n var {\n builders: b\n } = env.syntax;\n var {\n hasLocal,\n node\n } = (0, _utils.trackLocals)();\n return {\n name: 'transform-wrap-mount-and-outlet',\n visitor: {\n Program: node,\n ElementNode: node,\n MustacheStatement(node) {\n if ((0, _utils.isPath)(node.path) && (node.path.original === 'mount' || node.path.original === 'outlet') && !hasLocal(node.path.original)) {\n var subexpression = b.sexpr(b.path(\"-\" + node.path.original), node.params, node.hash, node.loc);\n return b.mustache(b.path('component'), [subexpression], b.hash(), undefined, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/utils\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.isPath = isPath;\n _exports.isStringLiteral = isStringLiteral;\n _exports.isSubExpression = isSubExpression;\n _exports.trackLocals = trackLocals;\n function isPath(node) {\n return node.type === 'PathExpression';\n }\n function isSubExpression(node) {\n return node.type === 'SubExpression';\n }\n function isStringLiteral(node) {\n return node.type === 'StringLiteral';\n }\n function trackLocals() {\n var locals = new Map();\n var node = {\n enter(node) {\n for (var param of node.blockParams) {\n var value = locals.get(param) || 0;\n locals.set(param, value + 1);\n }\n },\n exit(node) {\n for (var param of node.blockParams) {\n var value = locals.get(param) - 1;\n if (value === 0) {\n locals.delete(param);\n } else {\n locals.set(param, value);\n }\n }\n }\n };\n return {\n hasLocal: key => locals.has(key),\n node\n };\n }\n});","define(\"ember-template-compiler/lib/system/bootstrap\", [\"exports\", \"ember-template-compiler/lib/system/compile\"], function (_exports, _compile) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /**\n @module ember\n */\n\n /**\n Find templates stored in the head tag as script tags and make them available\n to `Ember.CoreView` in the global `Ember.TEMPLATES` object.\n \n Script tags with `text/x-handlebars` will be compiled\n with Ember's template compiler and are suitable for use as a view's template.\n \n @private\n @method bootstrap\n @for Ember.HTMLBars\n @static\n @param ctx\n */\n function bootstrap(_ref) {\n var {\n context,\n hasTemplate,\n setTemplate\n } = _ref;\n if (!context) {\n context = document;\n }\n var selector = 'script[type=\"text/x-handlebars\"]';\n var elements = context.querySelectorAll(selector);\n for (var script of elements) {\n // Get the name of the script\n // First look for data-template-name attribute, then fall back to its\n // id if no name is found.\n var templateName = script.getAttribute('data-template-name') || script.getAttribute('id') || 'application';\n var template = void 0;\n template = (0, _compile.default)(script.innerHTML, {\n moduleName: templateName\n });\n // Check if template of same name already exists.\n if (hasTemplate(templateName)) {\n throw new Error(\"Template named \\\"\" + templateName + \"\\\" already exists.\");\n }\n // For templates which have a name, we save them and then remove them from the DOM.\n setTemplate(templateName, template);\n // Remove script tag from DOM.\n script.parentNode.removeChild(script);\n }\n }\n var _default = bootstrap;\n _exports.default = _default;\n});","define(\"ember-template-compiler/lib/system/calculate-location-display\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = calculateLocationDisplay;\n function calculateLocationDisplay(moduleName, loc) {\n var moduleInfo = '';\n if (moduleName) {\n moduleInfo += \"'\" + moduleName + \"' \";\n }\n if (loc) {\n var {\n column,\n line\n } = loc.start || {\n line: undefined,\n column: undefined\n };\n if (line !== undefined && column !== undefined) {\n if (moduleName) {\n // only prepend @ if the moduleName was present\n moduleInfo += '@ ';\n }\n moduleInfo += \"L\" + line + \":C\" + column;\n }\n }\n if (moduleInfo) {\n moduleInfo = \"(\" + moduleInfo + \") \";\n }\n return moduleInfo;\n }\n});","define(\"ember-template-compiler/lib/system/compile-options\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/index\", \"ember-template-compiler/lib/system/dasherize-component-name\"], function (_exports, _debug, _index, _dasherizeComponentName) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.buildCompileOptions = buildCompileOptions;\n _exports.default = compileOptions;\n _exports.transformsFor = transformsFor;\n var USER_PLUGINS = [];\n function malformedComponentLookup(string) {\n return string.indexOf('::') === -1 && string.indexOf(':') > -1;\n }\n function buildCompileOptions(_options) {\n var moduleName = _options.moduleName;\n var options = Object.assign({\n meta: {},\n isProduction: false,\n plugins: {\n ast: []\n }\n }, _options, {\n moduleName,\n customizeComponentName(tagname) {\n (true && !(!malformedComponentLookup(tagname)) && (0, _debug.assert)(\"You tried to invoke a component named <\" + tagname + \" /> in \\\"\" + (moduleName != null ? moduleName : '[NO MODULE]') + \"\\\", but that is not a valid name for a component. Did you mean to use the \\\"::\\\" syntax for nested components?\", !malformedComponentLookup(tagname)));\n return _dasherizeComponentName.default.get(tagname);\n }\n });\n if ('locals' in options && !options.locals) {\n // Glimmer's precompile options declare `locals` like:\n // locals?: string[]\n // but many in-use versions of babel-plugin-htmlbars-inline-precompile will\n // set locals to `null`. This used to work but only because glimmer was\n // ignoring locals for non-strict templates, and now it supports that case.\n delete options.locals;\n }\n // move `moduleName` into `meta` property\n if (options.moduleName) {\n var meta = options.meta;\n (true && !(meta) && (0, _debug.assert)('has meta', meta)); // We just set it\n meta.moduleName = options.moduleName;\n }\n return options;\n }\n function transformsFor(options) {\n return options.strictMode ? _index.STRICT_MODE_TRANSFORMS : _index.RESOLUTION_MODE_TRANSFORMS;\n }\n function compileOptions(_options) {\n if (_options === void 0) {\n _options = {};\n }\n var options = buildCompileOptions(_options);\n var builtInPlugins = transformsFor(options);\n if (!_options.plugins) {\n options.plugins = {\n ast: [...USER_PLUGINS, ...builtInPlugins]\n };\n } else {\n var potententialPugins = [...USER_PLUGINS, ...builtInPlugins];\n (true && !(options.plugins) && (0, _debug.assert)('expected plugins', options.plugins));\n var pluginsToAdd = potententialPugins.filter(plugin => {\n (true && !(options.plugins) && (0, _debug.assert)('expected plugins', options.plugins));\n return options.plugins.ast.indexOf(plugin) === -1;\n });\n options.plugins.ast = options.plugins.ast.concat(pluginsToAdd);\n }\n return options;\n }\n});","define(\"ember-template-compiler/lib/system/compile\", [\"exports\", \"require\", \"ember-template-compiler/lib/system/precompile\"], function (_exports, _require, _precompile) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = compile;\n /**\n @module ember\n */\n\n var template;\n /**\n Uses HTMLBars `compile` function to process a string into a compiled template.\n This is not present in production builds.\n @private\n @method compile\n @param {String} templateString This is the string to be compiled by HTMLBars.\n @param {Object} options This is an options hash to augment the compiler options.\n */\n function compile(templateString, options) {\n if (options === void 0) {\n options = {};\n }\n if (!template && (0, _require.has)('@ember/-internals/glimmer')) {\n template = (0, _require.default)(\"@ember/-internals/glimmer\").template;\n }\n if (!template) {\n throw new Error('Cannot call `compile` with only the template compiler loaded. Please load `ember.debug.js` or `ember.prod.js` prior to calling `compile`.');\n }\n return template(evaluate((0, _precompile.default)(templateString, options)));\n }\n function evaluate(precompiled) {\n return new Function(\"return \" + precompiled)();\n }\n});","define(\"ember-template-compiler/lib/system/dasherize-component-name\", [\"exports\", \"@ember/-internals/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /*\n This diverges from `Ember.String.dasherize` so that`<XFoo />` can resolve to `x-foo`.\n `Ember.String.dasherize` would resolve it to `xfoo`..\n */\n var SIMPLE_DASHERIZE_REGEXP = /[A-Z]|::/g;\n var ALPHA = /[A-Za-z0-9]/;\n var _default = new _utils.Cache(1000, key => key.replace(SIMPLE_DASHERIZE_REGEXP, (char, index) => {\n if (char === '::') {\n return '/';\n }\n if (index === 0 || !ALPHA.test(key[index - 1])) {\n return char.toLowerCase();\n }\n return \"-\" + char.toLowerCase();\n }));\n _exports.default = _default;\n});","define(\"ember-template-compiler/lib/system/initializer\", [\"require\", \"ember-template-compiler/lib/system/bootstrap\"], function (_require, _bootstrap) {\n \"use strict\";\n\n // Globals mode template compiler\n if ((0, _require.has)('@ember/application') && (0, _require.has)('@ember/-internals/browser-environment') && (0, _require.has)('@ember/-internals/glimmer')) {\n var emberEnv = (0, _require.default)(\"@ember/-internals/browser-environment\");\n var emberGlimmer = (0, _require.default)(\"@ember/-internals/glimmer\");\n var emberApp = (0, _require.default)(\"@ember/application\");\n var Application = emberApp.default;\n var {\n hasTemplate,\n setTemplate\n } = emberGlimmer;\n var {\n hasDOM\n } = emberEnv;\n Application.initializer({\n name: 'domTemplates',\n initialize() {\n if (hasDOM) {\n (0, _bootstrap.default)({\n context: document,\n hasTemplate,\n setTemplate\n });\n }\n }\n });\n }\n});","define(\"ember-template-compiler/lib/system/precompile\", [\"exports\", \"@glimmer/compiler\", \"ember-template-compiler/lib/system/compile-options\"], function (_exports, _compiler, _compileOptions) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = precompile;\n /**\n @module ember\n */\n\n /**\n Uses HTMLBars `compile` function to process a string into a compiled template string.\n The returned string must be passed through `Ember.HTMLBars.template`.\n \n This is not present in production builds.\n \n @private\n @method precompile\n @param {String} templateString This is the string to be compiled by HTMLBars.\n */\n function precompile(templateString, options) {\n if (options === void 0) {\n options = {};\n }\n return (0, _compiler.precompile)(templateString, (0, _compileOptions.default)(options));\n }\n});","define(\"ember-template-compiler/lib/types\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n});","define(\"ember/version\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _default = \"5.4.1\";\n _exports.default = _default;\n});","define(\"simple-html-tokenizer\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.Tokenizer = _exports.HTML5NamedCharRefs = _exports.EventedTokenizer = _exports.EntityParser = void 0;\n _exports.tokenize = tokenize;\n /**\n * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json\n * do not edit\n */\n var namedCharRefs = {\n Aacute: \"Á\",\n aacute: \"á\",\n Abreve: \"Ă\",\n abreve: \"ă\",\n ac: \"∾\",\n acd: \"∿\",\n acE: \"∾̳\",\n Acirc: \"Â\",\n acirc: \"â\",\n acute: \"´\",\n Acy: \"А\",\n acy: \"а\",\n AElig: \"Æ\",\n aelig: \"æ\",\n af: \"\\u2061\",\n Afr: \"𝔄\",\n afr: \"𝔞\",\n Agrave: \"À\",\n agrave: \"à\",\n alefsym: \"ℵ\",\n aleph: \"ℵ\",\n Alpha: \"Α\",\n alpha: \"α\",\n Amacr: \"Ā\",\n amacr: \"ā\",\n amalg: \"⨿\",\n amp: \"&\",\n AMP: \"&\",\n andand: \"⩕\",\n And: \"⩓\",\n and: \"∧\",\n andd: \"⩜\",\n andslope: \"⩘\",\n andv: \"⩚\",\n ang: \"∠\",\n ange: \"⦤\",\n angle: \"∠\",\n angmsdaa: \"⦨\",\n angmsdab: \"⦩\",\n angmsdac: \"⦪\",\n angmsdad: \"⦫\",\n angmsdae: \"⦬\",\n angmsdaf: \"⦭\",\n angmsdag: \"⦮\",\n angmsdah: \"⦯\",\n angmsd: \"∡\",\n angrt: \"∟\",\n angrtvb: \"⊾\",\n angrtvbd: \"⦝\",\n angsph: \"∢\",\n angst: \"Å\",\n angzarr: \"⍼\",\n Aogon: \"Ą\",\n aogon: \"ą\",\n Aopf: \"𝔸\",\n aopf: \"𝕒\",\n apacir: \"⩯\",\n ap: \"≈\",\n apE: \"⩰\",\n ape: \"≊\",\n apid: \"≋\",\n apos: \"'\",\n ApplyFunction: \"\\u2061\",\n approx: \"≈\",\n approxeq: \"≊\",\n Aring: \"Å\",\n aring: \"å\",\n Ascr: \"𝒜\",\n ascr: \"𝒶\",\n Assign: \"≔\",\n ast: \"*\",\n asymp: \"≈\",\n asympeq: \"≍\",\n Atilde: \"Ã\",\n atilde: \"ã\",\n Auml: \"Ä\",\n auml: \"ä\",\n awconint: \"∳\",\n awint: \"⨑\",\n backcong: \"≌\",\n backepsilon: \"϶\",\n backprime: \"‵\",\n backsim: \"∽\",\n backsimeq: \"⋍\",\n Backslash: \"∖\",\n Barv: \"⫧\",\n barvee: \"⊽\",\n barwed: \"⌅\",\n Barwed: \"⌆\",\n barwedge: \"⌅\",\n bbrk: \"⎵\",\n bbrktbrk: \"⎶\",\n bcong: \"≌\",\n Bcy: \"Б\",\n bcy: \"б\",\n bdquo: \"„\",\n becaus: \"∵\",\n because: \"∵\",\n Because: \"∵\",\n bemptyv: \"⦰\",\n bepsi: \"϶\",\n bernou: \"ℬ\",\n Bernoullis: \"ℬ\",\n Beta: \"Β\",\n beta: \"β\",\n beth: \"ℶ\",\n between: \"≬\",\n Bfr: \"𝔅\",\n bfr: \"𝔟\",\n bigcap: \"⋂\",\n bigcirc: \"◯\",\n bigcup: \"⋃\",\n bigodot: \"⨀\",\n bigoplus: \"⨁\",\n bigotimes: \"⨂\",\n bigsqcup: \"⨆\",\n bigstar: \"★\",\n bigtriangledown: \"▽\",\n bigtriangleup: \"△\",\n biguplus: \"⨄\",\n bigvee: \"⋁\",\n bigwedge: \"⋀\",\n bkarow: \"⤍\",\n blacklozenge: \"⧫\",\n blacksquare: \"▪\",\n blacktriangle: \"▴\",\n blacktriangledown: \"▾\",\n blacktriangleleft: \"◂\",\n blacktriangleright: \"▸\",\n blank: \"␣\",\n blk12: \"▒\",\n blk14: \"░\",\n blk34: \"▓\",\n block: \"█\",\n bne: \"=⃥\",\n bnequiv: \"≡⃥\",\n bNot: \"⫭\",\n bnot: \"⌐\",\n Bopf: \"𝔹\",\n bopf: \"𝕓\",\n bot: \"⊥\",\n bottom: \"⊥\",\n bowtie: \"⋈\",\n boxbox: \"⧉\",\n boxdl: \"┐\",\n boxdL: \"╕\",\n boxDl: \"╖\",\n boxDL: \"╗\",\n boxdr: \"┌\",\n boxdR: \"╒\",\n boxDr: \"╓\",\n boxDR: \"╔\",\n boxh: \"─\",\n boxH: \"═\",\n boxhd: \"┬\",\n boxHd: \"╤\",\n boxhD: \"╥\",\n boxHD: \"╦\",\n boxhu: \"┴\",\n boxHu: \"╧\",\n boxhU: \"╨\",\n boxHU: \"╩\",\n boxminus: \"⊟\",\n boxplus: \"⊞\",\n boxtimes: \"⊠\",\n boxul: \"┘\",\n boxuL: \"╛\",\n boxUl: \"╜\",\n boxUL: \"╝\",\n boxur: \"└\",\n boxuR: \"╘\",\n boxUr: \"╙\",\n boxUR: \"╚\",\n boxv: \"│\",\n boxV: \"║\",\n boxvh: \"┼\",\n boxvH: \"╪\",\n boxVh: \"╫\",\n boxVH: \"╬\",\n boxvl: \"┤\",\n boxvL: \"╡\",\n boxVl: \"╢\",\n boxVL: \"╣\",\n boxvr: \"├\",\n boxvR: \"╞\",\n boxVr: \"╟\",\n boxVR: \"╠\",\n bprime: \"‵\",\n breve: \"˘\",\n Breve: \"˘\",\n brvbar: \"¦\",\n bscr: \"𝒷\",\n Bscr: \"ℬ\",\n bsemi: \"⁏\",\n bsim: \"∽\",\n bsime: \"⋍\",\n bsolb: \"⧅\",\n bsol: \"\\\\\",\n bsolhsub: \"⟈\",\n bull: \"•\",\n bullet: \"•\",\n bump: \"≎\",\n bumpE: \"⪮\",\n bumpe: \"≏\",\n Bumpeq: \"≎\",\n bumpeq: \"≏\",\n Cacute: \"Ć\",\n cacute: \"ć\",\n capand: \"⩄\",\n capbrcup: \"⩉\",\n capcap: \"⩋\",\n cap: \"∩\",\n Cap: \"⋒\",\n capcup: \"⩇\",\n capdot: \"⩀\",\n CapitalDifferentialD: \"ⅅ\",\n caps: \"∩︀\",\n caret: \"⁁\",\n caron: \"ˇ\",\n Cayleys: \"ℭ\",\n ccaps: \"⩍\",\n Ccaron: \"Č\",\n ccaron: \"č\",\n Ccedil: \"Ç\",\n ccedil: \"ç\",\n Ccirc: \"Ĉ\",\n ccirc: \"ĉ\",\n Cconint: \"∰\",\n ccups: \"⩌\",\n ccupssm: \"⩐\",\n Cdot: \"Ċ\",\n cdot: \"ċ\",\n cedil: \"¸\",\n Cedilla: \"¸\",\n cemptyv: \"⦲\",\n cent: \"¢\",\n centerdot: \"·\",\n CenterDot: \"·\",\n cfr: \"𝔠\",\n Cfr: \"ℭ\",\n CHcy: \"Ч\",\n chcy: \"ч\",\n check: \"✓\",\n checkmark: \"✓\",\n Chi: \"Χ\",\n chi: \"χ\",\n circ: \"ˆ\",\n circeq: \"≗\",\n circlearrowleft: \"↺\",\n circlearrowright: \"↻\",\n circledast: \"⊛\",\n circledcirc: \"⊚\",\n circleddash: \"⊝\",\n CircleDot: \"⊙\",\n circledR: \"®\",\n circledS: \"Ⓢ\",\n CircleMinus: \"⊖\",\n CirclePlus: \"⊕\",\n CircleTimes: \"⊗\",\n cir: \"○\",\n cirE: \"⧃\",\n cire: \"≗\",\n cirfnint: \"⨐\",\n cirmid: \"⫯\",\n cirscir: \"⧂\",\n ClockwiseContourIntegral: \"∲\",\n CloseCurlyDoubleQuote: \"”\",\n CloseCurlyQuote: \"’\",\n clubs: \"♣\",\n clubsuit: \"♣\",\n colon: \":\",\n Colon: \"∷\",\n Colone: \"⩴\",\n colone: \"≔\",\n coloneq: \"≔\",\n comma: \",\",\n commat: \"@\",\n comp: \"∁\",\n compfn: \"∘\",\n complement: \"∁\",\n complexes: \"ℂ\",\n cong: \"≅\",\n congdot: \"⩭\",\n Congruent: \"≡\",\n conint: \"∮\",\n Conint: \"∯\",\n ContourIntegral: \"∮\",\n copf: \"𝕔\",\n Copf: \"ℂ\",\n coprod: \"∐\",\n Coproduct: \"∐\",\n copy: \"©\",\n COPY: \"©\",\n copysr: \"℗\",\n CounterClockwiseContourIntegral: \"∳\",\n crarr: \"↵\",\n cross: \"✗\",\n Cross: \"⨯\",\n Cscr: \"𝒞\",\n cscr: \"𝒸\",\n csub: \"⫏\",\n csube: \"⫑\",\n csup: \"⫐\",\n csupe: \"⫒\",\n ctdot: \"⋯\",\n cudarrl: \"⤸\",\n cudarrr: \"⤵\",\n cuepr: \"⋞\",\n cuesc: \"⋟\",\n cularr: \"↶\",\n cularrp: \"⤽\",\n cupbrcap: \"⩈\",\n cupcap: \"⩆\",\n CupCap: \"≍\",\n cup: \"∪\",\n Cup: \"⋓\",\n cupcup: \"⩊\",\n cupdot: \"⊍\",\n cupor: \"⩅\",\n cups: \"∪︀\",\n curarr: \"↷\",\n curarrm: \"⤼\",\n curlyeqprec: \"⋞\",\n curlyeqsucc: \"⋟\",\n curlyvee: \"⋎\",\n curlywedge: \"⋏\",\n curren: \"¤\",\n curvearrowleft: \"↶\",\n curvearrowright: \"↷\",\n cuvee: \"⋎\",\n cuwed: \"⋏\",\n cwconint: \"∲\",\n cwint: \"∱\",\n cylcty: \"⌭\",\n dagger: \"†\",\n Dagger: \"‡\",\n daleth: \"ℸ\",\n darr: \"↓\",\n Darr: \"↡\",\n dArr: \"⇓\",\n dash: \"‐\",\n Dashv: \"⫤\",\n dashv: \"⊣\",\n dbkarow: \"⤏\",\n dblac: \"˝\",\n Dcaron: \"Ď\",\n dcaron: \"ď\",\n Dcy: \"Д\",\n dcy: \"д\",\n ddagger: \"‡\",\n ddarr: \"⇊\",\n DD: \"ⅅ\",\n dd: \"ⅆ\",\n DDotrahd: \"⤑\",\n ddotseq: \"⩷\",\n deg: \"°\",\n Del: \"∇\",\n Delta: \"Δ\",\n delta: \"δ\",\n demptyv: \"⦱\",\n dfisht: \"⥿\",\n Dfr: \"𝔇\",\n dfr: \"𝔡\",\n dHar: \"⥥\",\n dharl: \"⇃\",\n dharr: \"⇂\",\n DiacriticalAcute: \"´\",\n DiacriticalDot: \"˙\",\n DiacriticalDoubleAcute: \"˝\",\n DiacriticalGrave: \"`\",\n DiacriticalTilde: \"˜\",\n diam: \"⋄\",\n diamond: \"⋄\",\n Diamond: \"⋄\",\n diamondsuit: \"♦\",\n diams: \"♦\",\n die: \"¨\",\n DifferentialD: \"ⅆ\",\n digamma: \"ϝ\",\n disin: \"⋲\",\n div: \"÷\",\n divide: \"÷\",\n divideontimes: \"⋇\",\n divonx: \"⋇\",\n DJcy: \"Ђ\",\n djcy: \"ђ\",\n dlcorn: \"⌞\",\n dlcrop: \"⌍\",\n dollar: \"$\",\n Dopf: \"𝔻\",\n dopf: \"𝕕\",\n Dot: \"¨\",\n dot: \"˙\",\n DotDot: \"⃜\",\n doteq: \"≐\",\n doteqdot: \"≑\",\n DotEqual: \"≐\",\n dotminus: \"∸\",\n dotplus: \"∔\",\n dotsquare: \"⊡\",\n doublebarwedge: \"⌆\",\n DoubleContourIntegral: \"∯\",\n DoubleDot: \"¨\",\n DoubleDownArrow: \"⇓\",\n DoubleLeftArrow: \"⇐\",\n DoubleLeftRightArrow: \"⇔\",\n DoubleLeftTee: \"⫤\",\n DoubleLongLeftArrow: \"⟸\",\n DoubleLongLeftRightArrow: \"⟺\",\n DoubleLongRightArrow: \"⟹\",\n DoubleRightArrow: \"⇒\",\n DoubleRightTee: \"⊨\",\n DoubleUpArrow: \"⇑\",\n DoubleUpDownArrow: \"⇕\",\n DoubleVerticalBar: \"∥\",\n DownArrowBar: \"⤓\",\n downarrow: \"↓\",\n DownArrow: \"↓\",\n Downarrow: \"⇓\",\n DownArrowUpArrow: \"⇵\",\n DownBreve: \"̑\",\n downdownarrows: \"⇊\",\n downharpoonleft: \"⇃\",\n downharpoonright: \"⇂\",\n DownLeftRightVector: \"⥐\",\n DownLeftTeeVector: \"⥞\",\n DownLeftVectorBar: \"⥖\",\n DownLeftVector: \"↽\",\n DownRightTeeVector: \"⥟\",\n DownRightVectorBar: \"⥗\",\n DownRightVector: \"⇁\",\n DownTeeArrow: \"↧\",\n DownTee: \"⊤\",\n drbkarow: \"⤐\",\n drcorn: \"⌟\",\n drcrop: \"⌌\",\n Dscr: \"𝒟\",\n dscr: \"𝒹\",\n DScy: \"Ѕ\",\n dscy: \"ѕ\",\n dsol: \"⧶\",\n Dstrok: \"Đ\",\n dstrok: \"đ\",\n dtdot: \"⋱\",\n dtri: \"▿\",\n dtrif: \"▾\",\n duarr: \"⇵\",\n duhar: \"⥯\",\n dwangle: \"⦦\",\n DZcy: \"Џ\",\n dzcy: \"џ\",\n dzigrarr: \"⟿\",\n Eacute: \"É\",\n eacute: \"é\",\n easter: \"⩮\",\n Ecaron: \"Ě\",\n ecaron: \"ě\",\n Ecirc: \"Ê\",\n ecirc: \"ê\",\n ecir: \"≖\",\n ecolon: \"≕\",\n Ecy: \"Э\",\n ecy: \"э\",\n eDDot: \"⩷\",\n Edot: \"Ė\",\n edot: \"ė\",\n eDot: \"≑\",\n ee: \"ⅇ\",\n efDot: \"≒\",\n Efr: \"𝔈\",\n efr: \"𝔢\",\n eg: \"⪚\",\n Egrave: \"È\",\n egrave: \"è\",\n egs: \"⪖\",\n egsdot: \"⪘\",\n el: \"⪙\",\n Element: \"∈\",\n elinters: \"⏧\",\n ell: \"ℓ\",\n els: \"⪕\",\n elsdot: \"⪗\",\n Emacr: \"Ē\",\n emacr: \"ē\",\n empty: \"∅\",\n emptyset: \"∅\",\n EmptySmallSquare: \"◻\",\n emptyv: \"∅\",\n EmptyVerySmallSquare: \"▫\",\n emsp13: \" \",\n emsp14: \" \",\n emsp: \" \",\n ENG: \"Ŋ\",\n eng: \"ŋ\",\n ensp: \" \",\n Eogon: \"Ę\",\n eogon: \"ę\",\n Eopf: \"𝔼\",\n eopf: \"𝕖\",\n epar: \"⋕\",\n eparsl: \"⧣\",\n eplus: \"⩱\",\n epsi: \"ε\",\n Epsilon: \"Ε\",\n epsilon: \"ε\",\n epsiv: \"ϵ\",\n eqcirc: \"≖\",\n eqcolon: \"≕\",\n eqsim: \"≂\",\n eqslantgtr: \"⪖\",\n eqslantless: \"⪕\",\n Equal: \"⩵\",\n equals: \"=\",\n EqualTilde: \"≂\",\n equest: \"≟\",\n Equilibrium: \"⇌\",\n equiv: \"≡\",\n equivDD: \"⩸\",\n eqvparsl: \"⧥\",\n erarr: \"⥱\",\n erDot: \"≓\",\n escr: \"ℯ\",\n Escr: \"ℰ\",\n esdot: \"≐\",\n Esim: \"⩳\",\n esim: \"≂\",\n Eta: \"Η\",\n eta: \"η\",\n ETH: \"Ð\",\n eth: \"ð\",\n Euml: \"Ë\",\n euml: \"ë\",\n euro: \"€\",\n excl: \"!\",\n exist: \"∃\",\n Exists: \"∃\",\n expectation: \"ℰ\",\n exponentiale: \"ⅇ\",\n ExponentialE: \"ⅇ\",\n fallingdotseq: \"≒\",\n Fcy: \"Ф\",\n fcy: \"ф\",\n female: \"♀\",\n ffilig: \"ffi\",\n fflig: \"ff\",\n ffllig: \"ffl\",\n Ffr: \"𝔉\",\n ffr: \"𝔣\",\n filig: \"fi\",\n FilledSmallSquare: \"◼\",\n FilledVerySmallSquare: \"▪\",\n fjlig: \"fj\",\n flat: \"♭\",\n fllig: \"fl\",\n fltns: \"▱\",\n fnof: \"ƒ\",\n Fopf: \"𝔽\",\n fopf: \"𝕗\",\n forall: \"∀\",\n ForAll: \"∀\",\n fork: \"⋔\",\n forkv: \"⫙\",\n Fouriertrf: \"ℱ\",\n fpartint: \"⨍\",\n frac12: \"½\",\n frac13: \"⅓\",\n frac14: \"¼\",\n frac15: \"⅕\",\n frac16: \"⅙\",\n frac18: \"⅛\",\n frac23: \"⅔\",\n frac25: \"⅖\",\n frac34: \"¾\",\n frac35: \"⅗\",\n frac38: \"⅜\",\n frac45: \"⅘\",\n frac56: \"⅚\",\n frac58: \"⅝\",\n frac78: \"⅞\",\n frasl: \"⁄\",\n frown: \"⌢\",\n fscr: \"𝒻\",\n Fscr: \"ℱ\",\n gacute: \"ǵ\",\n Gamma: \"Γ\",\n gamma: \"γ\",\n Gammad: \"Ϝ\",\n gammad: \"ϝ\",\n gap: \"⪆\",\n Gbreve: \"Ğ\",\n gbreve: \"ğ\",\n Gcedil: \"Ģ\",\n Gcirc: \"Ĝ\",\n gcirc: \"ĝ\",\n Gcy: \"Г\",\n gcy: \"г\",\n Gdot: \"Ġ\",\n gdot: \"ġ\",\n ge: \"≥\",\n gE: \"≧\",\n gEl: \"⪌\",\n gel: \"⋛\",\n geq: \"≥\",\n geqq: \"≧\",\n geqslant: \"⩾\",\n gescc: \"⪩\",\n ges: \"⩾\",\n gesdot: \"⪀\",\n gesdoto: \"⪂\",\n gesdotol: \"⪄\",\n gesl: \"⋛︀\",\n gesles: \"⪔\",\n Gfr: \"𝔊\",\n gfr: \"𝔤\",\n gg: \"≫\",\n Gg: \"⋙\",\n ggg: \"⋙\",\n gimel: \"ℷ\",\n GJcy: \"Ѓ\",\n gjcy: \"ѓ\",\n gla: \"⪥\",\n gl: \"≷\",\n glE: \"⪒\",\n glj: \"⪤\",\n gnap: \"⪊\",\n gnapprox: \"⪊\",\n gne: \"⪈\",\n gnE: \"≩\",\n gneq: \"⪈\",\n gneqq: \"≩\",\n gnsim: \"⋧\",\n Gopf: \"𝔾\",\n gopf: \"𝕘\",\n grave: \"`\",\n GreaterEqual: \"≥\",\n GreaterEqualLess: \"⋛\",\n GreaterFullEqual: \"≧\",\n GreaterGreater: \"⪢\",\n GreaterLess: \"≷\",\n GreaterSlantEqual: \"⩾\",\n GreaterTilde: \"≳\",\n Gscr: \"𝒢\",\n gscr: \"ℊ\",\n gsim: \"≳\",\n gsime: \"⪎\",\n gsiml: \"⪐\",\n gtcc: \"⪧\",\n gtcir: \"⩺\",\n gt: \">\",\n GT: \">\",\n Gt: \"≫\",\n gtdot: \"⋗\",\n gtlPar: \"⦕\",\n gtquest: \"⩼\",\n gtrapprox: \"⪆\",\n gtrarr: \"⥸\",\n gtrdot: \"⋗\",\n gtreqless: \"⋛\",\n gtreqqless: \"⪌\",\n gtrless: \"≷\",\n gtrsim: \"≳\",\n gvertneqq: \"≩︀\",\n gvnE: \"≩︀\",\n Hacek: \"ˇ\",\n hairsp: \" \",\n half: \"½\",\n hamilt: \"ℋ\",\n HARDcy: \"Ъ\",\n hardcy: \"ъ\",\n harrcir: \"⥈\",\n harr: \"↔\",\n hArr: \"⇔\",\n harrw: \"↭\",\n Hat: \"^\",\n hbar: \"ℏ\",\n Hcirc: \"Ĥ\",\n hcirc: \"ĥ\",\n hearts: \"♥\",\n heartsuit: \"♥\",\n hellip: \"…\",\n hercon: \"⊹\",\n hfr: \"𝔥\",\n Hfr: \"ℌ\",\n HilbertSpace: \"ℋ\",\n hksearow: \"⤥\",\n hkswarow: \"⤦\",\n hoarr: \"⇿\",\n homtht: \"∻\",\n hookleftarrow: \"↩\",\n hookrightarrow: \"↪\",\n hopf: \"𝕙\",\n Hopf: \"ℍ\",\n horbar: \"―\",\n HorizontalLine: \"─\",\n hscr: \"𝒽\",\n Hscr: \"ℋ\",\n hslash: \"ℏ\",\n Hstrok: \"Ħ\",\n hstrok: \"ħ\",\n HumpDownHump: \"≎\",\n HumpEqual: \"≏\",\n hybull: \"⁃\",\n hyphen: \"‐\",\n Iacute: \"Í\",\n iacute: \"í\",\n ic: \"\\u2063\",\n Icirc: \"Î\",\n icirc: \"î\",\n Icy: \"И\",\n icy: \"и\",\n Idot: \"İ\",\n IEcy: \"Е\",\n iecy: \"е\",\n iexcl: \"¡\",\n iff: \"⇔\",\n ifr: \"𝔦\",\n Ifr: \"ℑ\",\n Igrave: \"Ì\",\n igrave: \"ì\",\n ii: \"ⅈ\",\n iiiint: \"⨌\",\n iiint: \"∭\",\n iinfin: \"⧜\",\n iiota: \"℩\",\n IJlig: \"IJ\",\n ijlig: \"ij\",\n Imacr: \"Ī\",\n imacr: \"ī\",\n image: \"ℑ\",\n ImaginaryI: \"ⅈ\",\n imagline: \"ℐ\",\n imagpart: \"ℑ\",\n imath: \"ı\",\n Im: \"ℑ\",\n imof: \"⊷\",\n imped: \"Ƶ\",\n Implies: \"⇒\",\n incare: \"℅\",\n in: \"∈\",\n infin: \"∞\",\n infintie: \"⧝\",\n inodot: \"ı\",\n intcal: \"⊺\",\n int: \"∫\",\n Int: \"∬\",\n integers: \"ℤ\",\n Integral: \"∫\",\n intercal: \"⊺\",\n Intersection: \"⋂\",\n intlarhk: \"⨗\",\n intprod: \"⨼\",\n InvisibleComma: \"\\u2063\",\n InvisibleTimes: \"\\u2062\",\n IOcy: \"Ё\",\n iocy: \"ё\",\n Iogon: \"Į\",\n iogon: \"į\",\n Iopf: \"𝕀\",\n iopf: \"𝕚\",\n Iota: \"Ι\",\n iota: \"ι\",\n iprod: \"⨼\",\n iquest: \"¿\",\n iscr: \"𝒾\",\n Iscr: \"ℐ\",\n isin: \"∈\",\n isindot: \"⋵\",\n isinE: \"⋹\",\n isins: \"⋴\",\n isinsv: \"⋳\",\n isinv: \"∈\",\n it: \"\\u2062\",\n Itilde: \"Ĩ\",\n itilde: \"ĩ\",\n Iukcy: \"І\",\n iukcy: \"і\",\n Iuml: \"Ï\",\n iuml: \"ï\",\n Jcirc: \"Ĵ\",\n jcirc: \"ĵ\",\n Jcy: \"Й\",\n jcy: \"й\",\n Jfr: \"𝔍\",\n jfr: \"𝔧\",\n jmath: \"ȷ\",\n Jopf: \"𝕁\",\n jopf: \"𝕛\",\n Jscr: \"𝒥\",\n jscr: \"𝒿\",\n Jsercy: \"Ј\",\n jsercy: \"ј\",\n Jukcy: \"Є\",\n jukcy: \"є\",\n Kappa: \"Κ\",\n kappa: \"κ\",\n kappav: \"ϰ\",\n Kcedil: \"Ķ\",\n kcedil: \"ķ\",\n Kcy: \"К\",\n kcy: \"к\",\n Kfr: \"𝔎\",\n kfr: \"𝔨\",\n kgreen: \"ĸ\",\n KHcy: \"Х\",\n khcy: \"х\",\n KJcy: \"Ќ\",\n kjcy: \"ќ\",\n Kopf: \"𝕂\",\n kopf: \"𝕜\",\n Kscr: \"𝒦\",\n kscr: \"𝓀\",\n lAarr: \"⇚\",\n Lacute: \"Ĺ\",\n lacute: \"ĺ\",\n laemptyv: \"⦴\",\n lagran: \"ℒ\",\n Lambda: \"Λ\",\n lambda: \"λ\",\n lang: \"⟨\",\n Lang: \"⟪\",\n langd: \"⦑\",\n langle: \"⟨\",\n lap: \"⪅\",\n Laplacetrf: \"ℒ\",\n laquo: \"«\",\n larrb: \"⇤\",\n larrbfs: \"⤟\",\n larr: \"←\",\n Larr: \"↞\",\n lArr: \"⇐\",\n larrfs: \"⤝\",\n larrhk: \"↩\",\n larrlp: \"↫\",\n larrpl: \"⤹\",\n larrsim: \"⥳\",\n larrtl: \"↢\",\n latail: \"⤙\",\n lAtail: \"⤛\",\n lat: \"⪫\",\n late: \"⪭\",\n lates: \"⪭︀\",\n lbarr: \"⤌\",\n lBarr: \"⤎\",\n lbbrk: \"❲\",\n lbrace: \"{\",\n lbrack: \"[\",\n lbrke: \"⦋\",\n lbrksld: \"⦏\",\n lbrkslu: \"⦍\",\n Lcaron: \"Ľ\",\n lcaron: \"ľ\",\n Lcedil: \"Ļ\",\n lcedil: \"ļ\",\n lceil: \"⌈\",\n lcub: \"{\",\n Lcy: \"Л\",\n lcy: \"л\",\n ldca: \"⤶\",\n ldquo: \"“\",\n ldquor: \"„\",\n ldrdhar: \"⥧\",\n ldrushar: \"⥋\",\n ldsh: \"↲\",\n le: \"≤\",\n lE: \"≦\",\n LeftAngleBracket: \"⟨\",\n LeftArrowBar: \"⇤\",\n leftarrow: \"←\",\n LeftArrow: \"←\",\n Leftarrow: \"⇐\",\n LeftArrowRightArrow: \"⇆\",\n leftarrowtail: \"↢\",\n LeftCeiling: \"⌈\",\n LeftDoubleBracket: \"⟦\",\n LeftDownTeeVector: \"⥡\",\n LeftDownVectorBar: \"⥙\",\n LeftDownVector: \"⇃\",\n LeftFloor: \"⌊\",\n leftharpoondown: \"↽\",\n leftharpoonup: \"↼\",\n leftleftarrows: \"⇇\",\n leftrightarrow: \"↔\",\n LeftRightArrow: \"↔\",\n Leftrightarrow: \"⇔\",\n leftrightarrows: \"⇆\",\n leftrightharpoons: \"⇋\",\n leftrightsquigarrow: \"↭\",\n LeftRightVector: \"⥎\",\n LeftTeeArrow: \"↤\",\n LeftTee: \"⊣\",\n LeftTeeVector: \"⥚\",\n leftthreetimes: \"⋋\",\n LeftTriangleBar: \"⧏\",\n LeftTriangle: \"⊲\",\n LeftTriangleEqual: \"⊴\",\n LeftUpDownVector: \"⥑\",\n LeftUpTeeVector: \"⥠\",\n LeftUpVectorBar: \"⥘\",\n LeftUpVector: \"↿\",\n LeftVectorBar: \"⥒\",\n LeftVector: \"↼\",\n lEg: \"⪋\",\n leg: \"⋚\",\n leq: \"≤\",\n leqq: \"≦\",\n leqslant: \"⩽\",\n lescc: \"⪨\",\n les: \"⩽\",\n lesdot: \"⩿\",\n lesdoto: \"⪁\",\n lesdotor: \"⪃\",\n lesg: \"⋚︀\",\n lesges: \"⪓\",\n lessapprox: \"⪅\",\n lessdot: \"⋖\",\n lesseqgtr: \"⋚\",\n lesseqqgtr: \"⪋\",\n LessEqualGreater: \"⋚\",\n LessFullEqual: \"≦\",\n LessGreater: \"≶\",\n lessgtr: \"≶\",\n LessLess: \"⪡\",\n lesssim: \"≲\",\n LessSlantEqual: \"⩽\",\n LessTilde: \"≲\",\n lfisht: \"⥼\",\n lfloor: \"⌊\",\n Lfr: \"𝔏\",\n lfr: \"𝔩\",\n lg: \"≶\",\n lgE: \"⪑\",\n lHar: \"⥢\",\n lhard: \"↽\",\n lharu: \"↼\",\n lharul: \"⥪\",\n lhblk: \"▄\",\n LJcy: \"Љ\",\n ljcy: \"љ\",\n llarr: \"⇇\",\n ll: \"≪\",\n Ll: \"⋘\",\n llcorner: \"⌞\",\n Lleftarrow: \"⇚\",\n llhard: \"⥫\",\n lltri: \"◺\",\n Lmidot: \"Ŀ\",\n lmidot: \"ŀ\",\n lmoustache: \"⎰\",\n lmoust: \"⎰\",\n lnap: \"⪉\",\n lnapprox: \"⪉\",\n lne: \"⪇\",\n lnE: \"≨\",\n lneq: \"⪇\",\n lneqq: \"≨\",\n lnsim: \"⋦\",\n loang: \"⟬\",\n loarr: \"⇽\",\n lobrk: \"⟦\",\n longleftarrow: \"⟵\",\n LongLeftArrow: \"⟵\",\n Longleftarrow: \"⟸\",\n longleftrightarrow: \"⟷\",\n LongLeftRightArrow: \"⟷\",\n Longleftrightarrow: \"⟺\",\n longmapsto: \"⟼\",\n longrightarrow: \"⟶\",\n LongRightArrow: \"⟶\",\n Longrightarrow: \"⟹\",\n looparrowleft: \"↫\",\n looparrowright: \"↬\",\n lopar: \"⦅\",\n Lopf: \"𝕃\",\n lopf: \"𝕝\",\n loplus: \"⨭\",\n lotimes: \"⨴\",\n lowast: \"∗\",\n lowbar: \"_\",\n LowerLeftArrow: \"↙\",\n LowerRightArrow: \"↘\",\n loz: \"◊\",\n lozenge: \"◊\",\n lozf: \"⧫\",\n lpar: \"(\",\n lparlt: \"⦓\",\n lrarr: \"⇆\",\n lrcorner: \"⌟\",\n lrhar: \"⇋\",\n lrhard: \"⥭\",\n lrm: \"\\u200e\",\n lrtri: \"⊿\",\n lsaquo: \"‹\",\n lscr: \"𝓁\",\n Lscr: \"ℒ\",\n lsh: \"↰\",\n Lsh: \"↰\",\n lsim: \"≲\",\n lsime: \"⪍\",\n lsimg: \"⪏\",\n lsqb: \"[\",\n lsquo: \"‘\",\n lsquor: \"‚\",\n Lstrok: \"Ł\",\n lstrok: \"ł\",\n ltcc: \"⪦\",\n ltcir: \"⩹\",\n lt: \"<\",\n LT: \"<\",\n Lt: \"≪\",\n ltdot: \"⋖\",\n lthree: \"⋋\",\n ltimes: \"⋉\",\n ltlarr: \"⥶\",\n ltquest: \"⩻\",\n ltri: \"◃\",\n ltrie: \"⊴\",\n ltrif: \"◂\",\n ltrPar: \"⦖\",\n lurdshar: \"⥊\",\n luruhar: \"⥦\",\n lvertneqq: \"≨︀\",\n lvnE: \"≨︀\",\n macr: \"¯\",\n male: \"♂\",\n malt: \"✠\",\n maltese: \"✠\",\n Map: \"⤅\",\n map: \"↦\",\n mapsto: \"↦\",\n mapstodown: \"↧\",\n mapstoleft: \"↤\",\n mapstoup: \"↥\",\n marker: \"▮\",\n mcomma: \"⨩\",\n Mcy: \"М\",\n mcy: \"м\",\n mdash: \"—\",\n mDDot: \"∺\",\n measuredangle: \"∡\",\n MediumSpace: \" \",\n Mellintrf: \"ℳ\",\n Mfr: \"𝔐\",\n mfr: \"𝔪\",\n mho: \"℧\",\n micro: \"µ\",\n midast: \"*\",\n midcir: \"⫰\",\n mid: \"∣\",\n middot: \"·\",\n minusb: \"⊟\",\n minus: \"−\",\n minusd: \"∸\",\n minusdu: \"⨪\",\n MinusPlus: \"∓\",\n mlcp: \"⫛\",\n mldr: \"…\",\n mnplus: \"∓\",\n models: \"⊧\",\n Mopf: \"𝕄\",\n mopf: \"𝕞\",\n mp: \"∓\",\n mscr: \"𝓂\",\n Mscr: \"ℳ\",\n mstpos: \"∾\",\n Mu: \"Μ\",\n mu: \"μ\",\n multimap: \"⊸\",\n mumap: \"⊸\",\n nabla: \"∇\",\n Nacute: \"Ń\",\n nacute: \"ń\",\n nang: \"∠⃒\",\n nap: \"≉\",\n napE: \"⩰̸\",\n napid: \"≋̸\",\n napos: \"ʼn\",\n napprox: \"≉\",\n natural: \"♮\",\n naturals: \"ℕ\",\n natur: \"♮\",\n nbsp: \" \",\n nbump: \"≎̸\",\n nbumpe: \"≏̸\",\n ncap: \"⩃\",\n Ncaron: \"Ň\",\n ncaron: \"ň\",\n Ncedil: \"Ņ\",\n ncedil: \"ņ\",\n ncong: \"≇\",\n ncongdot: \"⩭̸\",\n ncup: \"⩂\",\n Ncy: \"Н\",\n ncy: \"н\",\n ndash: \"–\",\n nearhk: \"⤤\",\n nearr: \"↗\",\n neArr: \"⇗\",\n nearrow: \"↗\",\n ne: \"≠\",\n nedot: \"≐̸\",\n NegativeMediumSpace: \"​\",\n NegativeThickSpace: \"​\",\n NegativeThinSpace: \"​\",\n NegativeVeryThinSpace: \"​\",\n nequiv: \"≢\",\n nesear: \"⤨\",\n nesim: \"≂̸\",\n NestedGreaterGreater: \"≫\",\n NestedLessLess: \"≪\",\n NewLine: \"\\u000a\",\n nexist: \"∄\",\n nexists: \"∄\",\n Nfr: \"𝔑\",\n nfr: \"𝔫\",\n ngE: \"≧̸\",\n nge: \"≱\",\n ngeq: \"≱\",\n ngeqq: \"≧̸\",\n ngeqslant: \"⩾̸\",\n nges: \"⩾̸\",\n nGg: \"⋙̸\",\n ngsim: \"≵\",\n nGt: \"≫⃒\",\n ngt: \"≯\",\n ngtr: \"≯\",\n nGtv: \"≫̸\",\n nharr: \"↮\",\n nhArr: \"⇎\",\n nhpar: \"⫲\",\n ni: \"∋\",\n nis: \"⋼\",\n nisd: \"⋺\",\n niv: \"∋\",\n NJcy: \"Њ\",\n njcy: \"њ\",\n nlarr: \"↚\",\n nlArr: \"⇍\",\n nldr: \"‥\",\n nlE: \"≦̸\",\n nle: \"≰\",\n nleftarrow: \"↚\",\n nLeftarrow: \"⇍\",\n nleftrightarrow: \"↮\",\n nLeftrightarrow: \"⇎\",\n nleq: \"≰\",\n nleqq: \"≦̸\",\n nleqslant: \"⩽̸\",\n nles: \"⩽̸\",\n nless: \"≮\",\n nLl: \"⋘̸\",\n nlsim: \"≴\",\n nLt: \"≪⃒\",\n nlt: \"≮\",\n nltri: \"⋪\",\n nltrie: \"⋬\",\n nLtv: \"≪̸\",\n nmid: \"∤\",\n NoBreak: \"\\u2060\",\n NonBreakingSpace: \" \",\n nopf: \"𝕟\",\n Nopf: \"ℕ\",\n Not: \"⫬\",\n not: \"¬\",\n NotCongruent: \"≢\",\n NotCupCap: \"≭\",\n NotDoubleVerticalBar: \"∦\",\n NotElement: \"∉\",\n NotEqual: \"≠\",\n NotEqualTilde: \"≂̸\",\n NotExists: \"∄\",\n NotGreater: \"≯\",\n NotGreaterEqual: \"≱\",\n NotGreaterFullEqual: \"≧̸\",\n NotGreaterGreater: \"≫̸\",\n NotGreaterLess: \"≹\",\n NotGreaterSlantEqual: \"⩾̸\",\n NotGreaterTilde: \"≵\",\n NotHumpDownHump: \"≎̸\",\n NotHumpEqual: \"≏̸\",\n notin: \"∉\",\n notindot: \"⋵̸\",\n notinE: \"⋹̸\",\n notinva: \"∉\",\n notinvb: \"⋷\",\n notinvc: \"⋶\",\n NotLeftTriangleBar: \"⧏̸\",\n NotLeftTriangle: \"⋪\",\n NotLeftTriangleEqual: \"⋬\",\n NotLess: \"≮\",\n NotLessEqual: \"≰\",\n NotLessGreater: \"≸\",\n NotLessLess: \"≪̸\",\n NotLessSlantEqual: \"⩽̸\",\n NotLessTilde: \"≴\",\n NotNestedGreaterGreater: \"⪢̸\",\n NotNestedLessLess: \"⪡̸\",\n notni: \"∌\",\n notniva: \"∌\",\n notnivb: \"⋾\",\n notnivc: \"⋽\",\n NotPrecedes: \"⊀\",\n NotPrecedesEqual: \"⪯̸\",\n NotPrecedesSlantEqual: \"⋠\",\n NotReverseElement: \"∌\",\n NotRightTriangleBar: \"⧐̸\",\n NotRightTriangle: \"⋫\",\n NotRightTriangleEqual: \"⋭\",\n NotSquareSubset: \"⊏̸\",\n NotSquareSubsetEqual: \"⋢\",\n NotSquareSuperset: \"⊐̸\",\n NotSquareSupersetEqual: \"⋣\",\n NotSubset: \"⊂⃒\",\n NotSubsetEqual: \"⊈\",\n NotSucceeds: \"⊁\",\n NotSucceedsEqual: \"⪰̸\",\n NotSucceedsSlantEqual: \"⋡\",\n NotSucceedsTilde: \"≿̸\",\n NotSuperset: \"⊃⃒\",\n NotSupersetEqual: \"⊉\",\n NotTilde: \"≁\",\n NotTildeEqual: \"≄\",\n NotTildeFullEqual: \"≇\",\n NotTildeTilde: \"≉\",\n NotVerticalBar: \"∤\",\n nparallel: \"∦\",\n npar: \"∦\",\n nparsl: \"⫽⃥\",\n npart: \"∂̸\",\n npolint: \"⨔\",\n npr: \"⊀\",\n nprcue: \"⋠\",\n nprec: \"⊀\",\n npreceq: \"⪯̸\",\n npre: \"⪯̸\",\n nrarrc: \"⤳̸\",\n nrarr: \"↛\",\n nrArr: \"⇏\",\n nrarrw: \"↝̸\",\n nrightarrow: \"↛\",\n nRightarrow: \"⇏\",\n nrtri: \"⋫\",\n nrtrie: \"⋭\",\n nsc: \"⊁\",\n nsccue: \"⋡\",\n nsce: \"⪰̸\",\n Nscr: \"𝒩\",\n nscr: \"𝓃\",\n nshortmid: \"∤\",\n nshortparallel: \"∦\",\n nsim: \"≁\",\n nsime: \"≄\",\n nsimeq: \"≄\",\n nsmid: \"∤\",\n nspar: \"∦\",\n nsqsube: \"⋢\",\n nsqsupe: \"⋣\",\n nsub: \"⊄\",\n nsubE: \"⫅̸\",\n nsube: \"⊈\",\n nsubset: \"⊂⃒\",\n nsubseteq: \"⊈\",\n nsubseteqq: \"⫅̸\",\n nsucc: \"⊁\",\n nsucceq: \"⪰̸\",\n nsup: \"⊅\",\n nsupE: \"⫆̸\",\n nsupe: \"⊉\",\n nsupset: \"⊃⃒\",\n nsupseteq: \"⊉\",\n nsupseteqq: \"⫆̸\",\n ntgl: \"≹\",\n Ntilde: \"Ñ\",\n ntilde: \"ñ\",\n ntlg: \"≸\",\n ntriangleleft: \"⋪\",\n ntrianglelefteq: \"⋬\",\n ntriangleright: \"⋫\",\n ntrianglerighteq: \"⋭\",\n Nu: \"Ν\",\n nu: \"ν\",\n num: \"#\",\n numero: \"№\",\n numsp: \" \",\n nvap: \"≍⃒\",\n nvdash: \"⊬\",\n nvDash: \"⊭\",\n nVdash: \"⊮\",\n nVDash: \"⊯\",\n nvge: \"≥⃒\",\n nvgt: \">⃒\",\n nvHarr: \"⤄\",\n nvinfin: \"⧞\",\n nvlArr: \"⤂\",\n nvle: \"≤⃒\",\n nvlt: \"<⃒\",\n nvltrie: \"⊴⃒\",\n nvrArr: \"⤃\",\n nvrtrie: \"⊵⃒\",\n nvsim: \"∼⃒\",\n nwarhk: \"⤣\",\n nwarr: \"↖\",\n nwArr: \"⇖\",\n nwarrow: \"↖\",\n nwnear: \"⤧\",\n Oacute: \"Ó\",\n oacute: \"ó\",\n oast: \"⊛\",\n Ocirc: \"Ô\",\n ocirc: \"ô\",\n ocir: \"⊚\",\n Ocy: \"О\",\n ocy: \"о\",\n odash: \"⊝\",\n Odblac: \"Ő\",\n odblac: \"ő\",\n odiv: \"⨸\",\n odot: \"⊙\",\n odsold: \"⦼\",\n OElig: \"Œ\",\n oelig: \"œ\",\n ofcir: \"⦿\",\n Ofr: \"𝔒\",\n ofr: \"𝔬\",\n ogon: \"˛\",\n Ograve: \"Ò\",\n ograve: \"ò\",\n ogt: \"⧁\",\n ohbar: \"⦵\",\n ohm: \"Ω\",\n oint: \"∮\",\n olarr: \"↺\",\n olcir: \"⦾\",\n olcross: \"⦻\",\n oline: \"‾\",\n olt: \"⧀\",\n Omacr: \"Ō\",\n omacr: \"ō\",\n Omega: \"Ω\",\n omega: \"ω\",\n Omicron: \"Ο\",\n omicron: \"ο\",\n omid: \"⦶\",\n ominus: \"⊖\",\n Oopf: \"𝕆\",\n oopf: \"𝕠\",\n opar: \"⦷\",\n OpenCurlyDoubleQuote: \"“\",\n OpenCurlyQuote: \"‘\",\n operp: \"⦹\",\n oplus: \"⊕\",\n orarr: \"↻\",\n Or: \"⩔\",\n or: \"∨\",\n ord: \"⩝\",\n order: \"ℴ\",\n orderof: \"ℴ\",\n ordf: \"ª\",\n ordm: \"º\",\n origof: \"⊶\",\n oror: \"⩖\",\n orslope: \"⩗\",\n orv: \"⩛\",\n oS: \"Ⓢ\",\n Oscr: \"𝒪\",\n oscr: \"ℴ\",\n Oslash: \"Ø\",\n oslash: \"ø\",\n osol: \"⊘\",\n Otilde: \"Õ\",\n otilde: \"õ\",\n otimesas: \"⨶\",\n Otimes: \"⨷\",\n otimes: \"⊗\",\n Ouml: \"Ö\",\n ouml: \"ö\",\n ovbar: \"⌽\",\n OverBar: \"‾\",\n OverBrace: \"⏞\",\n OverBracket: \"⎴\",\n OverParenthesis: \"⏜\",\n para: \"¶\",\n parallel: \"∥\",\n par: \"∥\",\n parsim: \"⫳\",\n parsl: \"⫽\",\n part: \"∂\",\n PartialD: \"∂\",\n Pcy: \"П\",\n pcy: \"п\",\n percnt: \"%\",\n period: \".\",\n permil: \"‰\",\n perp: \"⊥\",\n pertenk: \"‱\",\n Pfr: \"𝔓\",\n pfr: \"𝔭\",\n Phi: \"Φ\",\n phi: \"φ\",\n phiv: \"ϕ\",\n phmmat: \"ℳ\",\n phone: \"☎\",\n Pi: \"Π\",\n pi: \"π\",\n pitchfork: \"⋔\",\n piv: \"ϖ\",\n planck: \"ℏ\",\n planckh: \"ℎ\",\n plankv: \"ℏ\",\n plusacir: \"⨣\",\n plusb: \"⊞\",\n pluscir: \"⨢\",\n plus: \"+\",\n plusdo: \"∔\",\n plusdu: \"⨥\",\n pluse: \"⩲\",\n PlusMinus: \"±\",\n plusmn: \"±\",\n plussim: \"⨦\",\n plustwo: \"⨧\",\n pm: \"±\",\n Poincareplane: \"ℌ\",\n pointint: \"⨕\",\n popf: \"𝕡\",\n Popf: \"ℙ\",\n pound: \"£\",\n prap: \"⪷\",\n Pr: \"⪻\",\n pr: \"≺\",\n prcue: \"≼\",\n precapprox: \"⪷\",\n prec: \"≺\",\n preccurlyeq: \"≼\",\n Precedes: \"≺\",\n PrecedesEqual: \"⪯\",\n PrecedesSlantEqual: \"≼\",\n PrecedesTilde: \"≾\",\n preceq: \"⪯\",\n precnapprox: \"⪹\",\n precneqq: \"⪵\",\n precnsim: \"⋨\",\n pre: \"⪯\",\n prE: \"⪳\",\n precsim: \"≾\",\n prime: \"′\",\n Prime: \"″\",\n primes: \"ℙ\",\n prnap: \"⪹\",\n prnE: \"⪵\",\n prnsim: \"⋨\",\n prod: \"∏\",\n Product: \"∏\",\n profalar: \"⌮\",\n profline: \"⌒\",\n profsurf: \"⌓\",\n prop: \"∝\",\n Proportional: \"∝\",\n Proportion: \"∷\",\n propto: \"∝\",\n prsim: \"≾\",\n prurel: \"⊰\",\n Pscr: \"𝒫\",\n pscr: \"𝓅\",\n Psi: \"Ψ\",\n psi: \"ψ\",\n puncsp: \" \",\n Qfr: \"𝔔\",\n qfr: \"𝔮\",\n qint: \"⨌\",\n qopf: \"𝕢\",\n Qopf: \"ℚ\",\n qprime: \"⁗\",\n Qscr: \"𝒬\",\n qscr: \"𝓆\",\n quaternions: \"ℍ\",\n quatint: \"⨖\",\n quest: \"?\",\n questeq: \"≟\",\n quot: \"\\\"\",\n QUOT: \"\\\"\",\n rAarr: \"⇛\",\n race: \"∽̱\",\n Racute: \"Ŕ\",\n racute: \"ŕ\",\n radic: \"√\",\n raemptyv: \"⦳\",\n rang: \"⟩\",\n Rang: \"⟫\",\n rangd: \"⦒\",\n range: \"⦥\",\n rangle: \"⟩\",\n raquo: \"»\",\n rarrap: \"⥵\",\n rarrb: \"⇥\",\n rarrbfs: \"⤠\",\n rarrc: \"⤳\",\n rarr: \"→\",\n Rarr: \"↠\",\n rArr: \"⇒\",\n rarrfs: \"⤞\",\n rarrhk: \"↪\",\n rarrlp: \"↬\",\n rarrpl: \"⥅\",\n rarrsim: \"⥴\",\n Rarrtl: \"⤖\",\n rarrtl: \"↣\",\n rarrw: \"↝\",\n ratail: \"⤚\",\n rAtail: \"⤜\",\n ratio: \"∶\",\n rationals: \"ℚ\",\n rbarr: \"⤍\",\n rBarr: \"⤏\",\n RBarr: \"⤐\",\n rbbrk: \"❳\",\n rbrace: \"}\",\n rbrack: \"]\",\n rbrke: \"⦌\",\n rbrksld: \"⦎\",\n rbrkslu: \"⦐\",\n Rcaron: \"Ř\",\n rcaron: \"ř\",\n Rcedil: \"Ŗ\",\n rcedil: \"ŗ\",\n rceil: \"⌉\",\n rcub: \"}\",\n Rcy: \"Р\",\n rcy: \"р\",\n rdca: \"⤷\",\n rdldhar: \"⥩\",\n rdquo: \"”\",\n rdquor: \"”\",\n rdsh: \"↳\",\n real: \"ℜ\",\n realine: \"ℛ\",\n realpart: \"ℜ\",\n reals: \"ℝ\",\n Re: \"ℜ\",\n rect: \"▭\",\n reg: \"®\",\n REG: \"®\",\n ReverseElement: \"∋\",\n ReverseEquilibrium: \"⇋\",\n ReverseUpEquilibrium: \"⥯\",\n rfisht: \"⥽\",\n rfloor: \"⌋\",\n rfr: \"𝔯\",\n Rfr: \"ℜ\",\n rHar: \"⥤\",\n rhard: \"⇁\",\n rharu: \"⇀\",\n rharul: \"⥬\",\n Rho: \"Ρ\",\n rho: \"ρ\",\n rhov: \"ϱ\",\n RightAngleBracket: \"⟩\",\n RightArrowBar: \"⇥\",\n rightarrow: \"→\",\n RightArrow: \"→\",\n Rightarrow: \"⇒\",\n RightArrowLeftArrow: \"⇄\",\n rightarrowtail: \"↣\",\n RightCeiling: \"⌉\",\n RightDoubleBracket: \"⟧\",\n RightDownTeeVector: \"⥝\",\n RightDownVectorBar: \"⥕\",\n RightDownVector: \"⇂\",\n RightFloor: \"⌋\",\n rightharpoondown: \"⇁\",\n rightharpoonup: \"⇀\",\n rightleftarrows: \"⇄\",\n rightleftharpoons: \"⇌\",\n rightrightarrows: \"⇉\",\n rightsquigarrow: \"↝\",\n RightTeeArrow: \"↦\",\n RightTee: \"⊢\",\n RightTeeVector: \"⥛\",\n rightthreetimes: \"⋌\",\n RightTriangleBar: \"⧐\",\n RightTriangle: \"⊳\",\n RightTriangleEqual: \"⊵\",\n RightUpDownVector: \"⥏\",\n RightUpTeeVector: \"⥜\",\n RightUpVectorBar: \"⥔\",\n RightUpVector: \"↾\",\n RightVectorBar: \"⥓\",\n RightVector: \"⇀\",\n ring: \"˚\",\n risingdotseq: \"≓\",\n rlarr: \"⇄\",\n rlhar: \"⇌\",\n rlm: \"\\u200f\",\n rmoustache: \"⎱\",\n rmoust: \"⎱\",\n rnmid: \"⫮\",\n roang: \"⟭\",\n roarr: \"⇾\",\n robrk: \"⟧\",\n ropar: \"⦆\",\n ropf: \"𝕣\",\n Ropf: \"ℝ\",\n roplus: \"⨮\",\n rotimes: \"⨵\",\n RoundImplies: \"⥰\",\n rpar: \")\",\n rpargt: \"⦔\",\n rppolint: \"⨒\",\n rrarr: \"⇉\",\n Rrightarrow: \"⇛\",\n rsaquo: \"›\",\n rscr: \"𝓇\",\n Rscr: \"ℛ\",\n rsh: \"↱\",\n Rsh: \"↱\",\n rsqb: \"]\",\n rsquo: \"’\",\n rsquor: \"’\",\n rthree: \"⋌\",\n rtimes: \"⋊\",\n rtri: \"▹\",\n rtrie: \"⊵\",\n rtrif: \"▸\",\n rtriltri: \"⧎\",\n RuleDelayed: \"⧴\",\n ruluhar: \"⥨\",\n rx: \"℞\",\n Sacute: \"Ś\",\n sacute: \"ś\",\n sbquo: \"‚\",\n scap: \"⪸\",\n Scaron: \"Š\",\n scaron: \"š\",\n Sc: \"⪼\",\n sc: \"≻\",\n sccue: \"≽\",\n sce: \"⪰\",\n scE: \"⪴\",\n Scedil: \"Ş\",\n scedil: \"ş\",\n Scirc: \"Ŝ\",\n scirc: \"ŝ\",\n scnap: \"⪺\",\n scnE: \"⪶\",\n scnsim: \"⋩\",\n scpolint: \"⨓\",\n scsim: \"≿\",\n Scy: \"С\",\n scy: \"с\",\n sdotb: \"⊡\",\n sdot: \"⋅\",\n sdote: \"⩦\",\n searhk: \"⤥\",\n searr: \"↘\",\n seArr: \"⇘\",\n searrow: \"↘\",\n sect: \"§\",\n semi: \";\",\n seswar: \"⤩\",\n setminus: \"∖\",\n setmn: \"∖\",\n sext: \"✶\",\n Sfr: \"𝔖\",\n sfr: \"𝔰\",\n sfrown: \"⌢\",\n sharp: \"♯\",\n SHCHcy: \"Щ\",\n shchcy: \"щ\",\n SHcy: \"Ш\",\n shcy: \"ш\",\n ShortDownArrow: \"↓\",\n ShortLeftArrow: \"←\",\n shortmid: \"∣\",\n shortparallel: \"∥\",\n ShortRightArrow: \"→\",\n ShortUpArrow: \"↑\",\n shy: \"\\u00ad\",\n Sigma: \"Σ\",\n sigma: \"σ\",\n sigmaf: \"ς\",\n sigmav: \"ς\",\n sim: \"∼\",\n simdot: \"⩪\",\n sime: \"≃\",\n simeq: \"≃\",\n simg: \"⪞\",\n simgE: \"⪠\",\n siml: \"⪝\",\n simlE: \"⪟\",\n simne: \"≆\",\n simplus: \"⨤\",\n simrarr: \"⥲\",\n slarr: \"←\",\n SmallCircle: \"∘\",\n smallsetminus: \"∖\",\n smashp: \"⨳\",\n smeparsl: \"⧤\",\n smid: \"∣\",\n smile: \"⌣\",\n smt: \"⪪\",\n smte: \"⪬\",\n smtes: \"⪬︀\",\n SOFTcy: \"Ь\",\n softcy: \"ь\",\n solbar: \"⌿\",\n solb: \"⧄\",\n sol: \"/\",\n Sopf: \"𝕊\",\n sopf: \"𝕤\",\n spades: \"♠\",\n spadesuit: \"♠\",\n spar: \"∥\",\n sqcap: \"⊓\",\n sqcaps: \"⊓︀\",\n sqcup: \"⊔\",\n sqcups: \"⊔︀\",\n Sqrt: \"√\",\n sqsub: \"⊏\",\n sqsube: \"⊑\",\n sqsubset: \"⊏\",\n sqsubseteq: \"⊑\",\n sqsup: \"⊐\",\n sqsupe: \"⊒\",\n sqsupset: \"⊐\",\n sqsupseteq: \"⊒\",\n square: \"□\",\n Square: \"□\",\n SquareIntersection: \"⊓\",\n SquareSubset: \"⊏\",\n SquareSubsetEqual: \"⊑\",\n SquareSuperset: \"⊐\",\n SquareSupersetEqual: \"⊒\",\n SquareUnion: \"⊔\",\n squarf: \"▪\",\n squ: \"□\",\n squf: \"▪\",\n srarr: \"→\",\n Sscr: \"𝒮\",\n sscr: \"𝓈\",\n ssetmn: \"∖\",\n ssmile: \"⌣\",\n sstarf: \"⋆\",\n Star: \"⋆\",\n star: \"☆\",\n starf: \"★\",\n straightepsilon: \"ϵ\",\n straightphi: \"ϕ\",\n strns: \"¯\",\n sub: \"⊂\",\n Sub: \"⋐\",\n subdot: \"⪽\",\n subE: \"⫅\",\n sube: \"⊆\",\n subedot: \"⫃\",\n submult: \"⫁\",\n subnE: \"⫋\",\n subne: \"⊊\",\n subplus: \"⪿\",\n subrarr: \"⥹\",\n subset: \"⊂\",\n Subset: \"⋐\",\n subseteq: \"⊆\",\n subseteqq: \"⫅\",\n SubsetEqual: \"⊆\",\n subsetneq: \"⊊\",\n subsetneqq: \"⫋\",\n subsim: \"⫇\",\n subsub: \"⫕\",\n subsup: \"⫓\",\n succapprox: \"⪸\",\n succ: \"≻\",\n succcurlyeq: \"≽\",\n Succeeds: \"≻\",\n SucceedsEqual: \"⪰\",\n SucceedsSlantEqual: \"≽\",\n SucceedsTilde: \"≿\",\n succeq: \"⪰\",\n succnapprox: \"⪺\",\n succneqq: \"⪶\",\n succnsim: \"⋩\",\n succsim: \"≿\",\n SuchThat: \"∋\",\n sum: \"∑\",\n Sum: \"∑\",\n sung: \"♪\",\n sup1: \"¹\",\n sup2: \"²\",\n sup3: \"³\",\n sup: \"⊃\",\n Sup: \"⋑\",\n supdot: \"⪾\",\n supdsub: \"⫘\",\n supE: \"⫆\",\n supe: \"⊇\",\n supedot: \"⫄\",\n Superset: \"⊃\",\n SupersetEqual: \"⊇\",\n suphsol: \"⟉\",\n suphsub: \"⫗\",\n suplarr: \"⥻\",\n supmult: \"⫂\",\n supnE: \"⫌\",\n supne: \"⊋\",\n supplus: \"⫀\",\n supset: \"⊃\",\n Supset: \"⋑\",\n supseteq: \"⊇\",\n supseteqq: \"⫆\",\n supsetneq: \"⊋\",\n supsetneqq: \"⫌\",\n supsim: \"⫈\",\n supsub: \"⫔\",\n supsup: \"⫖\",\n swarhk: \"⤦\",\n swarr: \"↙\",\n swArr: \"⇙\",\n swarrow: \"↙\",\n swnwar: \"⤪\",\n szlig: \"ß\",\n Tab: \"\\u0009\",\n target: \"⌖\",\n Tau: \"Τ\",\n tau: \"τ\",\n tbrk: \"⎴\",\n Tcaron: \"Ť\",\n tcaron: \"ť\",\n Tcedil: \"Ţ\",\n tcedil: \"ţ\",\n Tcy: \"Т\",\n tcy: \"т\",\n tdot: \"⃛\",\n telrec: \"⌕\",\n Tfr: \"𝔗\",\n tfr: \"𝔱\",\n there4: \"∴\",\n therefore: \"∴\",\n Therefore: \"∴\",\n Theta: \"Θ\",\n theta: \"θ\",\n thetasym: \"ϑ\",\n thetav: \"ϑ\",\n thickapprox: \"≈\",\n thicksim: \"∼\",\n ThickSpace: \"  \",\n ThinSpace: \" \",\n thinsp: \" \",\n thkap: \"≈\",\n thksim: \"∼\",\n THORN: \"Þ\",\n thorn: \"þ\",\n tilde: \"˜\",\n Tilde: \"∼\",\n TildeEqual: \"≃\",\n TildeFullEqual: \"≅\",\n TildeTilde: \"≈\",\n timesbar: \"⨱\",\n timesb: \"⊠\",\n times: \"×\",\n timesd: \"⨰\",\n tint: \"∭\",\n toea: \"⤨\",\n topbot: \"⌶\",\n topcir: \"⫱\",\n top: \"⊤\",\n Topf: \"𝕋\",\n topf: \"𝕥\",\n topfork: \"⫚\",\n tosa: \"⤩\",\n tprime: \"‴\",\n trade: \"™\",\n TRADE: \"™\",\n triangle: \"▵\",\n triangledown: \"▿\",\n triangleleft: \"◃\",\n trianglelefteq: \"⊴\",\n triangleq: \"≜\",\n triangleright: \"▹\",\n trianglerighteq: \"⊵\",\n tridot: \"◬\",\n trie: \"≜\",\n triminus: \"⨺\",\n TripleDot: \"⃛\",\n triplus: \"⨹\",\n trisb: \"⧍\",\n tritime: \"⨻\",\n trpezium: \"⏢\",\n Tscr: \"𝒯\",\n tscr: \"𝓉\",\n TScy: \"Ц\",\n tscy: \"ц\",\n TSHcy: \"Ћ\",\n tshcy: \"ћ\",\n Tstrok: \"Ŧ\",\n tstrok: \"ŧ\",\n twixt: \"≬\",\n twoheadleftarrow: \"↞\",\n twoheadrightarrow: \"↠\",\n Uacute: \"Ú\",\n uacute: \"ú\",\n uarr: \"↑\",\n Uarr: \"↟\",\n uArr: \"⇑\",\n Uarrocir: \"⥉\",\n Ubrcy: \"Ў\",\n ubrcy: \"ў\",\n Ubreve: \"Ŭ\",\n ubreve: \"ŭ\",\n Ucirc: \"Û\",\n ucirc: \"û\",\n Ucy: \"У\",\n ucy: \"у\",\n udarr: \"⇅\",\n Udblac: \"Ű\",\n udblac: \"ű\",\n udhar: \"⥮\",\n ufisht: \"⥾\",\n Ufr: \"𝔘\",\n ufr: \"𝔲\",\n Ugrave: \"Ù\",\n ugrave: \"ù\",\n uHar: \"⥣\",\n uharl: \"↿\",\n uharr: \"↾\",\n uhblk: \"▀\",\n ulcorn: \"⌜\",\n ulcorner: \"⌜\",\n ulcrop: \"⌏\",\n ultri: \"◸\",\n Umacr: \"Ū\",\n umacr: \"ū\",\n uml: \"¨\",\n UnderBar: \"_\",\n UnderBrace: \"⏟\",\n UnderBracket: \"⎵\",\n UnderParenthesis: \"⏝\",\n Union: \"⋃\",\n UnionPlus: \"⊎\",\n Uogon: \"Ų\",\n uogon: \"ų\",\n Uopf: \"𝕌\",\n uopf: \"𝕦\",\n UpArrowBar: \"⤒\",\n uparrow: \"↑\",\n UpArrow: \"↑\",\n Uparrow: \"⇑\",\n UpArrowDownArrow: \"⇅\",\n updownarrow: \"↕\",\n UpDownArrow: \"↕\",\n Updownarrow: \"⇕\",\n UpEquilibrium: \"⥮\",\n upharpoonleft: \"↿\",\n upharpoonright: \"↾\",\n uplus: \"⊎\",\n UpperLeftArrow: \"↖\",\n UpperRightArrow: \"↗\",\n upsi: \"υ\",\n Upsi: \"ϒ\",\n upsih: \"ϒ\",\n Upsilon: \"Υ\",\n upsilon: \"υ\",\n UpTeeArrow: \"↥\",\n UpTee: \"⊥\",\n upuparrows: \"⇈\",\n urcorn: \"⌝\",\n urcorner: \"⌝\",\n urcrop: \"⌎\",\n Uring: \"Ů\",\n uring: \"ů\",\n urtri: \"◹\",\n Uscr: \"𝒰\",\n uscr: \"𝓊\",\n utdot: \"⋰\",\n Utilde: \"Ũ\",\n utilde: \"ũ\",\n utri: \"▵\",\n utrif: \"▴\",\n uuarr: \"⇈\",\n Uuml: \"Ü\",\n uuml: \"ü\",\n uwangle: \"⦧\",\n vangrt: \"⦜\",\n varepsilon: \"ϵ\",\n varkappa: \"ϰ\",\n varnothing: \"∅\",\n varphi: \"ϕ\",\n varpi: \"ϖ\",\n varpropto: \"∝\",\n varr: \"↕\",\n vArr: \"⇕\",\n varrho: \"ϱ\",\n varsigma: \"ς\",\n varsubsetneq: \"⊊︀\",\n varsubsetneqq: \"⫋︀\",\n varsupsetneq: \"⊋︀\",\n varsupsetneqq: \"⫌︀\",\n vartheta: \"ϑ\",\n vartriangleleft: \"⊲\",\n vartriangleright: \"⊳\",\n vBar: \"⫨\",\n Vbar: \"⫫\",\n vBarv: \"⫩\",\n Vcy: \"В\",\n vcy: \"в\",\n vdash: \"⊢\",\n vDash: \"⊨\",\n Vdash: \"⊩\",\n VDash: \"⊫\",\n Vdashl: \"⫦\",\n veebar: \"⊻\",\n vee: \"∨\",\n Vee: \"⋁\",\n veeeq: \"≚\",\n vellip: \"⋮\",\n verbar: \"|\",\n Verbar: \"‖\",\n vert: \"|\",\n Vert: \"‖\",\n VerticalBar: \"∣\",\n VerticalLine: \"|\",\n VerticalSeparator: \"❘\",\n VerticalTilde: \"≀\",\n VeryThinSpace: \" \",\n Vfr: \"𝔙\",\n vfr: \"𝔳\",\n vltri: \"⊲\",\n vnsub: \"⊂⃒\",\n vnsup: \"⊃⃒\",\n Vopf: \"𝕍\",\n vopf: \"𝕧\",\n vprop: \"∝\",\n vrtri: \"⊳\",\n Vscr: \"𝒱\",\n vscr: \"𝓋\",\n vsubnE: \"⫋︀\",\n vsubne: \"⊊︀\",\n vsupnE: \"⫌︀\",\n vsupne: \"⊋︀\",\n Vvdash: \"⊪\",\n vzigzag: \"⦚\",\n Wcirc: \"Ŵ\",\n wcirc: \"ŵ\",\n wedbar: \"⩟\",\n wedge: \"∧\",\n Wedge: \"⋀\",\n wedgeq: \"≙\",\n weierp: \"℘\",\n Wfr: \"𝔚\",\n wfr: \"𝔴\",\n Wopf: \"𝕎\",\n wopf: \"𝕨\",\n wp: \"℘\",\n wr: \"≀\",\n wreath: \"≀\",\n Wscr: \"𝒲\",\n wscr: \"𝓌\",\n xcap: \"⋂\",\n xcirc: \"◯\",\n xcup: \"⋃\",\n xdtri: \"▽\",\n Xfr: \"𝔛\",\n xfr: \"𝔵\",\n xharr: \"⟷\",\n xhArr: \"⟺\",\n Xi: \"Ξ\",\n xi: \"ξ\",\n xlarr: \"⟵\",\n xlArr: \"⟸\",\n xmap: \"⟼\",\n xnis: \"⋻\",\n xodot: \"⨀\",\n Xopf: \"𝕏\",\n xopf: \"𝕩\",\n xoplus: \"⨁\",\n xotime: \"⨂\",\n xrarr: \"⟶\",\n xrArr: \"⟹\",\n Xscr: \"𝒳\",\n xscr: \"𝓍\",\n xsqcup: \"⨆\",\n xuplus: \"⨄\",\n xutri: \"△\",\n xvee: \"⋁\",\n xwedge: \"⋀\",\n Yacute: \"Ý\",\n yacute: \"ý\",\n YAcy: \"Я\",\n yacy: \"я\",\n Ycirc: \"Ŷ\",\n ycirc: \"ŷ\",\n Ycy: \"Ы\",\n ycy: \"ы\",\n yen: \"¥\",\n Yfr: \"𝔜\",\n yfr: \"𝔶\",\n YIcy: \"Ї\",\n yicy: \"ї\",\n Yopf: \"𝕐\",\n yopf: \"𝕪\",\n Yscr: \"𝒴\",\n yscr: \"𝓎\",\n YUcy: \"Ю\",\n yucy: \"ю\",\n yuml: \"ÿ\",\n Yuml: \"Ÿ\",\n Zacute: \"Ź\",\n zacute: \"ź\",\n Zcaron: \"Ž\",\n zcaron: \"ž\",\n Zcy: \"З\",\n zcy: \"з\",\n Zdot: \"Ż\",\n zdot: \"ż\",\n zeetrf: \"ℨ\",\n ZeroWidthSpace: \"​\",\n Zeta: \"Ζ\",\n zeta: \"ζ\",\n zfr: \"𝔷\",\n Zfr: \"ℨ\",\n ZHcy: \"Ж\",\n zhcy: \"ж\",\n zigrarr: \"⇝\",\n zopf: \"𝕫\",\n Zopf: \"ℤ\",\n Zscr: \"𝒵\",\n zscr: \"𝓏\",\n zwj: \"\\u200d\",\n zwnj: \"\\u200c\"\n };\n _exports.HTML5NamedCharRefs = namedCharRefs;\n var HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;\n var CHARCODE = /^#([0-9]+)$/;\n var NAMED = /^([A-Za-z0-9]+)$/;\n var EntityParser = /** @class */function () {\n function EntityParser(named) {\n this.named = named;\n }\n EntityParser.prototype.parse = function (entity) {\n if (!entity) {\n return;\n }\n var matches = entity.match(HEXCHARCODE);\n if (matches) {\n return String.fromCharCode(parseInt(matches[1], 16));\n }\n matches = entity.match(CHARCODE);\n if (matches) {\n return String.fromCharCode(parseInt(matches[1], 10));\n }\n matches = entity.match(NAMED);\n if (matches) {\n return this.named[matches[1]];\n }\n };\n return EntityParser;\n }();\n _exports.EntityParser = EntityParser;\n var WSP = /[\\t\\n\\f ]/;\n var ALPHA = /[A-Za-z]/;\n var CRLF = /\\r\\n?/g;\n function isSpace(char) {\n return WSP.test(char);\n }\n function isAlpha(char) {\n return ALPHA.test(char);\n }\n function preprocessInput(input) {\n return input.replace(CRLF, '\\n');\n }\n var EventedTokenizer = /** @class */function () {\n function EventedTokenizer(delegate, entityParser, mode) {\n if (mode === void 0) {\n mode = 'precompile';\n }\n this.delegate = delegate;\n this.entityParser = entityParser;\n this.mode = mode;\n this.state = \"beforeData\" /* beforeData */;\n this.line = -1;\n this.column = -1;\n this.input = '';\n this.index = -1;\n this.tagNameBuffer = '';\n this.states = {\n beforeData: function () {\n var char = this.peek();\n if (char === '<' && !this.isIgnoredEndTag()) {\n this.transitionTo(\"tagOpen\" /* tagOpen */);\n this.markTagStart();\n this.consume();\n } else {\n if (this.mode === 'precompile' && char === '\\n') {\n var tag = this.tagNameBuffer.toLowerCase();\n if (tag === 'pre' || tag === 'textarea') {\n this.consume();\n }\n }\n this.transitionTo(\"data\" /* data */);\n this.delegate.beginData();\n }\n },\n data: function () {\n var char = this.peek();\n var tag = this.tagNameBuffer;\n if (char === '<' && !this.isIgnoredEndTag()) {\n this.delegate.finishData();\n this.transitionTo(\"tagOpen\" /* tagOpen */);\n this.markTagStart();\n this.consume();\n } else if (char === '&' && tag !== 'script' && tag !== 'style') {\n this.consume();\n this.delegate.appendToData(this.consumeCharRef() || '&');\n } else {\n this.consume();\n this.delegate.appendToData(char);\n }\n },\n tagOpen: function () {\n var char = this.consume();\n if (char === '!') {\n this.transitionTo(\"markupDeclarationOpen\" /* markupDeclarationOpen */);\n } else if (char === '/') {\n this.transitionTo(\"endTagOpen\" /* endTagOpen */);\n } else if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(\"tagName\" /* tagName */);\n this.tagNameBuffer = '';\n this.delegate.beginStartTag();\n this.appendToTagName(char);\n }\n },\n markupDeclarationOpen: function () {\n var char = this.consume();\n if (char === '-' && this.peek() === '-') {\n this.consume();\n this.transitionTo(\"commentStart\" /* commentStart */);\n this.delegate.beginComment();\n } else {\n var maybeDoctype = char.toUpperCase() + this.input.substring(this.index, this.index + 6).toUpperCase();\n if (maybeDoctype === 'DOCTYPE') {\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.transitionTo(\"doctype\" /* doctype */);\n if (this.delegate.beginDoctype) this.delegate.beginDoctype();\n }\n }\n },\n doctype: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeDoctypeName\" /* beforeDoctypeName */);\n }\n },\n\n beforeDoctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else {\n this.transitionTo(\"doctypeName\" /* doctypeName */);\n if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n }\n },\n doctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"afterDoctypeName\" /* afterDoctypeName */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n }\n },\n afterDoctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n var nextSixChars = char.toUpperCase() + this.input.substring(this.index, this.index + 5).toUpperCase();\n var isPublic = nextSixChars.toUpperCase() === 'PUBLIC';\n var isSystem = nextSixChars.toUpperCase() === 'SYSTEM';\n if (isPublic || isSystem) {\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n }\n if (isPublic) {\n this.transitionTo(\"afterDoctypePublicKeyword\" /* afterDoctypePublicKeyword */);\n } else if (isSystem) {\n this.transitionTo(\"afterDoctypeSystemKeyword\" /* afterDoctypeSystemKeyword */);\n }\n }\n },\n\n afterDoctypePublicKeyword: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.transitionTo(\"beforeDoctypePublicIdentifier\" /* beforeDoctypePublicIdentifier */);\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(\"doctypePublicIdentifierDoubleQuoted\" /* doctypePublicIdentifierDoubleQuoted */);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(\"doctypePublicIdentifierSingleQuoted\" /* doctypePublicIdentifierSingleQuoted */);\n this.consume();\n } else if (char === '>') {\n this.consume();\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n },\n\n doctypePublicIdentifierDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n }\n },\n doctypePublicIdentifierSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n }\n },\n afterDoctypePublicIdentifier: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"betweenDoctypePublicAndSystemIdentifiers\" /* betweenDoctypePublicAndSystemIdentifiers */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"') {\n this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n } else if (char === \"'\") {\n this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n }\n },\n\n betweenDoctypePublicAndSystemIdentifiers: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"') {\n this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n } else if (char === \"'\") {\n this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n }\n },\n\n doctypeSystemIdentifierDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n }\n },\n doctypeSystemIdentifierSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n }\n },\n afterDoctypeSystemIdentifier: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n },\n\n commentStart: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentStartDash\" /* commentStartDash */);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData(char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n commentStartDash: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEnd\" /* commentEnd */);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData('-');\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n comment: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEndDash\" /* commentEndDash */);\n } else {\n this.delegate.appendToCommentData(char);\n }\n },\n commentEndDash: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEnd\" /* commentEnd */);\n } else {\n this.delegate.appendToCommentData('-' + char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n commentEnd: function () {\n var char = this.consume();\n if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData('--' + char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n tagName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.appendToTagName(char);\n }\n },\n endTagName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n this.tagNameBuffer = '';\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n this.tagNameBuffer = '';\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n this.tagNameBuffer = '';\n } else {\n this.appendToTagName(char);\n }\n },\n beforeAttributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n this.consume();\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '=') {\n this.delegate.reportSyntaxError('attribute name cannot start with equals sign');\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n }\n },\n attributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.transitionTo(\"afterAttributeName\" /* afterAttributeName */);\n this.consume();\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '=') {\n this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"' || char === \"'\" || char === '<') {\n this.delegate.reportSyntaxError(char + ' is not a valid character within attribute names');\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n afterAttributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '=') {\n this.consume();\n this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n beforeAttributeValue: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(\"attributeValueDoubleQuoted\" /* attributeValueDoubleQuoted */);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(\"attributeValueSingleQuoted\" /* attributeValueSingleQuoted */);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"attributeValueUnquoted\" /* attributeValueUnquoted */);\n this.delegate.beginAttributeValue(false);\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.delegate.finishAttributeValue();\n this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.delegate.finishAttributeValue();\n this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueUnquoted: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '&') {\n this.consume();\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else if (char === '>') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n afterAttributeValueQuoted: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n }\n },\n\n selfClosingStartTag: function () {\n var char = this.peek();\n if (char === '>') {\n this.consume();\n this.delegate.markTagAsSelfClosing();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n }\n },\n\n endTagOpen: function () {\n var char = this.consume();\n if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(\"endTagName\" /* endTagName */);\n this.tagNameBuffer = '';\n this.delegate.beginEndTag();\n this.appendToTagName(char);\n }\n }\n };\n this.reset();\n }\n EventedTokenizer.prototype.reset = function () {\n this.transitionTo(\"beforeData\" /* beforeData */);\n this.input = '';\n this.tagNameBuffer = '';\n this.index = 0;\n this.line = 1;\n this.column = 0;\n this.delegate.reset();\n };\n EventedTokenizer.prototype.transitionTo = function (state) {\n this.state = state;\n };\n EventedTokenizer.prototype.tokenize = function (input) {\n this.reset();\n this.tokenizePart(input);\n this.tokenizeEOF();\n };\n EventedTokenizer.prototype.tokenizePart = function (input) {\n this.input += preprocessInput(input);\n while (this.index < this.input.length) {\n var handler = this.states[this.state];\n if (handler !== undefined) {\n handler.call(this);\n } else {\n throw new Error(\"unhandled state \" + this.state);\n }\n }\n };\n EventedTokenizer.prototype.tokenizeEOF = function () {\n this.flushData();\n };\n EventedTokenizer.prototype.flushData = function () {\n if (this.state === 'data') {\n this.delegate.finishData();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n };\n\n EventedTokenizer.prototype.peek = function () {\n return this.input.charAt(this.index);\n };\n EventedTokenizer.prototype.consume = function () {\n var char = this.peek();\n this.index++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n } else {\n this.column++;\n }\n return char;\n };\n EventedTokenizer.prototype.consumeCharRef = function () {\n var endIndex = this.input.indexOf(';', this.index);\n if (endIndex === -1) {\n return;\n }\n var entity = this.input.slice(this.index, endIndex);\n var chars = this.entityParser.parse(entity);\n if (chars) {\n var count = entity.length;\n // consume the entity chars\n while (count) {\n this.consume();\n count--;\n }\n // consume the `;`\n this.consume();\n return chars;\n }\n };\n EventedTokenizer.prototype.markTagStart = function () {\n this.delegate.tagOpen();\n };\n EventedTokenizer.prototype.appendToTagName = function (char) {\n this.tagNameBuffer += char;\n this.delegate.appendToTagName(char);\n };\n EventedTokenizer.prototype.isIgnoredEndTag = function () {\n var tag = this.tagNameBuffer;\n return tag === 'title' && this.input.substring(this.index, this.index + 8) !== '</title>' || tag === 'style' && this.input.substring(this.index, this.index + 8) !== '</style>' || tag === 'script' && this.input.substring(this.index, this.index + 9) !== '</script>';\n };\n return EventedTokenizer;\n }();\n _exports.EventedTokenizer = EventedTokenizer;\n var Tokenizer = /** @class */function () {\n function Tokenizer(entityParser, options) {\n if (options === void 0) {\n options = {};\n }\n this.options = options;\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n this.tokens = [];\n this.tokenizer = new EventedTokenizer(this, entityParser, options.mode);\n this._currentAttribute = undefined;\n }\n Tokenizer.prototype.tokenize = function (input) {\n this.tokens = [];\n this.tokenizer.tokenize(input);\n return this.tokens;\n };\n Tokenizer.prototype.tokenizePart = function (input) {\n this.tokens = [];\n this.tokenizer.tokenizePart(input);\n return this.tokens;\n };\n Tokenizer.prototype.tokenizeEOF = function () {\n this.tokens = [];\n this.tokenizer.tokenizeEOF();\n return this.tokens[0];\n };\n Tokenizer.prototype.reset = function () {\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n };\n Tokenizer.prototype.current = function () {\n var token = this.token;\n if (token === null) {\n throw new Error('token was unexpectedly null');\n }\n if (arguments.length === 0) {\n return token;\n }\n for (var i = 0; i < arguments.length; i++) {\n if (token.type === arguments[i]) {\n return token;\n }\n }\n throw new Error(\"token type was unexpectedly \" + token.type);\n };\n Tokenizer.prototype.push = function (token) {\n this.token = token;\n this.tokens.push(token);\n };\n Tokenizer.prototype.currentAttribute = function () {\n return this._currentAttribute;\n };\n Tokenizer.prototype.addLocInfo = function () {\n if (this.options.loc) {\n this.current().loc = {\n start: {\n line: this.startLine,\n column: this.startColumn\n },\n end: {\n line: this.tokenizer.line,\n column: this.tokenizer.column\n }\n };\n }\n this.startLine = this.tokenizer.line;\n this.startColumn = this.tokenizer.column;\n };\n // Data\n Tokenizer.prototype.beginDoctype = function () {\n this.push({\n type: \"Doctype\" /* Doctype */,\n name: ''\n });\n };\n Tokenizer.prototype.appendToDoctypeName = function (char) {\n this.current(\"Doctype\" /* Doctype */).name += char;\n };\n Tokenizer.prototype.appendToDoctypePublicIdentifier = function (char) {\n var doctype = this.current(\"Doctype\" /* Doctype */);\n if (doctype.publicIdentifier === undefined) {\n doctype.publicIdentifier = char;\n } else {\n doctype.publicIdentifier += char;\n }\n };\n Tokenizer.prototype.appendToDoctypeSystemIdentifier = function (char) {\n var doctype = this.current(\"Doctype\" /* Doctype */);\n if (doctype.systemIdentifier === undefined) {\n doctype.systemIdentifier = char;\n } else {\n doctype.systemIdentifier += char;\n }\n };\n Tokenizer.prototype.endDoctype = function () {\n this.addLocInfo();\n };\n Tokenizer.prototype.beginData = function () {\n this.push({\n type: \"Chars\" /* Chars */,\n chars: ''\n });\n };\n Tokenizer.prototype.appendToData = function (char) {\n this.current(\"Chars\" /* Chars */).chars += char;\n };\n Tokenizer.prototype.finishData = function () {\n this.addLocInfo();\n };\n // Comment\n Tokenizer.prototype.beginComment = function () {\n this.push({\n type: \"Comment\" /* Comment */,\n chars: ''\n });\n };\n Tokenizer.prototype.appendToCommentData = function (char) {\n this.current(\"Comment\" /* Comment */).chars += char;\n };\n Tokenizer.prototype.finishComment = function () {\n this.addLocInfo();\n };\n // Tags - basic\n Tokenizer.prototype.tagOpen = function () {};\n Tokenizer.prototype.beginStartTag = function () {\n this.push({\n type: \"StartTag\" /* StartTag */,\n tagName: '',\n attributes: [],\n selfClosing: false\n });\n };\n Tokenizer.prototype.beginEndTag = function () {\n this.push({\n type: \"EndTag\" /* EndTag */,\n tagName: ''\n });\n };\n Tokenizer.prototype.finishTag = function () {\n this.addLocInfo();\n };\n Tokenizer.prototype.markTagAsSelfClosing = function () {\n this.current(\"StartTag\" /* StartTag */).selfClosing = true;\n };\n // Tags - name\n Tokenizer.prototype.appendToTagName = function (char) {\n this.current(\"StartTag\" /* StartTag */, \"EndTag\" /* EndTag */).tagName += char;\n };\n // Tags - attributes\n Tokenizer.prototype.beginAttribute = function () {\n this._currentAttribute = ['', '', false];\n };\n Tokenizer.prototype.appendToAttributeName = function (char) {\n this.currentAttribute()[0] += char;\n };\n Tokenizer.prototype.beginAttributeValue = function (isQuoted) {\n this.currentAttribute()[2] = isQuoted;\n };\n Tokenizer.prototype.appendToAttributeValue = function (char) {\n this.currentAttribute()[1] += char;\n };\n Tokenizer.prototype.finishAttributeValue = function () {\n this.current(\"StartTag\" /* StartTag */).attributes.push(this._currentAttribute);\n };\n Tokenizer.prototype.reportSyntaxError = function (message) {\n this.current().syntaxError = message;\n };\n return Tokenizer;\n }();\n _exports.Tokenizer = Tokenizer;\n function tokenize(input, options) {\n var tokenizer = new Tokenizer(new EntityParser(namedCharRefs), options);\n return tokenizer.tokenize(input);\n }\n});"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr0HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpmLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClwEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;","file":"ember-template-compiler.js"}