{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/utils.js","webpack:///./node_modules/underscore/underscore.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/exception.js","webpack:///./node_modules/backbone/backbone.js","webpack:///external \"window.jQuery\"","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/base.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/logger.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./public/js/top-header/index.entry.js","webpack:///./public/js/top-header/Feedback/index.js","webpack:///./public/js/top-header/Feedback/tmpl.handlebars","webpack:///./public/js/ui/enableDialog/index.js","webpack:///./public/js/ui/Overlay/index.js","webpack:///./public/js/ui/Overlay/tmpl.handlebars","webpack:///./public/js/ui/enableDialog/tmpl.handlebars","webpack:///./node_modules/@173/173js/lib/ui/form.js","webpack:///./public/js/top-header/mods/setupFavoriteButton.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","extend","indexOf","array","len","length","escapeExpression","string","toHTML","possible","test","replace","badChars","escapeChar","isEmpty","isArray","createFrame","frame","_parent","blockParams","params","ids","path","appendContextPath","contextPath","id","escape","chr","obj","arguments","toString","isFunction","Array","root","this","previousUnderscore","_","ArrayProto","ObjProto","FuncProto","Function","push","slice","nativeIsArray","nativeKeys","keys","nativeBind","nativeCreate","Ctor","_wrapped","VERSION","optimizeCb","func","context","argCount","other","index","collection","accumulator","apply","cb","identity","isObject","matcher","iteratee","Infinity","createAssigner","keysFunc","undefinedOnly","source","baseCreate","result","MAX_ARRAY_INDEX","Math","pow","getLength","isArrayLike","createReduce","dir","iterator","memo","currentKey","each","forEach","map","collect","results","reduce","foldl","inject","reduceRight","foldr","find","detect","predicate","findIndex","findKey","filter","select","list","reject","negate","every","all","some","any","contains","includes","include","item","fromIndex","guard","values","invoke","method","args","isFunc","pluck","where","attrs","findWhere","max","computed","lastComputed","min","shuffle","rand","set","shuffled","random","sample","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","has","indexBy","countBy","toArray","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","input","shallow","strict","startIndex","output","idx","isArguments","j","createPredicateIndexFinder","createIndexFinder","predicateFind","sortedIndex","isNaN","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","findLastIndex","low","high","mid","floor","lastIndexOf","range","start","stop","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","constructor","proto","prop","allKeys","mapObject","pairs","invert","functions","methods","names","extendOwn","assign","pick","oiteratee","omit","String","defaults","props","clone","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isString","isElement","nodeType","type","Int8Array","isFinite","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","unescape","fallback","idCounter","uniqueId","prefix","templateSettings","evaluate","interpolate","noMatch","escapes","template","text","settings","oldSettings","offset","variable","render","e","data","argument","chain","instance","_chain","mixin","valueOf","toJSON","errorProps","Exception","message","node","loc","line","undefined","endLineNumber","column","endColumn","end","tmp","captureStackTrace","lineNumber","nop","global","$","Backbone","previousBackbone","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","events","callback","opts","split","on","_events","onApi","ctx","listening","_listeners","interop","listenTo","_listenId","listeningTo","_listeningTo","Listening","error","tryCatchOn","handlers","count","off","offApi","listeners","stopListening","handler","_callback","cleanup","onceMap","listenToOnce","offer","trigger","triggerApi","objEvents","allEvents","triggerEvents","ev","a1","a2","a3","listener","unbind","Model","attributes","preinitialize","cid","cidPrefix","parse","changed","initialize","validationError","idAttribute","sync","attr","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","prevId","_pending","clear","hasChanged","changedAttributes","diff","old","previousAttributes","fetch","model","success","resp","serverAttrs","wrapError","save","validate","isNew","patch","xhr","destroy","url","base","urlError","encodeURIComponent","isValid","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","insert","at","singular","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","unshift","shift","_byId","modelId","callbackOpts","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","_onModelEvent","event","$$iterator","kind","_collection","_kind","_index","next","done","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","$el","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","delegate","eventName","undelegate","_createElement","document","createElement","_setAttributes","addUnderscoreMethods","Class","attribute","defaultVal","addMethod","modelMatcher","config","Base","mappings","methodMap","dataType","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","exec","param","decodeURIComponent","History","checkUrl","window","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","pathname","getSearch","matchRoot","decodeFragment","decodeURI","href","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","rootPath","iframe","src","style","display","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","hash","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","removeEventListener","detachEvent","removeChild","clearInterval","decodedFragment","title","_updateHash","protoProps","staticProps","child","parent","__super__","factory","jQuery","g","_interopRequireDefault","HandlebarsEnvironment","_utils","_exception2","_helpers","_decorators","_logger2","_internalProtoAccess","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","1","2","3","4","5","6","7","8","helpers","partials","decorators","registerDefaultHelpers","registerDefaultDecorators","logger","log","registerHelper","fn","unregisterHelper","registerPartial","unregisterPartial","registerDecorator","unregisterDecorator","resetLoggedPropertyAccesses","resetLoggedProperties","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","moveHelperToHooks","helperName","keepHelper","hooks","level","lookupLevel","levelMap","toLowerCase","parseInt","console","_len","_key","createProtoAccessControl","runtimeOptions","defaultMethodWhiteList","defaultPropertyWhiteList","properties","whitelist","_createNewLookupObject","createNewLookupObject","allowedProtoProperties","defaultValue","allowProtoPropertiesByDefault","allowedProtoMethods","allowProtoMethodsByDefault","resultIsAllowed","protoAccessControl","propertyName","checkWhiteList","loggedProperties","newObj","_interopRequireWildcard","protoAccessControlForType","logUnexpecedPropertyAccessOnce","_handlebarsSafeString2","_handlebarsException2","Utils","runtime","_handlebarsNoConflict2","hb","SafeString","VM","spec","inst","inverse","_exception","priorKey","ret","execIteration","field","newContext","it","conditional","includeZero","lookupProperty","_decoratorsInline2","_decoratorsInline","container","original","sources","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","env","main","decorator","main_d","compiler","templateWasPrecompiledWithCompilerV7","lookup","depths","lambda","invokePartial","resolvePartial","extendedOptions","compile","compilerOptions","indent","lines","programs","program","declaredBlockParams","programWrapper","wrapProgram","depth","mergeIfNeeded","common","nullContext","seal","_setup","useData","initData","useBlockParams","useDepths","executeDecorators","isTop","mergedHelpers","helper","_internalWrapHelper","wrapHelper","passLookupPropertyOption","wrapHelpersToPassLookupProperty","usePartial","useDecorators","keepHelperInHelpers","allowCallsToHelperMissing","_child","currentPartialBlock","partialBlock","prog","currentDepths","transformOptionsFn","Handlebars","$Handlebars","Feedback","click","preventDefault","formId","currentTarget","tmpl","enableDialog","formUtils","rules","dict","feed_con","refs","formSubmitted","errorBlock","toDict","empty","hide","rule","show","inputs","css","one","html","feedUrl","depth0","alias1","alias2","helperMissing","alias4","Overlay","dialogTitle","overlay","closable","view","handleCloseClicked","replaceWith","setBody","doc","docElement","appendTo","addClass","klass","target","isEscKey","keyCode","removeClass","getContentElement","scrollTop","formUtil","form","serializeArray","send","action","readonlyForm","formOrElements","elements","is","resumeForm","ctrlEnterForm","keypress","ctrlKey","submit","autoResize","textarea","fakeTextarea","height","getTextareaScrollHeight","maxHeight","minHeight","enableAutoResize","fakeTextareaParent","removeAttr","proxy","originalEvent","append","external","addFavorite","sidebar","addPanel","alert","URL"],"mappings":"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","file":"js/top-header/index.entry.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//ue.17173cdn.com/a/top/index/v3.9.3/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 55);\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n","// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define === 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}.call(this));\n","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\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\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\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\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n","// Backbone.js 1.4.1\n\n// (c) 2010-2022 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.4.1';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) {\n var prevId = this.id;\n this.id = this.get(this.idAttribute);\n this.trigger('changeId', this, prevId, options);\n }\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj, obj.idAttribute)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs, idAttribute) {\n return attrs[idAttribute || this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n\n var model;\n if (this.model.prototype) {\n model = new this.model(attrs, options);\n } else {\n // ES class methods didn't have prototype\n model = this.model(attrs, options);\n }\n\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'changeId') {\n var prevId = this.modelId(model.previousAttributes(), model.idAttribute);\n var id = this.modelId(model.attributes, model.idAttribute);\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes, model.idAttribute);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n","module.exports = window.jQuery;","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.7';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy43JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar logger = _interopRequireWildcard(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n logger.log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (global.Symbol && context[global.Symbol.iterator]) {\n var newContext = [];\n var iterator = context[global.Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n var root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n","var $ = require('jquery')\n , Feedback = require('./Feedback')\n , DEFAULT_FORM_ID = 82\n\nimport '@/static/css/style.scss'\nrequire('./mods/setupFavoriteButton')\n// require('./mods/setupSharedWidget')\n\nif (module.hot) {\n module.hot.accept()\n}\n\n$(function() {\n\n $('.btn-error-recovery').click(function(e) {\n e.preventDefault()\n var el = $(e.currentTarget)\n , formId = el.data('form-id') || DEFAULT_FORM_ID\n\n var feedback = new Feedback({ formId: formId })\n feedback.render().open()\n })\n})\n","var Backbone = require('backbone')\n , _ = require('underscore')\n , tmpl = require('./tmpl.handlebars')\n , enableDialog = require('ui/enableDialog')\n , formUtils = require('@173js/ui/form')\n\nvar rules = [\n { validate: function(dict) { return !!dict.feed_con }\n , error: '您的意见不能为空!'\n , refs: ['feed_con']\n }\n]\n\nvar Feedback = Backbone.View.extend({\n events: {\n 'submit form': 'formSubmitted'\n }\n, initialize: function(options) {\n this.formId = options.formId\n }\n, formSubmitted: function(e) {\n var errorBlock = this.$('.error-block')\n , dict = formUtils.toDict(this.$('form'))\n\n errorBlock.empty().hide()\n\n var isValidated = _.every(rules, function(rule) {\n var valid = rule.validate(dict)\n if (valid) { return true }\n\n errorBlock.text(rule.error).show()\n\n var inputs = _(rule.refs).map(function(name) {\n var input = this.$('[name=\"' + name + '\"]')\n return input\n })\n\n _.each(inputs, function(input) {\n input.parent().css('border-color', 'red')\n input.one('focus', function() {\n _.each(inputs, function(input) {\n input.parent().css('border-color', '#dbdbdb')\n })\n })\n }, this)\n }, this)\n\n if (!isValidated) {\n return e.preventDefault()\n }\n }\n, render: function() {\n this.$el.html(tmpl({\n formId: this.formId\n , feedUrl: window.location.href\n }))\n return this\n }\n})\n\nmodule.exports = enableDialog(Feedback, { title: '提意见' })\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
\t\\n\";\n},\"useData\":true});","var Backbone = require('backbone')\n , Overlay = require('ui/Overlay')\n , tmpl = require('./tmpl.handlebars')\n\nmodule.exports = function(View, options) {\n options = options || {}\n var dialogTitle = options.title\n\n return Backbone.View.extend({\n initialize: function(options) {\n this.overlay = new Overlay({ closable: true })\n this.view = new View(options)\n this.listenTo(this.view, 'close', this.close, this)\n }\n , events: {\n 'click .close': 'handleCloseClicked'\n }\n , handleCloseClicked: function(e) {\n e.preventDefault()\n this.close()\n }\n , open: function() {\n this.overlay.open()\n }\n , close: function() {\n this.overlay.close()\n }\n , render: function() {\n this.$el.html(tmpl({ title: dialogTitle }))\n this.$('.view-placeholder')\n .replaceWith(this.view.render().el)\n\n this.overlay.setBody(this.$el)\n return this\n }\n })\n}\n","var $ = require('jquery')\n , doc = $(document)\n , docElement = $('html')\n , tmpl = require('./tmpl.handlebars')\n\nfunction Overlay(opts) {\n this.opts = opts\n this.el = $(tmpl()).appendTo('body')\n this.body = this.el.find('.k-slave')\n this.closable = opts.closable !== void 0\n ? !!opts.closable : true\n\n this.setBody()\n this.el.addClass(opts.klass)\n\n if (!this.closable) { return }\n\n var overlay = this\n doc.on('click.close', '#ark-overlay', function(e) {\n if (e.target !== e.currentTarget) { return }\n overlay.close()\n })\n .on('keyup.close', function(e) {\n var tagName = e.target.tagName\n , isEscKey = e.keyCode === 27\n , isInputField = /input|textarea/i.test(tagName)\n\n if (!isInputField && isEscKey) {\n overlay.close()\n }\n })\n}\n\n$.extend(Overlay.prototype, {\n close: function(silent) {\n this.el.remove()\n docElement.removeClass('ark-overlay')\n doc.off('.close')\n return this\n }\n\n, getContentElement: function() {\n return this.el.find('.k-content')\n }\n\n, open: function() {\n this.scrollTop = doc.scrollTop()\n docElement.addClass('ark-overlay')\n this.el.removeClass('hide')\n return this\n }\n\n, setBody: function(body) {\n body = body || this.opts.body\n this.body.html(body)\n return this\n }\n})\n\nmodule.exports = Overlay;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"