squiffy-runtime 6.0.0-alpha.15 → 6.0.0-alpha.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/animation.d.ts +11 -0
  2. package/dist/events.d.ts +8 -3
  3. package/dist/import.d.ts +4 -0
  4. package/dist/linkHandler.d.ts +8 -0
  5. package/dist/pluginManager.d.ts +23 -0
  6. package/dist/squiffy.runtime.d.ts +2 -2
  7. package/dist/squiffy.runtime.global.js +126 -0
  8. package/dist/squiffy.runtime.global.js.map +1 -0
  9. package/dist/squiffy.runtime.js +8785 -487
  10. package/dist/squiffy.runtime.js.map +1 -0
  11. package/dist/state.d.ts +19 -0
  12. package/dist/textProcessor.d.ts +8 -13
  13. package/dist/types.d.ts +5 -2
  14. package/dist/types.plugins.d.ts +27 -0
  15. package/dist/updater.d.ts +2 -0
  16. package/dist/utils.d.ts +1 -2
  17. package/package.json +12 -5
  18. package/src/__snapshots__/squiffy.runtime.test.ts.snap +53 -19
  19. package/src/animation.ts +68 -0
  20. package/src/events.ts +9 -10
  21. package/src/import.ts +5 -0
  22. package/src/linkHandler.ts +18 -0
  23. package/src/pluginManager.ts +74 -0
  24. package/src/plugins/animate.ts +97 -0
  25. package/src/plugins/index.ts +13 -0
  26. package/src/plugins/live.ts +83 -0
  27. package/src/plugins/random.ts +22 -0
  28. package/src/plugins/replaceLabel.ts +22 -0
  29. package/src/plugins/rotateSequence.ts +61 -0
  30. package/src/squiffy.runtime.test.ts +306 -134
  31. package/src/squiffy.runtime.ts +460 -332
  32. package/src/state.ts +106 -0
  33. package/src/textProcessor.ts +61 -164
  34. package/src/types.plugins.ts +41 -0
  35. package/src/types.ts +5 -2
  36. package/src/updater.ts +77 -0
  37. package/src/utils.ts +15 -12
  38. package/vite.config.ts +36 -0
  39. package/vitest.config.ts +9 -0
  40. package/vitest.setup.ts +16 -0
  41. package/dist/events.js +0 -35
  42. package/dist/squiffy.runtime.test.js +0 -394
  43. package/dist/textProcessor.js +0 -166
  44. package/dist/types.js +0 -1
  45. package/dist/utils.js +0 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"squiffy.runtime.global.js","sources":["../../node_modules/marked/lib/marked.esm.js","../../node_modules/handlebars/dist/cjs/handlebars/utils.js","../../node_modules/handlebars/dist/cjs/handlebars/exception.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers.js","../../node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","../../node_modules/handlebars/dist/cjs/handlebars/decorators.js","../../node_modules/handlebars/dist/cjs/handlebars/logger.js","../../node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","../../node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","../../node_modules/handlebars/dist/cjs/handlebars/base.js","../../node_modules/handlebars/dist/cjs/handlebars/safe-string.js","../../node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","../../node_modules/handlebars/dist/cjs/handlebars/runtime.js","../../node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","../../node_modules/handlebars/dist/cjs/handlebars.runtime.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/base.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js","../../node_modules/source-map/lib/base64.js","../../node_modules/source-map/lib/base64-vlq.js","../../node_modules/source-map/lib/util.js","../../node_modules/source-map/lib/array-set.js","../../node_modules/source-map/lib/mapping-list.js","../../node_modules/source-map/lib/source-map-generator.js","../../node_modules/source-map/lib/binary-search.js","../../node_modules/source-map/lib/quick-sort.js","../../node_modules/source-map/lib/source-map-consumer.js","../../node_modules/source-map/lib/source-node.js","../../node_modules/source-map/source-map.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js","../../node_modules/handlebars/dist/cjs/handlebars.js","../src/textProcessor.ts","../src/events.ts","../src/state.ts","../src/updater.ts","../src/pluginManager.ts","../src/utils.ts","../src/plugins/replaceLabel.ts","../src/plugins/rotateSequence.ts","../src/plugins/random.ts","../src/plugins/live.ts","../src/plugins/animate.ts","../src/plugins/index.ts","../src/linkHandler.ts","../../node_modules/animejs/lib/anime.esm.js","../src/animation.ts","../src/import.ts","../src/squiffy.runtime.ts"],"sourcesContent":["/**\n * marked v16.3.0 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=L();function G(l){O=l}var E={exec:()=>null};function h(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,C=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/(?:[*+-]|\\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ie=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Te=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),F=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,ye=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=h(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=h(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),oe=h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),$e=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E,text:we},re=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Le={...K,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ie).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ae=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,le=/[^\\s\\p{P}\\p{S}]/u,Ee=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Ie=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=/\\[[^\\[\\]]*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=h(pe,\"u\").replace(/punct/g,D).getRegex(),ve=h(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=h(ce,\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h(ce,\"gu\").replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ze=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ge=h(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=h(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),je=h(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=h(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`[^`]*`|[^\\[\\]\\\\`])*?/,Qe=h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),de=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ue=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",de).getRegex(),X={_backpedal:E,anyPunctuation:Ge,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ze,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E},Ke={...X,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:He,emStrongLDelim:ve,url:h(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\"i\").replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},We={...N,br:h(ae).replace(\"{2,}\",\"*\").getRegex(),text:h(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},I={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke};var Xe={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},ke=l=>Xe[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ke);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,o)=>{let a=!1,u=s;for(;--u>=0&&o[u]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e,t,n,r){let i=e.href,s=e.title||null,o=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Je(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))a.push(n[u]),o=!0;else if(!o)a.push(n[u]);else break;n=n.slice(u);let p=a.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=f,n.length===0)break;let k=s.at(-1);if(k?.type===\"code\")break;if(k?.type===\"blockquote\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.blockquote(g);s[s.length-1]=T,r=r.substring(0,r.length-x.raw.length)+T.raw,i=i.substring(0,i.length-x.text.length)+T.text;break}else if(k?.type===\"list\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.list(g);s[s.length-1]=T,r=r.substring(0,r.length-k.raw.length)+T.raw,i=i.substring(0,i.length-x.raw.length)+T.raw,n=g.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,H=>\" \".repeat(3*H.length)),k=e.split(`\n`,1)[0],x=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):x?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),x&&this.rules.other.blankLine.test(k)&&(p+=k+`\n`,e=e.substring(k.length+1),u=!0),!u){let H=this.rules.other.nextBulletRegex(g),ee=this.rules.other.hrRegex(g),te=this.rules.other.fencesBeginRegex(g),ne=this.rules.other.headingBeginRegex(g),me=this.rules.other.htmlBeginRegex(g);for(;e;){let Z=e.split(`\n`,1)[0],A;if(k=Z,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting,\" \"),A=k):A=k.replace(this.rules.other.tabCharGlobal,\" \"),te.test(k)||ne.test(k)||me.test(k)||H.test(k)||ee.test(k))break;if(A.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=`\n`+A.slice(g);else{if(x||f.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(f)||ne.test(f)||ee.test(f))break;c+=`\n`+k}!x&&!k.trim()&&(x=!0),p+=Z+`\n`,e=e.substring(Z.length+1),f=A.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,Y;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(Y=T[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:p,task:!!T,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;u<i.items.length;u++)if(this.lexer.state.top=!1,i.items[u].tokens=this.lexer.blockTokens(i.items[u].text,[]),!i.loose){let p=i.items[u].tokens.filter(f=>f.type===\"space\"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u<i.items.length;u++)i.items[u].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,u)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[u]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,u=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){u+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){p+=a;continue}if(u-=a,u>0)continue;a=Math.min(a,a+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+a);if(Math.min(s,a)%2){let g=k.slice(1,-1);return{type:\"em\",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let x=k.slice(2,-2);return{type:\"strong\",raw:k,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var b=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:I.normal,inline:M.normal};this.options.pedantic?(t.block=I.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=I.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:I,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c==\"number\"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(a=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var R=class l{options;renderer;textRenderer;constructor(e){this.options=e||O,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var S=class{options;block;constructor(e){this.options=e||O}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?b.lex:b.lexInline}provideParser(){return this.block?R.parse:R.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=R;Renderer=P;TextRenderer=$;Lexer=b;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],u=i[o];S.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return Promise.resolve(a.call(i,p)).then(f=>u.call(i,f));let c=a.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b.lex(e,t??this.defaults)}parser(e,t){return R.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let a=s.hooks?s.hooks.provideLexer():e?b.lex:b.lexInline,u=s.hooks?s.hooks.provideParser():e?R.parse:R.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>a(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=a(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(l,e){return _.parse(l,e)}d.options=d.setOptions=function(l){return _.setOptions(l),d.defaults=_.defaults,G(d.defaults),d};d.getDefaults=L;d.defaults=O;d.use=function(...l){return _.use(...l),d.defaults=_.defaults,G(d.defaults),d};d.walkTokens=function(l,e){return _.walkTokens(l,e)};d.parseInline=_.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=P;d.TextRenderer=$;d.Lexer=b;d.lexer=b.lex;d.Tokenizer=y;d.Hooks=S;d.parse=d;var Dt=d.options,Ht=d.setOptions,Zt=d.use,Gt=d.walkTokens,Nt=d.parseInline,jt=d,Ft=R.parse,Qt=b.lex;export{S as Hooks,b as Lexer,B as Marked,R as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,O as defaults,L as getDefaults,Qt as lexer,d as marked,Dt as options,jt as parse,Nt as parseInline,Ft as parser,Ht as setOptions,Zt as use,Gt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\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 '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;',\n '=': '&#x3D;'\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","'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","'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 (typeof Symbol === 'function' && context[Symbol.iterator]) {\n var newContext = [];\n var iterator = context[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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkUsWUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFlBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb250ZXh0W1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnRleHRbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICBmb3IgKGxldCBpdCA9IGl0ZXJhdG9yLm5leHQoKTsgIWl0LmRvbmU7IGl0ID0gaXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAvLyBhbiBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LlxuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\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.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\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.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\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.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","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar _logger2 = _interopRequireDefault(_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 _logger2['default'].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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMvQyxXQUFXOzs7O0FBRTlCLElBQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFdEMsU0FBUyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUU7QUFDdkQsTUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELHdCQUFzQixDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM5Qyx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFbkQsTUFBSSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVuRCwwQkFBd0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRTlDLFNBQU87QUFDTCxjQUFVLEVBQUU7QUFDVixlQUFTLEVBQUUsNkNBQ1Qsd0JBQXdCLEVBQ3hCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FDdEM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQyw2QkFBNkI7S0FDM0Q7QUFDRCxXQUFPLEVBQUU7QUFDUCxlQUFTLEVBQUUsNkNBQ1Qsc0JBQXNCLEVBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDbkM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQywwQkFBMEI7S0FDeEQ7R0FDRixDQUFDO0NBQ0g7O0FBRU0sU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUN4RSxNQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUNoQyxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDakUsTUFBTTtBQUNMLFdBQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztHQUNwRTtDQUNGOztBQUVELFNBQVMsY0FBYyxDQUFDLHlCQUF5QixFQUFFLFlBQVksRUFBRTtBQUMvRCxNQUFJLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDbkUsV0FBTyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDO0dBQ25FO0FBQ0QsTUFBSSx5QkFBeUIsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO0FBQ3hELFdBQU8seUJBQXlCLENBQUMsWUFBWSxDQUFDO0dBQy9DO0FBQ0QsZ0NBQThCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0MsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFRCxTQUFTLDhCQUE4QixDQUFDLFlBQVksRUFBRTtBQUNwRCxNQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMzQyxvQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsd0JBQU8sR0FBRyxDQUNSLE9BQU8sRUFDUCxpRUFBK0QsWUFBWSxvSUFDSCxvSEFDMkMsQ0FDcEgsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxxQkFBcUIsR0FBRztBQUN0QyxRQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWSxFQUFJO0FBQ3BELFdBQU8sZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7R0FDdkMsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoicHJvdG8tYWNjZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTmV3TG9va3VwT2JqZWN0IH0gZnJvbSAnLi9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBsb2dnZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICBsZXQgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ2NvbnN0cnVjdG9yJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2xvb2t1cEdldHRlcl9fJ10gPSBmYWxzZTtcblxuICBsZXQgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdFsnX19wcm90b19fJ10gPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogY3JlYXRlTmV3TG9va3VwT2JqZWN0KFxuICAgICAgICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b1Byb3BlcnRpZXNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCxcbiAgICAgICAgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kc1xuICAgICAgKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHRcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coXG4gICAgICAnZXJyb3InLFxuICAgICAgYEhhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCIke3Byb3BlcnR5TmFtZX1cIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXFxuYCArXG4gICAgICAgIGBZb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcXG5gICtcbiAgICAgICAgYFNlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlsc2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnRpZXMoKSB7XG4gIE9iamVjdC5rZXlzKGxvZ2dlZFByb3BlcnRpZXMpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbiJdfQ==\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.8';\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy44JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\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.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;\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O0FBRzVDLE1BQU0sb0NBQW9DLEdBQ3hDLFlBQVksQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRTFELFdBQVMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDdkQsUUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLGFBQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELFVBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGVBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQ3ZCO0tBQ0Y7QUFDRCxXQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUV0RSxRQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDOUMsV0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO0FBQ2pCLHdCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7S0FDNUMsQ0FBQyxDQUFDOztBQUVILFFBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDcEMsSUFBSSxFQUNKLE9BQU8sRUFDUCxPQUFPLEVBQ1AsZUFBZSxDQUNoQixDQUFDOztBQUVGLFFBQUksTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQ2pDLGFBQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQzFDLE9BQU8sRUFDUCxZQUFZLENBQUMsZUFBZSxFQUM1QixHQUFHLENBQ0osQ0FBQztBQUNGLFlBQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDbkU7QUFDRCxRQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDbEIsVUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ2xCLFlBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsYUFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxjQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVCLGtCQUFNO1dBQ1A7O0FBRUQsZUFBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0FBQ0QsY0FBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDM0I7QUFDRCxhQUFPLE1BQU0sQ0FBQztLQUNmLE1BQU07QUFDTCxZQUFNLDJCQUNKLGNBQWMsR0FDWixPQUFPLENBQUMsSUFBSSxHQUNaLDBEQUEwRCxDQUM3RCxDQUFDO0tBQ0g7R0FDRjs7O0FBR0QsTUFBSSxTQUFTLEdBQUc7QUFDZCxVQUFNLEVBQUUsZ0JBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDL0IsVUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLENBQUEsQUFBQyxFQUFFO0FBQzFCLGNBQU0sMkJBQWMsR0FBRyxHQUFHLElBQUksR0FBRyxtQkFBbUIsR0FBRyxHQUFHLEVBQUU7QUFDMUQsYUFBRyxFQUFFLEdBQUc7U0FDVCxDQUFDLENBQUM7T0FDSjtBQUNELGFBQU8sU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDNUM7QUFDRCxrQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxZQUFZLEVBQUU7QUFDN0MsVUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLFVBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUNsQixlQUFPLE1BQU0sQ0FBQztPQUNmO0FBQ0QsVUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFO0FBQzlELGVBQU8sTUFBTSxDQUFDO09BQ2Y7O0FBRUQsVUFBSSxxQ0FBZ0IsTUFBTSxFQUFFLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsRUFBRTtBQUN2RSxlQUFPLE1BQU0sQ0FBQztPQUNmO0FBQ0QsYUFBTyxTQUFTLENBQUM7S0FDbEI7QUFDRCxVQUFNLEVBQUUsZ0JBQVMsTUFBTSxFQUFFLElBQUksRUFBRTtBQUM3QixVQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzFCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUIsWUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BFLFlBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUNsQixpQkFBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7T0FDRjtLQUNGO0FBQ0QsVUFBTSxFQUFFLGdCQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDakMsYUFBTyxPQUFPLE9BQU8sS0FBSyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDeEU7O0FBRUQsb0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtBQUN4QyxpQkFBYSxFQUFFLG9CQUFvQjs7QUFFbkMsTUFBRSxFQUFFLFlBQVMsQ0FBQyxFQUFFO0FBQ2QsVUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFNBQUcsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxhQUFPLEdBQUcsQ0FBQztLQUNaOztBQUVELFlBQVEsRUFBRSxFQUFFO0FBQ1osV0FBTyxFQUFFLGlCQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtBQUNuRSxVQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUNuQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixVQUFJLElBQUksSUFBSSxNQUFNLElBQUksV0FBVyxJQUFJLG1CQUFtQixFQUFFO0FBQ3hELHNCQUFjLEdBQUcsV0FBVyxDQUMxQixJQUFJLEVBQ0osQ0FBQyxFQUNELEVBQUUsRUFDRixJQUFJLEVBQ0osbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FBQztPQUNILE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUMxQixzQkFBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7T0FDOUQ7QUFDRCxhQUFPLGNBQWMsQ0FBQztLQUN2Qjs7QUFFRCxRQUFJLEVBQUUsY0FBUyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQzNCLGFBQU8sS0FBSyxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLGFBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO09BQ3ZCO0FBQ0QsYUFBTyxLQUFLLENBQUM7S0FDZDtBQUNELGlCQUFhLEVBQUUsdUJBQVMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNyQyxVQUFJLEdBQUcsR0FBRyxLQUFLLElBQUksTUFBTSxDQUFDOztBQUUxQixVQUFJLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtBQUN2QyxXQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3ZDOztBQUVELGFBQU8sR0FBRyxDQUFDO0tBQ1o7O0FBRUQsZUFBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDOztBQUU1QixRQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJO0FBQ2pCLGdCQUFZLEVBQUUsWUFBWSxDQUFDLFFBQVE7R0FDcEMsQ0FBQzs7QUFFRixXQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQWdCO1FBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNoQyxRQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOztBQUV4QixPQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDNUMsVUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDaEM7QUFDRCxRQUFJLE1BQU0sWUFBQTtRQUNSLFdBQVcsR0FBRyxZQUFZLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7QUFDN0QsUUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFO0FBQzFCLFVBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUNsQixjQUFNLEdBQ0osT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQ3hCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQztPQUN0QixNQUFNO0FBQ0wsY0FBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDcEI7S0FDRjs7QUFFRCxhQUFTLElBQUksQ0FBQyxPQUFPLGdCQUFnQjtBQUNuQyxhQUNFLEVBQUUsR0FDRixZQUFZLENBQUMsSUFBSSxDQUNmLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxDQUFDLE9BQU8sRUFDakIsU0FBUyxDQUFDLFFBQVEsRUFDbEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FDRDtLQUNIOztBQUVELFFBQUksR0FBRyxpQkFBaUIsQ0FDdEIsWUFBWSxDQUFDLElBQUksRUFDakIsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFDcEIsSUFBSSxFQUNKLFdBQVcsQ0FDWixDQUFDO0FBQ0YsV0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQy9COztBQUVELEtBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztBQUVqQixLQUFHLENBQUMsTUFBTSxHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ3BCLFVBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLHFDQUErQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxlQUFTLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQzs7QUFFbEMsVUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFOztBQUUzQixpQkFBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUMxQyxPQUFPLENBQUMsUUFBUSxFQUNoQixHQUFHLENBQUMsUUFBUSxDQUNiLENBQUM7T0FDSDtBQUNELFVBQUksWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFO0FBQ3pELGlCQUFTLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQ2pDLEVBQUUsRUFDRixHQUFHLENBQUMsVUFBVSxFQUNkLE9BQU8sQ0FBQyxVQUFVLENBQ25CLENBQUM7T0FDSDs7QUFFRCxlQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNyQixlQUFTLENBQUMsa0JBQWtCLEdBQUcsOENBQXlCLE9BQU8sQ0FBQyxDQUFDOztBQUVqRSxVQUFJLG1CQUFtQixHQUNyQixPQUFPLENBQUMseUJBQXlCLElBQ2pDLG9DQUFvQyxDQUFDO0FBQ3ZDLGlDQUFrQixTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDbkUsaUNBQWtCLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3pFLE1BQU07QUFDTCxlQUFTLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO0FBQzFELGVBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNwQyxlQUFTLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDdEMsZUFBUyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQzFDLGVBQVMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUNqQztHQUNGLENBQUM7O0FBRUYsS0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtBQUNsRCxRQUFJLFlBQVksQ0FBQyxjQUFjLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDL0MsWUFBTSwyQkFBYyx3QkFBd0IsQ0FBQyxDQUFDO0tBQy9DO0FBQ0QsUUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JDLFlBQU0sMkJBQWMseUJBQXlCLENBQUMsQ0FBQztLQUNoRDs7QUFFRCxXQUFPLFdBQVcsQ0FDaEIsU0FBUyxFQUNULENBQUMsRUFDRCxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsSUFBSSxFQUNKLENBQUMsRUFDRCxXQUFXLEVBQ1gsTUFBTSxDQUNQLENBQUM7R0FDSCxDQUFDO0FBQ0YsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxTQUFTLFdBQVcsQ0FDekIsU0FBUyxFQUNULENBQUMsRUFDRCxFQUFFLEVBQ0YsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsTUFBTSxFQUNOO0FBQ0EsV0FBUyxJQUFJLENBQUMsT0FBTyxFQUFnQjtRQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDakMsUUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQzNCLFFBQ0UsTUFBTSxJQUNOLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQ3BCLEVBQUUsT0FBTyxLQUFLLFNBQVMsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQSxBQUFDLEVBQzFEO0FBQ0EsbUJBQWEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMxQzs7QUFFRCxXQUFPLEVBQUUsQ0FDUCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLFNBQVMsQ0FBQyxRQUFRLEVBQ2xCLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUNwQixXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUN4RCxhQUFhLENBQ2QsQ0FBQztHQUNIOztBQUVELE1BQUksR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDOztBQUV6RSxNQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNqQixNQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QyxNQUFJLENBQUMsV0FBVyxHQUFHLG1CQUFtQixJQUFJLENBQUMsQ0FBQztBQUM1QyxTQUFPLElBQUksQ0FBQztDQUNiOzs7Ozs7QUFLTSxTQUFTLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN4RCxNQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osUUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO0FBQ3JDLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3pDLE1BQU07QUFDTCxhQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMUM7R0FDRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTs7QUFFekMsV0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDdkIsV0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7R0FDckM7QUFDRCxTQUFPLE9BQU8sQ0FBQztDQUNoQjs7QUFFTSxTQUFTLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTs7QUFFdkQsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDMUUsU0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQ2YsV0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztHQUN2RTs7QUFFRCxNQUFJLFlBQVksWUFBQSxDQUFDO0FBQ2pCLE1BQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTs7QUFDckMsYUFBTyxDQUFDLElBQUksR0FBRyxrQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXpDLFVBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDcEIsa0JBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFNBQVMsbUJBQW1CLENBQ3pFLE9BQU8sRUFFUDtZQURBLE9BQU8seURBQUcsRUFBRTs7OztBQUlaLGVBQU8sQ0FBQyxJQUFJLEdBQUcsa0JBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLGVBQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDcEQsZUFBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzdCLENBQUM7QUFDRixVQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7QUFDZixlQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ3BFOztHQUNGOztBQUVELE1BQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxZQUFZLEVBQUU7QUFDekMsV0FBTyxHQUFHLFlBQVksQ0FBQztHQUN4Qjs7QUFFRCxNQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7QUFDekIsVUFBTSwyQkFBYyxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxDQUFDO0dBQzVFLE1BQU0sSUFBSSxPQUFPLFlBQVksUUFBUSxFQUFFO0FBQ3RDLFdBQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNsQztDQUNGOztBQUVNLFNBQVMsSUFBSSxHQUFHO0FBQ3JCLFNBQU8sRUFBRSxDQUFDO0NBQ1g7O0FBRUQsU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMvQixNQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQSxBQUFDLEVBQUU7QUFDOUIsUUFBSSxHQUFHLElBQUksR0FBRyxrQkFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckMsUUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7R0FDckI7QUFDRCxTQUFPLElBQUksQ0FBQztDQUNiOztBQUVELFNBQVMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDekUsTUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFO0FBQ2hCLFFBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLFFBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUNqQixJQUFJLEVBQ0osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNuQixJQUFJLEVBQ0osV0FBVyxFQUNYLE1BQU0sQ0FDUCxDQUFDO0FBQ0YsU0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDM0I7QUFDRCxTQUFPLElBQUksQ0FBQztDQUNiOztBQUVELFNBQVMsK0JBQStCLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRTtBQUNqRSxRQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLFVBQVUsRUFBSTtBQUMvQyxRQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkMsaUJBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDekUsQ0FBQyxDQUFDO0NBQ0o7O0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ25ELE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDaEQsU0FBTywrQkFBVyxNQUFNLEVBQUUsVUFBQSxPQUFPLEVBQUk7QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n","/* global globalThis */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n // https://mathiasbynens.be/notes/globalthis\n (function () {\n if (typeof globalThis === 'object') return;\n Object.prototype.__defineGetter__('__magic__', function () {\n return this;\n });\n __magic__.globalThis = __magic__; // eslint-disable-line no-undef\n delete Object.prototype.__magic__;\n })();\n\n var $Handlebars = globalThis.Handlebars;\n\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (globalThis.Handlebars === Handlebars) {\n globalThis.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOzs7QUFHbEMsR0FBQyxZQUFXO0FBQ1YsUUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsT0FBTztBQUMzQyxVQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxZQUFXO0FBQ3hELGFBQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQyxDQUFDO0FBQ0gsYUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDakMsV0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztHQUNuQyxDQUFBLEVBQUcsQ0FBQzs7QUFFTCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDOzs7QUFHMUMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDeEMsZ0JBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQ3JDO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKEhhbmRsZWJhcnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oJ19fbWFnaWNfXycsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gICAgX19tYWdpY19fLmdsb2JhbFRoaXMgPSBfX21hZ2ljX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21hZ2ljX187XG4gIH0pKCk7XG5cbiAgY29uc3QgJEhhbmRsZWJhcnMgPSBnbG9iYWxUaGlzLkhhbmRsZWJhcnM7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgZ2xvYmFsVGhpcy5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19\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;\nvar AST = {\n // Public API used to evaluate derived attributes regarding AST nodes\n helpers: {\n // a mustache is definitely a helper if:\n // * it is an eligible helper, and\n // * it has at least one parameter or hash segment\n helperExpression: function helperExpression(node) {\n return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);\n },\n\n scopedId: function scopedId(path) {\n return (/^\\.|this\\b/.test(path.original)\n );\n },\n\n // an ID is simple if it only has one part, and that part is not\n // `..` or `this`.\n simpleId: function simpleId(path) {\n return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;\n }\n }\n};\n\n// Must be exported as an object rather than the root of the module as the jison lexer\n// must modify the object to operate properly.\nexports['default'] = AST;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFDNUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixJQUNqQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFBLElBQzlCLENBQUMsRUFBRSxBQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLElBQUksQ0FBQSxBQUFDLEFBQUMsQ0FDdkQ7S0FDSDs7QUFFRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sYUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDekM7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNyRTtLQUNIO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUlhLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbm9kZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbicgfHxcbiAgICAgICAgKChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHxcbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpICYmXG4gICAgICAgICAgISEoKG5vZGUucGFyYW1zICYmIG5vZGUucGFyYW1zLmxlbmd0aCkgfHwgbm9kZS5oYXNoKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHNjb3BlZElkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gL15cXC58dGhpc1xcYi8udGVzdChwYXRoLm9yaWdpbmFsKTtcbiAgICB9LFxuXG4gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBhbmQgdGhhdCBwYXJ0IGlzIG5vdFxuICAgIC8vIGAuLmAgb3IgYHRoaXNgLlxuICAgIHNpbXBsZUlkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGhcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBNdXN0IGJlIGV4cG9ydGVkIGFzIGFuIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgbW9kdWxlIGFzIHRoZSBqaXNvbiBsZXhlclxuLy8gbXVzdCBtb2RpZnkgdGhlIG9iamVjdCB0byBvcGVyYXRlIHByb3Blcmx5LlxuZXhwb3J0IGRlZmF1bHQgQVNUO1xuIl19\n","// File ignored in coverage tests via setting in .istanbul.yml\n/* Jison generated parser */\n\"use strict\";\n\nexports.__esModule = true;\nvar handlebars = (function () {\n var parser = { trace: function trace() {},\n yy: {},\n symbols_: { \"error\": 2, \"root\": 3, \"program\": 4, \"EOF\": 5, \"program_repetition0\": 6, \"statement\": 7, \"mustache\": 8, \"block\": 9, \"rawBlock\": 10, \"partial\": 11, \"partialBlock\": 12, \"content\": 13, \"COMMENT\": 14, \"CONTENT\": 15, \"openRawBlock\": 16, \"rawBlock_repetition0\": 17, \"END_RAW_BLOCK\": 18, \"OPEN_RAW_BLOCK\": 19, \"helperName\": 20, \"openRawBlock_repetition0\": 21, \"openRawBlock_option0\": 22, \"CLOSE_RAW_BLOCK\": 23, \"openBlock\": 24, \"block_option0\": 25, \"closeBlock\": 26, \"openInverse\": 27, \"block_option1\": 28, \"OPEN_BLOCK\": 29, \"openBlock_repetition0\": 30, \"openBlock_option0\": 31, \"openBlock_option1\": 32, \"CLOSE\": 33, \"OPEN_INVERSE\": 34, \"openInverse_repetition0\": 35, \"openInverse_option0\": 36, \"openInverse_option1\": 37, \"openInverseChain\": 38, \"OPEN_INVERSE_CHAIN\": 39, \"openInverseChain_repetition0\": 40, \"openInverseChain_option0\": 41, \"openInverseChain_option1\": 42, \"inverseAndProgram\": 43, \"INVERSE\": 44, \"inverseChain\": 45, \"inverseChain_option0\": 46, \"OPEN_ENDBLOCK\": 47, \"OPEN\": 48, \"mustache_repetition0\": 49, \"mustache_option0\": 50, \"OPEN_UNESCAPED\": 51, \"mustache_repetition1\": 52, \"mustache_option1\": 53, \"CLOSE_UNESCAPED\": 54, \"OPEN_PARTIAL\": 55, \"partialName\": 56, \"partial_repetition0\": 57, \"partial_option0\": 58, \"openPartialBlock\": 59, \"OPEN_PARTIAL_BLOCK\": 60, \"openPartialBlock_repetition0\": 61, \"openPartialBlock_option0\": 62, \"param\": 63, \"sexpr\": 64, \"OPEN_SEXPR\": 65, \"sexpr_repetition0\": 66, \"sexpr_option0\": 67, \"CLOSE_SEXPR\": 68, \"hash\": 69, \"hash_repetition_plus0\": 70, \"hashSegment\": 71, \"ID\": 72, \"EQUALS\": 73, \"blockParams\": 74, \"OPEN_BLOCK_PARAMS\": 75, \"blockParams_repetition_plus0\": 76, \"CLOSE_BLOCK_PARAMS\": 77, \"path\": 78, \"dataName\": 79, \"STRING\": 80, \"NUMBER\": 81, \"BOOLEAN\": 82, \"UNDEFINED\": 83, \"NULL\": 84, \"DATA\": 85, \"pathSegments\": 86, \"SEP\": 87, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 5: \"EOF\", 14: \"COMMENT\", 15: \"CONTENT\", 18: \"END_RAW_BLOCK\", 19: \"OPEN_RAW_BLOCK\", 23: \"CLOSE_RAW_BLOCK\", 29: \"OPEN_BLOCK\", 33: \"CLOSE\", 34: \"OPEN_INVERSE\", 39: \"OPEN_INVERSE_CHAIN\", 44: \"INVERSE\", 47: \"OPEN_ENDBLOCK\", 48: \"OPEN\", 51: \"OPEN_UNESCAPED\", 54: \"CLOSE_UNESCAPED\", 55: \"OPEN_PARTIAL\", 60: \"OPEN_PARTIAL_BLOCK\", 65: \"OPEN_SEXPR\", 68: \"CLOSE_SEXPR\", 72: \"ID\", 73: \"EQUALS\", 75: \"OPEN_BLOCK_PARAMS\", 77: \"CLOSE_BLOCK_PARAMS\", 80: \"STRING\", 81: \"NUMBER\", 82: \"BOOLEAN\", 83: \"UNDEFINED\", 84: \"NULL\", 85: \"DATA\", 87: \"SEP\" },\n productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n break;\n case 2:\n this.$ = yy.prepareProgram($$[$0]);\n break;\n case 3:\n this.$ = $$[$0];\n break;\n case 4:\n this.$ = $$[$0];\n break;\n case 5:\n this.$ = $$[$0];\n break;\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n this.$ = $$[$0];\n break;\n case 8:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 11:\n this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 12:\n this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n break;\n case 13:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n break;\n case 14:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n break;\n case 15:\n this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 16:\n this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 17:\n this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 18:\n this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n break;\n case 19:\n var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n program.chained = true;\n\n this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n\n break;\n case 20:\n this.$ = $$[$0];\n break;\n case 21:\n this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n break;\n case 22:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 23:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 24:\n this.$ = {\n type: 'PartialStatement',\n name: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n indent: '',\n strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 25:\n this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 26:\n this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n break;\n case 27:\n this.$ = $$[$0];\n break;\n case 28:\n this.$ = $$[$0];\n break;\n case 29:\n this.$ = {\n type: 'SubExpression',\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 30:\n this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 31:\n this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 32:\n this.$ = yy.id($$[$0 - 1]);\n break;\n case 33:\n this.$ = $$[$0];\n break;\n case 34:\n this.$ = $$[$0];\n break;\n case 35:\n this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 36:\n this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n break;\n case 37:\n this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n break;\n case 38:\n this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n break;\n case 39:\n this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n break;\n case 40:\n this.$ = $$[$0];\n break;\n case 41:\n this.$ = $$[$0];\n break;\n case 42:\n this.$ = yy.preparePath(true, $$[$0], this._$);\n break;\n case 43:\n this.$ = yy.preparePath(false, $$[$0], this._$);\n break;\n case 44:\n $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];\n break;\n case 45:\n this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n break;\n case 46:\n this.$ = [];\n break;\n case 47:\n $$[$0 - 1].push($$[$0]);\n break;\n case 48:\n this.$ = [];\n break;\n case 49:\n $$[$0 - 1].push($$[$0]);\n break;\n case 50:\n this.$ = [];\n break;\n case 51:\n $$[$0 - 1].push($$[$0]);\n break;\n case 58:\n this.$ = [];\n break;\n case 59:\n $$[$0 - 1].push($$[$0]);\n break;\n case 64:\n this.$ = [];\n break;\n case 65:\n $$[$0 - 1].push($$[$0]);\n break;\n case 70:\n this.$ = [];\n break;\n case 71:\n $$[$0 - 1].push($$[$0]);\n break;\n case 78:\n this.$ = [];\n break;\n case 79:\n $$[$0 - 1].push($$[$0]);\n break;\n case 82:\n this.$ = [];\n break;\n case 83:\n $$[$0 - 1].push($$[$0]);\n break;\n case 86:\n this.$ = [];\n break;\n case 87:\n $$[$0 - 1].push($$[$0]);\n break;\n case 90:\n this.$ = [];\n break;\n case 91:\n $$[$0 - 1].push($$[$0]);\n break;\n case 94:\n this.$ = [];\n break;\n case 95:\n $$[$0 - 1].push($$[$0]);\n break;\n case 98:\n this.$ = [$$[$0]];\n break;\n case 99:\n $$[$0 - 1].push($$[$0]);\n break;\n case 100:\n this.$ = [$$[$0]];\n break;\n case 101:\n $$[$0 - 1].push($$[$0]);\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],\n defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] },\n parseError: function parseError(str, hash) {\n throw new Error(str);\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = \"\",\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n EOF = 1;\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n this.yy.parser = this;\n if (typeof this.lexer.yylloc == \"undefined\") this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n var ranges = this.lexer.options && this.lexer.options.ranges;\n if (typeof this.yy.parseError === \"function\") this.parseError = this.yy.parseError;\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = self.lexer.lex() || 1;\n if (typeof token !== \"number\") {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol,\n preErrorSymbol,\n state,\n action,\n a,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n if (!recovering) {\n expected = [];\n for (p in table[state]) if (this.terminals_[p] && p > 2) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n if (this.lexer.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1 ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });\n }\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0) recovering--;\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n /* Jison generated lexer */\n var lexer = (function () {\n var lexer = { EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n setInput: function setInput(input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };\n if (this.options.ranges) this.yylloc.range = [0, 0];\n this.offset = 0;\n return this;\n },\n input: function input() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) this.yylloc.range[1]++;\n\n this._input = this._input.slice(1);\n return ch;\n },\n unput: function unput(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) this.yylineno -= lines.length - 1;\n var r = this.yylloc.range;\n\n this.yylloc = { first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n return this;\n },\n more: function more() {\n this._more = true;\n return this;\n },\n less: function less(n) {\n this.unput(this.match.slice(n));\n },\n pastInput: function pastInput() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n upcomingInput: function upcomingInput() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n showPosition: function showPosition() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n next: function next() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token, match, tempMatch, index, col, lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (!this.options.flex) break;\n }\n }\n if (match) {\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = { first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) this.done = false;\n if (token) return token;else return;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), { text: \"\", token: null, line: this.yylineno });\n }\n },\n lex: function lex() {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n popState: function popState() {\n return this.conditionStack.pop();\n },\n _currentRules: function _currentRules() {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n },\n topState: function topState() {\n return this.conditionStack[this.conditionStack.length - 2];\n },\n pushState: function begin(condition) {\n this.begin(condition);\n } };\n lexer.options = {};\n lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\n function strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n }\n\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n strip(0, 1);\n this.begin(\"mu\");\n } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n strip(0, 1);\n this.begin(\"emu\");\n } else {\n this.begin(\"mu\");\n }\n if (yy_.yytext) return 15;\n\n break;\n case 1:\n return 15;\n break;\n case 2:\n this.popState();\n return 15;\n\n break;\n case 3:\n this.begin('raw');return 15;\n break;\n case 4:\n this.popState();\n // Should be using `this.topState()` below, but it currently\n // returns the second top instead of the first top. Opened an\n // issue about it at https://github.com/zaach/jison/issues/291\n if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n return 15;\n } else {\n strip(5, 9);\n return 'END_RAW_BLOCK';\n }\n\n break;\n case 5:\n return 15;\n break;\n case 6:\n this.popState();\n return 14;\n\n break;\n case 7:\n return 65;\n break;\n case 8:\n return 68;\n break;\n case 9:\n return 19;\n break;\n case 10:\n this.popState();\n this.begin('raw');\n return 23;\n\n break;\n case 11:\n return 55;\n break;\n case 12:\n return 60;\n break;\n case 13:\n return 29;\n break;\n case 14:\n return 47;\n break;\n case 15:\n this.popState();return 44;\n break;\n case 16:\n this.popState();return 44;\n break;\n case 17:\n return 34;\n break;\n case 18:\n return 39;\n break;\n case 19:\n return 51;\n break;\n case 20:\n return 48;\n break;\n case 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n\n break;\n case 22:\n this.popState();\n return 14;\n\n break;\n case 23:\n return 48;\n break;\n case 24:\n return 73;\n break;\n case 25:\n return 72;\n break;\n case 26:\n return 72;\n break;\n case 27:\n return 87;\n break;\n case 28:\n // ignore whitespace\n break;\n case 29:\n this.popState();return 54;\n break;\n case 30:\n this.popState();return 33;\n break;\n case 31:\n yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');return 80;\n break;\n case 32:\n yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");return 80;\n break;\n case 33:\n return 85;\n break;\n case 34:\n return 82;\n break;\n case 35:\n return 82;\n break;\n case 36:\n return 83;\n break;\n case 37:\n return 84;\n break;\n case 38:\n return 81;\n break;\n case 39:\n return 75;\n break;\n case 40:\n return 77;\n break;\n case 41:\n return 72;\n break;\n case 42:\n yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');return 72;\n break;\n case 43:\n return 'INVALID';\n break;\n case 44:\n return 5;\n break;\n }\n };\n lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/];\n lexer.conditions = { \"mu\": { \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], \"inclusive\": false }, \"emu\": { \"rules\": [2], \"inclusive\": false }, \"com\": { \"rules\": [6], \"inclusive\": false }, \"raw\": { \"rules\": [3, 4, 5], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 44], \"inclusive\": true } };\n return lexer;\n })();\n parser.lexer = lexer;\n function Parser() {\n this.yy = {};\n }Parser.prototype = parser;parser.Parser = Parser;\n return new Parser();\n})();exports[\"default\"] = handlebars;\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixRQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBSSxFQUFHO0FBQzFDLFVBQUUsRUFBRSxFQUFFO0FBQ04sZ0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFB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RUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSxvQkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFB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QUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9FLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCwyQkFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0FBRXZCLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUV0RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzFFLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCwwQkFBTTtBQUFB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QUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDcEcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3BILDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDM0gsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN0csMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQzlGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBRSxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEdBQUc7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxHQUFHO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDBCQUFNO0FBQUEsYUFDTDtTQUNBO0FBQ0QsYUFBSyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQy8vVixzQkFBYyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQztBQUNsTSxrQkFBVSxFQUFFLFNBQVMsVUFBVSxDQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFD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QUNOLHFCQUFLLENBQUM7QUFBRSwyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDMkIsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQix3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQiwyQkFBTyxFQUFFLENBQUM7O0FBRTVDLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0wsd0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxL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QyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDM1UsZUFBTyxLQUFLLENBQUM7S0FBQyxDQUFBLEVBQUcsQ0FBQTtBQUNqQixVQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixhQUFTLE1BQU0sR0FBSTtBQUFFLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsV0FBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0NBQ2pCLENBQUEsRUFBRyxDQUFDLHFCQUFlLFVBQVUiLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cbnZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uKCl7XG52YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSAoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MTcsXCJFTkRfUkFXX0JMT0NLXCI6MTgsXCJPUEVOX1JBV19CTE9DS1wiOjE5LFwiaGVscGVyTmFtZVwiOjIwLFwib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MjEsXCJvcGVuUmF3QmxvY2tfb3B0aW9uMFwiOjIyLFwiQ0xPU0VfUkFXX0JMT0NLXCI6MjMsXCJvcGVuQmxvY2tcIjoyNCxcImJsb2NrX29wdGlvbjBcIjoyNSxcImNsb3NlQmxvY2tcIjoyNixcIm9wZW5JbnZlcnNlXCI6MjcsXCJibG9ja19vcHRpb24xXCI6MjgsXCJPUEVOX0JMT0NLXCI6MjksXCJvcGVuQmxvY2tfcmVwZXRpdGlvbjBcIjozMCxcIm9wZW5CbG9ja19vcHRpb24wXCI6MzEsXCJvcGVuQmxvY2tfb3B0aW9uMVwiOjMyLFwiQ0xPU0VcIjozMyxcIk9QRU5fSU5WRVJTRVwiOjM0LFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjozNSxcIm9wZW5JbnZlcnNlX29wdGlvbjBcIjozNixcIm9wZW5JbnZlcnNlX29wdGlvbjFcIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5cIjozOCxcIk9QRU5fSU5WRVJTRV9DSEFJTlwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMFwiOjQwLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6NDEsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjFcIjo0MixcImludmVyc2VBbmRQcm9ncmFtXCI6NDMsXCJJTlZFUlNFXCI6NDQsXCJpbnZlcnNlQ2hhaW5cIjo0NSxcImludmVyc2VDaGFpbl9vcHRpb24wXCI6NDYsXCJPUEVOX0VOREJMT0NLXCI6NDcsXCJPUEVOXCI6NDgsXCJtdXN0YWNoZV9yZXBldGl0aW9uMFwiOjQ5LFwibXVzdGFjaGVfb3B0aW9uMFwiOjUwLFwiT1BFTl9VTkVTQ0FQRURcIjo1MSxcIm11c3RhY2hlX3JlcGV0aXRpb24xXCI6NTIsXCJtdXN0YWNoZV9vcHRpb24xXCI6NTMsXCJDTE9TRV9VTkVTQ0FQRURcIjo1NCxcIk9QRU5fUEFSVElBTFwiOjU1LFwicGFydGlhbE5hbWVcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInBhcmFtXCI6NjMsXCJzZXhwclwiOjY0LFwiT1BFTl9TRVhQUlwiOjY1LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2NixcInNleHByX29wdGlvbjBcIjo2NyxcIkNMT1NFX1NFWFBSXCI6NjgsXCJoYXNoXCI6NjksXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcImhhc2hTZWdtZW50XCI6NzEsXCJJRFwiOjcyLFwiRVFVQUxTXCI6NzMsXCJibG9ja1BhcmFtc1wiOjc0LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo3NSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3NixcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjc3LFwicGF0aFwiOjc4LFwiZGF0YU5hbWVcIjo3OSxcIlNUUklOR1wiOjgwLFwiTlVNQkVSXCI6ODEsXCJCT09MRUFOXCI6ODIsXCJVTkRFRklORURcIjo4MyxcIk5VTExcIjo4NCxcIkRBVEFcIjo4NSxcInBhdGhTZWdtZW50c1wiOjg2LFwiU0VQXCI6ODcsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTQ6XCJDT01NRU5UXCIsMTU6XCJDT05URU5UXCIsMTg6XCJFTkRfUkFXX0JMT0NLXCIsMTk6XCJPUEVOX1JBV19CTE9DS1wiLDIzOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjk6XCJPUEVOX0JMT0NLXCIsMzM6XCJDTE9TRVwiLDM0OlwiT1BFTl9JTlZFUlNFXCIsMzk6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0NDpcIklOVkVSU0VcIiw0NzpcIk9QRU5fRU5EQkxPQ0tcIiw0ODpcIk9QRU5cIiw1MTpcIk9QRU5fVU5FU0NBUEVEXCIsNTQ6XCJDTE9TRV9VTkVTQ0FQRURcIiw1NTpcIk9QRU5fUEFSVElBTFwiLDYwOlwiT1BFTl9QQVJUSUFMX0JMT0NLXCIsNjU6XCJPUEVOX1NFWFBSXCIsNjg6XCJDTE9TRV9TRVhQUlwiLDcyOlwiSURcIiw3MzpcIkVRVUFMU1wiLDc1OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw3NzpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDgwOlwiU1RSSU5HXCIsODE6XCJOVU1CRVJcIiw4MjpcIkJPT0xFQU5cIiw4MzpcIlVOREVGSU5FRFwiLDg0OlwiTlVMTFwiLDg1OlwiREFUQVwiLDg3OlwiU0VQXCJ9LFxucHJvZHVjdGlvbnNfOiBbMCxbMywyXSxbNCwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbMTMsMV0sWzEwLDNdLFsxNiw1XSxbOSw0XSxbOSw0XSxbMjQsNl0sWzI3LDZdLFszOCw2XSxbNDMsMl0sWzQ1LDNdLFs0NSwxXSxbMjYsM10sWzgsNV0sWzgsNV0sWzExLDVdLFsxMiwzXSxbNTksNV0sWzYzLDFdLFs2MywxXSxbNjQsNV0sWzY5LDFdLFs3MSwzXSxbNzQsM10sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFs1NiwxXSxbNTYsMV0sWzc5LDJdLFs3OCwxXSxbODYsM10sWzg2LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs0OSwwXSxbNDksMl0sWzUwLDBdLFs1MCwxXSxbNTIsMF0sWzUyLDJdLFs1MywwXSxbNTMsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjYsMF0sWzY2LDJdLFs2NywwXSxbNjcsMV0sWzcwLDFdLFs3MCwyXSxbNzYsMV0sWzc2LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3RhdGUsJCQsXyRcbikge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE1OlsyLDQ4XSwxNzozOSwxODpbMiw0OF19LHsyMDo0MSw1Njo0MCw2NDo0Miw2NTpbMSw0M10sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NDo0NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NTpbMiwxMF0sMTQ6WzIsMTBdLDE1OlsyLDEwXSwxODpbMiwxMF0sMTk6WzIsMTBdLDI5OlsyLDEwXSwzNDpbMiwxMF0sMzk6WzIsMTBdLDQ0OlsyLDEwXSw0NzpbMiwxMF0sNDg6WzIsMTBdLDUxOlsyLDEwXSw1NTpbMiwxMF0sNjA6WzIsMTBdfSx7MjA6NDUsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDYsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDcsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDEsNTY6NDgsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsyLDc4XSw0OTo0OSw2NTpbMiw3OF0sNzI6WzIsNzhdLDgwOlsyLDc4XSw4MTpbMiw3OF0sODI6WzIsNzhdLDgzOlsyLDc4XSw4NDpbMiw3OF0sODU6WzIsNzhdfSx7MjM6WzIsMzNdLDMzOlsyLDMzXSw1NDpbMiwzM10sNjU6WzIsMzNdLDY4OlsyLDMzXSw3MjpbMiwzM10sNzU6WzIsMzNdLDgwOlsyLDMzXSw4MTpbMiwzM10sODI6WzIsMzNdLDgzOlsyLDMzXSw4NDpbMiwzM10sODU6WzIsMzNdfSx7MjM6WzIsMzRdLDMzOlsyLDM0XSw1NDpbMiwzNF0sNjU6WzIsMzRdLDY4OlsyLDM0XSw3MjpbMiwzNF0sNzU6WzIsMzRdLDgwOlsyLDM0XSw4MTpbMiwzNF0sODI6WzIsMzRdLDgzOlsyLDM0XSw4NDpbMiwzNF0sODU6WzIsMzRdfSx7MjM6WzIsMzVdLDMzOlsyLDM1XSw1NDpbMiwzNV0sNjU6WzIsMzVdLDY4OlsyLDM1XSw3MjpbMiwzNV0sNzU6WzIsMzVdLDgwOlsyLDM1XSw4MTpbMiwzNV0sODI6WzIsMzVdLDgzOlsyLDM1XSw4NDpbMiwzNV0sODU6WzIsMzVdfSx7MjM6WzIsMzZdLDMzOlsyLDM2XSw1NDpbMiwzNl0sNjU6WzIsMzZdLDY4OlsyLDM2XSw3MjpbMiwzNl0sNzU6WzIsMzZdLDgwOlsyLDM2XSw4MTpbMiwzNl0sODI6WzIsMzZdLDgzOlsyLDM2XSw4NDpbMiwzNl0sODU6WzIsMzZdfSx7MjM6WzIsMzddLDMzOlsyLDM3XSw1NDpbMiwzN10sNjU6WzIsMzddLDY4OlsyLDM3XSw3MjpbMiwzN10sNzU6WzIsMzddLDgwOlsyLDM3XSw4MTpbMiwzN10sODI6WzIsMzddLDgzOlsyLDM3XSw4NDpbMiwzN10sODU6WzIsMzddfSx7MjM6WzIsMzhdLDMzOlsyLDM4XSw1NDpbMiwzOF0sNjU6WzIsMzhdLDY4OlsyLDM4XSw3MjpbMiwzOF0sNzU6WzIsMzhdLDgwOlsyLDM4XSw4MTpbMiwzOF0sODI6WzIsMzhdLDgzOlsyLDM4XSw4NDpbMiwzOF0sODU6WzIsMzhdfSx7MjM6WzIsMzldLDMzOlsyLDM5XSw1NDpbMiwzOV0sNjU6WzIsMzldLDY4OlsyLDM5XSw3MjpbMiwzOV0sNzU6WzIsMzldLDgwOlsyLDM5XSw4MTpbMiwzOV0sODI6WzIsMzldLDgzOlsyLDM5XSw4NDpbMiwzOV0sODU6WzIsMzldfSx7MjM6WzIsNDNdLDMzOlsyLDQzXSw1NDpbMiw0M10sNjU6WzIsNDNdLDY4OlsyLDQzXSw3MjpbMiw0M10sNzU6WzIsNDNdLDgwOlsyLDQzXSw4MTpbMiw0M10sODI6WzIsNDNdLDgzOlsyLDQzXSw4NDpbMiw0M10sODU6WzIsNDNdLDg3OlsxLDUwXX0sezcyOlsxLDM1XSw4Njo1MX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHs1Mjo1Miw1NDpbMiw4Ml0sNjU6WzIsODJdLDcyOlsyLDgyXSw4MDpbMiw4Ml0sODE6WzIsODJdLDgyOlsyLDgyXSw4MzpbMiw4Ml0sODQ6WzIsODJdLDg1OlsyLDgyXX0sezI1OjUzLDM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6NTQsNDc6WzIsNTRdfSx7Mjg6NTksNDM6NjAsNDQ6WzEsNThdLDQ3OlsyLDU2XX0sezEzOjYyLDE1OlsxLDIwXSwxODpbMSw2MV19LHszMzpbMiw4Nl0sNTc6NjMsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2NSw0NzpbMSw2Nl19LHszMDo2NywzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjgsNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo2OSwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MCw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzQsMzM6WzIsODBdLDUwOjcxLDYzOjcyLDY0Ojc1LDY1OlsxLDQzXSw2OTo3Myw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw3OV19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTBdfSx7MjA6NzQsNTM6ODAsNTQ6WzIsODRdLDYzOjgxLDY0Ojc1LDY1OlsxLDQzXSw2OTo4Miw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4Myw0NzpbMSw2Nl19LHs0NzpbMiw1NV19LHs0Ojg0LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODYsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg3LDQ3OlsxLDY2XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc0LDMzOlsyLDg4XSw1ODo4OCw2Mzo4OSw2NDo3NSw2NTpbMSw0M10sNjk6OTAsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkxLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkyLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMxOjkzLDMzOlsyLDYwXSw2Mzo5NCw2NDo3NSw2NTpbMSw0M10sNjk6OTUsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMzOlsyLDY2XSwzNjo5Niw2Mzo5Nyw2NDo3NSw2NTpbMSw0M10sNjk6OTgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDIyOjk5LDIzOlsyLDUyXSw2MzoxMDAsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwMSw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw5Ml0sNjI6MTAyLDYzOjEwMyw2NDo3NSw2NTpbMSw0M10sNjk6MTA0LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDEwNV19LHszMzpbMiw3OV0sNjU6WzIsNzldLDcyOlsyLDc5XSw4MDpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODQ6WzIsNzldLDg1OlsyLDc5XX0sezMzOlsyLDgxXX0sezIzOlsyLDI3XSwzMzpbMiwyN10sNTQ6WzIsMjddLDY1OlsyLDI3XSw2ODpbMiwyN10sNzI6WzIsMjddLDc1OlsyLDI3XSw4MDpbMiwyN10sODE6WzIsMjddLDgyOlsyLDI3XSw4MzpbMiwyN10sODQ6WzIsMjddLDg1OlsyLDI3XX0sezIzOlsyLDI4XSwzMzpbMiwyOF0sNTQ6WzIsMjhdLDY1OlsyLDI4XSw2ODpbMiwyOF0sNzI6WzIsMjhdLDc1OlsyLDI4XSw4MDpbMiwyOF0sODE6WzIsMjhdLDgyOlsyLDI4XSw4MzpbMiwyOF0sODQ6WzIsMjhdLDg1OlsyLDI4XX0sezIzOlsyLDMwXSwzMzpbMiwzMF0sNTQ6WzIsMzBdLDY4OlsyLDMwXSw3MToxMDYsNzI6WzEsMTA3XSw3NTpbMiwzMF19LHsyMzpbMiw5OF0sMzM6WzIsOThdLDU0OlsyLDk4XSw2ODpbMiw5OF0sNzI6WzIsOThdLDc1OlsyLDk4XX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDczOlsxLDEwOF0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezIzOlsyLDQ0XSwzMzpbMiw0NF0sNTQ6WzIsNDRdLDY1OlsyLDQ0XSw2ODpbMiw0NF0sNzI6WzIsNDRdLDc1OlsyLDQ0XSw4MDpbMiw0NF0sODE6WzIsNDRdLDgyOlsyLDQ0XSw4MzpbMiw0NF0sODQ6WzIsNDRdLDg1OlsyLDQ0XSw4NzpbMiw0NF19LHs1NDpbMSwxMDldfSx7NTQ6WzIsODNdLDY1OlsyLDgzXSw3MjpbMiw4M10sODA6WzIsODNdLDgxOlsyLDgzXSw4MjpbMiw4M10sODM6WzIsODNdLDg0OlsyLDgzXSw4NTpbMiw4M119LHs1NDpbMiw4NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE5OlsyLDEzXSwyOTpbMiwxM10sMzQ6WzIsMTNdLDM5OlsyLDEzXSw0NDpbMiwxM10sNDc6WzIsMTNdLDQ4OlsyLDEzXSw1MTpbMiwxM10sNTU6WzIsMTNdLDYwOlsyLDEzXX0sezM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6MTExLDQ2OjExMCw0NzpbMiw3Nl19LHszMzpbMiw3MF0sNDA6MTEyLDY1OlsyLDcwXSw3MjpbMiw3MF0sNzU6WzIsNzBdLDgwOlsyLDcwXSw4MTpbMiw3MF0sODI6WzIsNzBdLDgzOlsyLDcwXSw4NDpbMiw3MF0sODU6WzIsNzBdfSx7NDc6WzIsMThdfSx7NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxOTpbMiwxNF0sMjk6WzIsMTRdLDM0OlsyLDE0XSwzOTpbMiwxNF0sNDQ6WzIsMTRdLDQ3OlsyLDE0XSw0ODpbMiwxNF0sNTE6WzIsMTRdLDU1OlsyLDE0XSw2MDpbMiwxNF19LHszMzpbMSwxMTNdfSx7MzM6WzIsODddLDY1OlsyLDg3XSw3MjpbMiw4N10sODA6WzIsODddLDgxOlsyLDg3XSw4MjpbMiw4N10sODM6WzIsODddLDg0OlsyLDg3XSw4NTpbMiw4N119LHszMzpbMiw4OV19LHsyMDo3NCw2MzoxMTUsNjQ6NzUsNjU6WzEsNDNdLDY3OjExNCw2ODpbMiw5Nl0sNjk6MTE2LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDExN119LHszMjoxMTgsMzM6WzIsNjJdLDc0OjExOSw3NTpbMSwxMjBdfSx7MzM6WzIsNTldLDY1OlsyLDU5XSw3MjpbMiw1OV0sNzU6WzIsNTldLDgwOlsyLDU5XSw4MTpbMiw1OV0sODI6WzIsNTldLDgzOlsyLDU5XSw4NDpbMiw1OV0sODU6WzIsNTldfSx7MzM6WzIsNjFdLDc1OlsyLDYxXX0sezMzOlsyLDY4XSwzNzoxMjEsNzQ6MTIyLDc1OlsxLDEyMF19LHszMzpbMiw2NV0sNjU6WzIsNjVdLDcyOlsyLDY1XSw3NTpbMiw2NV0sODA6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg0OlsyLDY1XSw4NTpbMiw2NV19LHszMzpbMiw2N10sNzU6WzIsNjddfSx7MjM6WzEsMTIzXX0sezIzOlsyLDUxXSw2NTpbMiw1MV0sNzI6WzIsNTFdLDgwOlsyLDUxXSw4MTpbMiw1MV0sODI6WzIsNTFdLDgzOlsyLDUxXSw4NDpbMiw1MV0sODU6WzIsNTFdfSx7MjM6WzIsNTNdfSx7MzM6WzEsMTI0XX0sezMzOlsyLDkxXSw2NTpbMiw5MV0sNzI6WzIsOTFdLDgwOlsyLDkxXSw4MTpbMiw5MV0sODI6WzIsOTFdLDgzOlsyLDkxXSw4NDpbMiw5MV0sODU6WzIsOTFdfSx7MzM6WzIsOTNdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1OlsyLDIyXSwxOTpbMiwyMl0sMjk6WzIsMjJdLDM0OlsyLDIyXSwzOTpbMiwyMl0sNDQ6WzIsMjJdLDQ3OlsyLDIyXSw0ODpbMiwyMl0sNTE6WzIsMjJdLDU1OlsyLDIyXSw2MDpbMiwyMl19LHsyMzpbMiw5OV0sMzM6WzIsOTldLDU0OlsyLDk5XSw2ODpbMiw5OV0sNzI6WzIsOTldLDc1OlsyLDk5XX0sezczOlsxLDEwOF19LHsyMDo3NCw2MzoxMjUsNjQ6NzUsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjNdLDE0OlsyLDIzXSwxNTpbMiwyM10sMTk6WzIsMjNdLDI5OlsyLDIzXSwzNDpbMiwyM10sMzk6WzIsMjNdLDQ0OlsyLDIzXSw0NzpbMiwyM10sNDg6WzIsMjNdLDUxOlsyLDIzXSw1NTpbMiwyM10sNjA6WzIsMjNdfSx7NDc6WzIsMTldfSx7NDc6WzIsNzddfSx7MjA6NzQsMzM6WzIsNzJdLDQxOjEyNiw2MzoxMjcsNjQ6NzUsNjU6WzEsNDNdLDY5OjEyOCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzU6WzIsNzJdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NTpbMiwyNF0sMTQ6WzIsMjRdLDE1OlsyLDI0XSwxOTpbMiwyNF0sMjk6WzIsMjRdLDM0OlsyLDI0XSwzOTpbMiwyNF0sNDQ6WzIsMjRdLDQ3OlsyLDI0XSw0ODpbMiwyNF0sNTE6WzIsMjRdLDU1OlsyLDI0XSw2MDpbMiwyNF19LHs2ODpbMSwxMjldfSx7NjU6WzIsOTVdLDY4OlsyLDk1XSw3MjpbMiw5NV0sODA6WzIsOTVdLDgxOlsyLDk1XSw4MjpbMiw5NV0sODM6WzIsOTVdLDg0OlsyLDk1XSw4NTpbMiw5NV19LHs2ODpbMiw5N119LHs1OlsyLDIxXSwxNDpbMiwyMV0sMTU6WzIsMjFdLDE5OlsyLDIxXSwyOTpbMiwyMV0sMzQ6WzIsMjFdLDM5OlsyLDIxXSw0NDpbMiwyMV0sNDc6WzIsMjFdLDQ4OlsyLDIxXSw1MTpbMiwyMV0sNTU6WzIsMjFdLDYwOlsyLDIxXX0sezMzOlsxLDEzMF19LHszMzpbMiw2M119LHs3MjpbMSwxMzJdLDc2OjEzMX0sezMzOlsxLDEzM119LHszMzpbMiw2OV19LHsxNTpbMiwxMl0sMTg6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM0LDc0OjEzNSw3NTpbMSwxMjBdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM3XSw3NzpbMSwxMzZdfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOF19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU0OlsyLDU1XSw1NjpbMiwyMF0sNjA6WzIsNTddLDczOlsyLDgxXSw4MjpbMiw4NV0sODY6WzIsMThdLDkwOlsyLDg5XSwxMDE6WzIsNTNdLDEwNDpbMiw5M10sMTEwOlsyLDE5XSwxMTE6WzIsNzddLDExNjpbMiw5N10sMTE5OlsyLDYzXSwxMjI6WzIsNjldLDEzNTpbMiw3NV0sMTM2OlsyLDMyXX0sXG5wYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yIChzdHIsIGhhc2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbn0sXG5wYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7XG4gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjtcbiAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHt0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZztcbiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87XG4gICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG59O1xuLyogSmlzb24gZ2VuZXJhdGVkIGxleGVyICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7RU9GOjEsXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmlucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG51bnB1dDpmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcblxuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aC1sZW4tMSk7XG4gICAgICAgIC8vdGhpcy55eWxlbmcgLT0gbGVuO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoLTEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aC0xO1xuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID9cbiAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDpcbiAgICAgICAgICAgICAgdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubGVzczpmdW5jdGlvbiAobikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgIH0sXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcbnVwY29taW5nSW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMC1uZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG5zaG93UG9zaXRpb246ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYytcIl5cIjtcbiAgICB9LFxubmV4dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0b2tlbixcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgdGVtcE1hdGNoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICBsaW5lcztcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aH07XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxpbmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cXG4nK3RoaXMuc2hvd1Bvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0OiBcIlwiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVub30pO1xuICAgICAgICB9XG4gICAgfSxcbmxleDpmdW5jdGlvbiBsZXggKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgfSxcbl9jdXJyZW50UnVsZXM6ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICB9fSk7XG5sZXhlci5vcHRpb25zID0ge307XG5sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUXG4pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlRcbnN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG5jYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImVtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTpyZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAzOnRoaXMuYmVnaW4oJ3JhdycpOyByZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRlKClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25kIHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDUsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjU7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU1O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUxO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NDtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDgwO1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg1O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODI7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgzO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc1O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NztcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59O1xubGV4ZXIucnVsZXMgPSBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXi9dKSkvLC9eKD86XFx7XFx7XFx7XFx7XFwvW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PVs9fVxcc1xcLy5dKVxcfVxcfVxcfVxcfSkvLC9eKD86W15cXHgwMF0rPyg/PShcXHtcXHtcXHtcXHspKSkvLC9eKD86W1xcc1xcU10qPy0tKH4pP1xcfVxcfSkvLC9eKD86XFwoKS8sL14oPzpcXCkpLywvXig/Olxce1xce1xce1xceykvLC9eKD86XFx9XFx9XFx9XFx9KS8sL14oPzpcXHtcXHsofik/PikvLC9eKD86XFx7XFx7KH4pPyM+KS8sL14oPzpcXHtcXHsofik/I1xcKj8pLywvXig/Olxce1xceyh+KT9cXC8pLywvXig/Olxce1xceyh+KT9cXF5cXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXF4pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxcYikvLC9eKD86XFx7XFx7KH4pP1xceykvLC9eKD86XFx7XFx7KH4pPyYpLywvXig/Olxce1xceyh+KT8hLS0pLywvXig/Olxce1xceyh+KT8hW1xcc1xcU10qP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcKj8pLywvXig/Oj0pLywvXig/OlxcLlxcLikvLC9eKD86XFwuKD89KFs9fn1cXHNcXC8uKXxdKSkpLywvXig/OltcXC8uXSkvLC9eKD86XFxzKykvLC9eKD86XFx9KH4pP1xcfVxcfSkvLC9eKD86KH4pP1xcfVxcfSkvLC9eKD86XCIoXFxcXFtcIl18W15cIl0pKlwiKS8sL14oPzonKFxcXFxbJ118W14nXSkqJykvLC9eKD86QCkvLC9eKD86dHJ1ZSg/PShbfn1cXHMpXSkpKS8sL14oPzpmYWxzZSg/PShbfn1cXHMpXSkpKS8sL14oPzp1bmRlZmluZWQoPz0oW359XFxzKV0pKSkvLC9eKD86bnVsbCg/PShbfn1cXHMpXSkpKS8sL14oPzotP1swLTldKyg/OlxcLlswLTldKyk/KD89KFt+fVxccyldKSkpLywvXig/OmFzXFxzK1xcfCkvLC9eKD86XFx8KS8sL14oPzooW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PShbPX59XFxzXFwvLil8XSkpKSkvLC9eKD86XFxbKFxcXFxcXF18W15cXF1dKSpcXF0pLywvXig/Oi4pLywvXig/OiQpL107XG5sZXhlci5jb25kaXRpb25zID0ge1wibXVcIjp7XCJydWxlc1wiOls3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NF0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJlbXVcIjp7XCJydWxlc1wiOlsyXSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImNvbVwiOntcInJ1bGVzXCI6WzZdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwicmF3XCI6e1wicnVsZXNcIjpbMyw0LDVdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiSU5JVElBTFwiOntcInJ1bGVzXCI6WzAsMSw0NF0sXCJpbmNsdXNpdmVcIjp0cnVlfX07XG5yZXR1cm4gbGV4ZXI7fSkoKVxucGFyc2VyLmxleGVyID0gbGV4ZXI7XG5mdW5jdGlvbiBQYXJzZXIgKCkgeyB0aGlzLnl5ID0ge307IH1QYXJzZXIucHJvdG90eXBlID0gcGFyc2VyO3BhcnNlci5QYXJzZXIgPSBQYXJzZXI7XG5yZXR1cm4gbmV3IFBhcnNlcjtcbn0pKCk7ZXhwb3J0IGRlZmF1bHQgaGFuZGxlYmFycztcbiJdfQ==\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\nfunction Visitor() {\n this.parents = [];\n}\n\nVisitor.prototype = {\n constructor: Visitor,\n mutating: false,\n\n // Visits a given value. If mutating, will replace the value if necessary.\n acceptKey: function acceptKey(node, name) {\n var value = this.accept(node[name]);\n if (this.mutating) {\n // Hacky sanity check: This may have a few false positives for type for the helper\n // methods but will generally do the right thing without a lot of overhead.\n if (value && !Visitor.prototype[value.type]) {\n throw new _exception2['default']('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n }\n node[name] = value;\n }\n },\n\n // Performs an accept operation with added sanity check to ensure\n // required keys are not removed.\n acceptRequired: function acceptRequired(node, name) {\n this.acceptKey(node, name);\n\n if (!node[name]) {\n throw new _exception2['default'](node.type + ' requires ' + name);\n }\n },\n\n // Traverses a given array. If mutating, empty respnses will be removed\n // for child elements.\n acceptArray: function acceptArray(array) {\n for (var i = 0, l = array.length; i < l; i++) {\n this.acceptKey(array, i);\n\n if (!array[i]) {\n array.splice(i, 1);\n i--;\n l--;\n }\n }\n },\n\n accept: function accept(object) {\n if (!object) {\n return;\n }\n\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new _exception2['default']('Unknown type: ' + object.type, object);\n }\n\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n\n var ret = this[object.type](object);\n\n this.current = this.parents.shift();\n\n if (!this.mutating || ret) {\n return ret;\n } else if (ret !== false) {\n return object;\n }\n },\n\n Program: function Program(program) {\n this.acceptArray(program.body);\n },\n\n MustacheStatement: visitSubExpression,\n Decorator: visitSubExpression,\n\n BlockStatement: visitBlock,\n DecoratorBlock: visitBlock,\n\n PartialStatement: visitPartial,\n PartialBlockStatement: function PartialBlockStatement(partial) {\n visitPartial.call(this, partial);\n\n this.acceptKey(partial, 'program');\n },\n\n ContentStatement: function ContentStatement() /* content */{},\n CommentStatement: function CommentStatement() /* comment */{},\n\n SubExpression: visitSubExpression,\n\n PathExpression: function PathExpression() /* path */{},\n\n StringLiteral: function StringLiteral() /* string */{},\n NumberLiteral: function NumberLiteral() /* number */{},\n BooleanLiteral: function BooleanLiteral() /* bool */{},\n UndefinedLiteral: function UndefinedLiteral() /* literal */{},\n NullLiteral: function NullLiteral() /* literal */{},\n\n Hash: function Hash(hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function HashPair(pair) {\n this.acceptRequired(pair, 'value');\n }\n};\n\nfunction visitSubExpression(mustache) {\n this.acceptRequired(mustache, 'path');\n this.acceptArray(mustache.params);\n this.acceptKey(mustache, 'hash');\n}\nfunction visitBlock(block) {\n visitSubExpression.call(this, block);\n\n this.acceptKey(block, 'program');\n this.acceptKey(block, 'inverse');\n}\nfunction visitPartial(partial) {\n this.acceptRequired(partial, 'name');\n this.acceptArray(partial.params);\n this.acceptKey(partial, 'hash');\n}\n\nexports['default'] = Visitor;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztBQUVwQyxTQUFTLE9BQU8sR0FBRztBQUNqQixNQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztDQUNuQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGFBQVcsRUFBRSxPQUFPO0FBQ3BCLFVBQVEsRUFBRSxLQUFLOzs7QUFHZixXQUFTLEVBQUUsbUJBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7O0FBR2pCLFVBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsY0FBTSwyQkFDSix3QkFBd0IsR0FDdEIsS0FBSyxDQUFDLElBQUksR0FDVix5QkFBeUIsR0FDekIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLENBQUMsSUFBSSxDQUNaLENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDcEI7R0FDRjs7OztBQUlELGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNuQyxRQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFM0IsUUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNmLFlBQU0sMkJBQWMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDdEQ7R0FDRjs7OztBQUlELGFBQVcsRUFBRSxxQkFBUyxLQUFLLEVBQUU7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxVQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFekIsVUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNiLGFBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25CLFNBQUMsRUFBRSxDQUFDO0FBQ0osU0FBQyxFQUFFLENBQUM7T0FDTDtLQUNGO0dBQ0Y7O0FBRUQsUUFBTSxFQUFFLGdCQUFTLE1BQU0sRUFBRTtBQUN2QixRQUFJLENBQUMsTUFBTSxFQUFFO0FBQ1gsYUFBTztLQUNSOzs7QUFHRCxRQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0QixZQUFNLDJCQUFjLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0Q7O0FBRUQsUUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2hCLFVBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQztBQUNELFFBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDOztBQUV0QixRQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUVwQyxRQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7O0FBRXBDLFFBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsRUFBRTtBQUN6QixhQUFPLEdBQUcsQ0FBQztLQUNaLE1BQU0sSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFO0FBQ3hCLGFBQU8sTUFBTSxDQUFDO0tBQ2Y7R0FDRjs7QUFFRCxTQUFPLEVBQUUsaUJBQVMsT0FBTyxFQUFFO0FBQ3pCLFFBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQ2hDOztBQUVELG1CQUFpQixFQUFFLGtCQUFrQjtBQUNyQyxXQUFTLEVBQUUsa0JBQWtCOztBQUU3QixnQkFBYyxFQUFFLFVBQVU7QUFDMUIsZ0JBQWMsRUFBRSxVQUFVOztBQUUxQixrQkFBZ0IsRUFBRSxZQUFZO0FBQzlCLHVCQUFxQixFQUFFLCtCQUFTLE9BQU8sRUFBRTtBQUN2QyxnQkFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRWpDLFFBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3BDOztBQUVELGtCQUFnQixFQUFFLHlDQUF3QixFQUFFO0FBQzVDLGtCQUFnQixFQUFFLHlDQUF3QixFQUFFOztBQUU1QyxlQUFhLEVBQUUsa0JBQWtCOztBQUVqQyxnQkFBYyxFQUFFLG9DQUFxQixFQUFFOztBQUV2QyxlQUFhLEVBQUUscUNBQXVCLEVBQUU7QUFDeEMsZUFBYSxFQUFFLHFDQUF1QixFQUFFO0FBQ3hDLGdCQUFjLEVBQUUsb0NBQXFCLEVBQUU7QUFDdkMsa0JBQWdCLEVBQUUseUNBQXdCLEVBQUU7QUFDNUMsYUFBVyxFQUFFLG9DQUF3QixFQUFFOztBQUV2QyxNQUFJLEVBQUUsY0FBUyxJQUFJLEVBQUU7QUFDbkIsUUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDOUI7QUFDRCxVQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLFFBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ3BDO0NBQ0YsQ0FBQzs7QUFFRixTQUFTLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtBQUNwQyxNQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxNQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxNQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUN6QixvQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUM3QixNQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxNQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNqQzs7cUJBRWMsT0FBTyIsImZpbGUiOiJ2aXNpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5mdW5jdGlvbiBWaXNpdG9yKCkge1xuICB0aGlzLnBhcmVudHMgPSBbXTtcbn1cblxuVmlzaXRvci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBWaXNpdG9yLFxuICBtdXRhdGluZzogZmFsc2UsXG5cbiAgLy8gVmlzaXRzIGEgZ2l2ZW4gdmFsdWUuIElmIG11dGF0aW5nLCB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIGlmIG5lY2Vzc2FyeS5cbiAgYWNjZXB0S2V5OiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5hY2NlcHQobm9kZVtuYW1lXSk7XG4gICAgaWYgKHRoaXMubXV0YXRpbmcpIHtcbiAgICAgIC8vIEhhY2t5IHNhbml0eSBjaGVjazogVGhpcyBtYXkgaGF2ZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgZm9yIHR5cGUgZm9yIHRoZSBoZWxwZXJcbiAgICAgIC8vIG1ldGhvZHMgYnV0IHdpbGwgZ2VuZXJhbGx5IGRvIHRoZSByaWdodCB0aGluZyB3aXRob3V0IGEgbG90IG9mIG92ZXJoZWFkLlxuICAgICAgaWYgKHZhbHVlICYmICFWaXNpdG9yLnByb3RvdHlwZVt2YWx1ZS50eXBlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAgICdVbmV4cGVjdGVkIG5vZGUgdHlwZSBcIicgK1xuICAgICAgICAgICAgdmFsdWUudHlwZSArXG4gICAgICAgICAgICAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArXG4gICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICcgb24gJyArXG4gICAgICAgICAgICBub2RlLnR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gUGVyZm9ybXMgYW4gYWNjZXB0IG9wZXJhdGlvbiB3aXRoIGFkZGVkIHNhbml0eSBjaGVjayB0byBlbnN1cmVcbiAgLy8gcmVxdWlyZWQga2V5cyBhcmUgbm90IHJlbW92ZWQuXG4gIGFjY2VwdFJlcXVpcmVkOiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgdGhpcy5hY2NlcHRLZXkobm9kZSwgbmFtZSk7XG5cbiAgICBpZiAoIW5vZGVbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGluZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkXG4gIC8vIGZvciBjaGlsZCBlbGVtZW50cy5cbiAgYWNjZXB0QXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTtcblxuICAgICAgaWYgKCFhcnJheVtpXSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGktLTtcbiAgICAgICAgbC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW29iamVjdC50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlOiAnICsgb2JqZWN0LnR5cGUsIG9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgdGhpcy5wYXJlbnRzLnVuc2hpZnQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50ID0gb2JqZWN0O1xuXG4gICAgbGV0IHJldCA9IHRoaXNbb2JqZWN0LnR5cGVdKG9iamVjdCk7XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnBhcmVudHMuc2hpZnQoKTtcblxuICAgIGlmICghdGhpcy5tdXRhdGluZyB8fCByZXQpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBlbHNlIGlmIChyZXQgIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShwcm9ncmFtLmJvZHkpO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiB2aXNpdFN1YkV4cHJlc3Npb24sXG4gIERlY29yYXRvcjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIEJsb2NrU3RhdGVtZW50OiB2aXNpdEJsb2NrLFxuICBEZWNvcmF0b3JCbG9jazogdmlzaXRCbG9jayxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiB2aXNpdFBhcnRpYWwsXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHZpc2l0UGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwpO1xuXG4gICAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ3Byb2dyYW0nKTtcbiAgfSxcblxuICBDb250ZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb250ZW50ICovKSB7fSxcbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29tbWVudCAqLykge30sXG5cbiAgU3ViRXhwcmVzc2lvbjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbigvKiBwYXRoICovKSB7fSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbigvKiBzdHJpbmcgKi8pIHt9LFxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbigvKiBudW1iZXIgKi8pIHt9LFxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oLyogYm9vbCAqLykge30sXG4gIFVuZGVmaW5lZExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkoaGFzaC5wYWlycyk7XG4gIH0sXG4gIEhhc2hQYWlyOiBmdW5jdGlvbihwYWlyKSB7XG4gICAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYWlyLCAndmFsdWUnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdmlzaXRTdWJFeHByZXNzaW9uKG11c3RhY2hlKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQobXVzdGFjaGUsICdwYXRoJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkobXVzdGFjaGUucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkobXVzdGFjaGUsICdoYXNoJyk7XG59XG5mdW5jdGlvbiB2aXNpdEJsb2NrKGJsb2NrKSB7XG4gIHZpc2l0U3ViRXhwcmVzc2lvbi5jYWxsKHRoaXMsIGJsb2NrKTtcblxuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ3Byb2dyYW0nKTtcbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdpbnZlcnNlJyk7XG59XG5mdW5jdGlvbiB2aXNpdFBhcnRpYWwocGFydGlhbCkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhcnRpYWwsICduYW1lJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkocGFydGlhbC5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAnaGFzaCcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaXNpdG9yO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _visitor = require('./visitor');\n\nvar _visitor2 = _interopRequireDefault(_visitor);\n\nfunction WhitespaceControl() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n this.options = options;\n}\nWhitespaceControl.prototype = new _visitor2['default']();\n\nWhitespaceControl.prototype.Program = function (program) {\n var doStandalone = !this.options.ignoreStandalone;\n\n var isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n\n var body = program.body;\n for (var i = 0, l = body.length; i < l; i++) {\n var current = body[i],\n strip = this.accept(current);\n\n if (!strip) {\n continue;\n }\n\n var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n if (strip.close) {\n omitRight(body, i, true);\n }\n if (strip.open) {\n omitLeft(body, i, true);\n }\n\n if (doStandalone && inlineStandalone) {\n omitRight(body, i);\n\n if (omitLeft(body, i)) {\n // If we are on a standalone node, save the indent info for partials\n if (current.type === 'PartialStatement') {\n // Pull out the whitespace from the final line\n current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n }\n }\n }\n if (doStandalone && openStandalone) {\n omitRight((current.program || current.inverse).body);\n\n // Strip out the previous content node if it's whitespace only\n omitLeft(body, i);\n }\n if (doStandalone && closeStandalone) {\n // Always strip the next node\n omitRight(body, i);\n\n omitLeft((current.inverse || current.program).body);\n }\n }\n\n return program;\n};\n\nWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n this.accept(block.program);\n this.accept(block.inverse);\n\n // Find the inverse program that is involed with whitespace stripping.\n var program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n\n if (inverse && inverse.chained) {\n firstInverse = inverse.body[0].program;\n\n // Walk the inverse chain to find the last inverse that is actually in the chain.\n while (lastInverse.chained) {\n lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n }\n }\n\n var strip = {\n open: block.openStrip.open,\n close: block.closeStrip.close,\n\n // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n // so our parent can determine if we actually are standalone\n openStandalone: isNextWhitespace(program.body),\n closeStandalone: isPrevWhitespace((firstInverse || program).body)\n };\n\n if (block.openStrip.close) {\n omitRight(program.body, null, true);\n }\n\n if (inverse) {\n var inverseStrip = block.inverseStrip;\n\n if (inverseStrip.open) {\n omitLeft(program.body, null, true);\n }\n\n if (inverseStrip.close) {\n omitRight(firstInverse.body, null, true);\n }\n if (block.closeStrip.open) {\n omitLeft(lastInverse.body, null, true);\n }\n\n // Find standalone else statments\n if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n\n return strip;\n};\n\nWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n return mustache.strip;\n};\n\nWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n /* istanbul ignore next */\n var strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n};\n\nfunction isPrevWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = body.length;\n }\n\n // Nodes that end with newlines are considered whitespace (but are special\n // cased for strip operations)\n var prev = body[i - 1],\n sibling = body[i - 2];\n if (!prev) {\n return isRoot;\n }\n\n if (prev.type === 'ContentStatement') {\n return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n }\n}\nfunction isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n\n var next = body[i + 1],\n sibling = body[i + 2];\n if (!next) {\n return isRoot;\n }\n\n if (next.type === 'ContentStatement') {\n return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n }\n}\n\n// Marks the node to the right of the position as omitted.\n// I.e. {{foo}}' ' will mark the ' ' node as omitted.\n//\n// If i is undefined, then the first child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitRight(body, i, multiple) {\n var current = body[i == null ? 0 : i + 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n return;\n }\n\n var original = current.value;\n current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n current.rightStripped = current.value !== original;\n}\n\n// Marks the node to the left of the position as omitted.\n// I.e. ' '{{foo}} will mark the ' ' node as omitted.\n//\n// If i is undefined then the last child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitLeft(body, i, multiple) {\n var current = body[i == null ? body.length - 1 : i - 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n return;\n }\n\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n var original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n}\n\nexports['default'] = WhitespaceControl;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3VCQUFvQixXQUFXOzs7O0FBRS9CLFNBQVMsaUJBQWlCLEdBQWU7TUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLE1BQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3hCO0FBQ0QsaUJBQWlCLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRTVDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDdEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUVwRCxNQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLE1BQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUUvQixRQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsZUFBUztLQUNWOztBQUVELFFBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDdkQsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckQsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCO1FBQzFE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QUFDLE9BQU8sSUFDUixPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUNsQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxBQUFDLEVBQ25DO0FBQ0EsV0FBTztHQUNSOzs7QUFHRCxNQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLFNBQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsU0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxTQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7Q0FDN0I7O3FCQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgX2lzTmV4dFdoaXRlc3BhY2UgPSBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgY2xvc2VTdGFuZGFsb25lID0gc3RyaXAuY2xvc2VTdGFuZGFsb25lICYmIF9pc05leHRXaGl0ZXNwYWNlLFxuICAgICAgaW5saW5lU3RhbmRhbG9uZSA9XG4gICAgICAgIHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gLyhbIFxcdF0rJCkvLmV4ZWMoYm9keVtpIC0gMV0ub3JpZ2luYWwpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3BlblN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodCgoY3VycmVudC5wcm9ncmFtIHx8IGN1cnJlbnQuaW52ZXJzZSkuYm9keSk7XG5cbiAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5XG4gICAgICBvbWl0TGVmdChib2R5LCBpKTtcbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgYmxvY2tcbikge1xuICB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG5cbiAgLy8gRmluZCB0aGUgaW52ZXJzZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLlxuICBsZXQgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2suaW52ZXJzZSxcbiAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsXG4gICAgbGFzdEludmVyc2UgPSBpbnZlcnNlO1xuXG4gIGlmIChpbnZlcnNlICYmIGludmVyc2UuY2hhaW5lZCkge1xuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtO1xuXG4gICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2UgdGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uXG4gICAgd2hpbGUgKGxhc3RJbnZlcnNlLmNoYWluZWQpIHtcbiAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxlbmd0aCAtIDFdLnByb2dyYW07XG4gICAgfVxuICB9XG5cbiAgbGV0IHN0cmlwID0ge1xuICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBibG9jay5jbG9zZVN0cmlwLmNsb3NlLFxuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFuZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3NzaWJseSBzdGFuZGFsb25lXG4gICAgLy8gc28gb3VyIHBhcmVudCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lXG4gICAgb3BlblN0YW5kYWxvbmU6IGlzTmV4dFdoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSxcbiAgICBjbG9zZVN0YW5kYWxvbmU6IGlzUHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KVxuICB9O1xuXG4gIGlmIChibG9jay5vcGVuU3RyaXAuY2xvc2UpIHtcbiAgICBvbWl0UmlnaHQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpbnZlcnNlKSB7XG4gICAgbGV0IGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDtcblxuICAgIGlmIChpbnZlcnNlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChsYXN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBzdGF0bWVudHNcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmUgJiZcbiAgICAgIGlzUHJldldoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSAmJlxuICAgICAgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSlcbiAgICApIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKFxuICBtdXN0YWNoZVxuKSB7XG4gIHJldHVybiBtdXN0YWNoZS5zdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgbm9kZVxuKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSBib2R5Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsXG4gIC8vIGNhc2VkIGZvciBzdHJpcCBvcGVyYXRpb25zKVxuICBsZXQgcHJldiA9IGJvZHlbaSAtIDFdLFxuICAgIHNpYmxpbmcgPSBib2R5W2kgLSAyXTtcbiAgaWYgKCFwcmV2KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChwcmV2LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gL1xccj9cXG5cXHMqPyQvIDogLyhefFxccj9cXG4pXFxzKj8kLykudGVzdChcbiAgICAgIHByZXYub3JpZ2luYWxcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/IC9eXFxzKj9cXHI/XFxuLyA6IC9eXFxzKj8oXFxyP1xcbnwkKS8pLnRlc3QoXG4gICAgICBuZXh0Lm9yaWdpbmFsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIHBvc2l0aW9uIGFzIG9taXR0ZWQuXG4vLyBJLmUuIHt7Zm9vfX0nICcgd2lsbCBtYXJrIHRoZSAnICcgbm9kZSBhcyBvbWl0dGVkLlxuLy9cbi8vIElmIGkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRSaWdodChib2R5LCBpLCBtdWx0aXBsZSkge1xuICBsZXQgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gMCA6IGkgKyAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShcbiAgICBtdWx0aXBsZSA/IC9eXFxzKy8gOiAvXlsgXFx0XSpcXHI/XFxuPy8sXG4gICAgJydcbiAgKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQubGVmdFN0cmlwcGVkKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBvbWl0IHRoZSBsYXN0IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHkgYW5kIG5vdCBwcmVjZWRlZCBieSBhIG5vbi1jb250ZW50IG5vZGUuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAvXFxzKyQvIDogL1sgXFx0XSskLywgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.SourceLocation = SourceLocation;\nexports.id = id;\nexports.stripFlags = stripFlags;\nexports.stripComment = stripComment;\nexports.preparePath = preparePath;\nexports.prepareMustache = prepareMustache;\nexports.prepareRawBlock = prepareRawBlock;\nexports.prepareBlock = prepareBlock;\nexports.prepareProgram = prepareProgram;\nexports.preparePartialBlock = preparePartialBlock;\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\nfunction validateClose(open, close) {\n close = close.path ? close.path.original : close;\n\n if (open.path.original !== close) {\n var errorNode = { loc: open.path.loc };\n\n throw new _exception2['default'](open.path.original + \" doesn't match \" + close, errorNode);\n }\n}\n\nfunction SourceLocation(source, locInfo) {\n this.source = source;\n this.start = {\n line: locInfo.first_line,\n column: locInfo.first_column\n };\n this.end = {\n line: locInfo.last_line,\n column: locInfo.last_column\n };\n}\n\nfunction id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n}\n\nfunction stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n}\n\nfunction stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n}\n\nfunction preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n\n var original = data ? '@' : '',\n dig = [],\n depth = 0;\n\n for (var i = 0, l = parts.length; i < l; i++) {\n var part = parts[i].part,\n\n // If we have [] syntax then we do not treat path references as operators,\n // i.e. foo.[this] resolves to approximately context.foo['this']\n isLiteral = parts[i].original !== part;\n original += (parts[i].separator || '') + part;\n\n if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n if (dig.length > 0) {\n throw new _exception2['default']('Invalid path: ' + original, { loc: loc });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n\n return {\n type: 'PathExpression',\n data: data,\n depth: depth,\n parts: dig,\n original: original,\n loc: loc\n };\n}\n\nfunction prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n var escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n var decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path: path,\n params: params,\n hash: hash,\n escaped: escaped,\n strip: strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nfunction prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n\n locInfo = this.locInfo(locInfo);\n var program = {\n type: 'Program',\n body: contents,\n strip: {},\n loc: locInfo\n };\n\n return {\n type: 'BlockStatement',\n path: openRawBlock.path,\n params: openRawBlock.params,\n hash: openRawBlock.hash,\n program: program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n}\n\nfunction prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n\n var decorator = /\\*/.test(openBlock.open);\n\n program.blockParams = openBlock.blockParams;\n\n var inverse = undefined,\n inverseStrip = undefined;\n\n if (inverseAndProgram) {\n if (decorator) {\n throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);\n }\n\n if (inverseAndProgram.chain) {\n inverseAndProgram.program.body[0].closeStrip = close.strip;\n }\n\n inverseStrip = inverseAndProgram.strip;\n inverse = inverseAndProgram.program;\n }\n\n if (inverted) {\n inverted = inverse;\n inverse = program;\n program = inverted;\n }\n\n return {\n type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n path: openBlock.path,\n params: openBlock.params,\n hash: openBlock.hash,\n program: program,\n inverse: inverse,\n openStrip: openBlock.strip,\n inverseStrip: inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nfunction prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n var firstLoc = statements[0].loc,\n lastLoc = statements[statements.length - 1].loc;\n\n /* istanbul ignore else */\n if (firstLoc && lastLoc) {\n loc = {\n source: firstLoc.source,\n start: {\n line: firstLoc.start.line,\n column: firstLoc.start.column\n },\n end: {\n line: lastLoc.end.line,\n column: lastLoc.end.column\n }\n };\n }\n }\n\n return {\n type: 'Program',\n body: statements,\n strip: {},\n loc: loc\n };\n}\n\nfunction preparePartialBlock(open, program, close, locInfo) {\n validateClose(open, close);\n\n return {\n type: 'PartialBlockStatement',\n name: open.path,\n params: open.params,\n hash: open.hash,\n program: program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBRXZDLFVBQU0sMkJBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUM5QyxTQUFTLENBQ1YsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzdD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R0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7OztBQUdsRCxRQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDdkIsU0FBRyxHQUFHO0FBQ0osY0FBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ3ZCLGFBQUssRUFBRTtBQUNMLGNBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDekIsZ0JBQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDOUI7QUFDRCxXQUFHLEVBQUU7QUFDSCxjQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3RCLGdCQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQzNCO09BQ0YsQ0FBQztLQUNIO0dBQ0Y7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTO0FBQ2YsUUFBSSxFQUFFLFVBQVU7QUFDaEIsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsR0FBRztHQUNULENBQUM7Q0FDSDs7QUFFTSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRSxlQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUUzQixTQUFPO0FBQ0wsUUFBSSxFQUFFLHVCQUF1QjtBQUM3QixRQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixVQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsUUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDckIsY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBhdGgubG9jIH07XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgb3Blbi5wYXRoLm9yaWdpbmFsICsgXCIgZG9lc24ndCBtYXRjaCBcIiArIGNsb3NlLFxuICAgICAgZXJyb3JOb2RlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LywgJycpLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICBkaWcgPSBbXSxcbiAgICBkZXB0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG4gICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgaXNMaXRlcmFsID0gcGFydHNbaV0ub3JpZ2luYWwgIT09IHBhcnQ7XG4gICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0O1xuXG4gICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicgfHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHtcbiAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2MgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAvXFwqLy50ZXN0KG9wZW4pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3InIDogJ011c3RhY2hlU3RhdGVtZW50JyxcbiAgICBwYXRoLFxuICAgIHBhcmFtcyxcbiAgICBoYXNoLFxuICAgIGVzY2FwZWQsXG4gICAgc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW5SYXdCbG9jaywgY2xvc2UpO1xuXG4gIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7XG4gIGxldCBwcm9ncmFtID0ge1xuICAgIHR5cGU6ICdQcm9ncmFtJyxcbiAgICBib2R5OiBjb250ZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuUmF3QmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDoge30sXG4gICAgaW52ZXJzZVN0cmlwOiB7fSxcbiAgICBjbG9zZVN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVCbG9jayhcbiAgb3BlbkJsb2NrLFxuICBwcm9ncmFtLFxuICBpbnZlcnNlQW5kUHJvZ3JhbSxcbiAgY2xvc2UsXG4gIGludmVydGVkLFxuICBsb2NJbmZvXG4pIHtcbiAgaWYgKGNsb3NlICYmIGNsb3NlLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNsb3NlKG9wZW5CbG9jaywgY2xvc2UpO1xuICB9XG5cbiAgbGV0IGRlY29yYXRvciA9IC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsIGludmVyc2VTdHJpcDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsXG4gICAgICAgIGludmVyc2VBbmRQcm9ncmFtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlQW5kUHJvZ3JhbS5jaGFpbikge1xuICAgICAgaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbS5ib2R5WzBdLmNsb3NlU3RyaXAgPSBjbG9zZS5zdHJpcDtcbiAgICB9XG5cbiAgICBpbnZlcnNlU3RyaXAgPSBpbnZlcnNlQW5kUHJvZ3JhbS5zdHJpcDtcbiAgICBpbnZlcnNlID0gaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbTtcbiAgfVxuXG4gIGlmIChpbnZlcnRlZCkge1xuICAgIGludmVydGVkID0gaW52ZXJzZTtcbiAgICBpbnZlcnNlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtID0gaW52ZXJ0ZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3JCbG9jaycgOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5CbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlbkJsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuQmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIGludmVyc2UsXG4gICAgb3BlblN0cmlwOiBvcGVuQmxvY2suc3RyaXAsXG4gICAgaW52ZXJzZVN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUHJvZ3JhbShzdGF0ZW1lbnRzLCBsb2MpIHtcbiAgaWYgKCFsb2MgJiYgc3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdExvYyA9IHN0YXRlbWVudHNbMF0ubG9jLFxuICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFydGlhbEJsb2NrKG9wZW4sIHByb2dyYW0sIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhcnRpYWxCbG9ja1N0YXRlbWVudCcsXG4gICAgbmFtZTogb3Blbi5wYXRoLFxuICAgIHBhcmFtczogb3Blbi5wYXJhbXMsXG4gICAgaGFzaDogb3Blbi5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiBvcGVuLnN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.parseWithoutProcessing = parseWithoutProcessing;\nexports.parse = parse;\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\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _parser = require('./parser');\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _whitespaceControl = require('./whitespace-control');\n\nvar _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);\n\nvar _helpers = require('./helpers');\n\nvar Helpers = _interopRequireWildcard(_helpers);\n\nvar _utils = require('../utils');\n\nexports.parser = _parser2['default'];\n\nvar yy = {};\n_utils.extend(yy, Helpers);\n\nfunction parseWithoutProcessing(input, options) {\n // Just return if an already-compiled AST was passed in.\n if (input.type === 'Program') {\n return input;\n }\n\n _parser2['default'].yy = yy;\n\n // Altering the shared object here, but this is ok as parser is a sync operation\n yy.locInfo = function (locInfo) {\n return new yy.SourceLocation(options && options.srcName, locInfo);\n };\n\n var ast = _parser2['default'].parse(input);\n\n return ast;\n}\n\nfunction parse(input, options) {\n var ast = parseWithoutProcessing(input, options);\n var strip = new _whitespaceControl2['default'](options);\n\n return strip.accept(ast);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztzQkFBbUIsVUFBVTs7OztpQ0FDQyxzQkFBc0I7Ozs7dUJBQzNCLFdBQVc7O0lBQXhCLE9BQU87O3FCQUNJLFVBQVU7O1FBRXhCLE1BQU07O0FBRWYsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osY0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRWIsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUVyRCxNQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzVCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRUQsc0JBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsSUFBRSxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixXQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNuRSxDQUFDOztBQUVGLE1BQUksR0FBRyxHQUFHLG9CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFOUIsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLE1BQUksR0FBRyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRCxNQUFJLEtBQUssR0FBRyxtQ0FBc0IsT0FBTyxDQUFDLENBQUM7O0FBRTNDLFNBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJiYXNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhcnNlciBmcm9tICcuL3BhcnNlcic7XG5pbXBvcnQgV2hpdGVzcGFjZUNvbnRyb2wgZnJvbSAnLi93aGl0ZXNwYWNlLWNvbnRyb2wnO1xuaW1wb3J0ICogYXMgSGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgeyBwYXJzZXIgfTtcblxubGV0IHl5ID0ge307XG5leHRlbmQoeXksIEhlbHBlcnMpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXaXRob3V0UHJvY2Vzc2luZyhpbnB1dCwgb3B0aW9ucykge1xuICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLlxuICBpZiAoaW5wdXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcGFyc2VyLnl5ID0geXk7XG5cbiAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmplY3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb25cbiAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uKGxvY0luZm8pIHtcbiAgICByZXR1cm4gbmV3IHl5LlNvdXJjZUxvY2F0aW9uKG9wdGlvbnMgJiYgb3B0aW9ucy5zcmNOYW1lLCBsb2NJbmZvKTtcbiAgfTtcblxuICBsZXQgYXN0ID0gcGFyc2VyLnBhcnNlKGlucHV0KTtcblxuICByZXR1cm4gYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgbGV0IGFzdCA9IHBhcnNlV2l0aG91dFByb2Nlc3NpbmcoaW5wdXQsIG9wdGlvbnMpO1xuICBsZXQgc3RyaXAgPSBuZXcgV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHN0cmlwLmFjY2VwdChhc3QpO1xufVxuIl19\n","/* eslint-disable new-cap */\n\n'use strict';\n\nexports.__esModule = true;\nexports.Compiler = Compiler;\nexports.precompile = precompile;\nexports.compile = compile;\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\nvar _utils = require('../utils');\n\nvar _ast = require('./ast');\n\nvar _ast2 = _interopRequireDefault(_ast);\n\nvar slice = [].slice;\n\nfunction Compiler() {}\n\n// the foundHelper register will disambiguate helper lookup from finding a\n// function in a context. This is necessary for mustache compatibility, which\n// requires that context functions in blocks are evaluated by blockHelperMissing,\n// and then proceed as if the resulting value was provided to blockHelperMissing.\n\nCompiler.prototype = {\n compiler: Compiler,\n\n equals: function equals(other) {\n var len = this.opcodes.length;\n if (other.opcodes.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var opcode = this.opcodes[i],\n otherOpcode = other.opcodes[i];\n if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {\n return false;\n }\n }\n\n // We know that length is the same between the two arrays because they are directly tied\n // to the opcode behavior above.\n len = this.children.length;\n for (var i = 0; i < len; i++) {\n if (!this.children[i].equals(other.children[i])) {\n return false;\n }\n }\n\n return true;\n },\n\n guid: 0,\n\n compile: function compile(program, options) {\n this.sourceNode = [];\n this.opcodes = [];\n this.children = [];\n this.options = options;\n this.stringParams = options.stringParams;\n this.trackIds = options.trackIds;\n\n options.blockParams = options.blockParams || [];\n\n options.knownHelpers = _utils.extend(Object.create(null), {\n helperMissing: true,\n blockHelperMissing: true,\n each: true,\n 'if': true,\n unless: true,\n 'with': true,\n log: true,\n lookup: true\n }, options.knownHelpers);\n\n return this.accept(program);\n },\n\n compileProgram: function compileProgram(program) {\n var childCompiler = new this.compiler(),\n // eslint-disable-line new-cap\n result = childCompiler.compile(program, this.options),\n guid = this.guid++;\n\n this.usePartial = this.usePartial || result.usePartial;\n\n this.children[guid] = result;\n this.useDepths = this.useDepths || result.useDepths;\n\n return guid;\n },\n\n accept: function accept(node) {\n /* istanbul ignore next: Sanity code */\n if (!this[node.type]) {\n throw new _exception2['default']('Unknown type: ' + node.type, node);\n }\n\n this.sourceNode.unshift(node);\n var ret = this[node.type](node);\n this.sourceNode.shift();\n return ret;\n },\n\n Program: function Program(program) {\n this.options.blockParams.unshift(program.blockParams);\n\n var body = program.body,\n bodyLength = body.length;\n for (var i = 0; i < bodyLength; i++) {\n this.accept(body[i]);\n }\n\n this.options.blockParams.shift();\n\n this.isSimple = bodyLength === 1;\n this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\n return this;\n },\n\n BlockStatement: function BlockStatement(block) {\n transformLiteralToPath(block);\n\n var program = block.program,\n inverse = block.inverse;\n\n program = program && this.compileProgram(program);\n inverse = inverse && this.compileProgram(inverse);\n\n var type = this.classifySexpr(block);\n\n if (type === 'helper') {\n this.helperSexpr(block, program, inverse);\n } else if (type === 'simple') {\n this.simpleSexpr(block);\n\n // now that the simple mustache is resolved, we need to\n // evaluate it by executing `blockHelperMissing`\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n this.opcode('emptyHash');\n this.opcode('blockValue', block.path.original);\n } else {\n this.ambiguousSexpr(block, program, inverse);\n\n // now that the simple mustache is resolved, we need to\n // evaluate it by executing `blockHelperMissing`\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n this.opcode('emptyHash');\n this.opcode('ambiguousBlockValue');\n }\n\n this.opcode('append');\n },\n\n DecoratorBlock: function DecoratorBlock(decorator) {\n var program = decorator.program && this.compileProgram(decorator.program);\n var params = this.setupFullMustacheParams(decorator, program, undefined),\n path = decorator.path;\n\n this.useDecorators = true;\n this.opcode('registerDecorator', params.length, path.original);\n },\n\n PartialStatement: function PartialStatement(partial) {\n this.usePartial = true;\n\n var program = partial.program;\n if (program) {\n program = this.compileProgram(partial.program);\n }\n\n var params = partial.params;\n if (params.length > 1) {\n throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);\n } else if (!params.length) {\n if (this.options.explicitPartialContext) {\n this.opcode('pushLiteral', 'undefined');\n } else {\n params.push({ type: 'PathExpression', parts: [], depth: 0 });\n }\n }\n\n var partialName = partial.name.original,\n isDynamic = partial.name.type === 'SubExpression';\n if (isDynamic) {\n this.accept(partial.name);\n }\n\n this.setupFullMustacheParams(partial, program, undefined, true);\n\n var indent = partial.indent || '';\n if (this.options.preventIndent && indent) {\n this.opcode('appendContent', indent);\n indent = '';\n }\n\n this.opcode('invokePartial', isDynamic, partialName, indent);\n this.opcode('append');\n },\n PartialBlockStatement: function PartialBlockStatement(partialBlock) {\n this.PartialStatement(partialBlock);\n },\n\n MustacheStatement: function MustacheStatement(mustache) {\n this.SubExpression(mustache);\n\n if (mustache.escaped && !this.options.noEscape) {\n this.opcode('appendEscaped');\n } else {\n this.opcode('append');\n }\n },\n Decorator: function Decorator(decorator) {\n this.DecoratorBlock(decorator);\n },\n\n ContentStatement: function ContentStatement(content) {\n if (content.value) {\n this.opcode('appendContent', content.value);\n }\n },\n\n CommentStatement: function CommentStatement() {},\n\n SubExpression: function SubExpression(sexpr) {\n transformLiteralToPath(sexpr);\n var type = this.classifySexpr(sexpr);\n\n if (type === 'simple') {\n this.simpleSexpr(sexpr);\n } else if (type === 'helper') {\n this.helperSexpr(sexpr);\n } else {\n this.ambiguousSexpr(sexpr);\n }\n },\n ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {\n var path = sexpr.path,\n name = path.parts[0],\n isBlock = program != null || inverse != null;\n\n this.opcode('getContext', path.depth);\n\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n\n path.strict = true;\n this.accept(path);\n\n this.opcode('invokeAmbiguous', name, isBlock);\n },\n\n simpleSexpr: function simpleSexpr(sexpr) {\n var path = sexpr.path;\n path.strict = true;\n this.accept(path);\n this.opcode('resolvePossibleLambda');\n },\n\n helperSexpr: function helperSexpr(sexpr, program, inverse) {\n var params = this.setupFullMustacheParams(sexpr, program, inverse),\n path = sexpr.path,\n name = path.parts[0];\n\n if (this.options.knownHelpers[name]) {\n this.opcode('invokeKnownHelper', params.length, name);\n } else if (this.options.knownHelpersOnly) {\n throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);\n } else {\n path.strict = true;\n path.falsy = true;\n\n this.accept(path);\n this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));\n }\n },\n\n PathExpression: function PathExpression(path) {\n this.addDepth(path.depth);\n this.opcode('getContext', path.depth);\n\n var name = path.parts[0],\n scoped = _ast2['default'].helpers.scopedId(path),\n blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\n if (blockParamId) {\n this.opcode('lookupBlockParam', blockParamId, path.parts);\n } else if (!name) {\n // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n this.opcode('pushContext');\n } else if (path.data) {\n this.options.data = true;\n this.opcode('lookupData', path.depth, path.parts, path.strict);\n } else {\n this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);\n }\n },\n\n StringLiteral: function StringLiteral(string) {\n this.opcode('pushString', string.value);\n },\n\n NumberLiteral: function NumberLiteral(number) {\n this.opcode('pushLiteral', number.value);\n },\n\n BooleanLiteral: function BooleanLiteral(bool) {\n this.opcode('pushLiteral', bool.value);\n },\n\n UndefinedLiteral: function UndefinedLiteral() {\n this.opcode('pushLiteral', 'undefined');\n },\n\n NullLiteral: function NullLiteral() {\n this.opcode('pushLiteral', 'null');\n },\n\n Hash: function Hash(hash) {\n var pairs = hash.pairs,\n i = 0,\n l = pairs.length;\n\n this.opcode('pushHash');\n\n for (; i < l; i++) {\n this.pushParam(pairs[i].value);\n }\n while (i--) {\n this.opcode('assignToHash', pairs[i].key);\n }\n this.opcode('popHash');\n },\n\n // HELPERS\n opcode: function opcode(name) {\n this.opcodes.push({\n opcode: name,\n args: slice.call(arguments, 1),\n loc: this.sourceNode[0].loc\n });\n },\n\n addDepth: function addDepth(depth) {\n if (!depth) {\n return;\n }\n\n this.useDepths = true;\n },\n\n classifySexpr: function classifySexpr(sexpr) {\n var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);\n\n var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\n // a mustache is an eligible helper if:\n // * its id is simple (a single part, not `this` or `..`)\n var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);\n\n // if a mustache is an eligible helper but not a definite\n // helper, it is ambiguous, and will be resolved in a later\n // pass or at runtime.\n var isEligible = !isBlockParam && (isHelper || isSimple);\n\n // if ambiguous, we can possibly resolve the ambiguity now\n // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n if (isEligible && !isHelper) {\n var _name = sexpr.path.parts[0],\n options = this.options;\n if (options.knownHelpers[_name]) {\n isHelper = true;\n } else if (options.knownHelpersOnly) {\n isEligible = false;\n }\n }\n\n if (isHelper) {\n return 'helper';\n } else if (isEligible) {\n return 'ambiguous';\n } else {\n return 'simple';\n }\n },\n\n pushParams: function pushParams(params) {\n for (var i = 0, l = params.length; i < l; i++) {\n this.pushParam(params[i]);\n }\n },\n\n pushParam: function pushParam(val) {\n var value = val.value != null ? val.value : val.original || '';\n\n if (this.stringParams) {\n if (value.replace) {\n value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n }\n\n if (val.depth) {\n this.addDepth(val.depth);\n }\n this.opcode('getContext', val.depth || 0);\n this.opcode('pushStringParam', value, val.type);\n\n if (val.type === 'SubExpression') {\n // SubExpressions get evaluated and passed in\n // in string params mode.\n this.accept(val);\n }\n } else {\n if (this.trackIds) {\n var blockParamIndex = undefined;\n if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {\n blockParamIndex = this.blockParamIndex(val.parts[0]);\n }\n if (blockParamIndex) {\n var blockParamChild = val.parts.slice(1).join('.');\n this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n } else {\n value = val.original || value;\n if (value.replace) {\n value = value.replace(/^this(?:\\.|$)/, '').replace(/^\\.\\//, '').replace(/^\\.$/, '');\n }\n\n this.opcode('pushId', val.type, value);\n }\n }\n this.accept(val);\n }\n },\n\n setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {\n var params = sexpr.params;\n this.pushParams(params);\n\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n\n if (sexpr.hash) {\n this.accept(sexpr.hash);\n } else {\n this.opcode('emptyHash', omitEmpty);\n }\n\n return params;\n },\n\n blockParamIndex: function blockParamIndex(name) {\n for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {\n var blockParams = this.options.blockParams[depth],\n param = blockParams && _utils.indexOf(blockParams, name);\n if (blockParams && param >= 0) {\n return [depth, param];\n }\n }\n }\n};\n\nfunction precompile(input, options, env) {\n if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);\n }\n\n options = options || {};\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n var ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options);\n return new env.JavaScriptCompiler().compile(environment, options);\n}\n\nfunction compile(input, options, env) {\n if (options === undefined) options = {};\n\n if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);\n }\n\n options = _utils.extend({}, options);\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n var compiled = undefined;\n\n function compileInput() {\n var ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options),\n templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);\n return env.template(templateSpec);\n }\n\n // Template is only compiled on first use and cached after that point.\n function ret(context, execOptions) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled.call(this, context, execOptions);\n }\n ret._setup = function (setupOptions) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled._setup(setupOptions);\n };\n ret._child = function (i, data, blockParams, depths) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled._child(i, data, blockParams, depths);\n };\n return ret;\n}\n\nfunction argEquals(a, b) {\n if (a === b) {\n return true;\n }\n\n if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {\n for (var i = 0; i < a.length; i++) {\n if (!argEquals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n}\n\nfunction transformLiteralToPath(sexpr) {\n if (!sexpr.path.parts) {\n var literal = sexpr.path;\n // Casting to string here to make false and 0 literal values play nicely with the rest\n // of the system.\n sexpr.path = {\n type: 'PathExpression',\n data: false,\n depth: 0,\n parts: [literal.original + ''],\n original: literal.original + '',\n loc: literal.loc\n };\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozt5QkFFc0IsY0FBYzs7OztxQkFDSyxVQUFVOzttQkFDbkMsT0FBTzs7OztBQUV2QixJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVoQixTQUFTLFFBQVEsR0FBRyxFQUFFOzs7Ozs7O0FBTzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsVUFBUSxFQUFFLFFBQVE7O0FBRWxCLFFBQU0sRUFBRSxnQkFBUyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDaEMsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQzFCLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFVBQ0UsTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxJQUNwQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFDekM7QUFDQSxlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7Ozs7QUFJRCxPQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixVQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEs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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxQixlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiO0NBQ0Y7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7QUFDckMsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLFFBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7OztBQUd6QixTQUFLLENBQUMsSUFBSSxHQUFHO0FBQ1gsVUFBSSxFQUFFLGdCQUFnQjtBQUN0QixVQUFJLEVBQUUsS0FBSztBQUNYLFdBQUssRUFBRSxDQUFDO0FBQ1IsV0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDOUIsY0FBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRTtBQUMvQixTQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7S0FDakIsQ0FBQztHQUNIO0NBQ0YiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXksIGluZGV4T2YsIGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgb3Bjb2RlLm9wY29kZSAhPT0gb3RoZXJPcGNvZGUub3Bjb2RlIHx8XG4gICAgICAgICFhcmdFcXVhbHMob3Bjb2RlLmFyZ3MsIG90aGVyT3Bjb2RlLmFyZ3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGtub3cgdGhhdCBsZW5ndGggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IHRpZWRcbiAgICAvLyB0byB0aGUgb3Bjb2RlIGJlaGF2aW9yIGFib3ZlLlxuICAgIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBndWlkOiAwLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHtcbiAgICB0aGlzLnNvdXJjZU5vZGUgPSBbXTtcbiAgICB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IG9wdGlvbnMuc3RyaW5nUGFyYW1zO1xuICAgIHRoaXMudHJhY2tJZHMgPSBvcHRpb25zLnRyYWNrSWRzO1xuXG4gICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9IG9wdGlvbnMuYmxvY2tQYXJhbXMgfHwgW107XG5cbiAgICBvcHRpb25zLmtub3duSGVscGVycyA9IGV4dGVuZChcbiAgICAgIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICB7XG4gICAgICAgIGhlbHBlck1pc3Npbmc6IHRydWUsXG4gICAgICAgIGJsb2NrSGVscGVyTWlzc2luZzogdHJ1ZSxcbiAgICAgICAgZWFjaDogdHJ1ZSxcbiAgICAgICAgaWY6IHRydWUsXG4gICAgICAgIHVubGVzczogdHJ1ZSxcbiAgICAgICAgd2l0aDogdHJ1ZSxcbiAgICAgICAgbG9nOiB0cnVlLFxuICAgICAgICBsb29rdXA6IHRydWVcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmtub3duSGVscGVyc1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5hY2NlcHQocHJvZ3JhbSk7XG4gIH0sXG5cbiAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICBsZXQgY2hpbGRDb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICBndWlkID0gdGhpcy5ndWlkKys7XG5cbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwgcmVzdWx0LnVzZVBhcnRpYWw7XG5cbiAgICB0aGlzLmNoaWxkcmVuW2d1aWRdID0gcmVzdWx0O1xuICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgcmVzdWx0LnVzZURlcHRocztcblxuICAgIHJldHVybiBndWlkO1xuICB9LFxuXG4gIGFjY2VwdDogZnVuY3Rpb24obm9kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tub2RlLnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHR5cGU6ICcgKyBub2RlLnR5cGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlTm9kZS51bnNoaWZ0KG5vZGUpO1xuICAgIGxldCByZXQgPSB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gICAgdGhpcy5zb3VyY2VOb2RlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnVuc2hpZnQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgIGJvZHlMZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0KCk7XG5cbiAgICB0aGlzLmlzU2ltcGxlID0gYm9keUxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gcHJvZ3JhbS5ibG9ja1BhcmFtcyA/IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoIDogMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihibG9jaykge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoYmxvY2spO1xuXG4gICAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICBwYXRoID0gZGVjb3JhdG9yLnBhdGg7XG5cbiAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgIHRoaXMub3Bjb2RlKCdyZWdpc3RlckRlY29yYXRvcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwpO1xuICB9LFxuXG4gIFBhcnRpYWxTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlO1xuXG4gICAgbGV0IHByb2dyYW0gPSBwYXJ0aWFsLnByb2dyYW07XG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBhcnRpYWwucHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IHBhcnRpYWwucGFyYW1zO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBwYXJ0aWFsIGFyZ3VtZW50czogJyArIHBhcmFtcy5sZW5ndGgsXG4gICAgICAgIHBhcnRpYWxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghcGFyYW1zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBsaWNpdFBhcnRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICd1bmRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKHsgdHlwZTogJ1BhdGhFeHByZXNzaW9uJywgcGFydHM6IFtdLCBkZXB0aDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICBpc0R5bmFtaWMgPSBwYXJ0aWFsLm5hbWUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nO1xuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMuYWNjZXB0KHBhcnRpYWwubmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhwYXJ0aWFsLCBwcm9ncmFtLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgbGV0IGluZGVudCA9IHBhcnRpYWwuaW5kZW50IHx8ICcnO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmVudEluZGVudCAmJiBpbmRlbnQpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgaW5kZW50KTtcbiAgICAgIGluZGVudCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VQYXJ0aWFsJywgaXNEeW5hbWljLCBwYXJ0aWFsTmFtZSwgaW5kZW50KTtcbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbEJsb2NrKSB7XG4gICAgdGhpcy5QYXJ0aWFsU3RhdGVtZW50KHBhcnRpYWxCbG9jayk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gICAgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKTtcblxuICAgIGlmIChtdXN0YWNoZS5lc2NhcGVkICYmICF0aGlzLm9wdGlvbnMubm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRFc2NhcGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgICB9XG4gIH0sXG4gIERlY29yYXRvcihkZWNvcmF0b3IpIHtcbiAgICB0aGlzLkRlY29yYXRvckJsb2NrKGRlY29yYXRvcik7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oY29udGVudCkge1xuICAgIGlmIChjb250ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVudCcsIGNvbnRlbnQudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigpIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7XG4gICAgbGV0IHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7XG4gICAgfVxuICB9LFxuICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICBsZXQgcGF0aCA9IHNleHByLnBhdGgsXG4gICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgIGlzQmxvY2sgPSBwcm9ncmFtICE9IG51bGwgfHwgaW52ZXJzZSAhPSBudWxsO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuXG4gICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZUFtYmlndW91cycsIG5hbWUsIGlzQmxvY2spO1xuICB9LFxuXG4gIHNpbXBsZVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBwYXRoID0gc2V4cHIucGF0aDtcbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG4gICAgdGhpcy5vcGNvZGUoJ3Jlc29sdmVQb3NzaWJsZUxhbWJkYScpO1xuICB9LFxuXG4gIGhlbHBlclNleHByOiBmdW5jdGlvbihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSxcbiAgICAgIHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1lvdSBzcGVjaWZpZWQga25vd25IZWxwZXJzT25seSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyICcgKyBuYW1lLFxuICAgICAgICBzZXhwclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoXG4gICAgICAgICdpbnZva2VIZWxwZXInLFxuICAgICAgICBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBwYXRoLm9yaWdpbmFsLFxuICAgICAgICBBU1QuaGVscGVycy5zaW1wbGVJZChwYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICBzY29wZWQgPSBBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSxcbiAgICAgIGJsb2NrUGFyYW1JZCA9ICFwYXRoLmRlcHRoICYmICFzY29wZWQgJiYgdGhpcy5ibG9ja1BhcmFtSW5kZXgobmFtZSk7XG5cbiAgICBpZiAoYmxvY2tQYXJhbUlkKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3IgYHt7Zm9vIC4ufX1gXG4gICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguZGF0YSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKFxuICAgICAgICAnbG9va3VwT25Db250ZXh0JyxcbiAgICAgICAgcGF0aC5wYXJ0cyxcbiAgICAgICAgcGF0aC5mYWxzeSxcbiAgICAgICAgcGF0aC5zdHJpY3QsXG4gICAgICAgIHNjb3BlZFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcudmFsdWUpO1xuICB9LFxuXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIG51bWJlci52YWx1ZSk7XG4gIH0sXG5cbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKGJvb2wpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBib29sLnZhbHVlKTtcbiAgfSxcblxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gIH0sXG5cbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7XG4gIH0sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBpID0gMCxcbiAgICAgIGwgPSBwYWlycy5sZW5ndGg7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTtcblxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYWlyc1tpXS52YWx1ZSk7XG4gICAgfVxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gnLCBwYWlyc1tpXS5rZXkpO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgncG9wSGFzaCcpO1xuICB9LFxuXG4gIC8vIEhFTFBFUlNcbiAgb3Bjb2RlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdGhpcy5vcGNvZGVzLnB1c2goe1xuICAgICAgb3Bjb2RlOiBuYW1lLFxuICAgICAgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgbG9jOiB0aGlzLnNvdXJjZU5vZGVbMF0ubG9jXG4gICAgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICAgIGlzSGVscGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNIZWxwZXIpIHtcbiAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgIHJldHVybiAnYW1iaWd1b3VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdzaW1wbGUnO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2hQYXJhbTogZnVuY3Rpb24odmFsKSB7XG4gICAgbGV0IHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3JpZ2luYWwgfHwgJyc7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpLnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsLmRlcHRoKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwdGgodmFsLmRlcHRoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgdmFsLmRlcHRoIHx8IDApO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmdQYXJhbScsIHZhbHVlLCB2YWwudHlwZSk7XG5cbiAgICAgIGlmICh2YWwudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1YkV4cHJlc3Npb25zIGdldCBldmFsdWF0ZWQgYW5kIHBhc3NlZCBpblxuICAgICAgICAvLyBpbiBzdHJpbmcgcGFyYW1zIG1vZGUuXG4gICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICAgIGxldCBibG9ja1BhcmFtSW5kZXg7XG4gICAgICAgIGlmICh2YWwucGFydHMgJiYgIUFTVC5oZWxwZXJzLnNjb3BlZElkKHZhbCkgJiYgIXZhbC5kZXB0aCkge1xuICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXnRoaXMoPzpcXC58JCkvLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC5cXC8vLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLmxlbmd0aDtcbiAgICAgIGRlcHRoIDwgbGVuO1xuICAgICAgZGVwdGgrK1xuICAgICkge1xuICAgICAgbGV0IGJsb2NrUGFyYW1zID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zW2RlcHRoXSxcbiAgICAgICAgcGFyYW0gPSBibG9ja1BhcmFtcyAmJiBpbmRleE9mKGJsb2NrUGFyYW1zLCBuYW1lKTtcbiAgICAgIGlmIChibG9ja1BhcmFtcyAmJiBwYXJhbSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBbZGVwdGgsIHBhcmFtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYpIHtcbiAgaWYgKFxuICAgIGlucHV0ID09IG51bGwgfHxcbiAgICAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlICE9PSAnUHJvZ3JhbScpXG4gICkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLnByZWNvbXBpbGUuIFlvdSBwYXNzZWQgJyArXG4gICAgICAgIGlucHV0XG4gICAgKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLFxuICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKGlucHV0LCBvcHRpb25zID0ge30sIGVudikge1xuICBpZiAoXG4gICAgaW5wdXQgPT0gbnVsbCB8fFxuICAgICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3NlZCAnICtcbiAgICAgICAgaW5wdXRcbiAgICApO1xuICB9XG5cbiAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGNvbXBpbGVkO1xuXG4gIGZ1bmN0aW9uIGNvbXBpbGVJbnB1dCgpIHtcbiAgICBsZXQgYXN0ID0gZW52LnBhcnNlKGlucHV0LCBvcHRpb25zKSxcbiAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgIHRlbXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICByZXR1cm4gZW52LnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBleGVjT3B0aW9ucykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIGV4ZWNPcHRpb25zKTtcbiAgfVxuICByZXQuX3NldHVwID0gZnVuY3Rpb24oc2V0dXBPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpO1xuICB9O1xuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5fY2hpbGQoaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGFyZ0VxdWFscyhhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFhcmdFcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7XG4gIGlmICghc2V4cHIucGF0aC5wYXJ0cykge1xuICAgIGxldCBsaXRlcmFsID0gc2V4cHIucGF0aDtcbiAgICAvLyBDYXN0aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdFxuICAgIC8vIG9mIHRoZSBzeXN0ZW0uXG4gICAgc2V4cHIucGF0aCA9IHtcbiAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgICBkYXRhOiBmYWxzZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcGFydHM6IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLFxuICAgICAgb3JpZ2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2NcbiAgICB9O1xuICB9XG59XG4iXX0=\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n sourceURL = sourceURL || '';\n\n if (sourceRoot) {\n // This follows what Chrome does.\n if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n sourceRoot += '/';\n }\n // The spec says:\n // Line 4: An optional source root, useful for relocating source\n // files on a server or removing repeated values in the\n // “sources” entry. This value is prepended to the individual\n // entries in the “source” field.\n sourceURL = sourceRoot + sourceURL;\n }\n\n // Historically, SourceMapConsumer did not take the sourceMapURL as\n // a parameter. This mode is still somewhat supported, which is why\n // this code block is conditional. However, it's preferable to pass\n // the source map URL to SourceMapConsumer, so that this function\n // can implement the source URL resolution algorithm as outlined in\n // the spec. This block is basically the equivalent of:\n // new URL(sourceURL, sourceMapURL).toString()\n // ... except it avoids using URL, which wasn't available in the\n // older releases of node still supported by this library.\n //\n // The spec says:\n // If the sources are not absolute URLs after prepending of the\n // “sourceRoot”, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n var parsed = urlParse(sourceMapURL);\n if (!parsed) {\n throw new Error(\"sourceMapURL could not be parsed\");\n }\n if (parsed.path) {\n // Strip the last path component, but keep the \"/\".\n var index = parsed.path.lastIndexOf('/');\n if (index >= 0) {\n parsed.path = parsed.path.substring(0, index + 1);\n }\n }\n sourceURL = join(urlGenerate(parsed), sourceURL);\n }\n\n return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var sourceRelative = sourceFile;\n if (sourceRoot !== null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number is 1-based.\n * - column: Optional. the column number in the original source.\n * The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n needle.source = this._findSourceIndex(needle.source);\n if (needle.source < 0) {\n return [];\n }\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n if (sourceRoot) {\n sourceRoot = util.normalize(sourceRoot);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this._absoluteSources = this._sources.toArray().map(function (s) {\n return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n });\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this._sourceMapURL = aSourceMapURL;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source. Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n if (this._sources.has(relativeSource)) {\n return this._sources.indexOf(relativeSource);\n }\n\n // Maybe aSource is an absolute URL as returned by |sources|. In\n // this case we can't simply undo the transform.\n var i;\n for (i = 0; i < this._absoluteSources.length; ++i) {\n if (this._absoluteSources[i] == aSource) {\n return i;\n }\n }\n\n return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @param String aSourceMapURL\n * The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n smc._sourceMapURL = aSourceMapURL;\n smc._absoluteSources = smc._sources.toArray().map(function (s) {\n return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n });\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._absoluteSources.slice();\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n var index = this._findSourceIndex(aSource);\n if (index >= 0) {\n return this.sourcesContent[index];\n }\n\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + relativeSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n source = this._findSourceIndex(source);\n if (source < 0) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based. \n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = null;\n if (mapping.name) {\n name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n }\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex] || '';\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex] || '';\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n","/* global define, require */\n'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nvar SourceNode = undefined;\n\ntry {\n /* istanbul ignore next */\n if (typeof define !== 'function' || !define.amd) {\n // We don't support this in AMD environments. For these environments, we assume that\n // they are running on the browser and thus have no need for the source-map library.\n var SourceMap = require('source-map');\n SourceNode = SourceMap.SourceNode;\n }\n} catch (err) {}\n/* NOP */\n\n/* istanbul ignore if: tested but not covered in istanbul due to dist build */\nif (!SourceNode) {\n SourceNode = function (line, column, srcFile, chunks) {\n this.src = '';\n if (chunks) {\n this.add(chunks);\n }\n };\n /* istanbul ignore next */\n SourceNode.prototype = {\n add: function add(chunks) {\n if (_utils.isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src += chunks;\n },\n prepend: function prepend(chunks) {\n if (_utils.isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src = chunks + this.src;\n },\n toStringWithSourceMap: function toStringWithSourceMap() {\n return { code: this.toString() };\n },\n toString: function toString() {\n return this.src;\n }\n };\n}\n\nfunction castChunk(chunk, codeGen, loc) {\n if (_utils.isArray(chunk)) {\n var ret = [];\n\n for (var i = 0, len = chunk.length; i < len; i++) {\n ret.push(codeGen.wrap(chunk[i], loc));\n }\n return ret;\n } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n // Handle primitives that the SourceNode will throw up on\n return chunk + '';\n }\n return chunk;\n}\n\nfunction CodeGen(srcFile) {\n this.srcFile = srcFile;\n this.source = [];\n}\n\nCodeGen.prototype = {\n isEmpty: function isEmpty() {\n return !this.source.length;\n },\n prepend: function prepend(source, loc) {\n this.source.unshift(this.wrap(source, loc));\n },\n push: function push(source, loc) {\n this.source.push(this.wrap(source, loc));\n },\n\n merge: function merge() {\n var source = this.empty();\n this.each(function (line) {\n source.add([' ', line, '\\n']);\n });\n return source;\n },\n\n each: function each(iter) {\n for (var i = 0, len = this.source.length; i < len; i++) {\n iter(this.source[i]);\n }\n },\n\n empty: function empty() {\n var loc = this.currentLocation || { start: {} };\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n },\n wrap: function wrap(chunk) {\n var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];\n\n if (chunk instanceof SourceNode) {\n return chunk;\n }\n\n chunk = castChunk(chunk, this, loc);\n\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);\n },\n\n functionCall: function functionCall(fn, type, params) {\n params = this.generateList(params);\n return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n },\n\n quotedString: function quotedString(str) {\n return '\"' + (str + '').replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n .replace(/\\u2029/g, '\\\\u2029') + '\"';\n },\n\n objectLiteral: function objectLiteral(obj) {\n // istanbul ignore next\n\n var _this = this;\n\n var pairs = [];\n\n Object.keys(obj).forEach(function (key) {\n var value = castChunk(obj[key], _this);\n if (value !== 'undefined') {\n pairs.push([_this.quotedString(key), ':', value]);\n }\n });\n\n var ret = this.generateList(pairs);\n ret.prepend('{');\n ret.add('}');\n return ret;\n },\n\n generateList: function generateList(entries) {\n var ret = this.empty();\n\n for (var i = 0, len = entries.length; i < len; i++) {\n if (i) {\n ret.add(',');\n }\n\n ret.add(castChunk(entries[i], this));\n }\n\n return ret;\n },\n\n generateArray: function generateArray(entries) {\n var ret = this.generateList(entries);\n ret.prepend('[');\n ret.add(']');\n\n return ret;\n }\n};\n\nexports['default'] = CodeGen;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUN3QixVQUFVOztBQUVsQyxJQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLElBQUk7O0FBRUYsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGNBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0dBQ25DO0NBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUViOzs7O0FBQUEsQUFHRCxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsWUFBVSxHQUFHLFVBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ25ELFFBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBSSxNQUFNLEVBQUU7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xCO0dBQ0YsQ0FBQzs7QUFFRixZQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLE9BQUcsRUFBRSxhQUFTLE1BQU0sRUFBRTtBQUNwQixVQUFJLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFDbkIsY0FBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDMUI7QUFDRCxVQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNwQjtBQUNELFdBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUU7QUFDeEIsVUFBSSxlQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGNBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztL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QUcsQ0FBQyxDQUFDO0FBQ2pCLE9BQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWIsV0FBTyxHQUFHLENBQUM7R0FDWjtDQUNGLENBQUM7O3FCQUVhLE9BQU8iLCJmaWxlIjoiY29kZS1nZW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgU291cmNlTm9kZTtcblxudHJ5IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicgfHwgIWRlZmluZS5hbWQpIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgaW4gQU1EIGVudmlyb25tZW50cy4gRm9yIHRoZXNlIGVudmlyb25tZW50cywgd2UgYXNzdW1lIHRoYXRcbiAgICAvLyB0aGV5IGFyZSBydW5uaW5nIG9uIHRoZSBicm93c2VyIGFuZCB0aHVzIGhhdmUgbm8gbmVlZCBmb3IgdGhlIHNvdXJjZS1tYXAgbGlicmFyeS5cbiAgICBsZXQgU291cmNlTWFwID0gcmVxdWlyZSgnc291cmNlLW1hcCcpO1xuICAgIFNvdXJjZU5vZGUgPSBTb3VyY2VNYXAuU291cmNlTm9kZTtcbiAgfVxufSBjYXRjaCAoZXJyKSB7XG4gIC8qIE5PUCAqL1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IHRlc3RlZCBidXQgbm90IGNvdmVyZWQgaW4gaXN0YW5idWwgZHVlIHRvIGRpc3QgYnVpbGQgICovXG5pZiAoIVNvdXJjZU5vZGUpIHtcbiAgU291cmNlTm9kZSA9IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbiwgc3JjRmlsZSwgY2h1bmtzKSB7XG4gICAgdGhpcy5zcmMgPSAnJztcbiAgICBpZiAoY2h1bmtzKSB7XG4gICAgICB0aGlzLmFkZChjaHVua3MpO1xuICAgIH1cbiAgfTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgYWRkOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgKz0gY2h1bmtzO1xuICAgIH0sXG4gICAgcHJlcGVuZDogZnVuY3Rpb24oY2h1bmtzKSB7XG4gICAgICBpZiAoaXNBcnJheShjaHVua3MpKSB7XG4gICAgICAgIGNodW5rcyA9IGNodW5rcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3JjID0gY2h1bmtzICsgdGhpcy5zcmM7XG4gICAgfSxcbiAgICB0b1N0cmluZ1dpdGhTb3VyY2VNYXA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY29kZTogdGhpcy50b1N0cmluZygpIH07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXN0Q2h1bmsoY2h1bmssIGNvZGVHZW4sIGxvYykge1xuICBpZiAoaXNBcnJheShjaHVuaykpIHtcbiAgICBsZXQgcmV0ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2h1bmsubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKGNvZGVHZW4ud3JhcChjaHVua1tpXSwgbG9jKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNodW5rID09PSAnbnVtYmVyJykge1xuICAgIC8vIEhhbmRsZSBwcmltaXRpdmVzIHRoYXQgdGhlIFNvdXJjZU5vZGUgd2lsbCB0aHJvdyB1cCBvblxuICAgIHJldHVybiBjaHVuayArICcnO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuZnVuY3Rpb24gQ29kZUdlbihzcmNGaWxlKSB7XG4gIHRoaXMuc3JjRmlsZSA9IHNyY0ZpbGU7XG4gIHRoaXMuc291cmNlID0gW107XG59XG5cbkNvZGVHZW4ucHJvdG90eXBlID0ge1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5zb3VyY2UubGVuZ3RoO1xuICB9LFxuICBwcmVwZW5kOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnVuc2hpZnQodGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG4gIHB1c2g6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jKSB7XG4gICAgdGhpcy5zb3VyY2UucHVzaCh0aGlzLndyYXAoc291cmNlLCBsb2MpKTtcbiAgfSxcblxuICBtZXJnZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHNvdXJjZSA9IHRoaXMuZW1wdHkoKTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgc291cmNlLmFkZChbJyAgJywgbGluZSwgJ1xcbiddKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuXG4gIGVhY2g6IGZ1bmN0aW9uKGl0ZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zb3VyY2UubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZXIodGhpcy5zb3VyY2VbaV0pO1xuICAgIH1cbiAgfSxcblxuICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGxvYyA9IHRoaXMuY3VycmVudExvY2F0aW9uIHx8IHsgc3RhcnQ6IHt9IH07XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VOb2RlKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uLCB0aGlzLnNyY0ZpbGUpO1xuICB9LFxuICB3cmFwOiBmdW5jdGlvbihjaHVuaywgbG9jID0gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBzdGFydDoge30gfSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShcbiAgICAgIGxvYy5zdGFydC5saW5lLFxuICAgICAgbG9jLnN0YXJ0LmNvbHVtbixcbiAgICAgIHRoaXMuc3JjRmlsZSxcbiAgICAgIGNodW5rXG4gICAgKTtcbiAgfSxcblxuICBmdW5jdGlvbkNhbGw6IGZ1bmN0aW9uKGZuLCB0eXBlLCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSB0aGlzLmdlbmVyYXRlTGlzdChwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLndyYXAoW2ZuLCB0eXBlID8gJy4nICsgdHlwZSArICcoJyA6ICcoJywgcGFyYW1zLCAnKSddKTtcbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiAoXG4gICAgICAnXCInICtcbiAgICAgIChzdHIgKyAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpIC8vIFBlciBFY21hLTI2MiA3LjMgKyA3LjguNFxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5JykgK1xuICAgICAgJ1wiJ1xuICAgICk7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGNhc3RDaHVuayhvYmpba2V5XSwgdGhpcyk7XG4gICAgICBpZiAodmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUxpc3Q6IGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgICBsZXQgcmV0ID0gdGhpcy5lbXB0eSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChpKSB7XG4gICAgICAgIHJldC5hZGQoJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0LmFkZChjYXN0Q2h1bmsoZW50cmllc1tpXSwgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2VuZXJhdGVBcnJheTogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChlbnRyaWVzKTtcbiAgICByZXQucHJlcGVuZCgnWycpO1xuICAgIHJldC5hZGQoJ10nKTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvZGVHZW47XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _base = require('../base');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _codeGen = require('./code-gen');\n\nvar _codeGen2 = _interopRequireDefault(_codeGen);\n\nfunction Literal(value) {\n this.value = value;\n}\n\nfunction JavaScriptCompiler() {}\n\nJavaScriptCompiler.prototype = {\n // PUBLIC API: You can override these methods in a subclass to provide\n // alternative compiled forms for name lookup and buffering semantics\n nameLookup: function nameLookup(parent, name /*, type */) {\n return this.internalNameLookup(parent, name);\n },\n depthedLookup: function depthedLookup(name) {\n return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')'];\n },\n\n compilerInfo: function compilerInfo() {\n var revision = _base.COMPILER_REVISION,\n versions = _base.REVISION_CHANGES[revision];\n return [revision, versions];\n },\n\n appendToBuffer: function appendToBuffer(source, location, explicit) {\n // Force a source as this simplifies the merge logic.\n if (!_utils.isArray(source)) {\n source = [source];\n }\n source = this.source.wrap(source, location);\n\n if (this.environment.isSimple) {\n return ['return ', source, ';'];\n } else if (explicit) {\n // This is a case where the buffer operation occurs as a child of another\n // construct, generally braces. We have to explicitly output these buffer\n // operations to ensure that the emitted code goes in the correct location.\n return ['buffer += ', source, ';'];\n } else {\n source.appendToBuffer = true;\n return source;\n }\n },\n\n initializeBuffer: function initializeBuffer() {\n return this.quotedString('');\n },\n // END PUBLIC API\n internalNameLookup: function internalNameLookup(parent, name) {\n this.lookupPropertyFunctionIsUsed = true;\n return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n },\n\n lookupPropertyFunctionIsUsed: false,\n\n compile: function compile(environment, options, context, asObject) {\n this.environment = environment;\n this.options = options;\n this.stringParams = this.options.stringParams;\n this.trackIds = this.options.trackIds;\n this.precompile = !asObject;\n\n this.name = this.environment.name;\n this.isChild = !!context;\n this.context = context || {\n decorators: [],\n programs: [],\n environments: []\n };\n\n this.preamble();\n\n this.stackSlot = 0;\n this.stackVars = [];\n this.aliases = {};\n this.registers = { list: [] };\n this.hashes = [];\n this.compileStack = [];\n this.inlineStack = [];\n this.blockParams = [];\n\n this.compileChildren(environment, options);\n\n this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;\n this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n var opcodes = environment.opcodes,\n opcode = undefined,\n firstLoc = undefined,\n i = undefined,\n l = undefined;\n\n for (i = 0, l = opcodes.length; i < l; i++) {\n opcode = opcodes[i];\n\n this.source.currentLocation = opcode.loc;\n firstLoc = firstLoc || opcode.loc;\n this[opcode.opcode].apply(this, opcode.args);\n }\n\n // Flush any trailing content that might be pending.\n this.source.currentLocation = firstLoc;\n this.pushSource('');\n\n /* istanbul ignore next */\n if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n throw new _exception2['default']('Compile completed with content left on stack');\n }\n\n if (!this.decorators.isEmpty()) {\n this.useDecorators = true;\n\n this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\\n']);\n this.decorators.push('return fn;');\n\n if (asObject) {\n this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);\n } else {\n this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\\n');\n this.decorators.push('}\\n');\n this.decorators = this.decorators.merge();\n }\n } else {\n this.decorators = undefined;\n }\n\n var fn = this.createFunctionContext(asObject);\n if (!this.isChild) {\n var ret = {\n compiler: this.compilerInfo(),\n main: fn\n };\n\n if (this.decorators) {\n ret.main_d = this.decorators; // eslint-disable-line camelcase\n ret.useDecorators = true;\n }\n\n var _context = this.context;\n var programs = _context.programs;\n var decorators = _context.decorators;\n\n for (i = 0, l = programs.length; i < l; i++) {\n if (programs[i]) {\n ret[i] = programs[i];\n if (decorators[i]) {\n ret[i + '_d'] = decorators[i];\n ret.useDecorators = true;\n }\n }\n }\n\n if (this.environment.usePartial) {\n ret.usePartial = true;\n }\n if (this.options.data) {\n ret.useData = true;\n }\n if (this.useDepths) {\n ret.useDepths = true;\n }\n if (this.useBlockParams) {\n ret.useBlockParams = true;\n }\n if (this.options.compat) {\n ret.compat = true;\n }\n\n if (!asObject) {\n ret.compiler = JSON.stringify(ret.compiler);\n\n this.source.currentLocation = { start: { line: 1, column: 0 } };\n ret = this.objectLiteral(ret);\n\n if (options.srcName) {\n ret = ret.toStringWithSourceMap({ file: options.destName });\n ret.map = ret.map && ret.map.toString();\n } else {\n ret = ret.toString();\n }\n } else {\n ret.compilerOptions = this.options;\n }\n\n return ret;\n } else {\n return fn;\n }\n },\n\n preamble: function preamble() {\n // track the last context pushed into place to allow skipping the\n // getContext opcode when it would be a noop\n this.lastContext = 0;\n this.source = new _codeGen2['default'](this.options.srcName);\n this.decorators = new _codeGen2['default'](this.options.srcName);\n },\n\n createFunctionContext: function createFunctionContext(asObject) {\n // istanbul ignore next\n\n var _this = this;\n\n var varDeclarations = '';\n\n var locals = this.stackVars.concat(this.registers.list);\n if (locals.length > 0) {\n varDeclarations += ', ' + locals.join(', ');\n }\n\n // Generate minimizer alias mappings\n //\n // When using true SourceNodes, this will update all references to the given alias\n // as the source nodes are reused in situ. For the non-source node compilation mode,\n // aliases will not be used, but this case is already being run on the client and\n // we aren't concern about minimizing the template size.\n var aliasCount = 0;\n Object.keys(this.aliases).forEach(function (alias) {\n var node = _this.aliases[alias];\n if (node.children && node.referenceCount > 1) {\n varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n node.children[0] = 'alias' + aliasCount;\n }\n });\n\n if (this.lookupPropertyFunctionIsUsed) {\n varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();\n }\n\n var params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\n if (this.useBlockParams || this.useDepths) {\n params.push('blockParams');\n }\n if (this.useDepths) {\n params.push('depths');\n }\n\n // Perform a second pass over the output to merge content when possible\n var source = this.mergeSource(varDeclarations);\n\n if (asObject) {\n params.push(source);\n\n return Function.apply(this, params);\n } else {\n return this.source.wrap(['function(', params.join(','), ') {\\n ', source, '}']);\n }\n },\n mergeSource: function mergeSource(varDeclarations) {\n var isSimple = this.environment.isSimple,\n appendOnly = !this.forceBuffer,\n appendFirst = undefined,\n sourceSeen = undefined,\n bufferStart = undefined,\n bufferEnd = undefined;\n this.source.each(function (line) {\n if (line.appendToBuffer) {\n if (bufferStart) {\n line.prepend(' + ');\n } else {\n bufferStart = line;\n }\n bufferEnd = line;\n } else {\n if (bufferStart) {\n if (!sourceSeen) {\n appendFirst = true;\n } else {\n bufferStart.prepend('buffer += ');\n }\n bufferEnd.add(';');\n bufferStart = bufferEnd = undefined;\n }\n\n sourceSeen = true;\n if (!isSimple) {\n appendOnly = false;\n }\n }\n });\n\n if (appendOnly) {\n if (bufferStart) {\n bufferStart.prepend('return ');\n bufferEnd.add(';');\n } else if (!sourceSeen) {\n this.source.push('return \"\";');\n }\n } else {\n varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\n if (bufferStart) {\n bufferStart.prepend('return buffer + ');\n bufferEnd.add(';');\n } else {\n this.source.push('return buffer;');\n }\n }\n\n if (varDeclarations) {\n this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n'));\n }\n\n return this.source.merge();\n },\n\n lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {\n return '\\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\\n return parent[propertyName];\\n }\\n return undefined\\n }\\n '.trim();\n },\n\n // [blockValue]\n //\n // On stack, before: hash, inverse, program, value\n // On stack, after: return value of blockHelperMissing\n //\n // The purpose of this opcode is to take a block of the form\n // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n // replace it on the stack with the result of properly\n // invoking blockHelperMissing.\n blockValue: function blockValue(name) {\n var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n params = [this.contextName(0)];\n this.setupHelperArgs(name, 0, params);\n\n var blockName = this.popStack();\n params.splice(1, 0, blockName);\n\n this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n },\n\n // [ambiguousBlockValue]\n //\n // On stack, before: hash, inverse, program, value\n // Compiler value, before: lastHelper=value of last found helper, if any\n // On stack, after, if no lastHelper: same as [blockValue]\n // On stack, after, if lastHelper: value\n ambiguousBlockValue: function ambiguousBlockValue() {\n // We're being a bit cheeky and reusing the options value from the prior exec\n var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n params = [this.contextName(0)];\n this.setupHelperArgs('', 0, params, true);\n\n this.flushInline();\n\n var current = this.topStack();\n params.splice(1, 0, current);\n\n this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);\n },\n\n // [appendContent]\n //\n // On stack, before: ...\n // On stack, after: ...\n //\n // Appends the string value of `content` to the current buffer\n appendContent: function appendContent(content) {\n if (this.pendingContent) {\n content = this.pendingContent + content;\n } else {\n this.pendingLocation = this.source.currentLocation;\n }\n\n this.pendingContent = content;\n },\n\n // [append]\n //\n // On stack, before: value, ...\n // On stack, after: ...\n //\n // Coerces `value` to a String and appends it to the current buffer.\n //\n // If `value` is truthy, or 0, it is coerced into a string and appended\n // Otherwise, the empty string is appended\n append: function append() {\n if (this.isInline()) {\n this.replaceStack(function (current) {\n return [' != null ? ', current, ' : \"\"'];\n });\n\n this.pushSource(this.appendToBuffer(this.popStack()));\n } else {\n var local = this.popStack();\n this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);\n if (this.environment.isSimple) {\n this.pushSource(['else { ', this.appendToBuffer(\"''\", undefined, true), ' }']);\n }\n }\n },\n\n // [appendEscaped]\n //\n // On stack, before: value, ...\n // On stack, after: ...\n //\n // Escape `value` and append it to the buffer\n appendEscaped: function appendEscaped() {\n this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));\n },\n\n // [getContext]\n //\n // On stack, before: ...\n // On stack, after: ...\n // Compiler value, after: lastContext=depth\n //\n // Set the value of the `lastContext` compiler value to the depth\n getContext: function getContext(depth) {\n this.lastContext = depth;\n },\n\n // [pushContext]\n //\n // On stack, before: ...\n // On stack, after: currentContext, ...\n //\n // Pushes the value of the current context onto the stack.\n pushContext: function pushContext() {\n this.pushStackLiteral(this.contextName(this.lastContext));\n },\n\n // [lookupOnContext]\n //\n // On stack, before: ...\n // On stack, after: currentContext[name], ...\n //\n // Looks up the value of `name` on the current context and pushes\n // it onto the stack.\n lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {\n var i = 0;\n\n if (!scoped && this.options.compat && !this.lastContext) {\n // The depthed query is expected to handle the undefined logic for the root level that\n // is implemented below, so we evaluate that directly in compat mode\n this.push(this.depthedLookup(parts[i++]));\n } else {\n this.pushContext();\n }\n\n this.resolvePath('context', parts, i, falsy, strict);\n },\n\n // [lookupBlockParam]\n //\n // On stack, before: ...\n // On stack, after: blockParam[name], ...\n //\n // Looks up the value of `parts` on the given block param and pushes\n // it onto the stack.\n lookupBlockParam: function lookupBlockParam(blockParamId, parts) {\n this.useBlockParams = true;\n\n this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n this.resolvePath('context', parts, 1);\n },\n\n // [lookupData]\n //\n // On stack, before: ...\n // On stack, after: data, ...\n //\n // Push the data lookup operator\n lookupData: function lookupData(depth, parts, strict) {\n if (!depth) {\n this.pushStackLiteral('data');\n } else {\n this.pushStackLiteral('container.data(data, ' + depth + ')');\n }\n\n this.resolvePath('data', parts, 0, true, strict);\n },\n\n resolvePath: function resolvePath(type, parts, i, falsy, strict) {\n // istanbul ignore next\n\n var _this2 = this;\n\n if (this.options.strict || this.options.assumeObjects) {\n this.push(strictLookup(this.options.strict && strict, this, parts, i, type));\n return;\n }\n\n var len = parts.length;\n for (; i < len; i++) {\n /* eslint-disable no-loop-func */\n this.replaceStack(function (current) {\n var lookup = _this2.nameLookup(current, parts[i], type);\n // We want to ensure that zero and false are handled properly if the context (falsy flag)\n // needs to have the special handling for these values.\n if (!falsy) {\n return [' != null ? ', lookup, ' : ', current];\n } else {\n // Otherwise we can use generic falsy handling\n return [' && ', lookup];\n }\n });\n /* eslint-enable no-loop-func */\n }\n },\n\n // [resolvePossibleLambda]\n //\n // On stack, before: value, ...\n // On stack, after: resolved value, ...\n //\n // If the `value` is a lambda, replace it on the stack by\n // the return value of the lambda\n resolvePossibleLambda: function resolvePossibleLambda() {\n this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);\n },\n\n // [pushStringParam]\n //\n // On stack, before: ...\n // On stack, after: string, currentContext, ...\n //\n // This opcode is designed for use in string mode, which\n // provides the string value of a parameter along with its\n // depth rather than resolving it immediately.\n pushStringParam: function pushStringParam(string, type) {\n this.pushContext();\n this.pushString(type);\n\n // If it's a subexpression, the string result\n // will be pushed after this opcode.\n if (type !== 'SubExpression') {\n if (typeof string === 'string') {\n this.pushString(string);\n } else {\n this.pushStackLiteral(string);\n }\n }\n },\n\n emptyHash: function emptyHash(omitEmpty) {\n if (this.trackIds) {\n this.push('{}'); // hashIds\n }\n if (this.stringParams) {\n this.push('{}'); // hashContexts\n this.push('{}'); // hashTypes\n }\n this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n },\n pushHash: function pushHash() {\n if (this.hash) {\n this.hashes.push(this.hash);\n }\n this.hash = { values: {}, types: [], contexts: [], ids: [] };\n },\n popHash: function popHash() {\n var hash = this.hash;\n this.hash = this.hashes.pop();\n\n if (this.trackIds) {\n this.push(this.objectLiteral(hash.ids));\n }\n if (this.stringParams) {\n this.push(this.objectLiteral(hash.contexts));\n this.push(this.objectLiteral(hash.types));\n }\n\n this.push(this.objectLiteral(hash.values));\n },\n\n // [pushString]\n //\n // On stack, before: ...\n // On stack, after: quotedString(string), ...\n //\n // Push a quoted version of `string` onto the stack\n pushString: function pushString(string) {\n this.pushStackLiteral(this.quotedString(string));\n },\n\n // [pushLiteral]\n //\n // On stack, before: ...\n // On stack, after: value, ...\n //\n // Pushes a value onto the stack. This operation prevents\n // the compiler from creating a temporary variable to hold\n // it.\n pushLiteral: function pushLiteral(value) {\n this.pushStackLiteral(value);\n },\n\n // [pushProgram]\n //\n // On stack, before: ...\n // On stack, after: program(guid), ...\n //\n // Push a program expression onto the stack. This takes\n // a compile-time guid and converts it into a runtime-accessible\n // expression.\n pushProgram: function pushProgram(guid) {\n if (guid != null) {\n this.pushStackLiteral(this.programExpression(guid));\n } else {\n this.pushStackLiteral(null);\n }\n },\n\n // [registerDecorator]\n //\n // On stack, before: hash, program, params..., ...\n // On stack, after: ...\n //\n // Pops off the decorator's parameters, invokes the decorator,\n // and inserts the decorator into the decorators list.\n registerDecorator: function registerDecorator(paramSize, name) {\n var foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n options = this.setupHelperArgs(name, paramSize);\n\n this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);\n },\n\n // [invokeHelper]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of helper invocation\n //\n // Pops off the helper's parameters, invokes the helper,\n // and pushes the helper's return value onto the stack.\n //\n // If the helper is not found, `helperMissing` is called.\n invokeHelper: function invokeHelper(paramSize, name, isSimple) {\n var nonHelper = this.popStack(),\n helper = this.setupHelper(paramSize, name);\n\n var possibleFunctionCalls = [];\n\n if (isSimple) {\n // direct call to helper\n possibleFunctionCalls.push(helper.name);\n }\n // call a function from the input object\n possibleFunctionCalls.push(nonHelper);\n if (!this.options.strict) {\n possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing'));\n }\n\n var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')'];\n var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams);\n this.push(functionCall);\n },\n\n itemsSeparatedBy: function itemsSeparatedBy(items, separator) {\n var result = [];\n result.push(items[0]);\n for (var i = 1; i < items.length; i++) {\n result.push(separator, items[i]);\n }\n return result;\n },\n // [invokeKnownHelper]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of helper invocation\n //\n // This operation is used when the helper is known to exist,\n // so a `helperMissing` fallback is not required.\n invokeKnownHelper: function invokeKnownHelper(paramSize, name) {\n var helper = this.setupHelper(paramSize, name);\n this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n },\n\n // [invokeAmbiguous]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of disambiguation\n //\n // This operation is used when an expression like `{{foo}}`\n // is provided, but we don't know at compile-time whether it\n // is a helper or a path.\n //\n // This operation emits more code than the other options,\n // and can be avoided by passing the `knownHelpers` and\n // `knownHelpersOnly` flags at compile-time.\n invokeAmbiguous: function invokeAmbiguous(name, helperCall) {\n this.useRegister('helper');\n\n var nonHelper = this.popStack();\n\n this.emptyHash();\n var helper = this.setupHelper(0, name, helperCall);\n\n var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\n var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n if (!this.options.strict) {\n lookup[0] = '(helper = ';\n lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing'));\n }\n\n this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('\"function\"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);\n },\n\n // [invokePartial]\n //\n // On stack, before: context, ...\n // On stack after: result of partial invocation\n //\n // This operation pops off a context, invokes a partial with that context,\n // and pushes the result of the invocation back.\n invokePartial: function invokePartial(isDynamic, name, indent) {\n var params = [],\n options = this.setupParams(name, 1, params);\n\n if (isDynamic) {\n name = this.popStack();\n delete options.name;\n }\n\n if (indent) {\n options.indent = JSON.stringify(indent);\n }\n options.helpers = 'helpers';\n options.partials = 'partials';\n options.decorators = 'container.decorators';\n\n if (!isDynamic) {\n params.unshift(this.nameLookup('partials', name, 'partial'));\n } else {\n params.unshift(name);\n }\n\n if (this.options.compat) {\n options.depths = 'depths';\n }\n options = this.objectLiteral(options);\n params.push(options);\n\n this.push(this.source.functionCall('container.invokePartial', '', params));\n },\n\n // [assignToHash]\n //\n // On stack, before: value, ..., hash, ...\n // On stack, after: ..., hash, ...\n //\n // Pops a value off the stack and assigns it to the current hash\n assignToHash: function assignToHash(key) {\n var value = this.popStack(),\n context = undefined,\n type = undefined,\n id = undefined;\n\n if (this.trackIds) {\n id = this.popStack();\n }\n if (this.stringParams) {\n type = this.popStack();\n context = this.popStack();\n }\n\n var hash = this.hash;\n if (context) {\n hash.contexts[key] = context;\n }\n if (type) {\n hash.types[key] = type;\n }\n if (id) {\n hash.ids[key] = id;\n }\n hash.values[key] = value;\n },\n\n pushId: function pushId(type, name, child) {\n if (type === 'BlockParam') {\n this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));\n } else if (type === 'PathExpression') {\n this.pushString(name);\n } else if (type === 'SubExpression') {\n this.pushStackLiteral('true');\n } else {\n this.pushStackLiteral('null');\n }\n },\n\n // HELPERS\n\n compiler: JavaScriptCompiler,\n\n compileChildren: function compileChildren(environment, options) {\n var children = environment.children,\n child = undefined,\n compiler = undefined;\n\n for (var i = 0, l = children.length; i < l; i++) {\n child = children[i];\n compiler = new this.compiler(); // eslint-disable-line new-cap\n\n var existing = this.matchExistingProgram(child);\n\n if (existing == null) {\n this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n var index = this.context.programs.length;\n child.index = index;\n child.name = 'program' + index;\n this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);\n this.context.decorators[index] = compiler.decorators;\n this.context.environments[index] = child;\n\n this.useDepths = this.useDepths || compiler.useDepths;\n this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n child.useDepths = this.useDepths;\n child.useBlockParams = this.useBlockParams;\n } else {\n child.index = existing.index;\n child.name = 'program' + existing.index;\n\n this.useDepths = this.useDepths || existing.useDepths;\n this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n }\n }\n },\n matchExistingProgram: function matchExistingProgram(child) {\n for (var i = 0, len = this.context.environments.length; i < len; i++) {\n var environment = this.context.environments[i];\n if (environment && environment.equals(child)) {\n return environment;\n }\n }\n },\n\n programExpression: function programExpression(guid) {\n var child = this.environment.children[guid],\n programParams = [child.index, 'data', child.blockParams];\n\n if (this.useBlockParams || this.useDepths) {\n programParams.push('blockParams');\n }\n if (this.useDepths) {\n programParams.push('depths');\n }\n\n return 'container.program(' + programParams.join(', ') + ')';\n },\n\n useRegister: function useRegister(name) {\n if (!this.registers[name]) {\n this.registers[name] = true;\n this.registers.list.push(name);\n }\n },\n\n push: function push(expr) {\n if (!(expr instanceof Literal)) {\n expr = this.source.wrap(expr);\n }\n\n this.inlineStack.push(expr);\n return expr;\n },\n\n pushStackLiteral: function pushStackLiteral(item) {\n this.push(new Literal(item));\n },\n\n pushSource: function pushSource(source) {\n if (this.pendingContent) {\n this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));\n this.pendingContent = undefined;\n }\n\n if (source) {\n this.source.push(source);\n }\n },\n\n replaceStack: function replaceStack(callback) {\n var prefix = ['('],\n stack = undefined,\n createdStack = undefined,\n usedLiteral = undefined;\n\n /* istanbul ignore next */\n if (!this.isInline()) {\n throw new _exception2['default']('replaceStack on non-inline');\n }\n\n // We want to merge the inline statement into the replacement statement via ','\n var top = this.popStack(true);\n\n if (top instanceof Literal) {\n // Literals do not need to be inlined\n stack = [top.value];\n prefix = ['(', stack];\n usedLiteral = true;\n } else {\n // Get or create the current stack name for use by the inline\n createdStack = true;\n var _name = this.incrStack();\n\n prefix = ['((', this.push(_name), ' = ', top, ')'];\n stack = this.topStack();\n }\n\n var item = callback.call(this, stack);\n\n if (!usedLiteral) {\n this.popStack();\n }\n if (createdStack) {\n this.stackSlot--;\n }\n this.push(prefix.concat(item, ')'));\n },\n\n incrStack: function incrStack() {\n this.stackSlot++;\n if (this.stackSlot > this.stackVars.length) {\n this.stackVars.push('stack' + this.stackSlot);\n }\n return this.topStackName();\n },\n topStackName: function topStackName() {\n return 'stack' + this.stackSlot;\n },\n flushInline: function flushInline() {\n var inlineStack = this.inlineStack;\n this.inlineStack = [];\n for (var i = 0, len = inlineStack.length; i < len; i++) {\n var entry = inlineStack[i];\n /* istanbul ignore if */\n if (entry instanceof Literal) {\n this.compileStack.push(entry);\n } else {\n var stack = this.incrStack();\n this.pushSource([stack, ' = ', entry, ';']);\n this.compileStack.push(stack);\n }\n }\n },\n isInline: function isInline() {\n return this.inlineStack.length;\n },\n\n popStack: function popStack(wrapped) {\n var inline = this.isInline(),\n item = (inline ? this.inlineStack : this.compileStack).pop();\n\n if (!wrapped && item instanceof Literal) {\n return item.value;\n } else {\n if (!inline) {\n /* istanbul ignore next */\n if (!this.stackSlot) {\n throw new _exception2['default']('Invalid stack pop');\n }\n this.stackSlot--;\n }\n return item;\n }\n },\n\n topStack: function topStack() {\n var stack = this.isInline() ? this.inlineStack : this.compileStack,\n item = stack[stack.length - 1];\n\n /* istanbul ignore if */\n if (item instanceof Literal) {\n return item.value;\n } else {\n return item;\n }\n },\n\n contextName: function contextName(context) {\n if (this.useDepths && context) {\n return 'depths[' + context + ']';\n } else {\n return 'depth' + context;\n }\n },\n\n quotedString: function quotedString(str) {\n return this.source.quotedString(str);\n },\n\n objectLiteral: function objectLiteral(obj) {\n return this.source.objectLiteral(obj);\n },\n\n aliasable: function aliasable(name) {\n var ret = this.aliases[name];\n if (ret) {\n ret.referenceCount++;\n return ret;\n }\n\n ret = this.aliases[name] = this.source.wrap(name);\n ret.aliasable = true;\n ret.referenceCount = 1;\n\n return ret;\n },\n\n setupHelper: function setupHelper(paramSize, name, blockHelper) {\n var params = [],\n paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n var foundHelper = this.nameLookup('helpers', name, 'helper'),\n callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');\n\n return {\n params: params,\n paramsInit: paramsInit,\n name: foundHelper,\n callParams: [callContext].concat(params)\n };\n },\n\n setupParams: function setupParams(helper, paramSize, params) {\n var options = {},\n contexts = [],\n types = [],\n ids = [],\n objectArgs = !params,\n param = undefined;\n\n if (objectArgs) {\n params = [];\n }\n\n options.name = this.quotedString(helper);\n options.hash = this.popStack();\n\n if (this.trackIds) {\n options.hashIds = this.popStack();\n }\n if (this.stringParams) {\n options.hashTypes = this.popStack();\n options.hashContexts = this.popStack();\n }\n\n var inverse = this.popStack(),\n program = this.popStack();\n\n // Avoid setting fn and inverse if neither are set. This allows\n // helpers to do a check for `if (options.fn)`\n if (program || inverse) {\n options.fn = program || 'container.noop';\n options.inverse = inverse || 'container.noop';\n }\n\n // The parameters go on to the stack in order (making sure that they are evaluated in order)\n // so we need to pop them off the stack in reverse order\n var i = paramSize;\n while (i--) {\n param = this.popStack();\n params[i] = param;\n\n if (this.trackIds) {\n ids[i] = this.popStack();\n }\n if (this.stringParams) {\n types[i] = this.popStack();\n contexts[i] = this.popStack();\n }\n }\n\n if (objectArgs) {\n options.args = this.source.generateArray(params);\n }\n\n if (this.trackIds) {\n options.ids = this.source.generateArray(ids);\n }\n if (this.stringParams) {\n options.types = this.source.generateArray(types);\n options.contexts = this.source.generateArray(contexts);\n }\n\n if (this.options.data) {\n options.data = 'data';\n }\n if (this.useBlockParams) {\n options.blockParams = 'blockParams';\n }\n return options;\n },\n\n setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {\n var options = this.setupParams(helper, paramSize, params);\n options.loc = JSON.stringify(this.source.currentLocation);\n options = this.objectLiteral(options);\n if (useRegister) {\n this.useRegister('options');\n params.push('options');\n return ['options=', options];\n } else if (params) {\n params.push(options);\n return '';\n } else {\n return options;\n }\n }\n};\n\n(function () {\n var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');\n\n var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\n for (var i = 0, l = reservedWords.length; i < l; i++) {\n compilerWords[reservedWords[i]] = true;\n }\n})();\n\n/**\n * @deprecated May be removed in the next major version\n */\nJavaScriptCompiler.isValidJavaScriptVariableName = function (name) {\n return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);\n};\n\nfunction strictLookup(requireTerminal, compiler, parts, i, type) {\n var stack = compiler.popStack(),\n len = parts.length;\n if (requireTerminal) {\n len--;\n }\n\n for (; i < len; i++) {\n stack = compiler.nameLookup(stack, parts[i], type);\n }\n\n if (requireTerminal) {\n return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];\n } else {\n return stack;\n }\n}\n\nexports['default'] = JavaScriptCompiler;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztvQkFBb0QsU0FBUzs7eUJBQ3ZDLGNBQWM7Ozs7cUJBQ1osVUFBVTs7dUJBQ2QsWUFBWTs7OztBQUVoQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsTUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDcEI7O0FBRUQsU0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixZQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksZUFBZTtBQUM5QyxXQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDOUM7QUFDRCxlQUFhLEVBQUUsdUJBQVMsSUFBSSxFQUFFO0FBQzVCLFdBQU8sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQ2xDLFdBQVcsRUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNwQixHQUFHLENBQ0osQ0FBQztHQUNIOztBQUVELGNBQVksRUFBRSx3QkFBVztBQUN2QixRQUFNLFFBQVEsMEJBQW9CO1FBQ2hDLFFBQVEsR0FBRyx1QkFBaUIsUUFBUSxDQUFDLENBQUM7QUFDeEMsV0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztHQUM3Qjs7QUFFRCxnQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOztBQUVuRCxRQUFJLENBQUMsZUFBUSxNQUFNLENBQUMsRUFBRTtBQUNwQixZQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuQjtBQUNELFVBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRTVDLFFB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LEVBQUU7QUFDbkIsU0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNwRDs7QUFFRCxNQUFJLGVBQWUsRUFBRTtBQUNuQixXQUFPLENBQ0wsUUFBUSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUN0QyxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMvQixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUMvQyxJQUFJLENBQ0wsQ0FBQztHQUNILE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O3FCQUVjLGtCQUFrQiIsImZpbGUiOiJqYXZhc2NyaXB0LWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQ29kZUdlbiBmcm9tICcuL2NvZGUtZ2VuJztcblxuZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEphdmFTY3JpcHRDb21waWxlcigpIHt9XG5cbkphdmFTY3JpcHRDb21waWxlci5wcm90b3R5cGUgPSB7XG4gIC8vIFBVQkxJQyBBUEk6IFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgbWV0aG9kcyBpbiBhIHN1YmNsYXNzIHRvIHByb3ZpZGVcbiAgLy8gYWx0ZXJuYXRpdmUgY29tcGlsZWQgZm9ybXMgZm9yIG5hbWUgbG9va3VwIGFuZCBidWZmZXJpbmcgc2VtYW50aWNzXG4gIG5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSAvKiwgIHR5cGUgKi8pIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbE5hbWVMb29rdXAocGFyZW50LCBuYW1lKTtcbiAgfSxcbiAgZGVwdGhlZExvb2t1cDogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxvb2t1cCcpLFxuICAgICAgJyhkZXB0aHMsICcsXG4gICAgICBKU09OLnN0cmluZ2lmeShuYW1lKSxcbiAgICAgICcpJ1xuICAgIF07XG4gIH0sXG5cbiAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgdmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW3JldmlzaW9uXTtcbiAgICByZXR1cm4gW3JldmlzaW9uLCB2ZXJzaW9uc107XG4gIH0sXG5cbiAgYXBwZW5kVG9CdWZmZXI6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jYXRpb24sIGV4cGxpY2l0KSB7XG4gICAgLy8gRm9yY2UgYSBzb3VyY2UgYXMgdGhpcyBzaW1wbGlmaWVzIHRoZSBtZXJnZSBsb2dpYy5cbiAgICBpZiAoIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgc291cmNlID0gW3NvdXJjZV07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuc291cmNlLndyYXAoc291cmNlLCBsb2NhdGlvbik7XG5cbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkge1xuICAgICAgcmV0dXJuIFsncmV0dXJuICcsIHNvdXJjZSwgJzsnXTtcbiAgICB9IGVsc2UgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIG9wZXJhdGlvbiBvY2N1cnMgYXMgYSBjaGlsZCBvZiBhbm90aGVyXG4gICAgICAvLyBjb25zdHJ1Y3QsIGdlbmVyYWxseSBicmFjZXMuIFdlIGhhdmUgdG8gZXhwbGljaXRseSBvdXRwdXQgdGhlc2UgYnVmZmVyXG4gICAgICAvLyBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IHRoZSBlbWl0dGVkIGNvZGUgZ29lcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICAgIHJldHVybiBbJ2J1ZmZlciArPSAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIHtcbiAgICAgIHNvdXJjZS5hcHBlbmRUb0J1ZmZlciA9IHRydWU7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgfSxcblxuICBpbml0aWFsaXplQnVmZmVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdW90ZWRTdHJpbmcoJycpO1xuICB9LFxuICAvLyBFTkQgUFVCTElDIEFQSVxuICBpbnRlcm5hbE5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkge1xuICAgIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCA9IHRydWU7XG4gICAgcmV0dXJuIFsnbG9va3VwUHJvcGVydHkoJywgcGFyZW50LCAnLCcsIEpTT04uc3RyaW5naWZ5KG5hbWUpLCAnKSddO1xuICB9LFxuXG4gIGxvb2t1cFByb3BlcnR5RnVuY3Rpb25Jc1VzZWQ6IGZhbHNlLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zLCBjb250ZXh0LCBhc09iamVjdCkge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gdGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcztcbiAgICB0aGlzLnRyYWNrSWRzID0gdGhpcy5vcHRpb25zLnRyYWNrSWRzO1xuICAgIHRoaXMucHJlY29tcGlsZSA9ICFhc09iamVjdDtcblxuICAgIHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQubmFtZTtcbiAgICB0aGlzLmlzQ2hpbGQgPSAhIWNvbnRleHQ7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7XG4gICAgICBkZWNvcmF0b3JzOiBbXSxcbiAgICAgIHByb2dyYW1zOiBbXSxcbiAgICAgIGVudmlyb25tZW50czogW11cbiAgICB9O1xuXG4gICAgdGhpcy5wcmVhbWJsZSgpO1xuXG4gICAgdGhpcy5zdGFja1Nsb3QgPSAwO1xuICAgIHRoaXMuc3RhY2tWYXJzID0gW107XG4gICAgdGhpcy5hbGlhc2VzID0ge307XG4gICAgdGhpcy5yZWdpc3RlcnMgPSB7IGxpc3Q6IFtdIH07XG4gICAgdGhpcy5oYXNoZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBpbGVTdGFjayA9IFtdO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gW107XG5cbiAgICB0aGlzLmNvbXBpbGVDaGlsZHJlbihlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnVzZURlcHRocyA9XG4gICAgICB0aGlzLnVzZURlcHRocyB8fFxuICAgICAgZW52aXJvbm1lbnQudXNlRGVwdGhzIHx8XG4gICAgICBlbnZpcm9ubWVudC51c2VEZWNvcmF0b3JzIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGF0O1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1zO1xuXG4gICAgbGV0IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLFxuICAgICAgb3Bjb2RlLFxuICAgICAgZmlyc3RMb2MsXG4gICAgICBpLFxuICAgICAgbDtcblxuICAgIGZvciAoaSA9IDAsIGwgPSBvcGNvZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1tpXTtcblxuICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0gb3Bjb2RlLmxvYztcbiAgICAgIGZpcnN0TG9jID0gZmlyc3RMb2MgfHwgb3Bjb2RlLmxvYztcbiAgICAgIHRoaXNbb3Bjb2RlLm9wY29kZV0uYXBwbHkodGhpcywgb3Bjb2RlLmFyZ3MpO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGFueSB0cmFpbGluZyBjb250ZW50IHRoYXQgbWlnaHQgYmUgcGVuZGluZy5cbiAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBmaXJzdExvYztcbiAgICB0aGlzLnB1c2hTb3VyY2UoJycpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5zdGFja1Nsb3QgfHwgdGhpcy5pbmxpbmVTdGFjay5sZW5ndGggfHwgdGhpcy5jb21waWxlU3RhY2subGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb21waWxlIGNvbXBsZXRlZCB3aXRoIGNvbnRlbnQgbGVmdCBvbiBzdGFjaycpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kZWNvcmF0b3JzLmlzRW1wdHkoKSkge1xuICAgICAgdGhpcy51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoW1xuICAgICAgICAndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycywgJyxcbiAgICAgICAgdGhpcy5sb29rdXBQcm9wZXJ0eUZ1bmN0aW9uVmFyRGVjbGFyYXRpb24oKSxcbiAgICAgICAgJztcXG4nXG4gICAgICBdKTtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47Jyk7XG5cbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5hcHBseSh0aGlzLCBbXG4gICAgICAgICAgJ2ZuJyxcbiAgICAgICAgICAncHJvcHMnLFxuICAgICAgICAgICdjb250YWluZXInLFxuICAgICAgICAgICdkZXB0aDAnLFxuICAgICAgICAgICdkYXRhJyxcbiAgICAgICAgICAnYmxvY2tQYXJhbXMnLFxuICAgICAgICAgICdkZXB0aHMnLFxuICAgICAgICAgIHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoXG4gICAgICAgICAgJ2Z1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aDAsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcXG4nXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCd9XFxuJyk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlY29yYXRvcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IGZuID0gdGhpcy5jcmVhdGVGdW5jdGlvbkNvbnRleHQoYXNPYmplY3QpO1xuICAgIGlmICghdGhpcy5pc0NoaWxkKSB7XG4gICAgICBsZXQgcmV0ID0ge1xuICAgICAgICBjb21waWxlcjogdGhpcy5jb21waWxlckluZm8oKSxcbiAgICAgICAgbWFpbjogZm5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmRlY29yYXRvcnMpIHtcbiAgICAgICAgcmV0Lm1haW5fZCA9IHRoaXMuZGVjb3JhdG9yczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgICAgcmV0LnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgeyBwcm9ncmFtcywgZGVjb3JhdG9ycyB9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocHJvZ3JhbXNbaV0pIHtcbiAgICAgICAgICByZXRbaV0gPSBwcm9ncmFtc1tpXTtcbiAgICAgICAgICBpZiAoZGVjb3JhdG9yc1tpXSkge1xuICAgICAgICAgICAgcmV0W2kgKyAnX2QnXSA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgICByZXQudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwpIHtcbiAgICAgICAgcmV0LnVzZVBhcnRpYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICAgIHJldC51c2VEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgICByZXQudXNlRGVwdGhzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHJldC51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdCkge1xuICAgICAgICByZXQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhc09iamVjdCkge1xuICAgICAgICByZXQuY29tcGlsZXIgPSBKU09OLnN0cmluZ2lmeShyZXQuY29tcGlsZXIpO1xuXG4gICAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IHsgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbiAgICAgICAgcmV0ID0gdGhpcy5vYmplY3RMaXRlcmFsKHJldCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3JjTmFtZSkge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoeyBmaWxlOiBvcHRpb25zLmRlc3ROYW1lIH0pO1xuICAgICAgICAgIHJldC5tYXAgPSByZXQubWFwICYmIHJldC5tYXAudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmNvbXBpbGVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgfSxcblxuICBwcmVhbWJsZTogZnVuY3Rpb24oKSB7XG4gICAgLy8gdHJhY2sgdGhlIGxhc3QgY29udGV4dCBwdXNoZWQgaW50byBwbGFjZSB0byBhbGxvdyBza2lwcGluZyB0aGVcbiAgICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxkIGJlIGEgbm9vcFxuICAgIHRoaXMubGFzdENvbnRleHQgPSAwO1xuICAgIHRoaXMuc291cmNlID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICAgIHRoaXMuZGVjb3JhdG9ycyA9IG5ldyBDb2RlR2VuKHRoaXMub3B0aW9ucy5zcmNOYW1lKTtcbiAgfSxcblxuICBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1bmN0aW9uKGFzT2JqZWN0KSB7XG4gICAgbGV0IHZhckRlY2xhcmF0aW9ucyA9ICcnO1xuXG4gICAgbGV0IGxvY2FscyA9IHRoaXMuc3RhY2tWYXJzLmNvbmNhdCh0aGlzLnJlZ2lzdGVycy5saXN0KTtcbiAgICBpZiAobG9jYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCAnICsgbG9jYWxzLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgbWluaW1pemVyIGFsaWFzIG1hcHBpbmdzXG4gICAgLy9cbiAgICAvLyBXaGVuIHVzaW5nIHRydWUgU291cmNlTm9kZXMsIHRoaXMgd2lsbCB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGdpdmVuIGFsaWFzXG4gICAgLy8gYXMgdGhlIHNvdXJjZSBub2RlcyBhcmUgcmV1c2VkIGluIHNpdHUuIEZvciB0aGUgbm9uLXNvdXJjZSBub2RlIGNvbXBpbGF0aW9uIG1vZGUsXG4gICAgLy8gYWxpYXNlcyB3aWxsIG5vdCBiZSB1c2VkLCBidXQgdGhpcyBjYXNlIGlzIGFscmVhZHkgYmVpbmcgcnVuIG9uIHRoZSBjbGllbnQgYW5kXG4gICAgLy8gd2UgYXJlbid0IGNvbmNlcm4gYWJvdXQgbWluaW1pemluZyB0aGUgdGVtcGxhdGUgc2l6ZS5cbiAgICBsZXQgYWxpYXNDb3VudCA9IDA7XG4gICAgT2JqZWN0LmtleXModGhpcy5hbGlhc2VzKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUucmVmZXJlbmNlQ291bnQgPiAxKSB7XG4gICAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBhbGlhcycgKyArK2FsaWFzQ291bnQgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyB0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpO1xuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFtcbiAgICAgICAgJ2Z1bmN0aW9uKCcsXG4gICAgICAgIHBhcmFtcy5qb2luKCcsJyksXG4gICAgICAgICcpIHtcXG4gICcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgJ30nXG4gICAgICBdKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgYXBwZW5kT25seSA9ICF0aGlzLmZvcmNlQnVmZmVyLFxuICAgICAgYXBwZW5kRmlyc3QsXG4gICAgICBzb3VyY2VTZWVuLFxuICAgICAgYnVmZmVyU3RhcnQsXG4gICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaChsaW5lID0+IHtcbiAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7XG4gICAgICAgIGlmIChidWZmZXJTdGFydCkge1xuICAgICAgICAgIGxpbmUucHJlcGVuZCgnICArICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gbGluZTtcbiAgICAgICAgfVxuICAgICAgICBidWZmZXJFbmQgPSBsaW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgICAgICBhcHBlbmRGaXJzdCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ2J1ZmZlciArPSAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyRW5kID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlU2VlbiA9IHRydWU7XG4gICAgICAgIGlmICghaXNTaW1wbGUpIHtcbiAgICAgICAgICBhcHBlbmRPbmx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhcHBlbmRPbmx5KSB7XG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgIHRoaXMuc291cmNlLnB1c2goJ3JldHVybiBcIlwiOycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXJEZWNsYXJhdGlvbnMgKz1cbiAgICAgICAgJywgYnVmZmVyID0gJyArIChhcHBlbmRGaXJzdCA/ICcnIDogdGhpcy5pbml0aWFsaXplQnVmZmVyKCkpO1xuXG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuIGJ1ZmZlciArICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gYnVmZmVyOycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICAgIHRoaXMuc291cmNlLnByZXBlbmQoXG4gICAgICAgICd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc291cmNlLm1lcmdlKCk7XG4gIH0sXG5cbiAgbG9va3VwUHJvcGVydHlGdW5jdGlvblZhckRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYFxuICAgICAgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBgLnRyaW0oKTtcbiAgfSxcblxuICAvLyBbYmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXR1cm4gdmFsdWUgb2YgYmxvY2tIZWxwZXJNaXNzaW5nXG4gIC8vXG4gIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bjb2RlIGlzIHRvIHRha2UgYSBibG9jayBvZiB0aGUgZm9ybVxuICAvLyBge3sjdGhpcy5mb299fS4uLnt7L3RoaXMuZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBvZiBgZm9vYCwgYW5kXG4gIC8vIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBwcm9wZXJseVxuICAvLyBpbnZva2luZyBibG9ja0hlbHBlck1pc3NpbmcuXG4gIGJsb2NrVmFsdWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBsZXQgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoXG4gICAgICAgICdjb250YWluZXIuaG9va3MuYmxvY2tIZWxwZXJNaXNzaW5nJ1xuICAgICAgKSxcbiAgICAgIHBhcmFtcyA9IFt0aGlzLmNvbnRleHROYW1lKDApXTtcbiAgICB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCAwLCBwYXJhbXMpO1xuXG4gICAgbGV0IGJsb2NrTmFtZSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGJsb2NrTmFtZSk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYW1iaWd1b3VzQmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGJlZm9yZTogbGFzdEhlbHBlcj12YWx1ZSBvZiBsYXN0IGZvdW5kIGhlbHBlciwgaWYgYW55XG4gIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBhcyBbYmxvY2tWYWx1ZV1cbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBsYXN0SGVscGVyOiB2YWx1ZVxuICBhbWJpZ3VvdXNCbG9ja1ZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAvLyBXZSdyZSBiZWluZyBhIGJpdCBjaGVla3kgYW5kIHJldXNpbmcgdGhlIG9wdGlvbnMgdmFsdWUgZnJvbSB0aGUgcHJpb3IgZXhlY1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZShcbiAgICAgICAgJ2NvbnRhaW5lci5ob29rcy5ibG9ja0hlbHBlck1pc3NpbmcnXG4gICAgICApLFxuICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKCcnLCAwLCBwYXJhbXMsIHRydWUpO1xuXG4gICAgdGhpcy5mbHVzaElubGluZSgpO1xuXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgcGFyYW1zLnNwbGljZSgxLCAwLCBjdXJyZW50KTtcblxuICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAnaWYgKCEnLFxuICAgICAgdGhpcy5sYXN0SGVscGVyLFxuICAgICAgJykgeyAnLFxuICAgICAgY3VycmVudCxcbiAgICAgICcgPSAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpLFxuICAgICAgJ30nXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjayhjdXJyZW50ID0+IFsnICE9IG51bGwgPyAnLCBjdXJyZW50LCAnIDogXCJcIiddKTtcblxuICAgICAgdGhpcy5wdXNoU291cmNlKHRoaXMuYXBwZW5kVG9CdWZmZXIodGhpcy5wb3BTdGFjaygpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsb2NhbCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICdpZiAoJyxcbiAgICAgICAgbG9jYWwsXG4gICAgICAgICcgIT0gbnVsbCkgeyAnLFxuICAgICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAnIH0nXG4gICAgICBdKTtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICAgJ2Vsc2UgeyAnLFxuICAgICAgICAgIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAgICcgfSdcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UoXG4gICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKFtcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5lc2NhcGVFeHByZXNzaW9uJyksXG4gICAgICAgICcoJyxcbiAgICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICAnKSdcbiAgICAgIF0pXG4gICAgKTtcbiAgfSxcblxuICAvLyBbZ2V0Q29udGV4dF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vIENvbXBpbGVyIHZhbHVlLCBhZnRlcjogbGFzdENvbnRleHQ9ZGVwdGhcbiAgLy9cbiAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYGxhc3RDb250ZXh0YCBjb21waWxlciB2YWx1ZSB0byB0aGUgZGVwdGhcbiAgZ2V0Q29udGV4dDogZnVuY3Rpb24oZGVwdGgpIHtcbiAgICB0aGlzLmxhc3RDb250ZXh0ID0gZGVwdGg7XG4gIH0sXG5cbiAgLy8gW3B1c2hDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dCwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFjay5cbiAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLmNvbnRleHROYW1lKHRoaXMubGFzdENvbnRleHQpKTtcbiAgfSxcblxuICAvLyBbbG9va3VwT25Db250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dFtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgbmFtZWAgb24gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBPbkNvbnRleHQ6IGZ1bmN0aW9uKHBhcnRzLCBmYWxzeSwgc3RyaWN0LCBzY29wZWQpIHtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICBpZiAoIXNjb3BlZCAmJiB0aGlzLm9wdGlvbnMuY29tcGF0ICYmICF0aGlzLmxhc3RDb250ZXh0KSB7XG4gICAgICAvLyBUaGUgZGVwdGhlZCBxdWVyeSBpcyBleHBlY3RlZCB0byBoYW5kbGUgdGhlIHVuZGVmaW5lZCBsb2dpYyBmb3IgdGhlIHJvb3QgbGV2ZWwgdGhhdFxuICAgICAgLy8gaXMgaW1wbGVtZW50ZWQgYmVsb3csIHNvIHdlIGV2YWx1YXRlIHRoYXQgZGlyZWN0bHkgaW4gY29tcGF0IG1vZGVcbiAgICAgIHRoaXMucHVzaCh0aGlzLmRlcHRoZWRMb29rdXAocGFydHNbaSsrXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KTtcbiAgfSxcblxuICAvLyBbbG9va3VwQmxvY2tQYXJhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogYmxvY2tQYXJhbVtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgcGFydHNgIG9uIHRoZSBnaXZlbiBibG9jayBwYXJhbSBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBCbG9ja1BhcmFtOiBmdW5jdGlvbihibG9ja1BhcmFtSWQsIHBhcnRzKSB7XG4gICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG5cbiAgICB0aGlzLnB1c2goWydibG9ja1BhcmFtc1snLCBibG9ja1BhcmFtSWRbMF0sICddWycsIGJsb2NrUGFyYW1JZFsxXSwgJ10nXSk7XG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCAxKTtcbiAgfSxcblxuICAvLyBbbG9va3VwRGF0YV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogZGF0YSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggdGhlIGRhdGEgbG9va3VwIG9wZXJhdG9yXG4gIGxvb2t1cERhdGE6IGZ1bmN0aW9uKGRlcHRoLCBwYXJ0cywgc3RyaWN0KSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkYXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnY29udGFpbmVyLmRhdGEoZGF0YSwgJyArIGRlcHRoICsgJyknKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdkYXRhJywgcGFydHMsIDAsIHRydWUsIHN0cmljdCk7XG4gIH0sXG5cbiAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHR5cGUsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3QgfHwgdGhpcy5vcHRpb25zLmFzc3VtZU9iamVjdHMpIHtcbiAgICAgIHRoaXMucHVzaChcbiAgICAgICAgc3RyaWN0TG9va3VwKHRoaXMub3B0aW9ucy5zdHJpY3QgJiYgc3RyaWN0LCB0aGlzLCBwYXJ0cywgaSwgdHlwZSlcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGN1cnJlbnQgPT4ge1xuICAgICAgICBsZXQgbG9va3VwID0gdGhpcy5uYW1lTG9va3VwKGN1cnJlbnQsIHBhcnRzW2ldLCB0eXBlKTtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB6ZXJvIGFuZCBmYWxzZSBhcmUgaGFuZGxlZCBwcm9wZXJseSBpZiB0aGUgY29udGV4dCAoZmFsc3kgZmxhZylcbiAgICAgICAgLy8gbmVlZHMgdG8gaGF2ZSB0aGUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlc2UgdmFsdWVzLlxuICAgICAgICBpZiAoIWZhbHN5KSB7XG4gICAgICAgICAgcmV0dXJuIFsnICE9IG51bGwgPyAnLCBsb29rdXAsICcgOiAnLCBjdXJyZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2FuIHVzZSBnZW5lcmljIGZhbHN5IGhhbmRsaW5nXG4gICAgICAgICAgcmV0dXJuIFsnICYmICcsIGxvb2t1cF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB9XG4gIH0sXG5cbiAgLy8gW3Jlc29sdmVQb3NzaWJsZUxhbWJkYV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc29sdmVkIHZhbHVlLCAuLi5cbiAgLy9cbiAgLy8gSWYgdGhlIGB2YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGJ5XG4gIC8vIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxhbWJkYVxuICByZXNvbHZlUG9zc2libGVMYW1iZGE6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaChbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxhbWJkYScpLFxuICAgICAgJygnLFxuICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgJywgJyxcbiAgICAgIHRoaXMuY29udGV4dE5hbWUoMCksXG4gICAgICAnKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHsgdmFsdWVzOiB7fSwgdHlwZXM6IFtdLCBjb250ZXh0czogW10sIGlkczogW10gfTtcbiAgfSxcbiAgcG9wSGFzaDogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGhhc2ggPSB0aGlzLmhhc2g7XG4gICAgdGhpcy5oYXNoID0gdGhpcy5oYXNoZXMucG9wKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLmlkcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5jb250ZXh0cykpO1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnR5cGVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnZhbHVlcykpO1xuICB9LFxuXG4gIC8vIFtwdXNoU3RyaW5nXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBxdW90ZWRTdHJpbmcoc3RyaW5nKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBxdW90ZWQgdmVyc2lvbiBvZiBgc3RyaW5nYCBvbnRvIHRoZSBzdGFja1xuICBwdXNoU3RyaW5nOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcoc3RyaW5nKSk7XG4gIH0sXG5cbiAgLy8gW3B1c2hMaXRlcmFsXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyBhIHZhbHVlIG9udG8gdGhlIHN0YWNrLiBUaGlzIG9wZXJhdGlvbiBwcmV2ZW50c1xuICAvLyB0aGUgY29tcGlsZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkXG4gIC8vIGl0LlxuICBwdXNoTGl0ZXJhbDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodmFsdWUpO1xuICB9LFxuXG4gIC8vIFtwdXNoUHJvZ3JhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcHJvZ3JhbShndWlkKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBwcm9ncmFtIGV4cHJlc3Npb24gb250byB0aGUgc3RhY2suIFRoaXMgdGFrZXNcbiAgLy8gYSBjb21waWxlLXRpbWUgZ3VpZCBhbmQgY29udmVydHMgaXQgaW50byBhIHJ1bnRpbWUtYWNjZXNzaWJsZVxuICAvLyBleHByZXNzaW9uLlxuICBwdXNoUHJvZ3JhbTogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGlmIChndWlkICE9IG51bGwpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLnByb2dyYW1FeHByZXNzaW9uKGd1aWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG51bGwpO1xuICAgIH1cbiAgfSxcblxuICAvLyBbcmVnaXN0ZXJEZWNvcmF0b3JdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIFBvcHMgb2ZmIHRoZSBkZWNvcmF0b3IncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBkZWNvcmF0b3IsXG4gIC8vIGFuZCBpbnNlcnRzIHRoZSBkZWNvcmF0b3IgaW50byB0aGUgZGVjb3JhdG9ycyBsaXN0LlxuICByZWdpc3RlckRlY29yYXRvcihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgZm91bmREZWNvcmF0b3IgPSB0aGlzLm5hbWVMb29rdXAoJ2RlY29yYXRvcnMnLCBuYW1lLCAnZGVjb3JhdG9yJyksXG4gICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFtcbiAgICAgICdmbiA9ICcsXG4gICAgICB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAnJywgW1xuICAgICAgICAnZm4nLFxuICAgICAgICAncHJvcHMnLFxuICAgICAgICAnY29udGFpbmVyJyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgXSksXG4gICAgICAnIHx8IGZuOydcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgaXNTaW1wbGUpIHtcbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuXG4gICAgbGV0IHBvc3NpYmxlRnVuY3Rpb25DYWxscyA9IFtdO1xuXG4gICAgaWYgKGlzU2ltcGxlKSB7XG4gICAgICAvLyBkaXJlY3QgY2FsbCB0byBoZWxwZXJcbiAgICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKGhlbHBlci5uYW1lKTtcbiAgICB9XG4gICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gdGhlIGlucHV0IG9iamVjdFxuICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKG5vbkhlbHBlcik7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMucHVzaChcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGZ1bmN0aW9uTG9va3VwQ29kZSA9IFtcbiAgICAgICcoJyxcbiAgICAgIHRoaXMuaXRlbXNTZXBhcmF0ZWRCeShwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMsICd8fCcpLFxuICAgICAgJyknXG4gICAgXTtcbiAgICBsZXQgZnVuY3Rpb25DYWxsID0gdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKFxuICAgICAgZnVuY3Rpb25Mb29rdXBDb2RlLFxuICAgICAgJ2NhbGwnLFxuICAgICAgaGVscGVyLmNhbGxQYXJhbXNcbiAgICApO1xuICAgIHRoaXMucHVzaChmdW5jdGlvbkNhbGwpO1xuICB9LFxuXG4gIGl0ZW1zU2VwYXJhdGVkQnk6IGZ1bmN0aW9uKGl0ZW1zLCBzZXBhcmF0b3IpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0LnB1c2goaXRlbXNbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHNlcGFyYXRvciwgaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBbaW52b2tlS25vd25IZWxwZXJdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGhlbHBlciBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0aGUgaGVscGVyIGlzIGtub3duIHRvIGV4aXN0LFxuICAvLyBzbyBhIGBoZWxwZXJNaXNzaW5nYCBmYWxsYmFjayBpcyBub3QgcmVxdWlyZWQuXG4gIGludm9rZUtub3duSGVscGVyOiBmdW5jdGlvbihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoaGVscGVyLm5hbWUsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbaW52b2tlQW1iaWd1b3VzXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBkaXNhbWJpZ3VhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gYW4gZXhwcmVzc2lvbiBsaWtlIGB7e2Zvb319YFxuICAvLyBpcyBwcm92aWRlZCwgYnV0IHdlIGRvbid0IGtub3cgYXQgY29tcGlsZS10aW1lIHdoZXRoZXIgaXRcbiAgLy8gaXMgYSBoZWxwZXIgb3IgYSBwYXRoLlxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBlbWl0cyBtb3JlIGNvZGUgdGhhbiB0aGUgb3RoZXIgb3B0aW9ucyxcbiAgLy8gYW5kIGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgdGhlIGBrbm93bkhlbHBlcnNgIGFuZFxuICAvLyBga25vd25IZWxwZXJzT25seWAgZmxhZ3MgYXQgY29tcGlsZS10aW1lLlxuICBpbnZva2VBbWJpZ3VvdXM6IGZ1bmN0aW9uKG5hbWUsIGhlbHBlckNhbGwpIHtcbiAgICB0aGlzLnVzZVJlZ2lzdGVyKCdoZWxwZXInKTtcblxuICAgIGxldCBub25IZWxwZXIgPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICB0aGlzLmVtcHR5SGFzaCgpO1xuICAgIGxldCBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKDAsIG5hbWUsIGhlbHBlckNhbGwpO1xuXG4gICAgbGV0IGhlbHBlck5hbWUgPSAodGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKFxuICAgICAgJ2hlbHBlcnMnLFxuICAgICAgbmFtZSxcbiAgICAgICdoZWxwZXInXG4gICAgKSk7XG5cbiAgICBsZXQgbG9va3VwID0gWycoJywgJyhoZWxwZXIgPSAnLCBoZWxwZXJOYW1lLCAnIHx8ICcsIG5vbkhlbHBlciwgJyknXTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGxvb2t1cFswXSA9ICcoaGVscGVyID0gJztcbiAgICAgIGxvb2t1cC5wdXNoKFxuICAgICAgICAnICE9IG51bGwgPyBoZWxwZXIgOiAnLFxuICAgICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2goW1xuICAgICAgJygnLFxuICAgICAgbG9va3VwLFxuICAgICAgaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdLFxuICAgICAgJyksJyxcbiAgICAgICcodHlwZW9mIGhlbHBlciA9PT0gJyxcbiAgICAgIHRoaXMuYWxpYXNhYmxlKCdcImZ1bmN0aW9uXCInKSxcbiAgICAgICcgPyAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdoZWxwZXInLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSxcbiAgICAgICcgOiBoZWxwZXIpKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlUGFydGlhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogY29udGV4dCwgLi4uXG4gIC8vIE9uIHN0YWNrIGFmdGVyOiByZXN1bHQgb2YgcGFydGlhbCBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIHBvcHMgb2ZmIGEgY29udGV4dCwgaW52b2tlcyBhIHBhcnRpYWwgd2l0aCB0aGF0IGNvbnRleHQsXG4gIC8vIGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBiYWNrLlxuICBpbnZva2VQYXJ0aWFsOiBmdW5jdGlvbihpc0R5bmFtaWMsIG5hbWUsIGluZGVudCkge1xuICAgIGxldCBwYXJhbXMgPSBbXSxcbiAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKG5hbWUsIDEsIHBhcmFtcyk7XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgZGVsZXRlIG9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICBvcHRpb25zLmluZGVudCA9IEpTT04uc3RyaW5naWZ5KGluZGVudCk7XG4gICAgfVxuICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJztcbiAgICBvcHRpb25zLnBhcnRpYWxzID0gJ3BhcnRpYWxzJztcbiAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29udGFpbmVyLmRlY29yYXRvcnMnO1xuXG4gICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KHRoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnVuc2hpZnQobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7XG4gICAgfVxuICAgIG9wdGlvbnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7XG4gICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdjb250YWluZXIuaW52b2tlUGFydGlhbCcsICcnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYXNzaWduVG9IYXNoXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uLCBoYXNoLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4sIGhhc2gsIC4uLlxuICAvL1xuICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQgYXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoXG4gIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgY29udGV4dCxcbiAgICAgIHR5cGUsXG4gICAgICBpZDtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBpZCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaGFzaC5jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGhhc2gudHlwZXNba2V5XSA9IHR5cGU7XG4gICAgfVxuICAgIGlmIChpZCkge1xuICAgICAgaGFzaC5pZHNba2V5XSA9IGlkO1xuICAgIH1cbiAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7XG4gIH0sXG5cbiAgcHVzaElkOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChcbiAgICAgICAgJ2Jsb2NrUGFyYW1zWycgK1xuICAgICAgICAgIG5hbWVbMF0gK1xuICAgICAgICAgICddLnBhdGhbJyArXG4gICAgICAgICAgbmFtZVsxXSArXG4gICAgICAgICAgJ10nICtcbiAgICAgICAgICAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxkKSA6ICcnKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQYXRoRXhwcmVzc2lvbicpIHtcbiAgICAgIHRoaXMucHVzaFN0cmluZyhuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdTdWJFeHByZXNzaW9uJykge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnbnVsbCcpO1xuICAgIH1cbiAgfSxcblxuICAvLyBIRUxQRVJTXG5cbiAgY29tcGlsZXI6IEphdmFTY3JpcHRDb21waWxlcixcblxuICBjb21waWxlQ2hpbGRyZW46IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zKSB7XG4gICAgbGV0IGNoaWxkcmVuID0gZW52aXJvbm1lbnQuY2hpbGRyZW4sXG4gICAgICBjaGlsZCxcbiAgICAgIGNvbXBpbGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBjb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm1hdGNoRXhpc3RpbmdQcm9ncmFtKGNoaWxkKTtcblxuICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnByb2dyYW1zLnB1c2goJycpOyAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAhdGhpcy5wcmVjb21waWxlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNvcmF0b3JzW2luZGV4XSA9IGNvbXBpbGVyLmRlY29yYXRvcnM7XG4gICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaW5kZXhdID0gY2hpbGQ7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBjb21waWxlci51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGNvbXBpbGVyLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgICBjaGlsZC51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocztcbiAgICAgICAgY2hpbGQudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBleGlzdGluZy5pbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGV4aXN0aW5nLmluZGV4O1xuXG4gICAgICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZXhpc3RpbmcudXNlRGVwdGhzO1xuICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBleGlzdGluZy51c2VCbG9ja1BhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1hdGNoRXhpc3RpbmdQcm9ncmFtOiBmdW5jdGlvbihjaGlsZCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW52aXJvbm1lbnQgPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2ldO1xuICAgICAgaWYgKGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmVxdWFscyhjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9ncmFtRXhwcmVzc2lvbjogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZW52aXJvbm1lbnQuY2hpbGRyZW5bZ3VpZF0sXG4gICAgICBwcm9ncmFtUGFyYW1zID0gW2NoaWxkLmluZGV4LCAnZGF0YScsIGNoaWxkLmJsb2NrUGFyYW1zXTtcblxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwcm9ncmFtUGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2NvbnRhaW5lci5wcm9ncmFtKCcgKyBwcm9ncmFtUGFyYW1zLmpvaW4oJywgJykgKyAnKSc7XG4gIH0sXG5cbiAgdXNlUmVnaXN0ZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMucmVnaXN0ZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyc1tuYW1lXSA9IHRydWU7XG4gICAgICB0aGlzLnJlZ2lzdGVycy5saXN0LnB1c2gobmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2g6IGZ1bmN0aW9uKGV4cHIpIHtcbiAgICBpZiAoIShleHByIGluc3RhbmNlb2YgTGl0ZXJhbCkpIHtcbiAgICAgIGV4cHIgPSB0aGlzLnNvdXJjZS53cmFwKGV4cHIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RhY2sucHVzaChleHByKTtcbiAgICByZXR1cm4gZXhwcjtcbiAgfSxcblxuICBwdXNoU3RhY2tMaXRlcmFsOiBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhpcy5wdXNoKG5ldyBMaXRlcmFsKGl0ZW0pKTtcbiAgfSxcblxuICBwdXNoU291cmNlOiBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQ29udGVudCkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChcbiAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgICB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksXG4gICAgICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChzb3VyY2UpO1xuICAgIH1cbiAgfSxcblxuICByZXBsYWNlU3RhY2s6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgbGV0IHByZWZpeCA9IFsnKCddLFxuICAgICAgc3RhY2ssXG4gICAgICBjcmVhdGVkU3RhY2ssXG4gICAgICB1c2VkTGl0ZXJhbDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ3JlcGxhY2VTdGFjayBvbiBub24taW5saW5lJyk7XG4gICAgfVxuXG4gICAgLy8gV2Ugd2FudCB0byBtZXJnZSB0aGUgaW5saW5lIHN0YXRlbWVudCBpbnRvIHRoZSByZXBsYWNlbWVudCBzdGF0ZW1lbnQgdmlhICcsJ1xuICAgIGxldCB0b3AgPSB0aGlzLnBvcFN0YWNrKHRydWUpO1xuXG4gICAgaWYgKHRvcCBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgIC8vIExpdGVyYWxzIGRvIG5vdCBuZWVkIHRvIGJlIGlubGluZWRcbiAgICAgIHN0YWNrID0gW3RvcC52YWx1ZV07XG4gICAgICBwcmVmaXggPSBbJygnLCBzdGFja107XG4gICAgICB1c2VkTGl0ZXJhbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgc3RhY2sgbmFtZSBmb3IgdXNlIGJ5IHRoZSBpbmxpbmVcbiAgICAgIGNyZWF0ZWRTdGFjayA9IHRydWU7XG4gICAgICBsZXQgbmFtZSA9IHRoaXMuaW5jclN0YWNrKCk7XG5cbiAgICAgIHByZWZpeCA9IFsnKCgnLCB0aGlzLnB1c2gobmFtZSksICcgPSAnLCB0b3AsICcpJ107XG4gICAgICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RhY2spO1xuXG4gICAgaWYgKCF1c2VkTGl0ZXJhbCkge1xuICAgICAgdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZFN0YWNrKSB7XG4gICAgICB0aGlzLnN0YWNrU2xvdC0tO1xuICAgIH1cbiAgICB0aGlzLnB1c2gocHJlZml4LmNvbmNhdChpdGVtLCAnKScpKTtcbiAgfSxcblxuICBpbmNyU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3RhY2tTbG90Kys7XG4gICAgaWYgKHRoaXMuc3RhY2tTbG90ID4gdGhpcy5zdGFja1ZhcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRvcFN0YWNrTmFtZSgpO1xuICB9LFxuICB0b3BTdGFja05hbWU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnc3RhY2snICsgdGhpcy5zdGFja1Nsb3Q7XG4gIH0sXG4gIGZsdXNoSW5saW5lOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgaW5saW5lU3RhY2sgPSB0aGlzLmlubGluZVN0YWNrO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5saW5lU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnRyeSA9IGlubGluZVN0YWNrW2ldO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFtzdGFjaywgJyA9ICcsIGVudHJ5LCAnOyddKTtcbiAgICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChzdGFjayk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc0lubGluZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoO1xuICB9LFxuXG4gIHBvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVkKSB7XG4gICAgbGV0IGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSxcbiAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiBpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmICghdGhpcy5zdGFja1Nsb3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHN0YWNrIHBvcCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhY2tTbG90LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0sXG5cbiAgdG9wU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzdGFjayA9IHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayxcbiAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICBwYXJhbXNJbml0ID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplLCBwYXJhbXMsIGJsb2NrSGVscGVyKTtcbiAgICBsZXQgZm91bmRIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAoJ2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyksXG4gICAgICBjYWxsQ29udGV4dCA9IHRoaXMuYWxpYXNhYmxlKFxuICAgICAgICBgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKFxuICAgICAgICAgIDBcbiAgICAgICAgKX0gOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KWBcbiAgICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICBjb250ZXh0cyA9IFtdLFxuICAgICAgdHlwZXMgPSBbXSxcbiAgICAgIGlkcyA9IFtdLFxuICAgICAgb2JqZWN0QXJncyA9ICFwYXJhbXMsXG4gICAgICBwYXJhbTtcblxuICAgIGlmIChvYmplY3RBcmdzKSB7XG4gICAgICBwYXJhbXMgPSBbXTtcbiAgICB9XG5cbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLnF1b3RlZFN0cmluZyhoZWxwZXIpO1xuICAgIG9wdGlvbnMuaGFzaCA9IHRoaXMucG9wU3RhY2soKTtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmhhc2hJZHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgb3B0aW9ucy5oYXNoVHlwZXMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBvcHRpb25zLmhhc2hDb250ZXh0cyA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaW52ZXJzZSA9IHRoaXMucG9wU3RhY2soKSxcbiAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zLmxvYyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbik7XG4gICAgb3B0aW9ucyA9IHRoaXMub2JqZWN0TGl0ZXJhbChvcHRpb25zKTtcbiAgICBpZiAodXNlUmVnaXN0ZXIpIHtcbiAgICAgIHRoaXMudXNlUmVnaXN0ZXIoJ29wdGlvbnMnKTtcbiAgICAgIHBhcmFtcy5wdXNoKCdvcHRpb25zJyk7XG4gICAgICByZXR1cm4gWydvcHRpb25zPScsIG9wdGlvbnNdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zKSB7XG4gICAgICBwYXJhbXMucHVzaChvcHRpb25zKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSAoXG4gICAgJ2JyZWFrIGVsc2UgbmV3IHZhcicgK1xuICAgICcgY2FzZSBmaW5hbGx5IHJldHVybiB2b2lkJyArXG4gICAgJyBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlJyArXG4gICAgJyBjb250aW51ZSBmdW5jdGlvbiB0aGlzIHdpdGgnICtcbiAgICAnIGRlZmF1bHQgaWYgdGhyb3cnICtcbiAgICAnIGRlbGV0ZSBpbiB0cnknICtcbiAgICAnIGRvIGluc3RhbmNlb2YgdHlwZW9mJyArXG4gICAgJyBhYnN0cmFjdCBlbnVtIGludCBzaG9ydCcgK1xuICAgICcgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYycgK1xuICAgICcgYnl0ZSBleHRlbmRzIGxvbmcgc3VwZXInICtcbiAgICAnIGNoYXIgZmluYWwgbmF0aXZlIHN5bmNocm9uaXplZCcgK1xuICAgICcgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MnICtcbiAgICAnIGNvbnN0IGdvdG8gcHJpdmF0ZSB0cmFuc2llbnQnICtcbiAgICAnIGRlYnVnZ2VyIGltcGxlbWVudHMgcHJvdGVjdGVkIHZvbGF0aWxlJyArXG4gICAgJyBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQgYXdhaXQnICtcbiAgICAnIG51bGwgdHJ1ZSBmYWxzZSdcbiAgKS5zcGxpdCgnICcpO1xuXG4gIGNvbnN0IGNvbXBpbGVyV29yZHMgPSAoSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge30pO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb21waWxlcldvcmRzW3Jlc2VydmVkV29yZHNbaV1dID0gdHJ1ZTtcbiAgfVxufSkoKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBNYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG4gKi9cbkphdmFTY3JpcHRDb21waWxlci5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIChcbiAgICAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmXG4gICAgL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KG5hbWUpXG4gICk7XG59O1xuXG5mdW5jdGlvbiBzdHJpY3RMb29rdXAocmVxdWlyZVRlcm1pbmFsLCBjb21waWxlciwgcGFydHMsIGksIHR5cGUpIHtcbiAgbGV0IHN0YWNrID0gY29tcGlsZXIucG9wU3RhY2soKSxcbiAgICBsZW4gPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICBsZW4tLTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzdGFjayA9IGNvbXBpbGVyLm5hbWVMb29rdXAoc3RhY2ssIHBhcnRzW2ldLCB0eXBlKTtcbiAgfVxuXG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksXG4gICAgICAnKCcsXG4gICAgICBzdGFjayxcbiAgICAgICcsICcsXG4gICAgICBjb21waWxlci5xdW90ZWRTdHJpbmcocGFydHNbaV0pLFxuICAgICAgJywgJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNvbXBpbGVyLnNvdXJjZS5jdXJyZW50TG9jYXRpb24pLFxuICAgICAgJyApJ1xuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEphdmFTY3JpcHRDb21waWxlcjtcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _handlebarsRuntime = require('./handlebars.runtime');\n\nvar _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);\n\n// Compiler imports\n\nvar _handlebarsCompilerAst = require('./handlebars/compiler/ast');\n\nvar _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);\n\nvar _handlebarsCompilerBase = require('./handlebars/compiler/base');\n\nvar _handlebarsCompilerCompiler = require('./handlebars/compiler/compiler');\n\nvar _handlebarsCompilerJavascriptCompiler = require('./handlebars/compiler/javascript-compiler');\n\nvar _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);\n\nvar _handlebarsCompilerVisitor = require('./handlebars/compiler/visitor');\n\nvar _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\nvar _create = _handlebarsRuntime2['default'].create;\nfunction create() {\n var hb = _create();\n\n hb.compile = function (input, options) {\n return _handlebarsCompilerCompiler.compile(input, options, hb);\n };\n hb.precompile = function (input, options) {\n return _handlebarsCompilerCompiler.precompile(input, options, hb);\n };\n\n hb.AST = _handlebarsCompilerAst2['default'];\n hb.Compiler = _handlebarsCompilerCompiler.Compiler;\n hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];\n hb.Parser = _handlebarsCompilerBase.parser;\n hb.parse = _handlebarsCompilerBase.parse;\n hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing;\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst.Visitor = _handlebarsCompilerVisitor2['default'];\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUNBQW9CLHNCQUFzQjs7Ozs7O3FDQUcxQiwyQkFBMkI7Ozs7c0NBS3BDLDRCQUE0Qjs7MENBQ1csZ0NBQWdDOztvREFDL0MsMkNBQTJDOzs7O3lDQUN0RCwrQkFBK0I7Ozs7b0NBRTVCLDBCQUEwQjs7OztBQUVqRCxJQUFJLE9BQU8sR0FBRywrQkFBUSxNQUFNLENBQUM7QUFDN0IsU0FBUyxNQUFNLEdBQUc7QUFDaEIsTUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sb0NBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNwQyxDQUFDO0FBQ0YsSUFBRSxDQUFDLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdkMsV0FBTyx1Q0FBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQ3ZDLENBQUM7O0FBRUYsSUFBRSxDQUFDLEdBQUcscUNBQU0sQ0FBQztBQUNiLElBQUUsQ0FBQyxRQUFRLHVDQUFXLENBQUM7QUFDdkIsSUFBRSxDQUFDLGtCQUFrQixvREFBcUIsQ0FBQztBQUMzQyxJQUFFLENBQUMsTUFBTSxpQ0FBUyxDQUFDO0FBQ25CLElBQUUsQ0FBQyxLQUFLLGdDQUFRLENBQUM7QUFDakIsSUFBRSxDQUFDLHNCQUFzQixpREFBeUIsQ0FBQzs7QUFFbkQsU0FBTyxFQUFFLENBQUM7Q0FDWDs7QUFFRCxJQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIsa0NBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLElBQUksQ0FBQyxPQUFPLHlDQUFVLENBQUM7O0FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O3FCQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7XG4gIHBhcnNlciBhcyBQYXJzZXIsXG4gIHBhcnNlLFxuICBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nXG59IGZyb20gJy4vaGFuZGxlYmFycy9jb21waWxlci9iYXNlJztcbmltcG9ydCB7IENvbXBpbGVyLCBjb21waWxlLCBwcmVjb21waWxlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJztcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInO1xuaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG5sZXQgX2NyZWF0ZSA9IHJ1bnRpbWUuY3JlYXRlO1xuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgaGIgPSBfY3JlYXRlKCk7XG5cbiAgaGIuY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcbiAgaGIucHJlY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBBU1Q7XG4gIGhiLkNvbXBpbGVyID0gQ29tcGlsZXI7XG4gIGhiLkphdmFTY3JpcHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjtcbiAgaGIuUGFyc2VyID0gUGFyc2VyO1xuICBoYi5wYXJzZSA9IHBhcnNlO1xuICBoYi5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nID0gcGFyc2VXaXRob3V0UHJvY2Vzc2luZztcblxuICByZXR1cm4gaGI7XG59XG5cbmxldCBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxubm9Db25mbGljdChpbnN0KTtcblxuaW5zdC5WaXNpdG9yID0gVmlzaXRvcjtcblxuaW5zdFsnZGVmYXVsdCddID0gaW5zdDtcblxuZXhwb3J0IGRlZmF1bHQgaW5zdDtcbiJdfQ==\n","import * as marked from \"marked\";\nimport Handlebars from \"handlebars\";\nimport { Section, Story } from \"./types.js\";\nimport { State } from \"./state.js\";\n\nexport class TextProcessor {\n story: Story;\n state: State;\n getCurrentSection: () => Section;\n handlebars: typeof Handlebars;\n\n constructor (story: Story,\n state: State,\n currentSection: () => Section) {\n this.story = story;\n this.state = state;\n this.getCurrentSection = currentSection;\n this.handlebars = Handlebars.create();\n\n this.handlebars.registerHelper(\"embed\", (name: string) => {\n const currentSection = this.getCurrentSection();\n if (currentSection.passages && name in currentSection.passages) {\n return this.process(currentSection.passages[name].text || \"\", true);\n } else if (name in this.story.sections) {\n return this.process(this.story.sections[name].text || \"\", true);\n }\n });\n\n this.handlebars.registerHelper(\"seen\", (name: string) => this.state.getSeen(name));\n this.handlebars.registerHelper(\"get\", (attribute: string) => this.state.get(attribute));\n this.handlebars.registerHelper(\"and\", (...args) => args.slice(0,-1).every(Boolean));\n this.handlebars.registerHelper(\"or\", (...args) => args.slice(0,-1).some(Boolean));\n this.handlebars.registerHelper(\"not\", (v) => !v);\n this.handlebars.registerHelper(\"eq\", (a,b) => a == b);\n this.handlebars.registerHelper(\"ne\", (a,b) => a != b);\n this.handlebars.registerHelper(\"gt\", (a,b) => a > b);\n this.handlebars.registerHelper(\"lt\", (a,b) => a < b);\n this.handlebars.registerHelper(\"gte\", (a,b) => a >= b);\n this.handlebars.registerHelper(\"lte\", (a,b) => a <= b);\n this.handlebars.registerHelper(\"array\", function (...args) {\n args.pop(); // remove last argument - options\n return args;\n });\n\n const addAdditionalParameters = (options: any) => {\n let result = \"\";\n const setters = options.hash.set as string || \"\";\n if (setters) {\n result += ` data-set='${JSON.stringify(setters.split(\",\").map(s => s.trim()))}'`;\n }\n return result;\n };\n\n this.handlebars.registerHelper(\"section\", (section: string, options) => {\n const text = options.hash.text as string || section;\n return new Handlebars.SafeString(`<a class=\"squiffy-link link-section\" data-section=\"${section}\"${addAdditionalParameters(options)} role=\"link\" tabindex=\"0\">${text}</a>`);\n });\n\n this.handlebars.registerHelper(\"passage\", (passage: string, options) => {\n const text = options.hash.text as string || passage;\n return new Handlebars.SafeString(`<a class=\"squiffy-link link-passage\" data-passage=\"${passage}\"${addAdditionalParameters(options)} role=\"link\" tabindex=\"0\">${text}</a>`);\n });\n }\n\n process(text: string, inline: boolean) {\n const template = this.handlebars.compile(text);\n text = template(this.state.getStore());\n\n if (inline) {\n return marked.parseInline(text, { async: false }).trim();\n }\n else {\n return marked.parse(text, { async: false }).trim();\n }\n }\n}","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nexport type SquiffyEventMap = {\n linkClick: { linkType: string }; // a story link was clicked\n set: { attribute: string, value: any }; // an attribute was set\n canGoBackChanged: { canGoBack: boolean }; // whether the \"back\" button should be enabled\n};\n\nexport type SquiffyEventHandler<E extends keyof SquiffyEventMap> =\n (payload: SquiffyEventMap[E]) => void;\n\nexport class Emitter<Events extends Record<string, any>> {\n private listeners = new Map<keyof Events, Set<Function>>();\n\n on<E extends keyof Events>(event: E, handler: (p: Events[E]) => void) {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n this.listeners.get(event)!.add(handler);\n return () => this.off(event, handler);\n }\n\n off<E extends keyof Events>(event: E, handler: (p: Events[E]) => void) {\n this.listeners.get(event)?.delete(handler);\n }\n\n once<E extends keyof Events>(event: E, handler: (p: Events[E]) => void) {\n const off = this.on(event, (payload) => {\n off();\n handler(payload);\n });\n return off;\n }\n\n emit<E extends keyof Events>(event: E, payload: Events[E]) {\n this.listeners.get(event)?.forEach(h => {\n try { (h as any)(payload); } catch (err) {\n // Swallow so a bad handler doesn't break the game; optionally log.\n console.error(`[Squiffy] handler for \"${String(event)}\" failed`, err);\n }\n });\n }\n}\n","import { Emitter, SquiffyEventMap } from \"./events.js\";\n\nexport class State {\n persist: boolean;\n storyId: string;\n onSet: (attribute: string, value: any) => void;\n onSetInternal?: (attribute: string, oldValue: any, newValue: any) => void;\n store: Record<string, any> = {};\n emitter: Emitter<SquiffyEventMap>;\n\n constructor(persist: boolean,\n storyId: string,\n onSet: (attribute: string, value: any) => void,\n emitter: Emitter<SquiffyEventMap>,\n onSetInternal?: (attribute: string, oldValue: any, newValue: any) => void) {\n this.persist = persist;\n this.storyId = storyId;\n this.onSet = onSet;\n this.emitter = emitter;\n this.onSetInternal = onSetInternal;\n }\n\n private usePersistentStorage() {\n return this.persist && window.localStorage && this.storyId;\n }\n\n set(attribute: string, value: any) {\n this.setInternal(attribute, value, true);\n }\n\n setInternal(attribute: string, value: any, raiseEvents: boolean) {\n if (typeof value === \"undefined\") value = true;\n\n if (raiseEvents && this.onSetInternal) {\n this.onSetInternal(attribute, this.get(attribute), structuredClone(value));\n }\n\n this.store[attribute] = structuredClone(value);\n\n if (this.usePersistentStorage()) {\n localStorage[this.storyId + \"-\" + attribute] = JSON.stringify(value);\n }\n\n if (raiseEvents) {\n this.emitter.emit(\"set\", { attribute, value });\n }\n\n this.onSet(attribute, value);\n }\n\n get(attribute: string): any {\n if (attribute in this.store) {\n return structuredClone(this.store[attribute]);\n }\n\n return null;\n }\n\n getStore() {\n return structuredClone(this.store);\n }\n\n load() {\n if (!this.usePersistentStorage()) {\n return;\n }\n\n const keys = Object.keys(localStorage);\n for (const key of keys) {\n if (key.startsWith(this.storyId + \"-\")) {\n const attribute = key.substring(this.storyId.length + 1);\n this.store[attribute] = JSON.parse(localStorage[key]);\n }\n }\n }\n\n reset() {\n this.store = {};\n\n if (!this.usePersistentStorage()) {\n return;\n }\n\n const keys = Object.keys(localStorage);\n for (const key of keys) {\n if (key.startsWith(this.storyId)) {\n localStorage.removeItem(key);\n }\n }\n }\n\n setSeen(sectionName: string) {\n let seenSections = this.get(\"_seen_sections\");\n if (!seenSections) seenSections = [];\n if (seenSections.indexOf(sectionName) == -1) {\n seenSections.push(sectionName);\n this.set(\"_seen_sections\", seenSections);\n }\n }\n\n getSeen(sectionName: string) {\n const seenSections = this.get(\"_seen_sections\");\n if (!seenSections) return false;\n return (seenSections.indexOf(sectionName) > -1);\n }\n}","import { Story } from \"./types.js\";\n\nexport function updateStory(oldStory: Story,\n newStory: Story,\n outputElement: HTMLElement,\n ui: any,\n disableLink: (link: Element) => void) {\n\n function safeQuerySelector(name: string) {\n return name.replace(/'/g, \"\\\\'\");\n }\n\n function getSectionContent(section: string) {\n return outputElement.querySelectorAll(`[data-source='[[${safeQuerySelector(section)}]]']`);\n }\n\n function getPassageContent(section: string, passage: string) {\n return outputElement.querySelectorAll(`[data-source='[[${safeQuerySelector(section)}]][${safeQuerySelector(passage)}]']`);\n }\n\n function updateElementTextPreservingDisabledPassageLinks(element: Element, text: string) {\n // Record which passage links are disabled\n const disabledPassages = Array.from(element\n .querySelectorAll(\"a.link-passage.disabled\"))\n .map((el: HTMLElement) => el.getAttribute(\"data-passage\"));\n\n element.innerHTML = text;\n\n // Re-disable links that were disabled before the update\n for (const passage of disabledPassages) {\n const link = element.querySelector(`a.link-passage[data-passage=\"${passage}\"]`);\n if (link) disableLink(link);\n }\n }\n\n for (const existingSection of Object.keys(oldStory.sections)) {\n const elements = getSectionContent(existingSection);\n if (elements.length) {\n const newSection = newStory.sections[existingSection];\n if (!newSection) {\n // section has been deleted\n for (const element of elements) {\n const parentOutputSection = element.closest(\".squiffy-output-section\");\n parentOutputSection.remove();\n }\n }\n else if (newSection.text != oldStory.sections[existingSection].text) {\n // section has been updated\n for (const element of elements) {\n updateElementTextPreservingDisabledPassageLinks(element, ui.processText(newSection.text, false));\n }\n }\n }\n\n if (!oldStory.sections[existingSection].passages) continue;\n\n for (const existingPassage of Object.keys(oldStory.sections[existingSection].passages)) {\n const elements = getPassageContent(existingSection, existingPassage);\n if (!elements.length) continue;\n\n const newPassage = newStory.sections[existingSection]?.passages && newStory.sections[existingSection]?.passages[existingPassage];\n if (!newPassage) {\n // passage has been deleted\n for (const element of elements) {\n const parentOutputPassage = element.closest(\".squiffy-output-passage\");\n parentOutputPassage.remove();\n }\n }\n else if (newPassage.text && newPassage.text != oldStory.sections[existingSection].passages[existingPassage].text) {\n // passage has been updated\n for (const element of elements) {\n updateElementTextPreservingDisabledPassageLinks(element, ui.processText(newPassage.text, false));\n }\n }\n }\n }\n}","import { TextProcessor } from \"./textProcessor.js\";\nimport { SquiffyPlugin } from \"./types.plugins.js\";\nimport { State } from \"./state.js\";\nimport { LinkHandler } from \"./linkHandler.js\";\nimport { Emitter, SquiffyEventMap } from \"./events.js\";\nimport { Animation } from \"./animation.js\";\n\nexport class PluginManager {\n outputElement: HTMLElement;\n textProcessor: TextProcessor;\n state: State;\n linkHandler: LinkHandler;\n getSectionText: (name: string) => string | null;\n getPassageText: (name: string) => string | null;\n processText: (text: string, inline: boolean) => string;\n addTransition: (fn: () => Promise<void>) => void;\n emitter: Emitter<SquiffyEventMap>;\n plugins: SquiffyPlugin[] = [];\n animation: Animation;\n\n constructor(outputElement: HTMLElement,\n textProcessor: TextProcessor,\n state: State,\n linkHandler: LinkHandler,\n getSectionText: (name: string) => string | null,\n getPassageText: (name: string) => string | null,\n processText: (text: string, inline: boolean) => string,\n addTransition: (fn: () => Promise<void>) => void,\n animation: Animation,\n emitter: Emitter<SquiffyEventMap>) {\n this.outputElement = outputElement;\n this.textProcessor = textProcessor;\n this.state = state;\n this.linkHandler = linkHandler;\n this.getSectionText = getSectionText;\n this.getPassageText = getPassageText;\n this.processText = processText;\n this.addTransition = addTransition;\n this.animation = animation;\n this.emitter = emitter;\n }\n\n add(plugin: SquiffyPlugin) {\n const instance = plugin.init({\n outputElement: this.outputElement,\n registerHelper: (name, helper) => {\n this.textProcessor.handlebars.registerHelper(name, helper);\n },\n registerLinkHandler: (type, handler) => {\n this.linkHandler.registerLinkHandler(type, handler);\n },\n get: (attribute) => this.state.get(attribute),\n set: (attribute, value) => this.state.set(attribute, value),\n getSectionText: this.getSectionText,\n getPassageText: this.getPassageText,\n processText: this.processText,\n addTransition: this.addTransition,\n animation: this.animation,\n on: (e, h) => this.emitter.on(e, h),\n off: (e, h) => this.emitter.off(e, h),\n once: (e, h) => this.emitter.once(e, h),\n });\n this.plugins.push(plugin);\n return instance;\n }\n\n onWrite(el: HTMLElement) {\n this.plugins.forEach(p => p.onWrite?.(el));\n }\n\n onLoad() {\n this.plugins.forEach(p => p.onLoad?.());\n }\n}","export function fadeReplace(element: HTMLElement, text: string): Promise<void> {\n return new Promise((resolve) => {\n element.addEventListener(\"transitionend\", function () {\n element.innerHTML = text;\n\n element.addEventListener(\"transitionend\", function () {\n element.classList.remove(\"fade-in\");\n resolve();\n }, { once: true });\n\n element.classList.remove(\"fade-out\");\n element.classList.add(\"fade-in\");\n }, { once: true });\n\n element.classList.add(\"fade-out\");\n });\n}","import { PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\nimport { fadeReplace } from \"../utils.js\";\n\nexport function ReplaceLabel() : SquiffyPlugin {\n return {\n name: \"replaceLabel\",\n init(squiffy: PluginHost) {\n squiffy.registerHelper(\"label\", (name: string, options) => {\n return new Handlebars.SafeString(`<span class=\"squiffy-label-${name}\">${options.fn(this)}</span>`);\n });\n squiffy.registerHelper(\"replace\", (name: string, options) => {\n const result = options.fn(this);\n const element = squiffy.outputElement.querySelector<HTMLElement>(`.squiffy-label-${name}`);\n if (element) {\n squiffy.addTransition(() => fadeReplace(element, result));\n }\n return \"\";\n });\n }\n };\n}","import { HandleLinkResult, PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\nimport type { SafeString } from \"handlebars\";\n\nexport function RotateSequencePlugin() : SquiffyPlugin {\n const rotateSequence = (squiffy: PluginHost, type: string, items: (string | SafeString)[], options: any) => {\n const stringItems = items.map(i => i.toString());\n const rotation = rotate(stringItems, null);\n const attribute = options.hash.set as string || \"\";\n if (attribute) {\n squiffy.set(attribute, rotation[0]);\n }\n const optionsString = JSON.stringify(rotation.slice(1)) || \"\";\n const text = options.hash.show == \"next\" ? rotation[1] : rotation[0];\n return new Handlebars.SafeString(`<a class=\"squiffy-link\" data-handler=\"${type}\" data-value=\"${rotation[0]}\" data-show=\"${options.hash.show || \"\"}\" data-options='${optionsString}' data-attribute=\"${attribute}\" role=\"link\">${text}</a>`);\n };\n\n const handleLink = (squiffy: PluginHost, link: HTMLElement, isRotate: boolean) => {\n const result: HandleLinkResult = {};\n const options = JSON.parse(link.getAttribute(\"data-options\")) as string[] || [];\n\n const rotateResult = rotate(options, isRotate ? link.getAttribute(\"data-value\") : \"\");\n\n link.innerHTML = link.getAttribute(\"data-show\") == \"next\" ? rotateResult[1] : rotateResult[0];\n link.setAttribute(\"data-value\", rotateResult[0]);\n link.setAttribute(\"data-options\", JSON.stringify(rotateResult.slice(1)) || \"\");\n if (!rotateResult[1]) {\n result.disableLink = true;\n }\n const attribute = link.getAttribute(\"data-attribute\");\n if (attribute) {\n squiffy.set(attribute, link.getAttribute(\"data-value\"));\n }\n\n return result;\n };\n\n const rotate = (options: string[], current: string | null): string[] => {\n const next = options[0];\n const remaining = options.slice(1);\n if (current) remaining.push(current);\n return [next, ...remaining];\n };\n\n return {\n name: \"rotateSequence\",\n init(squiffy: PluginHost) {\n squiffy.registerHelper(\"rotate\", (items: (string | SafeString)[], options) =>\n rotateSequence(squiffy, \"rotate\", items, options));\n squiffy.registerHelper(\"sequence\", (items: (string | SafeString)[], options) =>\n rotateSequence(squiffy, \"sequence\", items, options));\n\n squiffy.registerLinkHandler(\"rotate\", (link: HTMLElement) => {\n return handleLink(squiffy, link, true);\n });\n squiffy.registerLinkHandler(\"sequence\", (link: HTMLElement) => {\n return handleLink(squiffy, link, false);\n });\n }\n };\n}","import { PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\nimport type { SafeString } from \"handlebars\";\n\nexport function RandomPlugin() : SquiffyPlugin {\n return {\n name: \"random\",\n init(squiffy: PluginHost) {\n squiffy.registerHelper(\"random\", (items: (string | SafeString)[], options) => {\n const stringItems = items.map(i => i.toString());\n const randomIndex = Math.floor(Math.random() * stringItems.length);\n const item = stringItems[randomIndex];\n\n const attribute = options.hash.set as string || \"\";\n if (attribute) {\n squiffy.set(attribute, item);\n }\n return new Handlebars.SafeString(item);\n });\n }\n };\n}","import { PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\nimport { fadeReplace } from \"../utils.js\";\nimport { SquiffyEventMap } from \"../events.js\";\n\nexport function LivePlugin(): SquiffyPlugin {\n let squiffy: PluginHost;\n return {\n name: \"live\",\n init(sq: PluginHost) {\n squiffy = sq;\n\n // No need to render the attribute value (or section or passage contents) here - this\n // is handled by onWrite, so that we pick up any attribute values set in the same passage.\n // TODO: We could mark values as \"pending\", then in onWrite we could iteratively resolve\n // any that are still pending. That would let us pick up {{live}} helpers inside embed\n // live sections/passages.\n squiffy.registerHelper(\"live\", (attribute: string, options) => {\n const section = options.hash.section as string || \"\";\n if (section) {\n return new Handlebars.SafeString(`<span class=\"squiffy-live\" data-attribute=\"${attribute}\" data-section=\"${section}\"></span>`);\n }\n const passage = options.hash.passage as string || \"\";\n if (passage) {\n return new Handlebars.SafeString(`<span class=\"squiffy-live\" data-attribute=\"${attribute}\" data-passage=\"${passage}\"></span>`);\n }\n return new Handlebars.SafeString(`<span class=\"squiffy-live\" data-attribute=\"${attribute}\"></span>`);\n });\n\n const onSet = async (e: SquiffyEventMap[\"set\"]) => {\n const promises: Promise<void>[] = [];\n const selector = `.squiffy-live[data-attribute=\"${CSS.escape(e.attribute)}\"]`;\n for (const el of squiffy.outputElement.querySelectorAll<HTMLElement>(selector)) {\n const oldContent = el.innerHTML;\n let newContent = \"\";\n if (el.dataset.section) {\n const sectionText = squiffy.getSectionText(el.dataset.section);\n if (sectionText) {\n newContent = squiffy.processText(sectionText, true);\n }\n } else if (el.dataset.passage) {\n const passageText = squiffy.getPassageText(el.dataset.passage);\n if (passageText) {\n newContent = squiffy.processText(passageText, true);\n }\n } else {\n newContent = e.value;\n }\n if (oldContent !== newContent) {\n promises.push(fadeReplace(el, newContent));\n }\n }\n await Promise.all(promises);\n };\n\n let setQueue: Promise<void> = Promise.resolve();\n squiffy.on(\"set\", (e) => {\n setQueue = setQueue.then(() => onSet(e));\n });\n },\n onWrite(element: HTMLElement) {\n if (!squiffy) return;\n\n const selector = \".squiffy-live\";\n element.querySelectorAll<HTMLElement>(selector).forEach((el) => {\n if (el.dataset.section) {\n const sectionText = squiffy.getSectionText(el.dataset.section);\n if (sectionText) {\n el.innerHTML = squiffy.processText(sectionText, true);\n }\n } else if (el.dataset.passage) {\n const passageText = squiffy.getPassageText(el.dataset.passage);\n if (passageText) {\n el.innerHTML = squiffy.processText(passageText, true);\n }\n } else {\n const attribute = el.dataset.attribute;\n el.textContent = attribute ? squiffy.get(attribute) : \"\";\n }\n });\n }\n };\n}","import { PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\n\nexport function AnimatePlugin(): SquiffyPlugin {\n let squiffy: PluginHost;\n\n const parseDataset = (dataset: DOMStringMap): Record<string, any> => {\n const result: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(dataset)) {\n if (value == null) {\n result[key] = value;\n continue;\n }\n\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n }\n\n return result;\n };\n\n const setupAnimations = (element: HTMLElement) => {\n const selector = \".squiffy-animate\";\n for (const el of element.querySelectorAll<HTMLElement>(selector)) {\n const params = parseDataset(el.dataset);\n\n if (!params.content) {\n continue;\n }\n el.innerHTML = params.content;\n\n if (!params.name) {\n continue;\n }\n\n const runAnimation = () => {\n if (params.loop) {\n squiffy.animation.runAnimation(params.name, el, params, () => {}, true);\n } else {\n squiffy.addTransition(() => {\n return new Promise<void>((resolve) => {\n const currentContent = el.innerHTML;\n squiffy.animation.runAnimation(params.name, el, params, () => {\n el.classList.remove(\"squiffy-animate\");\n el.innerHTML = currentContent;\n resolve();\n }, false);\n });\n });\n }\n };\n\n if (params.trigger === \"link\") {\n const links = el.querySelectorAll(\"a\");\n for (const link of links) {\n squiffy.animation.addLinkAnimation(link, runAnimation);\n }\n } else {\n runAnimation();\n }\n }\n };\n\n return {\n name: \"animate\",\n init(sq: PluginHost) {\n squiffy = sq;\n\n squiffy.registerHelper(\"animate\", (name: string, options) => {\n const content = options.fn(this);\n const dataset: Record<string, any> = {\n name,\n content,\n ...options.hash,\n };\n\n const attrs = Object.entries(dataset)\n .map(([key, value]) =>\n ` data-${Handlebars.escapeExpression(key)}=\"${Handlebars.escapeExpression(JSON.stringify(value))}\"`\n )\n .join(\"\");\n\n return new Handlebars.SafeString(`<span class=\"squiffy-animate\"${attrs}></span>`);\n });\n },\n onWrite(element: HTMLElement) {\n setupAnimations(element);\n },\n onLoad() {\n setupAnimations(squiffy.outputElement);\n }\n };\n}","import { ReplaceLabel } from \"./replaceLabel.js\";\nimport { RotateSequencePlugin } from \"./rotateSequence.js\";\nimport { RandomPlugin } from \"./random.js\";\nimport { LivePlugin } from \"./live.js\";\nimport { AnimatePlugin } from \"./animate.js\";\n\nexport const Plugins = {\n ReplaceLabel,\n RotateSequencePlugin,\n RandomPlugin,\n LivePlugin,\n AnimatePlugin,\n};","import { HandleLinkResult } from \"./types.plugins.js\";\n\nexport class LinkHandler {\n linkHandlers: {[type: string]: (el: HTMLElement) => HandleLinkResult} = {};\n\n registerLinkHandler(type: string, handler: (el: HTMLElement) => HandleLinkResult) {\n this.linkHandlers[type] = handler;\n }\n\n handleLink(link: HTMLElement): [found: boolean, type: string, result: HandleLinkResult] {\n const type = link.getAttribute(\"data-handler\") || \"\";\n const handler = this.linkHandlers[type];\n if (handler) {\n return [true, type, handler(link)];\n }\n return [false, type, null];\n }\n}","/**\n * anime.js - ESM\n * @version v4.1.3\n * @author Julian Garnier\n * @license MIT\n * @copyright (c) 2025 Julian Garnier\n * @see https://animejs.com\n */\n\n// Global types ////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} DefaultsParams\n * @property {Number|String} [id]\n * @property {PercentageKeyframes|DurationKeyframes} [keyframes]\n * @property {EasingParam} [playbackEase]\n * @property {Number} [playbackRate]\n * @property {Number} [frameRate]\n * @property {Number|Boolean} [loop]\n * @property {Boolean} [reversed]\n * @property {Boolean} [alternate]\n * @property {Boolean|ScrollObserver} [autoplay]\n * @property {Number|FunctionValue} [duration]\n * @property {Number|FunctionValue} [delay]\n * @property {Number} [loopDelay]\n * @property {EasingParam} [ease]\n * @property {'none'|'replace'|'blend'|compositionTypes} [composition]\n * @property {(v: any) => any} [modifier]\n * @property {(tickable: Tickable) => void} [onBegin]\n * @property {(tickable: Tickable) => void} [onBeforeUpdate]\n * @property {(tickable: Tickable) => void} [onUpdate]\n * @property {(tickable: Tickable) => void} [onLoop]\n * @property {(tickable: Tickable) => void} [onPause]\n * @property {(tickable: Tickable) => void} [onComplete]\n * @property {(renderable: Renderable) => void} [onRender]\n */\n\n/** @typedef {JSAnimation|Timeline} Renderable */\n/** @typedef {Timer|Renderable} Tickable */\n/** @typedef {Timer&JSAnimation&Timeline} CallbackArgument */\n/** @typedef {Animatable|Tickable|WAAPIAnimation|Draggable|ScrollObserver|TextSplitter|Scope} Revertible */\n\n// Stagger types ///////////////////////////////////////////////////////////////\n\n/**\n * @template T\n * @callback StaggerFunction\n * @param {Target} [target]\n * @param {Number} [index]\n * @param {Number} [length]\n * @param {Timeline} [tl]\n * @return {T}\n */\n\n/**\n * @typedef {Object} StaggerParams\n * @property {Number|String} [start]\n * @property {Number|'first'|'center'|'last'|'random'} [from]\n * @property {Boolean} [reversed]\n * @property {Array.<Number>} [grid]\n * @property {('x'|'y')} [axis]\n * @property {String|((target: Target, i: Number, length: Number) => Number)} [use]\n * @property {Number} [total]\n * @property {EasingParam} [ease]\n * @property {TweenModifier} [modifier]\n */\n\n// Eases types /////////////////////////////////////////////////////////////////\n\n/**\n * @callback EasingFunction\n * @param {Number} time\n * @return {Number}\n */\n\n/**\n * @typedef {('linear'|'linear(x1, x2 25%, x3)'|'in'|'out'|'inOut'|'inQuad'|'outQuad'|'inOutQuad'|'inCubic'|'outCubic'|'inOutCubic'|'inQuart'|'outQuart'|'inOutQuart'|'inQuint'|'outQuint'|'inOutQuint'|'inSine'|'outSine'|'inOutSine'|'inCirc'|'outCirc'|'inOutCirc'|'inExpo'|'outExpo'|'inOutExpo'|'inBounce'|'outBounce'|'inOutBounce'|'inBack'|'outBack'|'inOutBack'|'inElastic'|'outElastic'|'inOutElastic'|'irregular'|'cubicBezier'|'steps'|'in(p = 1.675)'|'out(p = 1.675)'|'inOut(p = 1.675)'|'inBack(overshoot = 1.70158)'|'outBack(overshoot = 1.70158)'|'inOutBack(overshoot = 1.70158)'|'inElastic(amplitude = 1, period = .3)'|'outElastic(amplitude = 1, period = .3)'|'inOutElastic(amplitude = 1, period = .3)'|'irregular(length = 10, randomness = 1)'|'cubicBezier(x1, y1, x2, y2)'|'steps(steps = 10)')} EaseStringParamNames\n */\n\n// A hack to get both ease names suggestions AND allow any strings\n// https://github.com/microsoft/TypeScript/issues/29729#issuecomment-460346421\n/** @typedef {(String & {})|EaseStringParamNames|EasingFunction|Spring} EasingParam */\n\n/** @typedef {HTMLElement|SVGElement} DOMTarget */\n/** @typedef {Record<String, any>} JSTarget */\n/** @typedef {DOMTarget|JSTarget} Target */\n/** @typedef {Target|NodeList|String} TargetSelector */\n/** @typedef {DOMTarget|NodeList|String} DOMTargetSelector */\n/** @typedef {Array.<DOMTargetSelector>|DOMTargetSelector} DOMTargetsParam */\n/** @typedef {Array.<DOMTarget>} DOMTargetsArray */\n/** @typedef {Array.<JSTarget>|JSTarget} JSTargetsParam */\n/** @typedef {Array.<JSTarget>} JSTargetsArray */\n/** @typedef {Array.<TargetSelector>|TargetSelector} TargetsParam */\n/** @typedef {Array.<Target>} TargetsArray */\n\n// Spring types ////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} SpringParams\n * @property {Number} [mass=1] - Mass, default 1\n * @property {Number} [stiffness=100] - Stiffness, default 100\n * @property {Number} [damping=10] - Damping, default 10\n * @property {Number} [velocity=0] - Initial velocity, default 0\n */\n\n // Callback types //////////////////////////////////////////////////////////////\n\n/**\n * @template T\n * @callback Callback\n * @param {T} self - Returns itself\n * @param {PointerEvent} [e]\n * @return {*}\n */\n\n/**\n * @template {object} T\n * @typedef {Object} TickableCallbacks\n * @property {Callback<T>} [onBegin]\n * @property {Callback<T>} [onBeforeUpdate]\n * @property {Callback<T>} [onUpdate]\n * @property {Callback<T>} [onLoop]\n * @property {Callback<T>} [onPause]\n * @property {Callback<T>} [onComplete]\n */\n\n/**\n * @template {object} T\n * @typedef {Object} RenderableCallbacks\n * @property {Callback<T>} [onRender]\n */\n\n// Timer types /////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} TimerOptions\n * @property {Number|String} [id]\n * @property {TweenParamValue} [duration]\n * @property {TweenParamValue} [delay]\n * @property {Number} [loopDelay]\n * @property {Boolean} [reversed]\n * @property {Boolean} [alternate]\n * @property {Boolean|Number} [loop]\n * @property {Boolean|ScrollObserver} [autoplay]\n * @property {Number} [frameRate]\n * @property {Number} [playbackRate]\n */\n\n/**\n\n/**\n * @typedef {TimerOptions & TickableCallbacks<Timer>} TimerParams\n */\n\n// Tween types /////////////////////////////////////////////////////////////////\n\n/**\n * @callback FunctionValue\n * @param {Target} target - The animated target\n * @param {Number} index - The target index\n * @param {Number} length - The total number of animated targets\n * @return {Number|String|TweenObjectValue|Array.<Number|String|TweenObjectValue>}\n */\n\n/**\n * @callback TweenModifier\n * @param {Number} value - The animated value\n * @return {Number|String}\n */\n\n/** @typedef {[Number, Number, Number, Number]} ColorArray */\n\n/**\n * @typedef {Object} Tween\n * @property {Number} id\n * @property {JSAnimation} parent\n * @property {String} property\n * @property {Target} target\n * @property {String|Number} _value\n * @property {Function|null} _func\n * @property {EasingFunction} _ease\n * @property {Array.<Number>} _fromNumbers\n * @property {Array.<Number>} _toNumbers\n * @property {Array.<String>} _strings\n * @property {Number} _fromNumber\n * @property {Number} _toNumber\n * @property {Array.<Number>} _numbers\n * @property {Number} _number\n * @property {String} _unit\n * @property {TweenModifier} _modifier\n * @property {Number} _currentTime\n * @property {Number} _delay\n * @property {Number} _updateDuration\n * @property {Number} _startTime\n * @property {Number} _changeDuration\n * @property {Number} _absoluteStartTime\n * @property {tweenTypes} _tweenType\n * @property {valueTypes} _valueType\n * @property {Number} _composition\n * @property {Number} _isOverlapped\n * @property {Number} _isOverridden\n * @property {Number} _renderTransforms\n * @property {Tween} _prevRep\n * @property {Tween} _nextRep\n * @property {Tween} _prevAdd\n * @property {Tween} _nextAdd\n * @property {Tween} _prev\n * @property {Tween} _next\n */\n\n/**\n * @typedef TweenDecomposedValue\n * @property {Number} t - Type\n * @property {Number} n - Single number value\n * @property {String} u - Value unit\n * @property {String} o - Value operator\n * @property {Array.<Number>} d - Array of Numbers (in case of complex value type)\n * @property {Array.<String>} s - Strings (in case of complex value type)\n */\n\n/** @typedef {{_head: null|Tween, _tail: null|Tween}} TweenPropertySiblings */\n/** @typedef {Record<String, TweenPropertySiblings>} TweenLookups */\n/** @typedef {WeakMap.<Target, TweenLookups>} TweenReplaceLookups */\n/** @typedef {Map.<Target, TweenLookups>} TweenAdditiveLookups */\n\n// JSAnimation types ///////////////////////////////////////////////////////////\n\n/**\n * @typedef {Number|String|FunctionValue} TweenParamValue\n */\n\n/**\n * @typedef {TweenParamValue|[TweenParamValue, TweenParamValue]} TweenPropValue\n */\n\n/**\n * @typedef {(String & {})|'none'|'replace'|'blend'|compositionTypes} TweenComposition\n */\n\n/**\n * @typedef {Object} TweenParamsOptions\n * @property {TweenParamValue} [duration]\n * @property {TweenParamValue} [delay]\n * @property {EasingParam} [ease]\n * @property {TweenModifier} [modifier]\n * @property {TweenComposition} [composition]\n */\n\n/**\n * @typedef {Object} TweenValues\n * @property {TweenParamValue} [from]\n * @property {TweenPropValue} [to]\n * @property {TweenPropValue} [fromTo]\n */\n\n/**\n * @typedef {TweenParamsOptions & TweenValues} TweenKeyValue\n */\n\n/**\n * @typedef {Array.<TweenKeyValue|TweenPropValue>} ArraySyntaxValue\n */\n\n/**\n * @typedef {TweenParamValue|ArraySyntaxValue|TweenKeyValue} TweenOptions\n */\n\n/**\n * @typedef {Partial<{to: TweenParamValue|Array.<TweenParamValue>; from: TweenParamValue|Array.<TweenParamValue>; fromTo: TweenParamValue|Array.<TweenParamValue>;}>} TweenObjectValue\n */\n\n/**\n * @typedef {Object} PercentageKeyframeOptions\n * @property {EasingParam} [ease]\n */\n\n/**\n * @typedef {Record<String, TweenParamValue>} PercentageKeyframeParams\n */\n\n/**\n * @typedef {Record<String, PercentageKeyframeParams & PercentageKeyframeOptions>} PercentageKeyframes\n */\n\n/**\n * @typedef {Array<Record<String, TweenOptions | TweenModifier | boolean> & TweenParamsOptions>} DurationKeyframes\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {PercentageKeyframes|DurationKeyframes} [keyframes]\n * @property {EasingParam} [playbackEase]\n */\n\n// TODO: Currently setting TweenModifier to the intersected Record<> makes the FunctionValue type target param any if only one parameter is set\n/**\n * @typedef {Record<String, TweenOptions | Callback<JSAnimation> | TweenModifier | boolean | PercentageKeyframes | DurationKeyframes | ScrollObserver> & TimerOptions & AnimationOptions & TweenParamsOptions & TickableCallbacks<JSAnimation> & RenderableCallbacks<JSAnimation>} AnimationParams\n */\n\n// Timeline types //////////////////////////////////////////////////////////////\n\n/**\n * Accepts:<br>\n * - `Number` - Absolute position in milliseconds (e.g., `500` places element at exactly 500ms)<br>\n * - `'+=Number'` - Addition: Position element X ms after the last element (e.g., `'+=100'`)<br>\n * - `'-=Number'` - Subtraction: Position element X ms before the last element's end (e.g., `'-=100'`)<br>\n * - `'*=Number'` - Multiplier: Position element at a fraction of the total duration (e.g., `'*=.5'` for halfway)<br>\n * - `'<'` - Previous end: Position element at the end position of the previous element<br>\n * - `'<<'` - Previous start: Position element at the start position of the previous element<br>\n * - `'<<+=Number'` - Combined: Position element relative to previous element's start (e.g., `'<<+=250'`)<br>\n * - `'label'` - Label: Position element at a named label position (e.g., `'My Label'`)\n *\n * @typedef {Number|`+=${Number}`|`-=${Number}`|`*=${Number}`|'<'|'<<'|`<<+=${Number}`|`<<-=${Number}`|String} TimelinePosition\n */\n\n/**\n * Accepts:<br>\n * - `Number` - Absolute position in milliseconds (e.g., `500` places animation at exactly 500ms)<br>\n * - `'+=Number'` - Addition: Position animation X ms after the last animation (e.g., `'+=100'`)<br>\n * - `'-=Number'` - Subtraction: Position animation X ms before the last animation's end (e.g., `'-=100'`)<br>\n * - `'*=Number'` - Multiplier: Position animation at a fraction of the total duration (e.g., `'*=.5'` for halfway)<br>\n * - `'<'` - Previous end: Position animation at the end position of the previous animation<br>\n * - `'<<'` - Previous start: Position animation at the start position of the previous animation<br>\n * - `'<<+=Number'` - Combined: Position animation relative to previous animation's start (e.g., `'<<+=250'`)<br>\n * - `'label'` - Label: Position animation at a named label position (e.g., `'My Label'`)<br>\n * - `stagger(String|Nummber)` - Stagger multi-elements animation positions (e.g., 10, 20, 30...)\n *\n * @typedef {TimelinePosition | StaggerFunction<Number|String>} TimelineAnimationPosition\n */\n\n/**\n * @typedef {Object} TimelineOptions\n * @property {DefaultsParams} [defaults]\n * @property {EasingParam} [playbackEase]\n */\n\n/**\n * @typedef {TimerOptions & TimelineOptions & TickableCallbacks<Timeline> & RenderableCallbacks<Timeline>} TimelineParams\n */\n\n// WAAPIAnimation types ////////////////////////////////////////////////////////\n\n/**\n * @typedef {String|Number|Array<String>|Array<Number>} WAAPITweenValue\n */\n\n/**\n * @callback WAAPIFunctionValue\n * @param {DOMTarget} target - The animated target\n * @param {Number} index - The target index\n * @param {Number} length - The total number of animated targets\n * @return {WAAPITweenValue}\n */\n\n/**\n * @typedef {WAAPITweenValue|WAAPIFunctionValue|Array<String|Number|WAAPIFunctionValue>} WAAPIKeyframeValue\n */\n\n/**\n * @typedef {(animation: WAAPIAnimation) => void} WAAPICallback\n */\n\n/**\n * @typedef {Object} WAAPITweenOptions\n * @property {WAAPIKeyframeValue} [to]\n * @property {WAAPIKeyframeValue} [from]\n * @property {Number|WAAPIFunctionValue} [duration]\n * @property {Number|WAAPIFunctionValue} [delay]\n * @property {EasingParam} [ease]\n * @property {CompositeOperation} [composition]\n */\n\n/**\n * @typedef {Object} WAAPIAnimationOptions\n * @property {Number|Boolean} [loop]\n * @property {Boolean} [Reversed]\n * @property {Boolean} [Alternate]\n * @property {Boolean|ScrollObserver} [autoplay]\n * @property {Number} [playbackRate]\n * @property {Number|WAAPIFunctionValue} [duration]\n * @property {Number|WAAPIFunctionValue} [delay]\n * @property {EasingParam} [ease]\n * @property {CompositeOperation} [composition]\n * @property {WAAPICallback} [onComplete]\n */\n\n/**\n * @typedef {Record<String, WAAPIKeyframeValue | WAAPIAnimationOptions | Boolean | ScrollObserver | WAAPICallback | EasingParam | WAAPITweenOptions> & WAAPIAnimationOptions} WAAPIAnimationParams\n */\n\n// Animatable types ////////////////////////////////////////////////////////////\n\n/**\n * @callback AnimatablePropertySetter\n * @param {Number|Array.<Number>} to\n * @param {Number} [duration]\n * @param {EasingParam} [ease]\n * @return {AnimatableObject}\n */\n\n/**\n * @callback AnimatablePropertyGetter\n * @return {Number|Array.<Number>}\n */\n\n/**\n * @typedef {AnimatablePropertySetter & AnimatablePropertyGetter} AnimatableProperty\n */\n\n/**\n * @typedef {Animatable & Record<String, AnimatableProperty>} AnimatableObject\n */\n\n/**\n * @typedef {Object} AnimatablePropertyParamsOptions\n * @property {String} [unit]\n * @property {TweenParamValue} [duration]\n * @property {EasingParam} [ease]\n * @property {TweenModifier} [modifier]\n * @property {TweenComposition} [composition]\n */\n\n/**\n * @typedef {Record<String, TweenParamValue | EasingParam | TweenModifier | TweenComposition | AnimatablePropertyParamsOptions> & AnimatablePropertyParamsOptions} AnimatableParams\n */\n\n// Scope types /////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} ReactRef\n * @property {HTMLElement|SVGElement|null} [current]\n */\n\n/**\n * @typedef {Object} AngularRef\n * @property {HTMLElement|SVGElement} [nativeElement]\n */\n\n/**\n * @typedef {Object} ScopeParams\n * @property {DOMTargetSelector|ReactRef|AngularRef} [root]\n * @property {DefaultsParams} [defaults]\n * @property {Record<String, String>} [mediaQueries]\n */\n\n/**\n * @template T\n * @callback ScopedCallback\n * @param {Scope} scope\n * @return {T}\n */\n\n/**\n * @callback ScopeCleanupCallback\n * @param {Scope} [scope]\n */\n\n/**\n * @callback ScopeConstructorCallback\n * @param {Scope} [scope]\n * @return {ScopeCleanupCallback|void}\n */\n\n/**\n * @callback ScopeMethod\n * @param {...*} args\n * @return {ScopeCleanupCallback|void}\n */\n\n// Scroll types ////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {String|Number} ScrollThresholdValue\n */\n\n/**\n * @typedef {Object} ScrollThresholdParam\n * @property {ScrollThresholdValue} [target]\n * @property {ScrollThresholdValue} [container]\n */\n\n/**\n * @callback ScrollObserverAxisCallback\n * @param {ScrollObserver} self\n * @return {'x'|'y'}\n */\n\n/**\n * @callback ScrollThresholdCallback\n * @param {ScrollObserver} self\n * @return {ScrollThresholdValue|ScrollThresholdParam}\n */\n\n/**\n * @typedef {Object} ScrollObserverParams\n * @property {Number|String} [id]\n * @property {Boolean|Number|String|EasingParam} [sync]\n * @property {TargetsParam} [container]\n * @property {TargetsParam} [target]\n * @property {'x'|'y'|ScrollObserverAxisCallback|((observer: ScrollObserver) => 'x'|'y'|ScrollObserverAxisCallback)} [axis]\n * @property {ScrollThresholdValue|ScrollThresholdParam|ScrollThresholdCallback|((observer: ScrollObserver) => ScrollThresholdValue|ScrollThresholdParam|ScrollThresholdCallback)} [enter]\n * @property {ScrollThresholdValue|ScrollThresholdParam|ScrollThresholdCallback|((observer: ScrollObserver) => ScrollThresholdValue|ScrollThresholdParam|ScrollThresholdCallback)} [leave]\n * @property {Boolean|((observer: ScrollObserver) => Boolean)} [repeat]\n * @property {Boolean} [debug]\n * @property {Callback<ScrollObserver>} [onEnter]\n * @property {Callback<ScrollObserver>} [onLeave]\n * @property {Callback<ScrollObserver>} [onEnterForward]\n * @property {Callback<ScrollObserver>} [onLeaveForward]\n * @property {Callback<ScrollObserver>} [onEnterBackward]\n * @property {Callback<ScrollObserver>} [onLeaveBackward]\n * @property {Callback<ScrollObserver>} [onUpdate]\n * @property {Callback<ScrollObserver>} [onSyncComplete]\n */\n\n// Draggable types /////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} DraggableAxisParam\n * @property {String} [mapTo]\n * @property {TweenModifier} [modifier]\n * @property {TweenComposition} [composition]\n * @property {Number|Array<Number>|((draggable: Draggable) => Number|Array<Number>)} [snap]\n */\n\n/**\n * @typedef {Object} DraggableCursorParams\n * @property {String} [onHover]\n * @property {String} [onGrab]\n */\n\n/**\n * @typedef {Object} DraggableParams\n * @property {DOMTargetSelector} [trigger]\n * @property {DOMTargetSelector|Array<Number>|((draggable: Draggable) => DOMTargetSelector|Array<Number>)} [container]\n * @property {Boolean|DraggableAxisParam} [x]\n * @property {Boolean|DraggableAxisParam} [y]\n * @property {TweenModifier} [modifier]\n * @property {Number|Array<Number>|((draggable: Draggable) => Number|Array<Number>)} [snap]\n * @property {Number|Array<Number>|((draggable: Draggable) => Number|Array<Number>)} [containerPadding]\n * @property {Number|((draggable: Draggable) => Number)} [containerFriction]\n * @property {Number|((draggable: Draggable) => Number)} [releaseContainerFriction]\n * @property {Number|((draggable: Draggable) => Number)} [dragSpeed]\n * @property {Number|((draggable: Draggable) => Number)} [scrollSpeed]\n * @property {Number|((draggable: Draggable) => Number)} [scrollThreshold]\n * @property {Number|((draggable: Draggable) => Number)} [minVelocity]\n * @property {Number|((draggable: Draggable) => Number)} [maxVelocity]\n * @property {Number|((draggable: Draggable) => Number)} [velocityMultiplier]\n * @property {Number} [releaseMass]\n * @property {Number} [releaseStiffness]\n * @property {Number} [releaseDamping]\n * @property {Boolean} [releaseDamping]\n * @property {EasingParam} [releaseEase]\n * @property {Boolean|DraggableCursorParams|((draggable: Draggable) => Boolean|DraggableCursorParams)} [cursor]\n * @property {Callback<Draggable>} [onGrab]\n * @property {Callback<Draggable>} [onDrag]\n * @property {Callback<Draggable>} [onRelease]\n * @property {Callback<Draggable>} [onUpdate]\n * @property {Callback<Draggable>} [onSettle]\n * @property {Callback<Draggable>} [onSnap]\n * @property {Callback<Draggable>} [onResize]\n * @property {Callback<Draggable>} [onAfterResize]\n */\n\n// Text types //////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} splitTemplateParams\n * @property {false|String} [class]\n * @property {Boolean|'hidden'|'clip'|'visible'|'scroll'|'auto'} [wrap]\n * @property {Boolean|'top'|'right'|'bottom'|'left'|'center'} [clone]\n */\n\n/**\n * @typedef {Boolean|String} SplitValue\n */\n\n/**\n * @callback SplitFunctionValue\n * @param {Node|HTMLElement} [value]\n * @return String\n */\n\n/**\n * @typedef {Object} TextSplitterParams\n * @property {SplitValue|splitTemplateParams|SplitFunctionValue} [lines]\n * @property {SplitValue|splitTemplateParams|SplitFunctionValue} [words]\n * @property {SplitValue|splitTemplateParams|SplitFunctionValue} [chars]\n * @property {Boolean} [accessible]\n * @property {Boolean} [includeSpaces]\n * @property {Boolean} [debug]\n */\n\n// SVG types ///////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {SVGGeometryElement & {\n * setAttribute(name: 'draw', value: `${number} ${number}`): void;\n * draw: `${number} ${number}`;\n * }} DrawableSVGGeometry\n */\n\n\n// Environments\n\n// TODO: Do we need to check if we're running inside a worker ?\nconst isBrowser = typeof window !== 'undefined';\n\n/** @type {Window & {AnimeJS: Array}|null} */\nconst win = isBrowser ? /** @type {Window & {AnimeJS: Array}} */(/** @type {unknown} */(window)) : null;\n\n/** @type {Document|null} */\nconst doc = isBrowser ? document : null;\n\n// Enums\n\n/** @enum {Number} */\nconst tweenTypes = {\n OBJECT: 0,\n ATTRIBUTE: 1,\n CSS: 2,\n TRANSFORM: 3,\n CSS_VAR: 4,\n};\n\n/** @enum {Number} */\nconst valueTypes = {\n NUMBER: 0,\n UNIT: 1,\n COLOR: 2,\n COMPLEX: 3,\n};\n\n/** @enum {Number} */\nconst tickModes = {\n NONE: 0,\n AUTO: 1,\n FORCE: 2,\n};\n\n/** @enum {Number} */\nconst compositionTypes = {\n replace: 0,\n none: 1,\n blend: 2,\n};\n\n// Cache symbols\n\nconst isRegisteredTargetSymbol = Symbol();\nconst isDomSymbol = Symbol();\nconst isSvgSymbol = Symbol();\nconst transformsSymbol = Symbol();\nconst morphPointsSymbol = Symbol();\nconst proxyTargetSymbol = Symbol();\n\n// Numbers\n\nconst minValue = 1e-11;\nconst maxValue = 1e12;\nconst K = 1e3;\nconst maxFps = 120;\n\n// Strings\n\nconst emptyString = '';\nconst shortTransforms = /*#__PURE__*/ (() => {\n const map = new Map();\n map.set('x', 'translateX');\n map.set('y', 'translateY');\n map.set('z', 'translateZ');\n return map;\n})();\n\nconst validTransforms = [\n 'translateX',\n 'translateY',\n 'translateZ',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ',\n 'skew',\n 'skewX',\n 'skewY',\n 'perspective',\n 'matrix',\n 'matrix3d',\n];\n\nconst transformsFragmentStrings = /*#__PURE__*/ validTransforms.reduce((a, v) => ({...a, [v]: v + '('}), {});\n\n// Functions\n\n/** @return {void} */\nconst noop = () => {};\n\n// Regex\n\nconst hexTestRgx = /(^#([\\da-f]{3}){1,2}$)|(^#([\\da-f]{4}){1,2}$)/i;\nconst rgbExecRgx = /rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i;\nconst rgbaExecRgx = /rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(-?\\d+|-?\\d*.\\d+)\\s*\\)/i;\nconst hslExecRgx = /hsl\\(\\s*(-?\\d+|-?\\d*.\\d+)\\s*,\\s*(-?\\d+|-?\\d*.\\d+)%\\s*,\\s*(-?\\d+|-?\\d*.\\d+)%\\s*\\)/i;\nconst hslaExecRgx = /hsla\\(\\s*(-?\\d+|-?\\d*.\\d+)\\s*,\\s*(-?\\d+|-?\\d*.\\d+)%\\s*,\\s*(-?\\d+|-?\\d*.\\d+)%\\s*,\\s*(-?\\d+|-?\\d*.\\d+)\\s*\\)/i;\n// export const digitWithExponentRgx = /[-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g;\nconst digitWithExponentRgx = /[-+]?\\d*\\.?\\d+(?:e[-+]?\\d)?/gi;\n// export const unitsExecRgx = /^([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?)+([a-z]+|%)$/i;\nconst unitsExecRgx = /^([-+]?\\d*\\.?\\d+(?:e[-+]?\\d+)?)([a-z]+|%)$/i;\nconst lowerCaseRgx = /([a-z])([A-Z])/g;\nconst transformsExecRgx = /(\\w+)(\\([^)]+\\)+)/g; // Match inline transforms with cacl() values, returns the value wrapped in ()\nconst relativeValuesExecRgx = /(\\*=|\\+=|-=)/;\n\n\n\n\n/** @type {DefaultsParams} */\nconst defaults = {\n id: null,\n keyframes: null,\n playbackEase: null,\n playbackRate: 1,\n frameRate: maxFps,\n loop: 0,\n reversed: false,\n alternate: false,\n autoplay: true,\n duration: K,\n delay: 0,\n loopDelay: 0,\n ease: 'out(2)',\n composition: compositionTypes.replace,\n modifier: v => v,\n onBegin: noop,\n onBeforeUpdate: noop,\n onUpdate: noop,\n onLoop: noop,\n onPause: noop,\n onComplete: noop,\n onRender: noop,\n};\n\nconst scope = {\n /** @type {Scope} */\n current: null,\n /** @type {Document|DOMTarget} */\n root: doc,\n};\n\nconst globals = {\n /** @type {DefaultsParams} */\n defaults,\n /** @type {Number} */\n precision: 4,\n /** @type {Number} equals 1 in ms mode, 0.001 in s mode */\n timeScale: 1,\n /** @type {Number} */\n tickThreshold: 200,\n};\n\nconst globalVersions = { version: '4.1.3', engine: null };\n\nif (isBrowser) {\n if (!win.AnimeJS) win.AnimeJS = [];\n win.AnimeJS.push(globalVersions);\n}\n\n// Strings\n\n/**\n * @param {String} str\n * @return {String}\n */\nconst toLowerCase = str => str.replace(lowerCaseRgx, '$1-$2').toLowerCase();\n\n/**\n * Prioritize this method instead of regex when possible\n * @param {String} str\n * @param {String} sub\n * @return {Boolean}\n */\nconst stringStartsWith = (str, sub) => str.indexOf(sub) === 0;\n\n// Note: Date.now is used instead of performance.now since it is precise enough for timings calculations, performs slightly faster and works in Node.js environement.\nconst now = Date.now;\n\n// Types checkers\n\nconst isArr = Array.isArray;\n/**@param {any} a @return {a is Record<String, any>} */\nconst isObj = a => a && a.constructor === Object;\n/**@param {any} a @return {a is Number} */\nconst isNum = a => typeof a === 'number' && !isNaN(a);\n/**@param {any} a @return {a is String} */\nconst isStr = a => typeof a === 'string';\n/**@param {any} a @return {a is Function} */\nconst isFnc = a => typeof a === 'function';\n/**@param {any} a @return {a is undefined} */\nconst isUnd = a => typeof a === 'undefined';\n/**@param {any} a @return {a is null | undefined} */\nconst isNil = a => isUnd(a) || a === null;\n/**@param {any} a @return {a is SVGElement} */\nconst isSvg = a => isBrowser && a instanceof SVGElement;\n/**@param {any} a @return {Boolean} */\nconst isHex = a => hexTestRgx.test(a);\n/**@param {any} a @return {Boolean} */\nconst isRgb = a => stringStartsWith(a, 'rgb');\n/**@param {any} a @return {Boolean} */\nconst isHsl = a => stringStartsWith(a, 'hsl');\n/**@param {any} a @return {Boolean} */\nconst isCol = a => isHex(a) || isRgb(a) || isHsl(a);\n/**@param {any} a @return {Boolean} */\nconst isKey = a => !globals.defaults.hasOwnProperty(a);\n\n// Number\n\n/**\n * @param {Number|String} str\n * @return {Number}\n */\nconst parseNumber = str => isStr(str) ?\n parseFloat(/** @type {String} */(str)) :\n /** @type {Number} */(str);\n\n// Math\n\nconst pow = Math.pow;\nconst sqrt = Math.sqrt;\nconst sin = Math.sin;\nconst cos = Math.cos;\nconst abs = Math.abs;\nconst exp = Math.exp;\nconst ceil = Math.ceil;\nconst floor = Math.floor;\nconst asin = Math.asin;\nconst max = Math.max;\nconst atan2 = Math.atan2;\nconst PI = Math.PI;\nconst _round = Math.round;\n\n/**\n * @param {Number} v\n * @param {Number} min\n * @param {Number} max\n * @return {Number}\n */\nconst clamp = (v, min, max) => v < min ? min : v > max ? max : v;\n\nconst powCache = {};\n\n/**\n * @param {Number} v\n * @param {Number} decimalLength\n * @return {Number}\n */\nconst round = (v, decimalLength) => {\n if (decimalLength < 0) return v;\n if (!decimalLength) return _round(v);\n let p = powCache[decimalLength];\n if (!p) p = powCache[decimalLength] = 10 ** decimalLength;\n return _round(v * p) / p;\n};\n\n/**\n * @param {Number} v\n * @param {Number|Array<Number>} increment\n * @return {Number}\n */\nconst snap = (v, increment) => isArr(increment) ? increment.reduce((closest, cv) => (abs(cv - v) < abs(closest - v) ? cv : closest)) : increment ? _round(v / increment) * increment : v;\n\n/**\n * @param {Number} start\n * @param {Number} end\n * @param {Number} progress\n * @return {Number}\n */\nconst interpolate = (start, end, progress) => start + (end - start) * progress;\n\n/**\n * @param {Number} min\n * @param {Number} max\n * @param {Number} [decimalLength]\n * @return {Number}\n */\nconst random = (min, max, decimalLength) => { const m = 10 ** (decimalLength || 0); return floor((Math.random() * (max - min + (1 / m)) + min) * m) / m };\n\n/**\n * Adapted from https://bost.ocks.org/mike/shuffle/\n * @param {Array} items\n * @return {Array}\n */\nconst shuffle = items => {\n let m = items.length, t, i;\n while (m) { i = random(0, --m); t = items[m]; items[m] = items[i]; items[i] = t; }\n return items;\n};\n\n/**\n * @param {Number} v\n * @return {Number}\n */\nconst clampInfinity = v => v === Infinity ? maxValue : v === -Infinity ? -1e12 : v;\n\n/**\n * @param {Number} v\n * @return {Number}\n */\nconst normalizeTime = v => v <= minValue ? minValue : clampInfinity(round(v, 11));\n\n// Arrays\n\n/**\n * @template T\n * @param {T[]} a\n * @return {T[]}\n */\nconst cloneArray = a => isArr(a) ? [ ...a ] : a;\n\n// Objects\n\n/**\n * @template T\n * @template U\n * @param {T} o1\n * @param {U} o2\n * @return {T & U}\n */\nconst mergeObjects = (o1, o2) => {\n const merged = /** @type {T & U} */({ ...o1 });\n for (let p in o2) {\n const o1p = /** @type {T & U} */(o1)[p];\n merged[p] = isUnd(o1p) ? /** @type {T & U} */(o2)[p] : o1p;\n } return merged;\n};\n\n// Linked lists\n\n/**\n * @param {Object} parent\n * @param {Function} callback\n * @param {Boolean} [reverse]\n * @param {String} [prevProp]\n * @param {String} [nextProp]\n * @return {void}\n */\nconst forEachChildren = (parent, callback, reverse, prevProp = '_prev', nextProp = '_next') => {\n let next = parent._head;\n let adjustedNextProp = nextProp;\n if (reverse) {\n next = parent._tail;\n adjustedNextProp = prevProp;\n }\n while (next) {\n const currentNext = next[adjustedNextProp];\n callback(next);\n next = currentNext;\n }\n};\n\n/**\n * @param {Object} parent\n * @param {Object} child\n * @param {String} [prevProp]\n * @param {String} [nextProp]\n * @return {void}\n */\nconst removeChild = (parent, child, prevProp = '_prev', nextProp = '_next') => {\n const prev = child[prevProp];\n const next = child[nextProp];\n prev ? prev[nextProp] = next : parent._head = next;\n next ? next[prevProp] = prev : parent._tail = prev;\n child[prevProp] = null;\n child[nextProp] = null;\n};\n\n/**\n * @param {Object} parent\n * @param {Object} child\n * @param {Function} [sortMethod]\n * @param {String} prevProp\n * @param {String} nextProp\n * @return {void}\n */\nconst addChild = (parent, child, sortMethod, prevProp = '_prev', nextProp = '_next') => {\n let prev = parent._tail;\n while (prev && sortMethod && sortMethod(prev, child)) prev = prev[prevProp];\n const next = prev ? prev[nextProp] : parent._head;\n prev ? prev[nextProp] = child : parent._head = child;\n next ? next[prevProp] = child : parent._tail = child;\n child[prevProp] = prev;\n child[nextProp] = next;\n};\n\n/**\n * @param {(...args: any[]) => Tickable | ((...args: any[]) => void)} constructor\n * @return {(...args: any[]) => Tickable | ((...args: any[]) => void)}\n */\nconst createRefreshable = constructor => {\n /** @type {Tickable} */\n let tracked;\n return (...args) => {\n let currentIteration, currentIterationProgress, reversed, alternate;\n if (tracked) {\n currentIteration = tracked.currentIteration;\n currentIterationProgress = tracked.iterationProgress;\n reversed = tracked.reversed;\n alternate = tracked._alternate;\n tracked.revert();\n }\n const cleanup = constructor(...args);\n if (cleanup && !isFnc(cleanup) && cleanup.revert) tracked = cleanup;\n if (!isUnd(currentIterationProgress)) {\n /** @type {Tickable} */(tracked).currentIteration = currentIteration;\n /** @type {Tickable} */(tracked).iterationProgress = (alternate ? !(currentIteration % 2) ? reversed : !reversed : reversed) ? 1 - currentIterationProgress : currentIterationProgress;\n }\n return cleanup || noop;\n }\n};\n\n/*\n * Base class to control framerate and playback rate.\n * Inherited by Engine, Timer, Animation and Timeline.\n */\nclass Clock {\n\n /** @param {Number} [initTime] */\n constructor(initTime = 0) {\n /** @type {Number} */\n this.deltaTime = 0;\n /** @type {Number} */\n this._currentTime = initTime;\n /** @type {Number} */\n this._elapsedTime = initTime;\n /** @type {Number} */\n this._startTime = initTime;\n /** @type {Number} */\n this._lastTime = initTime;\n /** @type {Number} */\n this._scheduledTime = 0;\n /** @type {Number} */\n this._frameDuration = round(K / maxFps, 0);\n /** @type {Number} */\n this._fps = maxFps;\n /** @type {Number} */\n this._speed = 1;\n /** @type {Boolean} */\n this._hasChildren = false;\n /** @type {Tickable|Tween} */\n this._head = null;\n /** @type {Tickable|Tween} */\n this._tail = null;\n }\n\n get fps() {\n return this._fps;\n }\n\n set fps(frameRate) {\n const previousFrameDuration = this._frameDuration;\n const fr = +frameRate;\n const fps = fr < minValue ? minValue : fr;\n const frameDuration = round(K / fps, 0);\n this._fps = fps;\n this._frameDuration = frameDuration;\n this._scheduledTime += frameDuration - previousFrameDuration;\n }\n\n get speed() {\n return this._speed;\n }\n\n set speed(playbackRate) {\n const pbr = +playbackRate;\n this._speed = pbr < minValue ? minValue : pbr;\n }\n\n /**\n * @param {Number} time\n * @return {tickModes}\n */\n requestTick(time) {\n const scheduledTime = this._scheduledTime;\n const elapsedTime = this._elapsedTime;\n this._elapsedTime += (time - elapsedTime);\n // If the elapsed time is lower than the scheduled time\n // this means not enough time has passed to hit one frameDuration\n // so skip that frame\n if (elapsedTime < scheduledTime) return tickModes.NONE;\n const frameDuration = this._frameDuration;\n const frameDelta = elapsedTime - scheduledTime;\n // Ensures that _scheduledTime progresses in steps of at least 1 frameDuration.\n // Skips ahead if the actual elapsed time is higher.\n this._scheduledTime += frameDelta < frameDuration ? frameDuration : frameDelta;\n return tickModes.AUTO;\n }\n\n /**\n * @param {Number} time\n * @return {Number}\n */\n computeDeltaTime(time) {\n const delta = time - this._lastTime;\n this.deltaTime = delta;\n this._lastTime = time;\n return delta;\n }\n\n}\n\n\n\n\n/**\n * @param {Tickable} tickable\n * @param {Number} time\n * @param {Number} muteCallbacks\n * @param {Number} internalRender\n * @param {tickModes} tickMode\n * @return {Number}\n */\nconst render = (tickable, time, muteCallbacks, internalRender, tickMode) => {\n\n const parent = tickable.parent;\n const duration = tickable.duration;\n const completed = tickable.completed;\n const iterationDuration = tickable.iterationDuration;\n const iterationCount = tickable.iterationCount;\n const _currentIteration = tickable._currentIteration;\n const _loopDelay = tickable._loopDelay;\n const _reversed = tickable._reversed;\n const _alternate = tickable._alternate;\n const _hasChildren = tickable._hasChildren;\n const tickableDelay = tickable._delay;\n const tickablePrevAbsoluteTime = tickable._currentTime; // TODO: rename ._currentTime to ._absoluteCurrentTime\n\n const tickableEndTime = tickableDelay + iterationDuration;\n const tickableAbsoluteTime = time - tickableDelay;\n const tickablePrevTime = clamp(tickablePrevAbsoluteTime, -tickableDelay, duration);\n const tickableCurrentTime = clamp(tickableAbsoluteTime, -tickableDelay, duration);\n const deltaTime = tickableAbsoluteTime - tickablePrevAbsoluteTime;\n const isCurrentTimeAboveZero = tickableCurrentTime > 0;\n const isCurrentTimeEqualOrAboveDuration = tickableCurrentTime >= duration;\n const isSetter = duration <= minValue;\n const forcedTick = tickMode === tickModes.FORCE;\n\n let isOdd = 0;\n let iterationElapsedTime = tickableAbsoluteTime;\n // Render checks\n // Used to also check if the children have rendered in order to trigger the onRender callback on the parent timer\n let hasRendered = 0;\n\n // Execute the \"expensive\" iterations calculations only when necessary\n if (iterationCount > 1) {\n // bitwise NOT operator seems to be generally faster than Math.floor() across browsers\n const currentIteration = ~~(tickableCurrentTime / (iterationDuration + (isCurrentTimeEqualOrAboveDuration ? 0 : _loopDelay)));\n tickable._currentIteration = clamp(currentIteration, 0, iterationCount);\n // Prevent the iteration count to go above the max iterations when reaching the end of the animation\n if (isCurrentTimeEqualOrAboveDuration) tickable._currentIteration--;\n isOdd = tickable._currentIteration % 2;\n iterationElapsedTime = tickableCurrentTime % (iterationDuration + _loopDelay) || 0;\n }\n\n // Checks if exactly one of _reversed and (_alternate && isOdd) is true\n const isReversed = _reversed ^ (_alternate && isOdd);\n const _ease = /** @type {Renderable} */(tickable)._ease;\n let iterationTime = isCurrentTimeEqualOrAboveDuration ? isReversed ? 0 : duration : isReversed ? iterationDuration - iterationElapsedTime : iterationElapsedTime;\n if (_ease) iterationTime = iterationDuration * _ease(iterationTime / iterationDuration) || 0;\n const isRunningBackwards = (parent ? parent.backwards : tickableAbsoluteTime < tickablePrevAbsoluteTime) ? !isReversed : !!isReversed;\n\n tickable._currentTime = tickableAbsoluteTime;\n tickable._iterationTime = iterationTime;\n tickable.backwards = isRunningBackwards;\n\n if (isCurrentTimeAboveZero && !tickable.began) {\n tickable.began = true;\n if (!muteCallbacks && !(parent && (isRunningBackwards || !parent.began))) {\n tickable.onBegin(/** @type {CallbackArgument} */(tickable));\n }\n } else if (tickableAbsoluteTime <= 0) {\n tickable.began = false;\n }\n\n // Only triggers onLoop for tickable without children, otherwise call the the onLoop callback in the tick function\n // Make sure to trigger the onLoop before rendering to allow .refresh() to pickup the current values\n if (!muteCallbacks && !_hasChildren && isCurrentTimeAboveZero && tickable._currentIteration !== _currentIteration) {\n tickable.onLoop(/** @type {CallbackArgument} */(tickable));\n }\n\n if (\n forcedTick ||\n tickMode === tickModes.AUTO && (\n time >= tickableDelay && time <= tickableEndTime || // Normal render\n time <= tickableDelay && tickablePrevTime > tickableDelay || // Playhead is before the animation start time so make sure the animation is at its initial state\n time >= tickableEndTime && tickablePrevTime !== duration // Playhead is after the animation end time so make sure the animation is at its end state\n ) ||\n iterationTime >= tickableEndTime && tickablePrevTime !== duration ||\n iterationTime <= tickableDelay && tickablePrevTime > 0 ||\n time <= tickablePrevTime && tickablePrevTime === duration && completed || // Force a render if a seek occurs on an completed animation\n isCurrentTimeEqualOrAboveDuration && !completed && isSetter // This prevents 0 duration tickables to be skipped\n ) {\n\n if (isCurrentTimeAboveZero) {\n // Trigger onUpdate callback before rendering\n tickable.computeDeltaTime(tickablePrevTime);\n if (!muteCallbacks) tickable.onBeforeUpdate(/** @type {CallbackArgument} */(tickable));\n }\n\n // Start tweens rendering\n if (!_hasChildren) {\n\n // Time has jumped more than globals.tickThreshold so consider this tick manual\n const forcedRender = forcedTick || (isRunningBackwards ? deltaTime * -1 : deltaTime) >= globals.tickThreshold;\n const absoluteTime = tickable._offset + (parent ? parent._offset : 0) + tickableDelay + iterationTime;\n\n // Only Animation can have tweens, Timer returns undefined\n let tween = /** @type {Tween} */(/** @type {JSAnimation} */(tickable)._head);\n let tweenTarget;\n let tweenStyle;\n let tweenTargetTransforms;\n let tweenTargetTransformsProperties;\n let tweenTransformsNeedUpdate = 0;\n\n while (tween) {\n\n const tweenComposition = tween._composition;\n const tweenCurrentTime = tween._currentTime;\n const tweenChangeDuration = tween._changeDuration;\n const tweenAbsEndTime = tween._absoluteStartTime + tween._changeDuration;\n const tweenNextRep = tween._nextRep;\n const tweenPrevRep = tween._prevRep;\n const tweenHasComposition = tweenComposition !== compositionTypes.none;\n\n if ((forcedRender || (\n (tweenCurrentTime !== tweenChangeDuration || absoluteTime <= tweenAbsEndTime + (tweenNextRep ? tweenNextRep._delay : 0)) &&\n (tweenCurrentTime !== 0 || absoluteTime >= tween._absoluteStartTime)\n )) && (!tweenHasComposition || (\n !tween._isOverridden &&\n (!tween._isOverlapped || absoluteTime <= tweenAbsEndTime) &&\n (!tweenNextRep || (tweenNextRep._isOverridden || absoluteTime <= tweenNextRep._absoluteStartTime)) &&\n (!tweenPrevRep || (tweenPrevRep._isOverridden || (absoluteTime >= (tweenPrevRep._absoluteStartTime + tweenPrevRep._changeDuration) + tween._delay)))\n ))\n ) {\n\n const tweenNewTime = tween._currentTime = clamp(iterationTime - tween._startTime, 0, tweenChangeDuration);\n const tweenProgress = tween._ease(tweenNewTime / tween._updateDuration);\n const tweenModifier = tween._modifier;\n const tweenValueType = tween._valueType;\n const tweenType = tween._tweenType;\n const tweenIsObject = tweenType === tweenTypes.OBJECT;\n const tweenIsNumber = tweenValueType === valueTypes.NUMBER;\n // Only round the in-between frames values if the final value is a string\n const tweenPrecision = (tweenIsNumber && tweenIsObject) || tweenProgress === 0 || tweenProgress === 1 ? -1 : globals.precision;\n\n // Recompose tween value\n /** @type {String|Number} */\n let value;\n /** @type {Number} */\n let number;\n\n if (tweenIsNumber) {\n value = number = /** @type {Number} */(tweenModifier(round(interpolate(tween._fromNumber, tween._toNumber, tweenProgress), tweenPrecision )));\n } else if (tweenValueType === valueTypes.UNIT) {\n // Rounding the values speed up string composition\n number = /** @type {Number} */(tweenModifier(round(interpolate(tween._fromNumber, tween._toNumber, tweenProgress), tweenPrecision)));\n value = `${number}${tween._unit}`;\n } else if (tweenValueType === valueTypes.COLOR) {\n const fn = tween._fromNumbers;\n const tn = tween._toNumbers;\n const r = round(clamp(/** @type {Number} */(tweenModifier(interpolate(fn[0], tn[0], tweenProgress))), 0, 255), 0);\n const g = round(clamp(/** @type {Number} */(tweenModifier(interpolate(fn[1], tn[1], tweenProgress))), 0, 255), 0);\n const b = round(clamp(/** @type {Number} */(tweenModifier(interpolate(fn[2], tn[2], tweenProgress))), 0, 255), 0);\n const a = clamp(/** @type {Number} */(tweenModifier(round(interpolate(fn[3], tn[3], tweenProgress), tweenPrecision))), 0, 1);\n value = `rgba(${r},${g},${b},${a})`;\n if (tweenHasComposition) {\n const ns = tween._numbers;\n ns[0] = r;\n ns[1] = g;\n ns[2] = b;\n ns[3] = a;\n }\n } else if (tweenValueType === valueTypes.COMPLEX) {\n value = tween._strings[0];\n for (let j = 0, l = tween._toNumbers.length; j < l; j++) {\n const n = /** @type {Number} */(tweenModifier(round(interpolate(tween._fromNumbers[j], tween._toNumbers[j], tweenProgress), tweenPrecision)));\n const s = tween._strings[j + 1];\n value += `${s ? n + s : n}`;\n if (tweenHasComposition) {\n tween._numbers[j] = n;\n }\n }\n }\n\n // For additive tweens and Animatables\n if (tweenHasComposition) {\n tween._number = number;\n }\n\n if (!internalRender && tweenComposition !== compositionTypes.blend) {\n\n const tweenProperty = tween.property;\n tweenTarget = tween.target;\n\n if (tweenIsObject) {\n tweenTarget[tweenProperty] = value;\n } else if (tweenType === tweenTypes.ATTRIBUTE) {\n /** @type {DOMTarget} */(tweenTarget).setAttribute(tweenProperty, /** @type {String} */(value));\n } else {\n tweenStyle = /** @type {DOMTarget} */(tweenTarget).style;\n if (tweenType === tweenTypes.TRANSFORM) {\n if (tweenTarget !== tweenTargetTransforms) {\n tweenTargetTransforms = tweenTarget;\n // NOTE: Referencing the cachedTransforms in the tween property directly can be a little bit faster but appears to increase memory usage.\n tweenTargetTransformsProperties = tweenTarget[transformsSymbol];\n }\n tweenTargetTransformsProperties[tweenProperty] = value;\n tweenTransformsNeedUpdate = 1;\n } else if (tweenType === tweenTypes.CSS) {\n tweenStyle[tweenProperty] = value;\n } else if (tweenType === tweenTypes.CSS_VAR) {\n tweenStyle.setProperty(tweenProperty,/** @type {String} */(value));\n }\n }\n\n if (isCurrentTimeAboveZero) hasRendered = 1;\n\n } else {\n // Used for composing timeline tweens without having to do a real render\n tween._value = value;\n }\n\n }\n\n // NOTE: Possible improvement: Use translate(x,y) / translate3d(x,y,z) syntax\n // to reduce memory usage on string composition\n if (tweenTransformsNeedUpdate && tween._renderTransforms) {\n let str = emptyString;\n for (let key in tweenTargetTransformsProperties) {\n str += `${transformsFragmentStrings[key]}${tweenTargetTransformsProperties[key]}) `;\n }\n tweenStyle.transform = str;\n tweenTransformsNeedUpdate = 0;\n }\n\n tween = tween._next;\n }\n\n if (!muteCallbacks && hasRendered) {\n /** @type {JSAnimation} */(tickable).onRender(/** @type {JSAnimation} */(tickable));\n }\n }\n\n if (!muteCallbacks && isCurrentTimeAboveZero) {\n tickable.onUpdate(/** @type {CallbackArgument} */(tickable));\n }\n\n }\n\n // End tweens rendering\n\n // Handle setters on timeline differently and allow re-trigering the onComplete callback when seeking backwards\n if (parent && isSetter) {\n if (!muteCallbacks && (\n (parent.began && !isRunningBackwards && tickableAbsoluteTime >= duration && !completed) ||\n (isRunningBackwards && tickableAbsoluteTime <= minValue && completed)\n )) {\n tickable.onComplete(/** @type {CallbackArgument} */(tickable));\n tickable.completed = !isRunningBackwards;\n }\n // If currentTime is both above 0 and at least equals to duration, handles normal onComplete or infinite loops\n } else if (isCurrentTimeAboveZero && isCurrentTimeEqualOrAboveDuration) {\n if (iterationCount === Infinity) {\n // Offset the tickable _startTime with its duration to reset _currentTime to 0 and continue the infinite timer\n tickable._startTime += tickable.duration;\n } else if (tickable._currentIteration >= iterationCount - 1) {\n // By setting paused to true, we tell the engine loop to not render this tickable and removes it from the list on the next tick\n tickable.paused = true;\n if (!completed && !_hasChildren) {\n // If the tickable has children, triggers onComplete() only when all children have completed in the tick function\n tickable.completed = true;\n if (!muteCallbacks && !(parent && (isRunningBackwards || !parent.began))) {\n tickable.onComplete(/** @type {CallbackArgument} */(tickable));\n tickable._resolve(/** @type {CallbackArgument} */(tickable));\n }\n }\n }\n // Otherwise set the completed flag to false\n } else {\n tickable.completed = false;\n }\n\n // NOTE: hasRendered * direction (negative for backwards) this way we can remove the tickable.backwards property completly ?\n return hasRendered;\n};\n\n/**\n * @param {Tickable} tickable\n * @param {Number} time\n * @param {Number} muteCallbacks\n * @param {Number} internalRender\n * @param {Number} tickMode\n * @return {void}\n */\nconst tick = (tickable, time, muteCallbacks, internalRender, tickMode) => {\n const _currentIteration = tickable._currentIteration;\n render(tickable, time, muteCallbacks, internalRender, tickMode);\n if (tickable._hasChildren) {\n const tl = /** @type {Timeline} */(tickable);\n const tlIsRunningBackwards = tl.backwards;\n const tlChildrenTime = internalRender ? time : tl._iterationTime;\n const tlCildrenTickTime = now();\n\n let tlChildrenHasRendered = 0;\n let tlChildrenHaveCompleted = true;\n\n // If the timeline has looped forward, we need to manually triggers children skipped callbacks\n if (!internalRender && tl._currentIteration !== _currentIteration) {\n const tlIterationDuration = tl.iterationDuration;\n forEachChildren(tl, (/** @type {JSAnimation} */child) => {\n if (!tlIsRunningBackwards) {\n // Force an internal render to trigger the callbacks if the child has not completed on loop\n if (!child.completed && !child.backwards && child._currentTime < child.iterationDuration) {\n render(child, tlIterationDuration, muteCallbacks, 1, tickModes.FORCE);\n }\n // Reset their began and completed flags to allow retrigering callbacks on the next iteration\n child.began = false;\n child.completed = false;\n } else {\n const childDuration = child.duration;\n const childStartTime = child._offset + child._delay;\n const childEndTime = childStartTime + childDuration;\n // Triggers the onComplete callback on reverse for children on the edges of the timeline\n if (!muteCallbacks && childDuration <= minValue && (!childStartTime || childEndTime === tlIterationDuration)) {\n child.onComplete(child);\n }\n }\n });\n if (!muteCallbacks) tl.onLoop(/** @type {CallbackArgument} */(tl));\n }\n\n forEachChildren(tl, (/** @type {JSAnimation} */child) => {\n const childTime = round((tlChildrenTime - child._offset) * child._speed, 12); // Rounding is needed when using seconds\n const childTickMode = child._fps < tl._fps ? child.requestTick(tlCildrenTickTime) : tickMode;\n tlChildrenHasRendered += render(child, childTime, muteCallbacks, internalRender, childTickMode);\n if (!child.completed && tlChildrenHaveCompleted) tlChildrenHaveCompleted = false;\n }, tlIsRunningBackwards);\n\n // Renders on timeline are triggered by its children so it needs to be set after rendering the children\n if (!muteCallbacks && tlChildrenHasRendered) tl.onRender(/** @type {CallbackArgument} */(tl));\n\n // Triggers the timeline onComplete() once all chindren all completed and the current time has reached the end\n if ((tlChildrenHaveCompleted || tlIsRunningBackwards) && tl._currentTime >= tl.duration) {\n // Make sure the paused flag is false in case it has been skipped in the render function\n tl.paused = true;\n if (!tl.completed) {\n tl.completed = true;\n if (!muteCallbacks) {\n tl.onComplete(/** @type {CallbackArgument} */(tl));\n tl._resolve(/** @type {CallbackArgument} */(tl));\n }\n }\n }\n }\n};\n\n\n\n\nconst additive = {\n animation: null,\n update: noop,\n};\n\n/**\n * @typedef AdditiveAnimation\n * @property {Number} duration\n * @property {Number} _offset\n * @property {Number} _delay\n * @property {Tween} _head\n * @property {Tween} _tail\n */\n\n/**\n * @param {TweenAdditiveLookups} lookups\n * @return {AdditiveAnimation}\n */\nconst addAdditiveAnimation = lookups => {\n let animation = additive.animation;\n if (!animation) {\n animation = {\n duration: minValue,\n computeDeltaTime: noop,\n _offset: 0,\n _delay: 0,\n _head: null,\n _tail: null,\n };\n additive.animation = animation;\n additive.update = () => {\n lookups.forEach(propertyAnimation => {\n for (let propertyName in propertyAnimation) {\n const tweens = propertyAnimation[propertyName];\n const lookupTween = tweens._head;\n if (lookupTween) {\n const valueType = lookupTween._valueType;\n const additiveValues = valueType === valueTypes.COMPLEX || valueType === valueTypes.COLOR ? cloneArray(lookupTween._fromNumbers) : null;\n let additiveValue = lookupTween._fromNumber;\n let tween = tweens._tail;\n while (tween && tween !== lookupTween) {\n if (additiveValues) {\n for (let i = 0, l = tween._numbers.length; i < l; i++) additiveValues[i] += tween._numbers[i];\n } else {\n additiveValue += tween._number;\n }\n tween = tween._prevAdd;\n }\n lookupTween._toNumber = additiveValue;\n lookupTween._toNumbers = additiveValues;\n }\n }\n });\n // TODO: Avoid polymorphism here, idealy the additive animation should be a regular animation with a higher priority in the render loop\n render(animation, 1, 1, 0, tickModes.FORCE);\n };\n }\n return animation;\n};\n\nconst engineTickMethod = /*#__PURE__*/ (() => isBrowser ? requestAnimationFrame : setImmediate)();\nconst engineCancelMethod = /*#__PURE__*/ (() => isBrowser ? cancelAnimationFrame : clearImmediate)();\n\nclass Engine extends Clock {\n\n /** @param {Number} [initTime] */\n constructor(initTime) {\n super(initTime);\n this.useDefaultMainLoop = true;\n this.pauseOnDocumentHidden = true;\n /** @type {DefaultsParams} */\n this.defaults = defaults;\n // this.paused = isBrowser && doc.hidden ? true : false;\n this.paused = true;\n /** @type {Number|NodeJS.Immediate} */\n this.reqId = 0;\n }\n\n update() {\n const time = this._currentTime = now();\n if (this.requestTick(time)) {\n this.computeDeltaTime(time);\n const engineSpeed = this._speed;\n const engineFps = this._fps;\n let activeTickable = /** @type {Tickable} */(this._head);\n while (activeTickable) {\n const nextTickable = activeTickable._next;\n if (!activeTickable.paused) {\n tick(\n activeTickable,\n (time - activeTickable._startTime) * activeTickable._speed * engineSpeed,\n 0, // !muteCallbacks\n 0, // !internalRender\n activeTickable._fps < engineFps ? activeTickable.requestTick(time) : tickModes.AUTO\n );\n } else {\n removeChild(this, activeTickable);\n this._hasChildren = !!this._tail;\n activeTickable._running = false;\n if (activeTickable.completed && !activeTickable._cancelled) {\n activeTickable.cancel();\n }\n }\n activeTickable = nextTickable;\n }\n additive.update();\n }\n }\n\n wake() {\n if (this.useDefaultMainLoop && !this.reqId) {\n // Imediatly request a tick to update engine._elapsedTime and get accurate offsetPosition calculation in timer.js\n this.requestTick(now());\n this.reqId = engineTickMethod(tickEngine);\n }\n return this;\n }\n\n pause() {\n if (!this.reqId) return;\n this.paused = true;\n return killEngine();\n }\n\n resume() {\n if (!this.paused) return;\n this.paused = false;\n forEachChildren(this, (/** @type {Tickable} */child) => child.resetTime());\n return this.wake();\n }\n\n // Getter and setter for speed\n get speed() {\n return this._speed * (globals.timeScale === 1 ? 1 : K);\n }\n\n set speed(playbackRate) {\n this._speed = playbackRate * globals.timeScale;\n forEachChildren(this, (/** @type {Tickable} */child) => child.speed = child._speed);\n }\n\n // Getter and setter for timeUnit\n get timeUnit() {\n return globals.timeScale === 1 ? 'ms' : 's';\n };\n\n set timeUnit(unit) {\n const secondsScale = 0.001;\n const isSecond = unit === 's';\n const newScale = isSecond ? secondsScale : 1;\n if (globals.timeScale !== newScale) {\n globals.timeScale = newScale;\n globals.tickThreshold = 200 * newScale;\n const scaleFactor = isSecond ? secondsScale : K;\n /** @type {Number} */\n (this.defaults.duration) *= scaleFactor;\n this._speed *= scaleFactor;\n }\n }\n\n // Getter and setter for precision\n get precision() {\n return globals.precision;\n }\n\n set precision(precision) {\n globals.precision = precision;\n }\n\n}\nconst engine = /*#__PURE__*/(() => {\n const engine = new Engine(now());\n if (isBrowser) {\n globalVersions.engine = engine;\n doc.addEventListener('visibilitychange', () => {\n if (!engine.pauseOnDocumentHidden) return;\n doc.hidden ? engine.pause() : engine.resume();\n });\n }\n return engine;\n})();\n\n\nconst tickEngine = () => {\n if (engine._head) {\n engine.reqId = engineTickMethod(tickEngine);\n engine.update();\n } else {\n engine.reqId = 0;\n }\n};\n\nconst killEngine = () => {\n engineCancelMethod(/** @type {NodeJS.Immediate & Number} */(engine.reqId));\n engine.reqId = 0;\n return engine;\n};\n\n\n\n\n/**\n * @param {DOMTarget} target\n * @param {String} propName\n * @param {Object} animationInlineStyles\n * @return {String}\n */\nconst parseInlineTransforms = (target, propName, animationInlineStyles) => {\n const inlineTransforms = target.style.transform;\n let inlinedStylesPropertyValue;\n if (inlineTransforms) {\n const cachedTransforms = target[transformsSymbol];\n let t; while (t = transformsExecRgx.exec(inlineTransforms)) {\n const inlinePropertyName = t[1];\n // const inlinePropertyValue = t[2];\n const inlinePropertyValue = t[2].slice(1, -1);\n cachedTransforms[inlinePropertyName] = inlinePropertyValue;\n if (inlinePropertyName === propName) {\n inlinedStylesPropertyValue = inlinePropertyValue;\n // Store the new parsed inline styles if animationInlineStyles is provided\n if (animationInlineStyles) {\n animationInlineStyles[propName] = inlinePropertyValue;\n }\n }\n }\n }\n return inlineTransforms && !isUnd(inlinedStylesPropertyValue) ? inlinedStylesPropertyValue :\n stringStartsWith(propName, 'scale') ? '1' :\n stringStartsWith(propName, 'rotate') || stringStartsWith(propName, 'skew') ? '0deg' : '0px';\n};\n\n\n\n\n/**\n * @param {DOMTargetsParam|TargetsParam} v\n * @return {NodeList|HTMLCollection}\n */\nfunction getNodeList(v) {\n const n = isStr(v) ? scope.root.querySelectorAll(v) : v;\n if (n instanceof NodeList || n instanceof HTMLCollection) return n;\n}\n\n/**\n * @overload\n * @param {DOMTargetsParam} targets\n * @return {DOMTargetsArray}\n *\n * @overload\n * @param {JSTargetsParam} targets\n * @return {JSTargetsArray}\n *\n * @overload\n * @param {TargetsParam} targets\n * @return {TargetsArray}\n *\n * @param {DOMTargetsParam|JSTargetsParam|TargetsParam} targets\n */\nfunction parseTargets(targets) {\n if (isNil(targets)) return /** @type {TargetsArray} */([]);\n if (!isBrowser) return /** @type {JSTargetsArray} */(isArr(targets) && targets.flat(Infinity) || [targets]);\n if (isArr(targets)) {\n const flattened = targets.flat(Infinity);\n /** @type {TargetsArray} */\n const parsed = [];\n for (let i = 0, l = flattened.length; i < l; i++) {\n const item = flattened[i];\n if (!isNil(item)) {\n const nodeList = getNodeList(item);\n if (nodeList) {\n for (let j = 0, jl = nodeList.length; j < jl; j++) {\n const subItem = nodeList[j];\n if (!isNil(subItem)) {\n let isDuplicate = false;\n for (let k = 0, kl = parsed.length; k < kl; k++) {\n if (parsed[k] === subItem) {\n isDuplicate = true;\n break;\n }\n }\n if (!isDuplicate) {\n parsed.push(subItem);\n }\n }\n }\n } else {\n let isDuplicate = false;\n for (let j = 0, jl = parsed.length; j < jl; j++) {\n if (parsed[j] === item) {\n isDuplicate = true;\n break;\n }\n }\n if (!isDuplicate) {\n parsed.push(item);\n }\n }\n }\n }\n return parsed;\n }\n const nodeList = getNodeList(targets);\n if (nodeList) return /** @type {DOMTargetsArray} */(Array.from(nodeList));\n return /** @type {TargetsArray} */([targets]);\n}\n\n/**\n * @overload\n * @param {DOMTargetsParam} targets\n * @return {DOMTargetsArray}\n *\n * @overload\n * @param {JSTargetsParam} targets\n * @return {JSTargetsArray}\n *\n * @overload\n * @param {TargetsParam} targets\n * @return {TargetsArray}\n *\n * @param {DOMTargetsParam|JSTargetsParam|TargetsParam} targets\n */\nfunction registerTargets(targets) {\n const parsedTargetsArray = parseTargets(targets);\n const parsedTargetsLength = parsedTargetsArray.length;\n if (parsedTargetsLength) {\n for (let i = 0; i < parsedTargetsLength; i++) {\n const target = parsedTargetsArray[i];\n if (!target[isRegisteredTargetSymbol]) {\n target[isRegisteredTargetSymbol] = true;\n const isSvgType = isSvg(target);\n const isDom = /** @type {DOMTarget} */(target).nodeType || isSvgType;\n if (isDom) {\n target[isDomSymbol] = true;\n target[isSvgSymbol] = isSvgType;\n target[transformsSymbol] = {};\n }\n }\n }\n }\n return parsedTargetsArray;\n}\n\n\n\n\n/**\n * @param {TargetsParam} path\n * @return {SVGGeometryElement|undefined}\n */\nconst getPath = path => {\n const parsedTargets = parseTargets(path);\n const $parsedSvg = /** @type {SVGGeometryElement} */(parsedTargets[0]);\n if (!$parsedSvg || !isSvg($parsedSvg)) return;\n return $parsedSvg;\n};\n\n/**\n * @param {TargetsParam} path2\n * @param {Number} [precision]\n * @return {FunctionValue}\n */\nconst morphTo = (path2, precision = .33) => ($path1) => {\n const $path2 = /** @type {SVGGeometryElement} */(getPath(path2));\n if (!$path2) return;\n const isPath = $path1.tagName === 'path';\n const separator = isPath ? ' ' : ',';\n const previousPoints = $path1[morphPointsSymbol];\n if (previousPoints) $path1.setAttribute(isPath ? 'd' : 'points', previousPoints);\n\n let v1 = '', v2 = '';\n\n if (!precision) {\n v1 = $path1.getAttribute(isPath ? 'd' : 'points');\n v2 = $path2.getAttribute(isPath ? 'd' : 'points');\n } else {\n const length1 = /** @type {SVGGeometryElement} */($path1).getTotalLength();\n const length2 = $path2.getTotalLength();\n const maxPoints = Math.max(Math.ceil(length1 * precision), Math.ceil(length2 * precision));\n for (let i = 0; i < maxPoints; i++) {\n const t = i / (maxPoints - 1);\n const pointOnPath1 = /** @type {SVGGeometryElement} */($path1).getPointAtLength(length1 * t);\n const pointOnPath2 = $path2.getPointAtLength(length2 * t);\n const prefix = isPath ? (i === 0 ? 'M' : 'L') : '';\n v1 += prefix + round(pointOnPath1.x, 3) + separator + pointOnPath1.y + ' ';\n v2 += prefix + round(pointOnPath2.x, 3) + separator + pointOnPath2.y + ' ';\n }\n }\n\n $path1[morphPointsSymbol] = v2;\n\n return [v1, v2];\n};\n\n/**\n * @param {SVGGeometryElement} [$el]\n * @return {Number}\n */\nconst getScaleFactor = $el => {\n let scaleFactor = 1;\n if ($el && $el.getCTM) {\n const ctm = $el.getCTM();\n if (ctm) {\n const scaleX = sqrt(ctm.a * ctm.a + ctm.b * ctm.b);\n const scaleY = sqrt(ctm.c * ctm.c + ctm.d * ctm.d);\n scaleFactor = (scaleX + scaleY) / 2;\n }\n }\n return scaleFactor;\n};\n\n/**\n * Creates a proxy that wraps an SVGGeometryElement and adds drawing functionality.\n * @param {SVGGeometryElement} $el - The SVG element to transform into a drawable\n * @param {number} start - Starting position (0-1)\n * @param {number} end - Ending position (0-1)\n * @return {DrawableSVGGeometry} - Returns a proxy that preserves the original element's type with additional 'draw' attribute functionality\n */\nconst createDrawableProxy = ($el, start, end) => {\n const pathLength = K;\n const computedStyles = getComputedStyle($el);\n const strokeLineCap = computedStyles.strokeLinecap;\n // @ts-ignore\n const $scalled = computedStyles.vectorEffect === 'non-scaling-stroke' ? $el : null;\n let currentCap = strokeLineCap;\n\n const proxy = new Proxy($el, {\n get(target, property) {\n const value = target[property];\n if (property === proxyTargetSymbol) return target;\n if (property === 'setAttribute') {\n return (...args) => {\n if (args[0] === 'draw') {\n const value = args[1];\n const values = value.split(' ');\n const v1 = +values[0];\n const v2 = +values[1];\n // TOTO: Benchmark if performing two slices is more performant than one split\n // const spaceIndex = value.indexOf(' ');\n // const v1 = round(+value.slice(0, spaceIndex), precision);\n // const v2 = round(+value.slice(spaceIndex + 1), precision);\n const scaleFactor = getScaleFactor($scalled);\n const os = v1 * -1e3 * scaleFactor;\n const d1 = (v2 * pathLength * scaleFactor) + os;\n const d2 = (pathLength * scaleFactor +\n ((v1 === 0 && v2 === 1) || (v1 === 1 && v2 === 0) ? 0 : 10 * scaleFactor) - d1);\n if (strokeLineCap !== 'butt') {\n const newCap = v1 === v2 ? 'butt' : strokeLineCap;\n if (currentCap !== newCap) {\n target.style.strokeLinecap = `${newCap}`;\n currentCap = newCap;\n }\n }\n target.setAttribute('stroke-dashoffset', `${os}`);\n target.setAttribute('stroke-dasharray', `${d1} ${d2}`);\n }\n return Reflect.apply(value, target, args);\n };\n }\n\n if (isFnc(value)) {\n return (...args) => Reflect.apply(value, target, args);\n } else {\n return value;\n }\n }\n });\n\n if ($el.getAttribute('pathLength') !== `${pathLength}`) {\n $el.setAttribute('pathLength', `${pathLength}`);\n proxy.setAttribute('draw', `${start} ${end}`);\n }\n\n return /** @type {DrawableSVGGeometry} */(proxy);\n};\n\n/**\n * Creates drawable proxies for multiple SVG elements.\n * @param {TargetsParam} selector - CSS selector, SVG element, or array of elements and selectors\n * @param {number} [start=0] - Starting position (0-1)\n * @param {number} [end=0] - Ending position (0-1)\n * @return {Array<DrawableSVGGeometry>} - Array of proxied elements with drawing functionality\n */\nconst createDrawable = (selector, start = 0, end = 0) => {\n const els = parseTargets(selector);\n return els.map($el => createDrawableProxy(\n /** @type {SVGGeometryElement} */($el),\n start,\n end\n ));\n};\n\n// Motion path animation\n\n/**\n * @param {SVGGeometryElement} $path\n * @param {Number} progress\n * @param {Number}lookup\n * @return {DOMPoint}\n */\nconst getPathPoint = ($path, progress, lookup = 0) => {\n return $path.getPointAtLength(progress + lookup >= 1 ? progress + lookup : 0);\n};\n\n/**\n * @param {SVGGeometryElement} $path\n * @param {String} pathProperty\n * @return {FunctionValue}\n */\nconst getPathProgess = ($path, pathProperty) => {\n return $el => {\n const totalLength = +($path.getTotalLength());\n const inSvg = $el[isSvgSymbol];\n const ctm = $path.getCTM();\n /** @type {TweenObjectValue} */\n return {\n from: 0,\n to: totalLength,\n /** @type {TweenModifier} */\n modifier: progress => {\n if (pathProperty === 'a') {\n const p0 = getPathPoint($path, progress, -1);\n const p1 = getPathPoint($path, progress, 1);\n return atan2(p1.y - p0.y, p1.x - p0.x) * 180 / PI;\n } else {\n const p = getPathPoint($path, progress, 0);\n return pathProperty === 'x' ?\n inSvg || !ctm ? p.x : p.x * ctm.a + p.y * ctm.c + ctm.e :\n inSvg || !ctm ? p.y : p.x * ctm.b + p.y * ctm.d + ctm.f\n }\n }\n }\n }\n};\n\n/**\n * @param {TargetsParam} path\n */\nconst createMotionPath = path => {\n const $path = getPath(path);\n if (!$path) return;\n return {\n translateX: getPathProgess($path, 'x'),\n translateY: getPathProgess($path, 'y'),\n rotate: getPathProgess($path, 'a'),\n }\n};\n\n// Check for valid SVG attribute\n\nconst cssReservedProperties = ['opacity', 'rotate', 'overflow', 'color'];\n\n/**\n * @param {Target} el\n * @param {String} propertyName\n * @return {Boolean}\n */\nconst isValidSVGAttribute = (el, propertyName) => {\n // Return early and use CSS opacity animation instead (already better default values (opacity: 1 instead of 0)) and rotate should be considered a transform\n if (cssReservedProperties.includes(propertyName)) return false;\n if (el.getAttribute(propertyName) || propertyName in el) {\n if (propertyName === 'scale') { // Scale\n const elParentNode = /** @type {SVGGeometryElement} */(/** @type {DOMTarget} */(el).parentNode);\n // Only consider scale as a valid SVG attribute on filter element\n return elParentNode && elParentNode.tagName === 'filter';\n }\n return true;\n }\n};\n\nconst svg = {\n morphTo,\n createMotionPath,\n createDrawable,\n};\n\n\n\n\n/**\n * RGB / RGBA Color value string -> RGBA values array\n * @param {String} rgbValue\n * @return {ColorArray}\n */\nconst rgbToRgba = rgbValue => {\n const rgba = rgbExecRgx.exec(rgbValue) || rgbaExecRgx.exec(rgbValue);\n const a = !isUnd(rgba[4]) ? +rgba[4] : 1;\n return [\n +rgba[1],\n +rgba[2],\n +rgba[3],\n a\n ]\n};\n\n/**\n * HEX3 / HEX3A / HEX6 / HEX6A Color value string -> RGBA values array\n * @param {String} hexValue\n * @return {ColorArray}\n */\nconst hexToRgba = hexValue => {\n const hexLength = hexValue.length;\n const isShort = hexLength === 4 || hexLength === 5;\n return [\n +('0x' + hexValue[1] + hexValue[isShort ? 1 : 2]),\n +('0x' + hexValue[isShort ? 2 : 3] + hexValue[isShort ? 2 : 4]),\n +('0x' + hexValue[isShort ? 3 : 5] + hexValue[isShort ? 3 : 6]),\n ((hexLength === 5 || hexLength === 9) ? +(+('0x' + hexValue[isShort ? 4 : 7] + hexValue[isShort ? 4 : 8]) / 255).toFixed(3) : 1)\n ]\n};\n\n/**\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\nconst hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n return t < 1 / 6 ? p + (q - p) * 6 * t :\n t < 1 / 2 ? q :\n t < 2 / 3 ? p + (q - p) * (2 / 3 - t) * 6 :\n p;\n};\n\n/**\n * HSL / HSLA Color value string -> RGBA values array\n * @param {String} hslValue\n * @return {ColorArray}\n */\nconst hslToRgba = hslValue => {\n const hsla = hslExecRgx.exec(hslValue) || hslaExecRgx.exec(hslValue);\n const h = +hsla[1] / 360;\n const s = +hsla[2] / 100;\n const l = +hsla[3] / 100;\n const a = !isUnd(hsla[4]) ? +hsla[4] : 1;\n let r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l < .5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = round(hue2rgb(p, q, h + 1 / 3) * 255, 0);\n g = round(hue2rgb(p, q, h) * 255, 0);\n b = round(hue2rgb(p, q, h - 1 / 3) * 255, 0);\n }\n return [r, g, b, a];\n};\n\n/**\n * All in one color converter that converts a color string value into an array of RGBA values\n * @param {String} colorString\n * @return {ColorArray}\n */\nconst convertColorStringValuesToRgbaArray = colorString => {\n return isRgb(colorString) ? rgbToRgba(colorString) :\n isHex(colorString) ? hexToRgba(colorString) :\n isHsl(colorString) ? hslToRgba(colorString) :\n [0, 0, 0, 1];\n};\n\n\n\n\n/**\n * @template T, D\n * @param {T|undefined} targetValue\n * @param {D} defaultValue\n * @return {T|D}\n */\nconst setValue = (targetValue, defaultValue) => {\n return isUnd(targetValue) ? defaultValue : targetValue;\n};\n\n/**\n * @param {TweenPropValue} value\n * @param {Target} target\n * @param {Number} index\n * @param {Number} total\n * @param {Object} [store]\n * @return {any}\n */\nconst getFunctionValue = (value, target, index, total, store) => {\n if (isFnc(value)) {\n const func = () => {\n const computed = /** @type {Function} */(value)(target, index, total);\n // Fallback to 0 if the function returns undefined / NaN / null / false / 0\n return !isNaN(+computed) ? +computed : computed || 0;\n };\n if (store) {\n store.func = func;\n }\n return func();\n } else {\n return value;\n }\n};\n\n/**\n * @param {Target} target\n * @param {String} prop\n * @return {tweenTypes}\n */\nconst getTweenType = (target, prop) => {\n return !target[isDomSymbol] ? tweenTypes.OBJECT :\n // Handle SVG attributes\n target[isSvgSymbol] && isValidSVGAttribute(target, prop) ? tweenTypes.ATTRIBUTE :\n // Handle CSS Transform properties differently than CSS to allow individual animations\n validTransforms.includes(prop) || shortTransforms.get(prop) ? tweenTypes.TRANSFORM :\n // CSS variables\n stringStartsWith(prop, '--') ? tweenTypes.CSS_VAR :\n // All other CSS properties\n prop in /** @type {DOMTarget} */(target).style ? tweenTypes.CSS :\n // Handle other DOM Attributes\n prop in target ? tweenTypes.OBJECT :\n tweenTypes.ATTRIBUTE;\n};\n\n/**\n * @param {DOMTarget} target\n * @param {String} propName\n * @param {Object} animationInlineStyles\n * @return {String}\n */\nconst getCSSValue = (target, propName, animationInlineStyles) => {\n const inlineStyles = target.style[propName];\n if (inlineStyles && animationInlineStyles) {\n animationInlineStyles[propName] = inlineStyles;\n }\n const value = inlineStyles || getComputedStyle(target[proxyTargetSymbol] || target).getPropertyValue(propName);\n return value === 'auto' ? '0' : value;\n};\n\n/**\n * @param {Target} target\n * @param {String} propName\n * @param {tweenTypes} [tweenType]\n * @param {Object|void} [animationInlineStyles]\n * @return {String|Number}\n */\nconst getOriginalAnimatableValue = (target, propName, tweenType, animationInlineStyles) => {\n const type = !isUnd(tweenType) ? tweenType : getTweenType(target, propName);\n return type === tweenTypes.OBJECT ? target[propName] || 0 :\n type === tweenTypes.ATTRIBUTE ? /** @type {DOMTarget} */(target).getAttribute(propName) :\n type === tweenTypes.TRANSFORM ? parseInlineTransforms(/** @type {DOMTarget} */(target), propName, animationInlineStyles) :\n type === tweenTypes.CSS_VAR ? getCSSValue(/** @type {DOMTarget} */(target), propName, animationInlineStyles).trimStart() :\n getCSSValue(/** @type {DOMTarget} */(target), propName, animationInlineStyles);\n};\n\n/**\n * @param {Number} x\n * @param {Number} y\n * @param {String} operator\n * @return {Number}\n */\nconst getRelativeValue = (x, y, operator) => {\n return operator === '-' ? x - y :\n operator === '+' ? x + y :\n x * y;\n};\n\n/** @return {TweenDecomposedValue} */\nconst createDecomposedValueTargetObject = () => {\n return {\n /** @type {valueTypes} */\n t: valueTypes.NUMBER,\n n: 0,\n u: null,\n o: null,\n d: null,\n s: null,\n }\n};\n\n/**\n * @param {String|Number} rawValue\n * @param {TweenDecomposedValue} targetObject\n * @return {TweenDecomposedValue}\n */\nconst decomposeRawValue = (rawValue, targetObject) => {\n /** @type {valueTypes} */\n targetObject.t = valueTypes.NUMBER;\n targetObject.n = 0;\n targetObject.u = null;\n targetObject.o = null;\n targetObject.d = null;\n targetObject.s = null;\n if (!rawValue) return targetObject;\n const num = +rawValue;\n if (!isNaN(num)) {\n // It's a number\n targetObject.n = num;\n return targetObject;\n } else {\n // let str = /** @type {String} */(rawValue).trim();\n let str = /** @type {String} */(rawValue);\n // Parsing operators (+=, -=, *=) manually is much faster than using regex here\n if (str[1] === '=') {\n targetObject.o = str[0];\n str = str.slice(2);\n }\n // Skip exec regex if the value type is complex or color to avoid long regex backtracking\n const unitMatch = str.includes(' ') ? false : unitsExecRgx.exec(str);\n if (unitMatch) {\n // Has a number and a unit\n targetObject.t = valueTypes.UNIT;\n targetObject.n = +unitMatch[1];\n targetObject.u = unitMatch[2];\n return targetObject;\n } else if (targetObject.o) {\n // Has an operator (+=, -=, *=)\n targetObject.n = +str;\n return targetObject;\n } else if (isCol(str)) {\n // Is a color\n targetObject.t = valueTypes.COLOR;\n targetObject.d = convertColorStringValuesToRgbaArray(str);\n return targetObject;\n } else {\n // Is a more complex string (generally svg coords, calc() or filters CSS values)\n const matchedNumbers = str.match(digitWithExponentRgx);\n targetObject.t = valueTypes.COMPLEX;\n targetObject.d = matchedNumbers ? matchedNumbers.map(Number) : [];\n targetObject.s = str.split(digitWithExponentRgx) || [];\n return targetObject;\n }\n }\n};\n\n/**\n * @param {Tween} tween\n * @param {TweenDecomposedValue} targetObject\n * @return {TweenDecomposedValue}\n */\nconst decomposeTweenValue = (tween, targetObject) => {\n targetObject.t = tween._valueType;\n targetObject.n = tween._toNumber;\n targetObject.u = tween._unit;\n targetObject.o = null;\n targetObject.d = cloneArray(tween._toNumbers);\n targetObject.s = cloneArray(tween._strings);\n return targetObject;\n};\n\nconst decomposedOriginalValue = createDecomposedValueTargetObject();\n\n\n\n\nconst lookups = {\n /** @type {TweenReplaceLookups} */\n _rep: new WeakMap(),\n /** @type {TweenAdditiveLookups} */\n _add: new Map(),\n};\n\n/**\n * @param {Target} target\n * @param {String} property\n * @param {String} lookup\n * @return {TweenPropertySiblings}\n */\nconst getTweenSiblings = (target, property, lookup = '_rep') => {\n const lookupMap = lookups[lookup];\n let targetLookup = lookupMap.get(target);\n if (!targetLookup) {\n targetLookup = {};\n lookupMap.set(target, targetLookup);\n }\n return targetLookup[property] ? targetLookup[property] : targetLookup[property] = {\n _head: null,\n _tail: null,\n }\n};\n\n/**\n * @param {Tween} p\n * @param {Tween} c\n * @return {Number|Boolean}\n */\nconst addTweenSortMethod = (p, c) => {\n return p._isOverridden || p._absoluteStartTime > c._absoluteStartTime;\n};\n\n/**\n * @param {Tween} tween\n */\nconst overrideTween = tween => {\n tween._isOverlapped = 1;\n tween._isOverridden = 1;\n tween._changeDuration = minValue;\n tween._currentTime = minValue;\n};\n\n/**\n * @param {Tween} tween\n * @param {TweenPropertySiblings} siblings\n * @return {Tween}\n */\nconst composeTween = (tween, siblings) => {\n\n const tweenCompositionType = tween._composition;\n\n // Handle replaced tweens\n\n if (tweenCompositionType === compositionTypes.replace) {\n\n const tweenAbsStartTime = tween._absoluteStartTime;\n\n addChild(siblings, tween, addTweenSortMethod, '_prevRep', '_nextRep');\n\n const prevSibling = tween._prevRep;\n\n // Update the previous siblings for composition replace tweens\n\n if (prevSibling) {\n\n const prevParent = prevSibling.parent;\n const prevAbsEndTime = prevSibling._absoluteStartTime + prevSibling._changeDuration;\n\n // Handle looped animations tween\n\n if (\n // Check if the previous tween is from a different animation\n tween.parent.id !== prevParent.id &&\n // Check if the animation has loops\n prevParent.iterationCount> 1 &&\n // Check if _absoluteChangeEndTime of last loop overlaps the current tween\n prevAbsEndTime + (prevParent.duration - prevParent.iterationDuration) > tweenAbsStartTime\n ) {\n\n // TODO: Find a way to only override the iterations overlapping with the tween\n overrideTween(prevSibling);\n\n let prevPrevSibling = prevSibling._prevRep;\n\n // If the tween was part of a set of keyframes, override its siblings\n while (prevPrevSibling && prevPrevSibling.parent.id === prevParent.id) {\n overrideTween(prevPrevSibling);\n prevPrevSibling = prevPrevSibling._prevRep;\n }\n\n }\n\n const absoluteUpdateStartTime = tweenAbsStartTime - tween._delay;\n\n if (prevAbsEndTime > absoluteUpdateStartTime) {\n\n const prevChangeStartTime = prevSibling._startTime;\n const prevTLOffset = prevAbsEndTime - (prevChangeStartTime + prevSibling._updateDuration);\n // Rounding is necessary here to minimize floating point errors when working in seconds\n const updatedPrevChangeDuration = round(absoluteUpdateStartTime - prevTLOffset - prevChangeStartTime, 12);\n\n prevSibling._changeDuration = updatedPrevChangeDuration;\n prevSibling._currentTime = updatedPrevChangeDuration;\n prevSibling._isOverlapped = 1;\n\n // Override the previous tween if its new _changeDuration is lower than minValue\n // TODO: See if it's even neceseeary to test against minValue, checking for 0 might be enough\n if (updatedPrevChangeDuration < minValue) {\n overrideTween(prevSibling);\n }\n }\n\n // Pause (and cancel) the parent if it only contains overlapped tweens\n\n let pausePrevParentAnimation = true;\n\n forEachChildren(prevParent, (/** @type Tween */t) => {\n if (!t._isOverlapped) pausePrevParentAnimation = false;\n });\n\n if (pausePrevParentAnimation) {\n const prevParentTL = prevParent.parent;\n if (prevParentTL) {\n let pausePrevParentTL = true;\n forEachChildren(prevParentTL, (/** @type JSAnimation */a) => {\n if (a !== prevParent) {\n forEachChildren(a, (/** @type Tween */t) => {\n if (!t._isOverlapped) pausePrevParentTL = false;\n });\n }\n });\n if (pausePrevParentTL) {\n prevParentTL.cancel();\n }\n } else {\n prevParent.cancel();\n // Previously, calling .cancel() on a timeline child would affect the render order of other children\n // Worked around this by marking it as .completed and using .pause() for safe removal in the engine loop\n // This is no longer needed since timeline tween composition is now handled separately\n // Keeping this here for reference\n // prevParent.completed = true;\n // prevParent.pause();\n }\n }\n\n }\n\n // let nextSibling = tween._nextRep;\n\n // // All the next siblings are automatically overridden\n\n // if (nextSibling && nextSibling._absoluteStartTime >= tweenAbsStartTime) {\n // while (nextSibling) {\n // overrideTween(nextSibling);\n // nextSibling = nextSibling._nextRep;\n // }\n // }\n\n // if (nextSibling && nextSibling._absoluteStartTime < tweenAbsStartTime) {\n // while (nextSibling) {\n // overrideTween(nextSibling);\n // console.log(tween.id, nextSibling.id);\n // nextSibling = nextSibling._nextRep;\n // }\n // }\n\n // Handle additive tweens composition\n\n } else if (tweenCompositionType === compositionTypes.blend) {\n\n const additiveTweenSiblings = getTweenSiblings(tween.target, tween.property, '_add');\n const additiveAnimation = addAdditiveAnimation(lookups._add);\n\n let lookupTween = additiveTweenSiblings._head;\n\n if (!lookupTween) {\n lookupTween = { ...tween };\n lookupTween._composition = compositionTypes.replace;\n lookupTween._updateDuration = minValue;\n lookupTween._startTime = 0;\n lookupTween._numbers = cloneArray(tween._fromNumbers);\n lookupTween._number = 0;\n lookupTween._next = null;\n lookupTween._prev = null;\n addChild(additiveTweenSiblings, lookupTween);\n addChild(additiveAnimation, lookupTween);\n }\n\n // Convert the values of TO to FROM and set TO to 0\n\n const toNumber = tween._toNumber;\n tween._fromNumber = lookupTween._fromNumber - toNumber;\n tween._toNumber = 0;\n tween._numbers = cloneArray(tween._fromNumbers);\n tween._number = 0;\n lookupTween._fromNumber = toNumber;\n\n if (tween._toNumbers) {\n const toNumbers = cloneArray(tween._toNumbers);\n if (toNumbers) {\n toNumbers.forEach((value, i) => {\n tween._fromNumbers[i] = lookupTween._fromNumbers[i] - value;\n tween._toNumbers[i] = 0;\n });\n }\n lookupTween._fromNumbers = toNumbers;\n }\n\n addChild(additiveTweenSiblings, tween, null, '_prevAdd', '_nextAdd');\n\n }\n\n return tween;\n\n};\n\n/**\n * @param {Tween} tween\n * @return {Tween}\n */\nconst removeTweenSliblings = tween => {\n const tweenComposition = tween._composition;\n if (tweenComposition !== compositionTypes.none) {\n const tweenTarget = tween.target;\n const tweenProperty = tween.property;\n const replaceTweensLookup = lookups._rep;\n const replaceTargetProps = replaceTweensLookup.get(tweenTarget);\n const tweenReplaceSiblings = replaceTargetProps[tweenProperty];\n removeChild(tweenReplaceSiblings, tween, '_prevRep', '_nextRep');\n if (tweenComposition === compositionTypes.blend) {\n const addTweensLookup = lookups._add;\n const addTargetProps = addTweensLookup.get(tweenTarget);\n if (!addTargetProps) return;\n const additiveTweenSiblings = addTargetProps[tweenProperty];\n const additiveAnimation = additive.animation;\n removeChild(additiveTweenSiblings, tween, '_prevAdd', '_nextAdd');\n // If only one tween is left in the additive lookup, it's the tween lookup\n const lookupTween = additiveTweenSiblings._head;\n if (lookupTween && lookupTween === additiveTweenSiblings._tail) {\n removeChild(additiveTweenSiblings, lookupTween, '_prevAdd', '_nextAdd');\n removeChild(additiveAnimation, lookupTween);\n let shouldClean = true;\n for (let prop in addTargetProps) {\n if (addTargetProps[prop]._head) {\n shouldClean = false;\n break;\n }\n }\n if (shouldClean) {\n addTweensLookup.delete(tweenTarget);\n }\n }\n }\n }\n return tween;\n};\n\n\n\n\n/**\n * @param {Timer} timer\n * @return {Timer}\n */\nconst resetTimerProperties = timer => {\n timer.paused = true;\n timer.began = false;\n timer.completed = false;\n return timer;\n};\n\n/**\n * @param {Timer} timer\n * @return {Timer}\n */\nconst reviveTimer = timer => {\n if (!timer._cancelled) return timer;\n if (timer._hasChildren) {\n forEachChildren(timer, reviveTimer);\n } else {\n forEachChildren(timer, (/** @type {Tween} tween*/tween) => {\n if (tween._composition !== compositionTypes.none) {\n composeTween(tween, getTweenSiblings(tween.target, tween.property));\n }\n });\n }\n timer._cancelled = 0;\n return timer;\n};\n\nlet timerId = 0;\n\n/**\n * Base class used to create Timers, Animations and Timelines\n */\nclass Timer extends Clock {\n /**\n * @param {TimerParams} [parameters]\n * @param {Timeline} [parent]\n * @param {Number} [parentPosition]\n */\n constructor(parameters = {}, parent = null, parentPosition = 0) {\n\n super(0);\n\n const {\n id,\n delay,\n duration,\n reversed,\n alternate,\n loop,\n loopDelay,\n autoplay,\n frameRate,\n playbackRate,\n onComplete,\n onLoop,\n onPause,\n onBegin,\n onBeforeUpdate,\n onUpdate,\n } = parameters;\n\n if (scope.current) scope.current.register(this);\n\n const timerInitTime = parent ? 0 : engine._elapsedTime;\n const timerDefaults = parent ? parent.defaults : globals.defaults;\n const timerDelay = /** @type {Number} */(isFnc(delay) || isUnd(delay) ? timerDefaults.delay : +delay);\n const timerDuration = isFnc(duration) || isUnd(duration) ? Infinity : +duration;\n const timerLoop = setValue(loop, timerDefaults.loop);\n const timerLoopDelay = setValue(loopDelay, timerDefaults.loopDelay);\n const timerIterationCount = timerLoop === true ||\n timerLoop === Infinity ||\n /** @type {Number} */(timerLoop) < 0 ? Infinity :\n /** @type {Number} */(timerLoop) + 1;\n\n\n let offsetPosition = 0;\n\n if (parent) {\n offsetPosition = parentPosition;\n } else {\n // Make sure to tick the engine once if not currently running to get up to date engine._elapsedTime\n // to avoid big gaps with the following offsetPosition calculation\n if (!engine.reqId) engine.requestTick(now());\n // Make sure to scale the offset position with globals.timeScale to properly handle seconds unit\n offsetPosition = (engine._elapsedTime - engine._startTime) * globals.timeScale;\n }\n\n // Timer's parameters\n this.id = !isUnd(id) ? id : ++timerId;\n /** @type {Timeline} */\n this.parent = parent;\n // Total duration of the timer\n this.duration = clampInfinity(((timerDuration + timerLoopDelay) * timerIterationCount) - timerLoopDelay) || minValue;\n /** @type {Boolean} */\n this.backwards = false;\n /** @type {Boolean} */\n this.paused = true;\n /** @type {Boolean} */\n this.began = false;\n /** @type {Boolean} */\n this.completed = false;\n /** @type {Callback<this>} */\n this.onBegin = onBegin || timerDefaults.onBegin;\n /** @type {Callback<this>} */\n this.onBeforeUpdate = onBeforeUpdate || timerDefaults.onBeforeUpdate;\n /** @type {Callback<this>} */\n this.onUpdate = onUpdate || timerDefaults.onUpdate;\n /** @type {Callback<this>} */\n this.onLoop = onLoop || timerDefaults.onLoop;\n /** @type {Callback<this>} */\n this.onPause = onPause || timerDefaults.onPause;\n /** @type {Callback<this>} */\n this.onComplete = onComplete || timerDefaults.onComplete;\n /** @type {Number} */\n this.iterationDuration = timerDuration; // Duration of one loop\n /** @type {Number} */\n this.iterationCount = timerIterationCount; // Number of loops\n /** @type {Boolean|ScrollObserver} */\n this._autoplay = parent ? false : setValue(autoplay, timerDefaults.autoplay);\n /** @type {Number} */\n this._offset = offsetPosition;\n /** @type {Number} */\n this._delay = timerDelay;\n /** @type {Number} */\n this._loopDelay = timerLoopDelay;\n /** @type {Number} */\n this._iterationTime = 0;\n /** @type {Number} */\n this._currentIteration = 0; // Current loop index\n /** @type {Function} */\n this._resolve = noop; // Used by .then()\n /** @type {Boolean} */\n this._running = false;\n /** @type {Number} */\n this._reversed = +setValue(reversed, timerDefaults.reversed);\n /** @type {Number} */\n this._reverse = this._reversed;\n /** @type {Number} */\n this._cancelled = 0;\n /** @type {Boolean} */\n this._alternate = setValue(alternate, timerDefaults.alternate);\n /** @type {Renderable} */\n this._prev = null;\n /** @type {Renderable} */\n this._next = null;\n\n // Clock's parameters\n /** @type {Number} */\n this._elapsedTime = timerInitTime;\n /** @type {Number} */\n this._startTime = timerInitTime;\n /** @type {Number} */\n this._lastTime = timerInitTime;\n /** @type {Number} */\n this._fps = setValue(frameRate, timerDefaults.frameRate);\n /** @type {Number} */\n this._speed = setValue(playbackRate, timerDefaults.playbackRate);\n }\n\n get cancelled() {\n return !!this._cancelled;\n }\n\n /** @param {Boolean} cancelled */\n set cancelled(cancelled) {\n cancelled ? this.cancel() : this.reset(1).play();\n }\n\n get currentTime() {\n return clamp(round(this._currentTime, globals.precision), -this._delay, this.duration);\n }\n\n /** @param {Number} time */\n set currentTime(time) {\n const paused = this.paused;\n // Pausing the timer is necessary to avoid time jumps on a running instance\n this.pause().seek(+time);\n if (!paused) this.resume();\n }\n\n get iterationCurrentTime() {\n return round(this._iterationTime, globals.precision);\n }\n\n /** @param {Number} time */\n set iterationCurrentTime(time) {\n this.currentTime = (this.iterationDuration * this._currentIteration) + time;\n }\n\n get progress() {\n return clamp(round(this._currentTime / this.duration, 10), 0, 1);\n }\n\n /** @param {Number} progress */\n set progress(progress) {\n this.currentTime = this.duration * progress;\n }\n\n get iterationProgress() {\n return clamp(round(this._iterationTime / this.iterationDuration, 10), 0, 1);\n }\n\n /** @param {Number} progress */\n set iterationProgress(progress) {\n const iterationDuration = this.iterationDuration;\n this.currentTime = (iterationDuration * this._currentIteration) + (iterationDuration * progress);\n }\n\n get currentIteration() {\n return this._currentIteration;\n }\n\n /** @param {Number} iterationCount */\n set currentIteration(iterationCount) {\n this.currentTime = (this.iterationDuration * clamp(+iterationCount, 0, this.iterationCount - 1));\n }\n\n get reversed() {\n return !!this._reversed;\n }\n\n /** @param {Boolean} reverse */\n set reversed(reverse) {\n reverse ? this.reverse() : this.play();\n }\n\n get speed() {\n return super.speed;\n }\n\n /** @param {Number} playbackRate */\n set speed(playbackRate) {\n super.speed = playbackRate;\n this.resetTime();\n }\n\n /**\n * @param {Number} internalRender\n * @return {this}\n */\n reset(internalRender = 0) {\n // If cancelled, revive the timer before rendering in order to have propertly composed tweens siblings\n reviveTimer(this);\n if (this._reversed && !this._reverse) this.reversed = false;\n // Rendering before updating the completed flag to prevent skips and to make sure the properties are not overridden\n // Setting the iterationTime at the end to force the rendering to happend backwards, otherwise calling .reset() on Timelines might not render children in the right order\n // NOTE: This is only required for Timelines and might be better to move to the Timeline class?\n this._iterationTime = this.iterationDuration;\n // Set tickMode to tickModes.FORCE to force rendering\n tick(this, 0, 1, internalRender, tickModes.FORCE);\n // Reset timer properties after revive / render to make sure the props are not updated again\n resetTimerProperties(this);\n // Also reset children properties\n if (this._hasChildren) {\n forEachChildren(this, resetTimerProperties);\n }\n return this;\n }\n\n /**\n * @param {Number} internalRender\n * @return {this}\n */\n init(internalRender = 0) {\n this.fps = this._fps;\n this.speed = this._speed;\n // Manually calling .init() on timelines should render all children intial state\n // Forces all children to render once then render to 0 when reseted\n if (!internalRender && this._hasChildren) {\n tick(this, this.duration, 1, internalRender, tickModes.FORCE);\n }\n this.reset(internalRender);\n // Make sure to set autoplay to false to child timers so it doesn't attempt to autoplay / link\n const autoplay = this._autoplay;\n if (autoplay === true) {\n this.resume();\n } else if (autoplay && !isUnd(/** @type {ScrollObserver} */(autoplay).linked)) {\n /** @type {ScrollObserver} */(autoplay).link(this);\n }\n return this;\n }\n\n /** @return {this} */\n resetTime() {\n const timeScale = 1 / (this._speed * engine._speed);\n // TODO: See if we can safely use engine._elapsedTime here\n // if (!engine.reqId) engine.requestTick(now())\n // this._startTime = engine._elapsedTime - (this._currentTime + this._delay) * timeScale;\n this._startTime = now() - (this._currentTime + this._delay) * timeScale;\n return this;\n }\n\n /** @return {this} */\n pause() {\n if (this.paused) return this;\n this.paused = true;\n this.onPause(this);\n return this;\n }\n\n /** @return {this} */\n resume() {\n if (!this.paused) return this;\n this.paused = false;\n // We can safely imediatly render a timer that has no duration and no children\n if (this.duration <= minValue && !this._hasChildren) {\n tick(this, minValue, 0, 0, tickModes.FORCE);\n } else {\n if (!this._running) {\n addChild(engine, this);\n engine._hasChildren = true;\n this._running = true;\n }\n this.resetTime();\n // Forces the timer to advance by at least one frame when the next tick occurs\n this._startTime -= 12;\n engine.wake();\n }\n return this;\n }\n\n /** @return {this} */\n restart() {\n return this.reset(0).resume();\n }\n\n /**\n * @param {Number} time\n * @param {Boolean|Number} [muteCallbacks]\n * @param {Boolean|Number} [internalRender]\n * @return {this}\n */\n seek(time, muteCallbacks = 0, internalRender = 0) {\n // Recompose the tween siblings in case the timer has been cancelled\n reviveTimer(this);\n // If you seek a completed animation, otherwise the next play will starts at 0\n this.completed = false;\n const isPaused = this.paused;\n this.paused = true;\n // timer, time, muteCallbacks, internalRender, tickMode\n tick(this, time + this._delay, ~~muteCallbacks, ~~internalRender, tickModes.AUTO);\n return isPaused ? this : this.resume();\n }\n\n /** @return {this} */\n alternate() {\n const reversed = this._reversed;\n const count = this.iterationCount;\n const duration = this.iterationDuration;\n // Calculate the maximum iterations possible given the iteration duration\n const iterations = count === Infinity ? floor(maxValue / duration) : count;\n this._reversed = +(this._alternate && !(iterations % 2) ? reversed : !reversed);\n if (count === Infinity) {\n // Handle infinite loops to loop on themself\n this.iterationProgress = this._reversed ? 1 - this.iterationProgress : this.iterationProgress;\n } else {\n this.seek((duration * iterations) - this._currentTime);\n }\n this.resetTime();\n return this;\n }\n\n /** @return {this} */\n play() {\n if (this._reversed) this.alternate();\n return this.resume();\n }\n\n /** @return {this} */\n reverse() {\n if (!this._reversed) this.alternate();\n return this.resume();\n }\n\n // TODO: Move all the animation / tweens / children related code to Animation / Timeline\n\n /** @return {this} */\n cancel() {\n if (this._hasChildren) {\n forEachChildren(this, (/** @type {Renderable} */child) => child.cancel(), true);\n } else {\n forEachChildren(this, removeTweenSliblings);\n }\n this._cancelled = 1;\n // Pausing the timer removes it from the engine\n return this.pause();\n }\n\n /**\n * @param {Number} newDuration\n * @return {this}\n */\n stretch(newDuration) {\n const currentDuration = this.duration;\n const normlizedDuration = normalizeTime(newDuration);\n if (currentDuration === normlizedDuration) return this;\n const timeScale = newDuration / currentDuration;\n const isSetter = newDuration <= minValue;\n this.duration = isSetter ? minValue : normlizedDuration;\n this.iterationDuration = isSetter ? minValue : normalizeTime(this.iterationDuration * timeScale);\n this._offset *= timeScale;\n this._delay *= timeScale;\n this._loopDelay *= timeScale;\n return this;\n }\n\n /**\n * Cancels the timer by seeking it back to 0 and reverting the attached scroller if necessary\n * @return {this}\n */\n revert() {\n tick(this, 0, 1, 0, tickModes.AUTO);\n const ap = /** @type {ScrollObserver} */(this._autoplay);\n if (ap && ap.linked && ap.linked === this) ap.revert();\n return this.cancel();\n }\n\n /**\n * Imediatly completes the timer, cancels it and triggers the onComplete callback\n * @return {this}\n */\n complete() {\n return this.seek(this.duration).cancel();\n }\n\n /**\n * @param {Callback<this>} [callback]\n * @return {Promise}\n */\n then(callback = noop) {\n const then = this.then;\n const onResolve = () => {\n // this.then = null prevents infinite recursion if returned by an async function\n // https://github.com/juliangarnierorg/anime-beta/issues/26\n this.then = null;\n callback(this);\n this.then = then;\n this._resolve = noop;\n };\n return new Promise(r => {\n this._resolve = () => r(onResolve());\n // Make sure to resolve imediatly if the timer has already completed\n if (this.completed) this._resolve();\n return this;\n });\n }\n\n}\n\n/**\n * @param {TimerParams} [parameters]\n * @return {Timer}\n */\nconst createTimer = parameters => new Timer(parameters, null, 0).init();\n\n\n\n\n/** @type {EasingFunction} */\nconst none = t => t;\n\n// Cubic Bezier solver adapted from https://github.com/gre/bezier-ease © Gaëtan Renaudeau\n\n/**\n * @param {Number} aT\n * @param {Number} aA1\n * @param {Number} aA2\n * @return {Number}\n */\nconst calcBezier = (aT, aA1, aA2) => (((1 - 3 * aA2 + 3 * aA1) * aT + (3 * aA2 - 6 * aA1)) * aT + (3 * aA1)) * aT;\n\n/**\n * @param {Number} aX\n * @param {Number} mX1\n * @param {Number} mX2\n * @return {Number}\n */\nconst binarySubdivide = (aX, mX1, mX2) => {\n let aA = 0, aB = 1, currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (abs(currentX) > .0000001 && ++i < 100);\n return currentT;\n};\n\n/**\n * @param {Number} [mX1] The x coordinate of the first point\n * @param {Number} [mY1] The y coordinate of the first point\n * @param {Number} [mX2] The x coordinate of the second point\n * @param {Number} [mY2] The y coordinate of the second point\n * @return {EasingFunction}\n */\n\nconst cubicBezier = (mX1 = 0.5, mY1 = 0.0, mX2 = 0.5, mY2 = 1.0) => (mX1 === mY1 && mX2 === mY2) ? none :\n t => t === 0 || t === 1 ? t :\n calcBezier(binarySubdivide(t, mX1, mX2), mY1, mY2);\n\n/**\n * Steps ease implementation https://developer.mozilla.org/fr/docs/Web/CSS/transition-timing-function\n * Only covers 'end' and 'start' jumpterms\n * @param {Number} steps\n * @param {Boolean} [fromStart]\n * @return {EasingFunction}\n */\nconst steps = (steps = 10, fromStart) => {\n const roundMethod = fromStart ? ceil : floor;\n return t => roundMethod(clamp(t, 0, 1) * steps) * (1 / steps);\n};\n\n/**\n * Without parameters, the linear function creates a non-eased transition.\n * Parameters, if used, creates a piecewise linear easing by interpolating linearly between the specified points.\n * @param {...(String|Number)} args - Points\n * @return {EasingFunction}\n */\nconst linear = (...args) => {\n const argsLength = args.length;\n if (!argsLength) return none;\n const totalPoints = argsLength - 1;\n const firstArg = args[0];\n const lastArg = args[totalPoints];\n const xPoints = [0];\n const yPoints = [parseNumber(firstArg)];\n for (let i = 1; i < totalPoints; i++) {\n const arg = args[i];\n const splitValue = isStr(arg) ?\n /** @type {String} */(arg).trim().split(' ') :\n [arg];\n const value = splitValue[0];\n const percent = splitValue[1];\n xPoints.push(!isUnd(percent) ? parseNumber(percent) / 100 : i / totalPoints);\n yPoints.push(parseNumber(value));\n }\n yPoints.push(parseNumber(lastArg));\n xPoints.push(1);\n return function easeLinear(t) {\n for (let i = 1, l = xPoints.length; i < l; i++) {\n const currentX = xPoints[i];\n if (t <= currentX) {\n const prevX = xPoints[i - 1];\n const prevY = yPoints[i - 1];\n return prevY + (yPoints[i] - prevY) * (t - prevX) / (currentX - prevX);\n }\n }\n return yPoints[yPoints.length - 1];\n }\n};\n\n/**\n * Generate random steps\n * @param {Number} [length] - The number of steps\n * @param {Number} [randomness] - How strong the randomness is\n * @return {EasingFunction}\n */\nconst irregular = (length = 10, randomness = 1) => {\n const values = [0];\n const total = length - 1;\n for (let i = 1; i < total; i++) {\n const previousValue = values[i - 1];\n const spacing = i / total;\n const segmentEnd = (i + 1) / total;\n const randomVariation = spacing + (segmentEnd - spacing) * Math.random();\n // Mix the even spacing and random variation based on the randomness parameter\n const randomValue = spacing * (1 - randomness) + randomVariation * randomness;\n values.push(clamp(randomValue, previousValue, 1));\n }\n values.push(1);\n return linear(...values);\n};\n\n// Easing functions adapted from http://www.robertpenner.com/ease © Robert Penner\n\n/**\n * @callback PowerEasing\n * @param {Number|String} [power=1.675]\n * @return {EasingFunction}\n */\n\n/**\n * @callback BackEasing\n * @param {Number|String} [overshoot=1.70158]\n * @return {EasingFunction}\n */\n\n/**\n * @callback ElasticEasing\n * @param {Number|String} [amplitude=1]\n * @param {Number|String} [period=.3]\n * @return {EasingFunction}\n */\n\n/**\n * @callback EaseFactory\n * @param {Number|String} [paramA]\n * @param {Number|String} [paramB]\n * @return {EasingFunction|Number}\n */\n\n/** @typedef {PowerEasing|BackEasing|ElasticEasing} EasesFactory */\n\nconst halfPI = PI / 2;\nconst doublePI = PI * 2;\n/** @type {PowerEasing} */\nconst easeInPower = (p = 1.68) => t => pow(t, +p);\n\n/** @type {Record<String, EasesFactory|EasingFunction>} */\nconst easeInFunctions = {\n [emptyString]: easeInPower,\n Quad: easeInPower(2),\n Cubic: easeInPower(3),\n Quart: easeInPower(4),\n Quint: easeInPower(5),\n /** @type {EasingFunction} */\n Sine: t => 1 - cos(t * halfPI),\n /** @type {EasingFunction} */\n Circ: t => 1 - sqrt(1 - t * t),\n /** @type {EasingFunction} */\n Expo: t => t ? pow(2, 10 * t - 10) : 0,\n /** @type {EasingFunction} */\n Bounce: t => {\n let pow2, b = 4;\n while (t < ((pow2 = pow(2, --b)) - 1) / 11);\n return 1 / pow(4, 3 - b) - 7.5625 * pow((pow2 * 3 - 2) / 22 - t, 2);\n },\n /** @type {BackEasing} */\n Back: (overshoot = 1.70158) => t => (+overshoot + 1) * t * t * t - +overshoot * t * t,\n /** @type {ElasticEasing} */\n Elastic: (amplitude = 1, period = .3) => {\n const a = clamp(+amplitude, 1, 10);\n const p = clamp(+period, minValue, 2);\n const s = (p / doublePI) * asin(1 / a);\n const e = doublePI / p;\n return t => t === 0 || t === 1 ? t : -a * pow(2, -10 * (1 - t)) * sin(((1 - t) - s) * e);\n }\n};\n\n/**\n * @callback EaseType\n * @param {EasingFunction} Ease\n * @return {EasingFunction}\n */\n\n/** @type {Record<String, EaseType>} */\nconst easeTypes = {\n in: easeIn => t => easeIn(t),\n out: easeIn => t => 1 - easeIn(1 - t),\n inOut: easeIn => t => t < .5 ? easeIn(t * 2) / 2 : 1 - easeIn(t * -2 + 2) / 2,\n outIn: easeIn => t => t < .5 ? (1 - easeIn(1 - t * 2)) / 2 : (easeIn(t * 2 - 1) + 1) / 2,\n};\n\n/**\n * @param {String} string\n * @param {Record<String, EasesFactory|EasingFunction>} easesFunctions\n * @param {Object} easesLookups\n * @return {EasingFunction}\n */\nconst parseEaseString = (string, easesFunctions, easesLookups) => {\n if (easesLookups[string]) return easesLookups[string];\n if (string.indexOf('(') <= -1) {\n const hasParams = easeTypes[string] || string.includes('Back') || string.includes('Elastic');\n const parsedFn = /** @type {EasingFunction} */(hasParams ? /** @type {EasesFactory} */(easesFunctions[string])() : easesFunctions[string]);\n return parsedFn ? easesLookups[string] = parsedFn : none;\n } else {\n const split = string.slice(0, -1).split('(');\n const parsedFn = /** @type {EasesFactory} */(easesFunctions[split[0]]);\n return parsedFn ? easesLookups[string] = parsedFn(...split[1].split(',')) : none;\n }\n};\n\n/**\n * @typedef {Object} EasesFunctions\n * @property {typeof linear} linear\n * @property {typeof irregular} irregular\n * @property {typeof steps} steps\n * @property {typeof cubicBezier} cubicBezier\n * @property {PowerEasing} in\n * @property {PowerEasing} out\n * @property {PowerEasing} inOut\n * @property {PowerEasing} outIn\n * @property {EasingFunction} inQuad\n * @property {EasingFunction} outQuad\n * @property {EasingFunction} inOutQuad\n * @property {EasingFunction} outInQuad\n * @property {EasingFunction} inCubic\n * @property {EasingFunction} outCubic\n * @property {EasingFunction} inOutCubic\n * @property {EasingFunction} outInCubic\n * @property {EasingFunction} inQuart\n * @property {EasingFunction} outQuart\n * @property {EasingFunction} inOutQuart\n * @property {EasingFunction} outInQuart\n * @property {EasingFunction} inQuint\n * @property {EasingFunction} outQuint\n * @property {EasingFunction} inOutQuint\n * @property {EasingFunction} outInQuint\n * @property {EasingFunction} inSine\n * @property {EasingFunction} outSine\n * @property {EasingFunction} inOutSine\n * @property {EasingFunction} outInSine\n * @property {EasingFunction} inCirc\n * @property {EasingFunction} outCirc\n * @property {EasingFunction} inOutCirc\n * @property {EasingFunction} outInCirc\n * @property {EasingFunction} inExpo\n * @property {EasingFunction} outExpo\n * @property {EasingFunction} inOutExpo\n * @property {EasingFunction} outInExpo\n * @property {EasingFunction} inBounce\n * @property {EasingFunction} outBounce\n * @property {EasingFunction} inOutBounce\n * @property {EasingFunction} outInBounce\n * @property {BackEasing} inBack\n * @property {BackEasing} outBack\n * @property {BackEasing} inOutBack\n * @property {BackEasing} outInBack\n * @property {ElasticEasing} inElastic\n * @property {ElasticEasing} outElastic\n * @property {ElasticEasing} inOutElastic\n * @property {ElasticEasing} outInElastic\n */\n\nconst eases = (/*#__PURE__*/ (() => {\n const list = { linear, irregular, steps, cubicBezier };\n for (let type in easeTypes) {\n for (let name in easeInFunctions) {\n const easeIn = easeInFunctions[name];\n const easeType = easeTypes[type];\n list[type + name] = /** @type {EasesFactory|EasingFunction} */(\n name === emptyString || name === 'Back' || name === 'Elastic' ?\n (a, b) => easeType(/** @type {EasesFactory} */(easeIn)(a, b)) :\n easeType(/** @type {EasingFunction} */(easeIn))\n );\n }\n }\n return /** @type {EasesFunctions} */(list);\n})());\n\n/** @type {Record<String, EasingFunction>} */\nconst JSEasesLookups = { linear: none };\n\n/**\n * @param {EasingParam} ease\n * @return {EasingFunction}\n */\nconst parseEasings = ease => isFnc(ease) ? ease :\n isStr(ease) ? parseEaseString(/** @type {String} */(ease), eases, JSEasesLookups) :\n none;\n\n\n\n\nconst propertyNamesCache = {};\n\n/**\n * @param {String} propertyName\n * @param {Target} target\n * @param {tweenTypes} tweenType\n * @return {String}\n */\nconst sanitizePropertyName = (propertyName, target, tweenType) => {\n if (tweenType === tweenTypes.TRANSFORM) {\n const t = shortTransforms.get(propertyName);\n return t ? t : propertyName;\n } else if (\n tweenType === tweenTypes.CSS ||\n // Handle special cases where properties like \"strokeDashoffset\" needs to be set as \"stroke-dashoffset\"\n // but properties like \"baseFrequency\" should stay in lowerCamelCase\n (tweenType === tweenTypes.ATTRIBUTE && (isSvg(target) && propertyName in /** @type {DOMTarget} */(target).style))\n ) {\n const cachedPropertyName = propertyNamesCache[propertyName];\n if (cachedPropertyName) {\n return cachedPropertyName;\n } else {\n const lowerCaseName = propertyName ? toLowerCase(propertyName) : propertyName;\n propertyNamesCache[propertyName] = lowerCaseName;\n return lowerCaseName;\n }\n } else {\n return propertyName;\n }\n};\n\n\n\n\nconst angleUnitsMap = { 'deg': 1, 'rad': 180 / PI, 'turn': 360 };\nconst convertedValuesCache = {};\n\n/**\n * @param {DOMTarget} el\n * @param {TweenDecomposedValue} decomposedValue\n * @param {String} unit\n * @param {Boolean} [force]\n * @return {TweenDecomposedValue}\n */\nconst convertValueUnit = (el, decomposedValue, unit, force = false) => {\n const currentUnit = decomposedValue.u;\n const currentNumber = decomposedValue.n;\n if (decomposedValue.t === valueTypes.UNIT && currentUnit === unit) { // TODO: Check if checking against the same unit string is necessary\n return decomposedValue;\n }\n const cachedKey = currentNumber + currentUnit + unit;\n const cached = convertedValuesCache[cachedKey];\n if (!isUnd(cached) && !force) {\n decomposedValue.n = cached;\n } else {\n let convertedValue;\n if (currentUnit in angleUnitsMap) {\n convertedValue = currentNumber * angleUnitsMap[currentUnit] / angleUnitsMap[unit];\n } else {\n const baseline = 100;\n const tempEl = /** @type {DOMTarget} */(el.cloneNode());\n const parentNode = el.parentNode;\n const parentEl = (parentNode && (parentNode !== doc)) ? parentNode : doc.body;\n parentEl.appendChild(tempEl);\n const elStyle = tempEl.style;\n elStyle.width = baseline + currentUnit;\n const currentUnitWidth = /** @type {HTMLElement} */(tempEl).offsetWidth || baseline;\n elStyle.width = baseline + unit;\n const newUnitWidth = /** @type {HTMLElement} */(tempEl).offsetWidth || baseline;\n const factor = currentUnitWidth / newUnitWidth;\n parentEl.removeChild(tempEl);\n convertedValue = factor * currentNumber;\n }\n decomposedValue.n = convertedValue;\n convertedValuesCache[cachedKey] = convertedValue;\n }\n decomposedValue.t === valueTypes.UNIT;\n decomposedValue.u = unit;\n return decomposedValue;\n};\n\n\n\n\n/**\n * @template {Renderable} T\n * @param {T} renderable\n * @return {T}\n */\nconst cleanInlineStyles = renderable => {\n // Allow cleanInlineStyles() to be called on timelines\n if (renderable._hasChildren) {\n forEachChildren(renderable, cleanInlineStyles, true);\n } else {\n const animation = /** @type {JSAnimation} */(renderable);\n animation.pause();\n forEachChildren(animation, (/** @type {Tween} */tween) => {\n const tweenProperty = tween.property;\n const tweenTarget = tween.target;\n if (tweenTarget[isDomSymbol]) {\n const targetStyle = /** @type {DOMTarget} */(tweenTarget).style;\n const originalInlinedValue = animation._inlineStyles[tweenProperty];\n if (tween._tweenType === tweenTypes.TRANSFORM) {\n const cachedTransforms = tweenTarget[transformsSymbol];\n if (isUnd(originalInlinedValue) || originalInlinedValue === emptyString) {\n delete cachedTransforms[tweenProperty];\n } else {\n cachedTransforms[tweenProperty] = originalInlinedValue;\n }\n if (tween._renderTransforms) {\n if (!Object.keys(cachedTransforms).length) {\n targetStyle.removeProperty('transform');\n } else {\n let str = emptyString;\n for (let key in cachedTransforms) {\n str += transformsFragmentStrings[key] + cachedTransforms[key] + ') ';\n }\n targetStyle.transform = str;\n }\n }\n } else {\n if (isUnd(originalInlinedValue) || originalInlinedValue === emptyString) {\n targetStyle.removeProperty(tweenProperty);\n } else {\n targetStyle[tweenProperty] = originalInlinedValue;\n }\n }\n if (animation._tail === tween) {\n animation.targets.forEach(t => {\n if (t.getAttribute && t.getAttribute('style') === emptyString) {\n t.removeAttribute('style');\n } });\n }\n }\n });\n }\n return renderable;\n};\n\n// Defines decomposed values target objects only once and mutate their properties later to avoid GC\n// TODO: Maybe move the objects creation to values.js and use the decompose function to create the base object\nconst fromTargetObject = createDecomposedValueTargetObject();\nconst toTargetObject = createDecomposedValueTargetObject();\nconst toFunctionStore = { func: null };\nconst keyframesTargetArray = [null];\nconst fastSetValuesArray = [null, null];\n/** @type {TweenKeyValue} */\nconst keyObjectTarget = { to: null };\n\nlet tweenId = 0;\nlet keyframes;\n/** @type {TweenParamsOptions & TweenValues} */\nlet key;\n\n/**\n * @param {DurationKeyframes | PercentageKeyframes} keyframes\n * @param {AnimationParams} parameters\n * @return {AnimationParams}\n */\nconst generateKeyframes = (keyframes, parameters) => {\n /** @type {AnimationParams} */\n const properties = {};\n if (isArr(keyframes)) {\n const propertyNames = [].concat(.../** @type {DurationKeyframes} */(keyframes).map(key => Object.keys(key))).filter(isKey);\n for (let i = 0, l = propertyNames.length; i < l; i++) {\n const propName = propertyNames[i];\n const propArray = /** @type {DurationKeyframes} */(keyframes).map(key => {\n /** @type {TweenKeyValue} */\n const newKey = {};\n for (let p in key) {\n const keyValue = /** @type {TweenPropValue} */(key[p]);\n if (isKey(p)) {\n if (p === propName) {\n newKey.to = keyValue;\n }\n } else {\n newKey[p] = keyValue;\n }\n }\n return newKey;\n });\n properties[propName] = /** @type {ArraySyntaxValue} */(propArray);\n }\n\n } else {\n const totalDuration = /** @type {Number} */(setValue(parameters.duration, globals.defaults.duration));\n const keys = Object.keys(keyframes)\n .map(key => { return {o: parseFloat(key) / 100, p: keyframes[key]} })\n .sort((a, b) => a.o - b.o);\n keys.forEach(key => {\n const offset = key.o;\n const prop = key.p;\n for (let name in prop) {\n if (isKey(name)) {\n let propArray = /** @type {Array} */(properties[name]);\n if (!propArray) propArray = properties[name] = [];\n const duration = offset * totalDuration;\n let length = propArray.length;\n let prevKey = propArray[length - 1];\n const keyObj = { to: prop[name] };\n let durProgress = 0;\n for (let i = 0; i < length; i++) {\n durProgress += propArray[i].duration;\n }\n if (length === 1) {\n keyObj.from = prevKey.to;\n }\n if (prop.ease) {\n keyObj.ease = prop.ease;\n }\n keyObj.duration = duration - (length ? durProgress : 0);\n propArray.push(keyObj);\n }\n }\n return key;\n });\n\n for (let name in properties) {\n const propArray = /** @type {Array} */(properties[name]);\n let prevEase;\n // let durProgress = 0\n for (let i = 0, l = propArray.length; i < l; i++) {\n const prop = propArray[i];\n // Emulate WAPPI easing parameter position\n const currentEase = prop.ease;\n prop.ease = prevEase ? prevEase : undefined;\n prevEase = currentEase;\n // durProgress += prop.duration;\n // if (i === l - 1 && durProgress !== totalDuration) {\n // propArray.push({ from: prop.to, ease: prop.ease, duration: totalDuration - durProgress })\n // }\n }\n if (!propArray[0].duration) {\n propArray.shift();\n }\n }\n\n }\n\n return properties;\n};\n\nclass JSAnimation extends Timer {\n /**\n * @param {TargetsParam} targets\n * @param {AnimationParams} parameters\n * @param {Timeline} [parent]\n * @param {Number} [parentPosition]\n * @param {Boolean} [fastSet=false]\n * @param {Number} [index=0]\n * @param {Number} [length=0]\n */\n constructor(\n targets,\n parameters,\n parent,\n parentPosition,\n fastSet = false,\n index = 0,\n length = 0\n ) {\n\n super(/** @type {TimerParams&AnimationParams} */(parameters), parent, parentPosition);\n\n const parsedTargets = registerTargets(targets);\n const targetsLength = parsedTargets.length;\n\n // If the parameters object contains a \"keyframes\" property, convert all the keyframes values to regular properties\n\n const kfParams = /** @type {AnimationParams} */(parameters).keyframes;\n const params = /** @type {AnimationParams} */(kfParams ? mergeObjects(generateKeyframes(/** @type {DurationKeyframes} */(kfParams), parameters), parameters) : parameters);\n\n const {\n delay,\n duration,\n ease,\n playbackEase,\n modifier,\n composition,\n onRender,\n } = params;\n\n const animDefaults = parent ? parent.defaults : globals.defaults;\n const animaPlaybackEase = setValue(playbackEase, animDefaults.playbackEase);\n const animEase = animaPlaybackEase ? parseEasings(animaPlaybackEase) : null;\n const hasSpring = !isUnd(ease) && !isUnd(/** @type {Spring} */(ease).ease);\n const tEasing = hasSpring ? /** @type {Spring} */(ease).ease : setValue(ease, animEase ? 'linear' : animDefaults.ease);\n const tDuration = hasSpring ? /** @type {Spring} */(ease).duration : setValue(duration, animDefaults.duration);\n const tDelay = setValue(delay, animDefaults.delay);\n const tModifier = modifier || animDefaults.modifier;\n // If no composition is defined and the targets length is high (>= 1000) set the composition to 'none' (0) for faster tween creation\n const tComposition = isUnd(composition) && targetsLength >= K ? compositionTypes.none : !isUnd(composition) ? composition : animDefaults.composition;\n // TODO: Do not create an empty object until we know the animation will generate inline styles\n const animInlineStyles = {};\n // const absoluteOffsetTime = this._offset;\n const absoluteOffsetTime = this._offset + (parent ? parent._offset : 0);\n\n let iterationDuration = NaN;\n let iterationDelay = NaN;\n let animationAnimationLength = 0;\n let shouldTriggerRender = 0;\n\n for (let targetIndex = 0; targetIndex < targetsLength; targetIndex++) {\n\n const target = parsedTargets[targetIndex];\n const ti = index || targetIndex;\n const tl = length || targetsLength;\n\n let lastTransformGroupIndex = NaN;\n let lastTransformGroupLength = NaN;\n\n for (let p in params) {\n\n if (isKey(p)) {\n\n const tweenType = getTweenType(target, p);\n\n const propName = sanitizePropertyName(p, target, tweenType);\n\n let propValue = params[p];\n\n const isPropValueArray = isArr(propValue);\n\n if (fastSet && !isPropValueArray) {\n fastSetValuesArray[0] = propValue;\n fastSetValuesArray[1] = propValue;\n propValue = fastSetValuesArray;\n }\n\n // TODO: Allow nested keyframes inside ObjectValue value (prop: { to: [.5, 1, .75, 2, 3] })\n // Normalize property values to valid keyframe syntax:\n // [x, y] to [{to: [x, y]}] or {to: x} to [{to: x}] or keep keys syntax [{}, {}, {}...]\n // const keyframes = isArr(propValue) ? propValue.length === 2 && !isObj(propValue[0]) ? [{ to: propValue }] : propValue : [propValue];\n if (isPropValueArray) {\n const arrayLength = /** @type {Array} */(propValue).length;\n const isNotObjectValue = !isObj(propValue[0]);\n // Convert [x, y] to [{to: [x, y]}]\n if (arrayLength === 2 && isNotObjectValue) {\n keyObjectTarget.to = /** @type {TweenParamValue} */(/** @type {unknown} */(propValue));\n keyframesTargetArray[0] = keyObjectTarget;\n keyframes = keyframesTargetArray;\n // Convert [x, y, z] to [[x, y], z]\n } else if (arrayLength > 2 && isNotObjectValue) {\n keyframes = [];\n /** @type {Array.<Number>} */(propValue).forEach((v, i) => {\n if (!i) {\n fastSetValuesArray[0] = v;\n } else if (i === 1) {\n fastSetValuesArray[1] = v;\n keyframes.push(fastSetValuesArray);\n } else {\n keyframes.push(v);\n }\n });\n } else {\n keyframes = /** @type {Array.<TweenKeyValue>} */(propValue);\n }\n } else {\n keyframesTargetArray[0] = propValue;\n keyframes = keyframesTargetArray;\n }\n\n let siblings = null;\n let prevTween = null;\n let firstTweenChangeStartTime = NaN;\n let lastTweenChangeEndTime = 0;\n let tweenIndex = 0;\n\n for (let l = keyframes.length; tweenIndex < l; tweenIndex++) {\n\n const keyframe = keyframes[tweenIndex];\n\n if (isObj(keyframe)) {\n key = keyframe;\n } else {\n keyObjectTarget.to = /** @type {TweenParamValue} */(keyframe);\n key = keyObjectTarget;\n }\n\n toFunctionStore.func = null;\n\n const computedToValue = getFunctionValue(key.to, target, ti, tl, toFunctionStore);\n\n let tweenToValue;\n // Allows function based values to return an object syntax value ({to: v})\n if (isObj(computedToValue) && !isUnd(computedToValue.to)) {\n key = computedToValue;\n tweenToValue = computedToValue.to;\n } else {\n tweenToValue = computedToValue;\n }\n const tweenFromValue = getFunctionValue(key.from, target, ti, tl);\n const keyEasing = key.ease;\n const hasSpring = !isUnd(keyEasing) && !isUnd(/** @type {Spring} */(keyEasing).ease);\n // Easing are treated differently and don't accept function based value to prevent having to pass a function wrapper that returns an other function all the time\n const tweenEasing = hasSpring ? /** @type {Spring} */(keyEasing).ease : keyEasing || tEasing;\n // Calculate default individual keyframe duration by dividing the tl of keyframes\n const tweenDuration = hasSpring ? /** @type {Spring} */(keyEasing).duration : getFunctionValue(setValue(key.duration, (l > 1 ? getFunctionValue(tDuration, target, ti, tl) / l : tDuration)), target, ti, tl);\n // Default delay value should only be applied to the first tween\n const tweenDelay = getFunctionValue(setValue(key.delay, (!tweenIndex ? tDelay : 0)), target, ti, tl);\n const computedComposition = getFunctionValue(setValue(key.composition, tComposition), target, ti, tl);\n const tweenComposition = isNum(computedComposition) ? computedComposition : compositionTypes[computedComposition];\n // Modifiers are treated differently and don't accept function based value to prevent having to pass a function wrapper\n const tweenModifier = key.modifier || tModifier;\n const hasFromvalue = !isUnd(tweenFromValue);\n const hasToValue = !isUnd(tweenToValue);\n const isFromToArray = isArr(tweenToValue);\n const isFromToValue = isFromToArray || (hasFromvalue && hasToValue);\n const tweenStartTime = prevTween ? lastTweenChangeEndTime + tweenDelay : tweenDelay;\n // Rounding is necessary here to minimize floating point errors when working in seconds\n const absoluteStartTime = round(absoluteOffsetTime + tweenStartTime, 12);\n\n // Force a onRender callback if the animation contains at least one from value and autoplay is set to false\n if (!shouldTriggerRender && (hasFromvalue || isFromToArray)) shouldTriggerRender = 1;\n\n let prevSibling = prevTween;\n\n if (tweenComposition !== compositionTypes.none) {\n if (!siblings) siblings = getTweenSiblings(target, propName);\n let nextSibling = siblings._head;\n // Iterate trough all the next siblings until we find a sibling with an equal or inferior start time\n while (nextSibling && !nextSibling._isOverridden && nextSibling._absoluteStartTime <= absoluteStartTime) {\n prevSibling = nextSibling;\n nextSibling = nextSibling._nextRep;\n // Overrides all the next siblings if the next sibling starts at the same time of after as the new tween start time\n if (nextSibling && nextSibling._absoluteStartTime >= absoluteStartTime) {\n while (nextSibling) {\n overrideTween(nextSibling);\n // This will ends both the current while loop and the upper one once all the next sibllings have been overriden\n nextSibling = nextSibling._nextRep;\n }\n }\n }\n }\n\n // Decompose values\n if (isFromToValue) {\n decomposeRawValue(isFromToArray ? getFunctionValue(tweenToValue[0], target, ti, tl) : tweenFromValue, fromTargetObject);\n decomposeRawValue(isFromToArray ? getFunctionValue(tweenToValue[1], target, ti, tl, toFunctionStore) : tweenToValue, toTargetObject);\n if (fromTargetObject.t === valueTypes.NUMBER) {\n if (prevSibling) {\n if (prevSibling._valueType === valueTypes.UNIT) {\n fromTargetObject.t = valueTypes.UNIT;\n fromTargetObject.u = prevSibling._unit;\n }\n } else {\n decomposeRawValue(\n getOriginalAnimatableValue(target, propName, tweenType, animInlineStyles),\n decomposedOriginalValue\n );\n if (decomposedOriginalValue.t === valueTypes.UNIT) {\n fromTargetObject.t = valueTypes.UNIT;\n fromTargetObject.u = decomposedOriginalValue.u;\n }\n }\n }\n } else {\n if (hasToValue) {\n decomposeRawValue(tweenToValue, toTargetObject);\n } else {\n if (prevTween) {\n decomposeTweenValue(prevTween, toTargetObject);\n } else {\n // No need to get and parse the original value if the tween is part of a timeline and has a previous sibling part of the same timeline\n decomposeRawValue(parent && prevSibling && prevSibling.parent.parent === parent ? prevSibling._value :\n getOriginalAnimatableValue(target, propName, tweenType, animInlineStyles), toTargetObject);\n }\n }\n if (hasFromvalue) {\n decomposeRawValue(tweenFromValue, fromTargetObject);\n } else {\n if (prevTween) {\n decomposeTweenValue(prevTween, fromTargetObject);\n } else {\n decomposeRawValue(parent && prevSibling && prevSibling.parent.parent === parent ? prevSibling._value :\n // No need to get and parse the original value if the tween is part of a timeline and has a previous sibling part of the same timeline\n getOriginalAnimatableValue(target, propName, tweenType, animInlineStyles), fromTargetObject);\n }\n }\n }\n\n // Apply operators\n if (fromTargetObject.o) {\n fromTargetObject.n = getRelativeValue(\n !prevSibling ? decomposeRawValue(\n getOriginalAnimatableValue(target, propName, tweenType, animInlineStyles),\n decomposedOriginalValue\n ).n : prevSibling._toNumber,\n fromTargetObject.n,\n fromTargetObject.o\n );\n }\n\n if (toTargetObject.o) {\n toTargetObject.n = getRelativeValue(fromTargetObject.n, toTargetObject.n, toTargetObject.o);\n }\n\n // Values omogenisation in cases of type difference between \"from\" and \"to\"\n if (fromTargetObject.t !== toTargetObject.t) {\n if (fromTargetObject.t === valueTypes.COMPLEX || toTargetObject.t === valueTypes.COMPLEX) {\n const complexValue = fromTargetObject.t === valueTypes.COMPLEX ? fromTargetObject : toTargetObject;\n const notComplexValue = fromTargetObject.t === valueTypes.COMPLEX ? toTargetObject : fromTargetObject;\n notComplexValue.t = valueTypes.COMPLEX;\n notComplexValue.s = cloneArray(complexValue.s);\n notComplexValue.d = complexValue.d.map(() => notComplexValue.n);\n } else if (fromTargetObject.t === valueTypes.UNIT || toTargetObject.t === valueTypes.UNIT) {\n const unitValue = fromTargetObject.t === valueTypes.UNIT ? fromTargetObject : toTargetObject;\n const notUnitValue = fromTargetObject.t === valueTypes.UNIT ? toTargetObject : fromTargetObject;\n notUnitValue.t = valueTypes.UNIT;\n notUnitValue.u = unitValue.u;\n } else if (fromTargetObject.t === valueTypes.COLOR || toTargetObject.t === valueTypes.COLOR) {\n const colorValue = fromTargetObject.t === valueTypes.COLOR ? fromTargetObject : toTargetObject;\n const notColorValue = fromTargetObject.t === valueTypes.COLOR ? toTargetObject : fromTargetObject;\n notColorValue.t = valueTypes.COLOR;\n notColorValue.s = colorValue.s;\n notColorValue.d = [0, 0, 0, 1];\n }\n }\n\n // Unit conversion\n if (fromTargetObject.u !== toTargetObject.u) {\n let valueToConvert = toTargetObject.u ? fromTargetObject : toTargetObject;\n valueToConvert = convertValueUnit(/** @type {DOMTarget} */(target), valueToConvert, toTargetObject.u ? toTargetObject.u : fromTargetObject.u, false);\n // TODO:\n // convertValueUnit(target, to.u ? from : to, to.u ? to.u : from.u);\n }\n\n // Fill in non existing complex values\n if (toTargetObject.d && fromTargetObject.d && (toTargetObject.d.length !== fromTargetObject.d.length)) {\n const longestValue = fromTargetObject.d.length > toTargetObject.d.length ? fromTargetObject : toTargetObject;\n const shortestValue = longestValue === fromTargetObject ? toTargetObject : fromTargetObject;\n // TODO: Check if n should be used instead of 0 for default complex values\n shortestValue.d = longestValue.d.map((_, i) => isUnd(shortestValue.d[i]) ? 0 : shortestValue.d[i]);\n shortestValue.s = cloneArray(longestValue.s);\n }\n\n // Tween factory\n\n // Rounding is necessary here to minimize floating point errors when working in seconds\n const tweenUpdateDuration = round(+tweenDuration || minValue, 12);\n\n /** @type {Tween} */\n const tween = {\n parent: this,\n id: tweenId++,\n property: propName,\n target: target,\n _value: null,\n _func: toFunctionStore.func,\n _ease: parseEasings(tweenEasing),\n _fromNumbers: cloneArray(fromTargetObject.d),\n _toNumbers: cloneArray(toTargetObject.d),\n _strings: cloneArray(toTargetObject.s),\n _fromNumber: fromTargetObject.n,\n _toNumber: toTargetObject.n,\n _numbers: cloneArray(fromTargetObject.d), // For additive tween and animatables\n _number: fromTargetObject.n, // For additive tween and animatables\n _unit: toTargetObject.u,\n _modifier: tweenModifier,\n _currentTime: 0,\n _startTime: tweenStartTime,\n _delay: +tweenDelay,\n _updateDuration: tweenUpdateDuration,\n _changeDuration: tweenUpdateDuration,\n _absoluteStartTime: absoluteStartTime,\n // NOTE: Investigate bit packing to stores ENUM / BOOL\n _tweenType: tweenType,\n _valueType: toTargetObject.t,\n _composition: tweenComposition,\n _isOverlapped: 0,\n _isOverridden: 0,\n _renderTransforms: 0,\n _prevRep: null, // For replaced tween\n _nextRep: null, // For replaced tween\n _prevAdd: null, // For additive tween\n _nextAdd: null, // For additive tween\n _prev: null,\n _next: null,\n };\n\n if (tweenComposition !== compositionTypes.none) {\n composeTween(tween, siblings);\n }\n\n if (isNaN(firstTweenChangeStartTime)) {\n firstTweenChangeStartTime = tween._startTime;\n }\n // Rounding is necessary here to minimize floating point errors when working in seconds\n lastTweenChangeEndTime = round(tweenStartTime + tweenUpdateDuration, 12);\n prevTween = tween;\n animationAnimationLength++;\n\n addChild(this, tween);\n\n }\n\n // Update animation timings with the added tweens properties\n\n if (isNaN(iterationDelay) || firstTweenChangeStartTime < iterationDelay) {\n iterationDelay = firstTweenChangeStartTime;\n }\n\n if (isNaN(iterationDuration) || lastTweenChangeEndTime > iterationDuration) {\n iterationDuration = lastTweenChangeEndTime;\n }\n\n // TODO: Find a way to inline tween._renderTransforms = 1 here\n if (tweenType === tweenTypes.TRANSFORM) {\n lastTransformGroupIndex = animationAnimationLength - tweenIndex;\n lastTransformGroupLength = animationAnimationLength;\n }\n\n }\n\n }\n\n // Set _renderTransforms to last transform property to correctly render the transforms list\n if (!isNaN(lastTransformGroupIndex)) {\n let i = 0;\n forEachChildren(this, (/** @type {Tween} */tween) => {\n if (i >= lastTransformGroupIndex && i < lastTransformGroupLength) {\n tween._renderTransforms = 1;\n if (tween._composition === compositionTypes.blend) {\n forEachChildren(additive.animation, (/** @type {Tween} */additiveTween) => {\n if (additiveTween.id === tween.id) {\n additiveTween._renderTransforms = 1;\n }\n });\n }\n }\n i++;\n });\n }\n\n }\n\n if (!targetsLength) {\n console.warn(`No target found. Make sure the element you're trying to animate is accessible before creating your animation.`);\n }\n\n if (iterationDelay) {\n forEachChildren(this, (/** @type {Tween} */tween) => {\n // If (startTime - delay) equals 0, this means the tween is at the begining of the animation so we need to trim the delay too\n if (!(tween._startTime - tween._delay)) {\n tween._delay -= iterationDelay;\n }\n tween._startTime -= iterationDelay;\n });\n iterationDuration -= iterationDelay;\n } else {\n iterationDelay = 0;\n }\n\n // Prevents iterationDuration to be NaN if no valid animatable props have been provided\n // Prevents _iterationCount to be NaN if no valid animatable props have been provided\n if (!iterationDuration) {\n iterationDuration = minValue;\n this.iterationCount = 0;\n }\n /** @type {TargetsArray} */\n this.targets = parsedTargets;\n /** @type {Number} */\n this.duration = iterationDuration === minValue ? minValue : clampInfinity(((iterationDuration + this._loopDelay) * this.iterationCount) - this._loopDelay) || minValue;\n /** @type {Callback<this>} */\n this.onRender = onRender || animDefaults.onRender;\n /** @type {EasingFunction} */\n this._ease = animEase;\n /** @type {Number} */\n this._delay = iterationDelay;\n // NOTE: I'm keeping delay values separated from offsets in timelines because delays can override previous tweens and it could be confusing to debug a timeline with overridden tweens and no associated visible delays.\n // this._delay = parent ? 0 : iterationDelay;\n // this._offset += parent ? iterationDelay : 0;\n /** @type {Number} */\n this.iterationDuration = iterationDuration;\n /** @type {{}} */\n this._inlineStyles = animInlineStyles;\n\n if (!this._autoplay && shouldTriggerRender) this.onRender(this);\n }\n\n /**\n * @param {Number} newDuration\n * @return {this}\n */\n stretch(newDuration) {\n const currentDuration = this.duration;\n if (currentDuration === normalizeTime(newDuration)) return this;\n const timeScale = newDuration / currentDuration;\n // NOTE: Find a better way to handle the stretch of an animation after stretch = 0\n forEachChildren(this, (/** @type {Tween} */tween) => {\n // Rounding is necessary here to minimize floating point errors\n tween._updateDuration = normalizeTime(tween._updateDuration * timeScale);\n tween._changeDuration = normalizeTime(tween._changeDuration * timeScale);\n tween._currentTime *= timeScale;\n tween._startTime *= timeScale;\n tween._absoluteStartTime *= timeScale;\n });\n return super.stretch(newDuration);\n }\n\n /**\n * @return {this}\n */\n refresh() {\n forEachChildren(this, (/** @type {Tween} */tween) => {\n const tweenFunc = tween._func;\n if (tweenFunc) {\n const ogValue = getOriginalAnimatableValue(tween.target, tween.property, tween._tweenType);\n decomposeRawValue(ogValue, decomposedOriginalValue);\n decomposeRawValue(tweenFunc(), toTargetObject);\n tween._fromNumbers = cloneArray(decomposedOriginalValue.d);\n tween._fromNumber = decomposedOriginalValue.n;\n tween._toNumbers = cloneArray(toTargetObject.d);\n tween._strings = cloneArray(toTargetObject.s);\n // Make sure to apply relative operators https://github.com/juliangarnier/anime/issues/1025\n tween._toNumber = toTargetObject.o ? getRelativeValue(decomposedOriginalValue.n, toTargetObject.n, toTargetObject.o) : toTargetObject.n;\n }\n });\n return this;\n }\n\n /**\n * Cancel the animation and revert all the values affected by this animation to their original state\n * @return {this}\n */\n revert() {\n super.revert();\n return cleanInlineStyles(this);\n }\n\n /**\n * @param {Callback<this>} [callback]\n * @return {Promise}\n */\n then(callback) {\n return super.then(callback);\n }\n\n}\n\n/**\n * @param {TargetsParam} targets\n * @param {AnimationParams} parameters\n * @return {JSAnimation}\n */\nconst animate = (targets, parameters) => new JSAnimation(targets, parameters, null, 0, false).init();\n\n\n\n\n/**\n * Converts an easing function into a valid CSS linear() timing function string\n * @param {EasingFunction} fn\n * @param {number} [samples=100]\n * @returns {string} CSS linear() timing function\n */\nconst easingToLinear = (fn, samples = 100) => {\n const points = [];\n for (let i = 0; i <= samples; i++) points.push(fn(i / samples));\n return `linear(${points.join(', ')})`;\n};\n\nconst WAAPIEasesLookups = {\n in: 'ease-in',\n out: 'ease-out',\n inOut: 'ease-in-out',\n};\n\nconst WAAPIeases = /*#__PURE__*/(() => {\n const list = {};\n for (let type in easeTypes) list[type] = (/** @type {String|Number} */p) => easeTypes[type](easeInPower(p));\n return /** @type {Record<String, EasingFunction>} */(list);\n})();\n\n/**\n * @param {EasingParam} ease\n * @return {String}\n */\nconst parseWAAPIEasing = (ease) => {\n let parsedEase = WAAPIEasesLookups[ease];\n if (parsedEase) return parsedEase;\n parsedEase = 'linear';\n if (isStr(ease)) {\n if (\n stringStartsWith(ease, 'linear') ||\n stringStartsWith(ease, 'cubic-') ||\n stringStartsWith(ease, 'steps') ||\n stringStartsWith(ease, 'ease')\n ) {\n parsedEase = ease;\n } else if (stringStartsWith(ease, 'cubicB')) {\n parsedEase = toLowerCase(ease);\n } else {\n const parsed = parseEaseString(ease, WAAPIeases, WAAPIEasesLookups);\n if (isFnc(parsed)) parsedEase = parsed === none ? 'linear' : easingToLinear(parsed);\n }\n WAAPIEasesLookups[ease] = parsedEase;\n } else if (isFnc(ease)) {\n const easing = easingToLinear(ease);\n if (easing) parsedEase = easing;\n } else if (/** @type {Spring} */(ease).ease) {\n parsedEase = easingToLinear(/** @type {Spring} */(ease).ease);\n }\n return parsedEase;\n};\n\nconst transformsShorthands = ['x', 'y', 'z'];\nconst commonDefaultPXProperties = [\n 'perspective',\n 'width',\n 'height',\n 'margin',\n 'padding',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'borderWidth',\n 'fontSize',\n 'borderRadius',\n ...transformsShorthands\n];\n\nconst validIndividualTransforms = /*#__PURE__*/ (() => [...transformsShorthands, ...validTransforms.filter(t => ['X', 'Y', 'Z'].some(axis => t.endsWith(axis)))])();\n\nlet transformsPropertiesRegistered = null;\n\nconst WAAPIAnimationsLookups = {\n _head: null,\n _tail: null,\n};\n\n/**\n * @param {DOMTarget} $el\n * @param {String} [property]\n * @param {WAAPIAnimation} [parent]\n */\nconst removeWAAPIAnimation = ($el, property, parent) => {\n let nextLookup = WAAPIAnimationsLookups._head;\n while (nextLookup) {\n const next = nextLookup._next;\n const matchTarget = nextLookup.$el === $el;\n const matchProperty = !property || nextLookup.property === property;\n const matchParent = !parent || nextLookup.parent === parent;\n if (matchTarget && matchProperty && matchParent) {\n const anim = nextLookup.animation;\n try { anim.commitStyles(); } catch {} anim.cancel();\n removeChild(WAAPIAnimationsLookups, nextLookup);\n const lookupParent = nextLookup.parent;\n if (lookupParent) {\n lookupParent._completed++;\n if (lookupParent.animations.length === lookupParent._completed) {\n lookupParent.completed = true;\n if (!lookupParent.muteCallbacks) {\n lookupParent.paused = true;\n lookupParent.onComplete(lookupParent);\n lookupParent._resolve(lookupParent);\n }\n }\n }\n }\n nextLookup = next;\n }\n};\n\n/**\n * @param {WAAPIAnimation} parent\n * @param {DOMTarget} $el\n * @param {String} property\n * @param {PropertyIndexedKeyframes} keyframes\n * @param {KeyframeAnimationOptions} params\n * @retun {Animation}\n */\nconst addWAAPIAnimation = (parent, $el, property, keyframes, params) => {\n const animation = $el.animate(keyframes, params);\n const animTotalDuration = params.delay + (+params.duration * params.iterations);\n animation.playbackRate = parent._speed;\n if (parent.paused) animation.pause();\n if (parent.duration < animTotalDuration) {\n parent.duration = animTotalDuration;\n parent.controlAnimation = animation;\n }\n parent.animations.push(animation);\n removeWAAPIAnimation($el, property);\n addChild(WAAPIAnimationsLookups, { parent, animation, $el, property, _next: null, _prev: null });\n const handleRemove = () => { removeWAAPIAnimation($el, property, parent); };\n animation.onremove = handleRemove;\n animation.onfinish = handleRemove;\n return animation;\n};\n\n/**\n * @param {String} propName\n * @param {WAAPIKeyframeValue} value\n * @param {DOMTarget} $el\n * @param {Number} i\n * @param {Number} targetsLength\n * @return {String}\n */\nconst normalizeTweenValue = (propName, value, $el, i, targetsLength) => {\n let v = getFunctionValue(/** @type {any} */(value), $el, i, targetsLength);\n if (!isNum(v)) return v;\n if (commonDefaultPXProperties.includes(propName) || stringStartsWith(propName, 'translate')) return `${v}px`;\n if (stringStartsWith(propName, 'rotate') || stringStartsWith(propName, 'skew')) return `${v}deg`;\n return `${v}`;\n};\n\n/**\n * @param {DOMTarget} $el\n * @param {String} propName\n * @param {WAAPIKeyframeValue} from\n * @param {WAAPIKeyframeValue} to\n * @param {Number} i\n * @param {Number} targetsLength\n * @return {WAAPITweenValue}\n */\nconst parseIndividualTweenValue = ($el, propName, from, to, i, targetsLength) => {\n /** @type {WAAPITweenValue} */\n let tweenValue = '0';\n const computedTo = !isUnd(to) ? normalizeTweenValue(propName, to, $el, i, targetsLength) : getComputedStyle($el)[propName];\n if (!isUnd(from)) {\n const computedFrom = normalizeTweenValue(propName, from, $el, i, targetsLength);\n tweenValue = [computedFrom, computedTo];\n } else {\n tweenValue = isArr(to) ? to.map((/** @type {any} */v) => normalizeTweenValue(propName, v, $el, i, targetsLength)) : computedTo;\n }\n return tweenValue;\n};\n\nclass WAAPIAnimation {\n/**\n * @param {DOMTargetsParam} targets\n * @param {WAAPIAnimationParams} params\n */\n constructor(targets, params) {\n\n if (scope.current) scope.current.register(this);\n\n // Skip the registration and fallback to no animation in case CSS.registerProperty is not supported\n if (isNil(transformsPropertiesRegistered)) {\n if (isBrowser && (isUnd(CSS) || !Object.hasOwnProperty.call(CSS, 'registerProperty'))) {\n transformsPropertiesRegistered = false;\n } else {\n validTransforms.forEach(t => {\n const isSkew = stringStartsWith(t, 'skew');\n const isScale = stringStartsWith(t, 'scale');\n const isRotate = stringStartsWith(t, 'rotate');\n const isTranslate = stringStartsWith(t, 'translate');\n const isAngle = isRotate || isSkew;\n const syntax = isAngle ? '<angle>' : isScale ? \"<number>\" : isTranslate ? \"<length-percentage>\" : \"*\";\n try {\n CSS.registerProperty({\n name: '--' + t,\n syntax,\n inherits: false,\n initialValue: isTranslate ? '0px' : isAngle ? '0deg' : isScale ? '1' : '0',\n });\n } catch {} });\n transformsPropertiesRegistered = true;\n }\n }\n\n const parsedTargets = registerTargets(targets);\n const targetsLength = parsedTargets.length;\n\n if (!targetsLength) {\n console.warn(`No target found. Make sure the element you're trying to animate is accessible before creating your animation.`);\n }\n\n const ease = setValue(params.ease, parseWAAPIEasing(globals.defaults.ease));\n const spring = /** @type {Spring} */(ease).ease && ease;\n const autoplay = setValue(params.autoplay, globals.defaults.autoplay);\n const scroll = autoplay && /** @type {ScrollObserver} */(autoplay).link ? autoplay : false;\n const alternate = params.alternate && /** @type {Boolean} */(params.alternate) === true;\n const reversed = params.reversed && /** @type {Boolean} */(params.reversed) === true;\n const loop = setValue(params.loop, globals.defaults.loop);\n const iterations = /** @type {Number} */((loop === true || loop === Infinity) ? Infinity : isNum(loop) ? loop + 1 : 1);\n /** @type {PlaybackDirection} */\n const direction = alternate ? reversed ? 'alternate-reverse' : 'alternate' : reversed ? 'reverse' : 'normal';\n /** @type {FillMode} */\n const fill = 'forwards';\n /** @type {String} */\n const easing = parseWAAPIEasing(ease);\n const timeScale = (globals.timeScale === 1 ? 1 : K);\n\n /** @type {DOMTargetsArray}] */\n this.targets = parsedTargets;\n /** @type {Array<globalThis.Animation>}] */\n this.animations = [];\n /** @type {globalThis.Animation}] */\n this.controlAnimation = null;\n /** @type {Callback<this>} */\n this.onComplete = params.onComplete || noop;\n /** @type {Number} */\n this.duration = 0;\n /** @type {Boolean} */\n this.muteCallbacks = false;\n /** @type {Boolean} */\n this.completed = false;\n /** @type {Boolean} */\n this.paused = !autoplay || scroll !== false;\n /** @type {Boolean} */\n this.reversed = reversed;\n /** @type {Boolean|ScrollObserver} */\n this.autoplay = autoplay;\n /** @type {Number} */\n this._speed = setValue(params.playbackRate, globals.defaults.playbackRate);\n /** @type {Function} */\n this._resolve = noop; // Used by .then()\n /** @type {Number} */\n this._completed = 0;\n /** @type {Array<Object>}] */\n this._inlineStyles = parsedTargets.map($el => $el.getAttribute('style'));\n\n parsedTargets.forEach(($el, i) => {\n\n const cachedTransforms = $el[transformsSymbol];\n\n const hasIndividualTransforms = validIndividualTransforms.some(t => params.hasOwnProperty(t));\n\n /** @type {Number} */\n const duration = (spring ? /** @type {Spring} */(spring).duration : getFunctionValue(setValue(params.duration, globals.defaults.duration), $el, i, targetsLength)) * timeScale;\n /** @type {Number} */\n const delay = getFunctionValue(setValue(params.delay, globals.defaults.delay), $el, i, targetsLength) * timeScale;\n /** @type {CompositeOperation} */\n const composite = /** @type {CompositeOperation} */(setValue(params.composition, 'replace'));\n\n for (let name in params) {\n if (!isKey(name)) continue;\n /** @type {PropertyIndexedKeyframes} */\n const keyframes = {};\n /** @type {KeyframeAnimationOptions} */\n const tweenParams = { iterations, direction, fill, easing, duration, delay, composite };\n const propertyValue = params[name];\n const individualTransformProperty = hasIndividualTransforms ? validTransforms.includes(name) ? name : shortTransforms.get(name) : false;\n let parsedPropertyValue;\n if (isObj(propertyValue)) {\n const tweenOptions = /** @type {WAAPITweenOptions} */(propertyValue);\n const tweenOptionsEase = setValue(tweenOptions.ease, ease);\n const tweenOptionsSpring = /** @type {Spring} */(tweenOptionsEase).ease && tweenOptionsEase;\n const to = /** @type {WAAPITweenOptions} */(tweenOptions).to;\n const from = /** @type {WAAPITweenOptions} */(tweenOptions).from;\n /** @type {Number} */\n tweenParams.duration = (tweenOptionsSpring ? /** @type {Spring} */(tweenOptionsSpring).duration : getFunctionValue(setValue(tweenOptions.duration, duration), $el, i, targetsLength)) * timeScale;\n /** @type {Number} */\n tweenParams.delay = getFunctionValue(setValue(tweenOptions.delay, delay), $el, i, targetsLength) * timeScale;\n /** @type {CompositeOperation} */\n tweenParams.composite = /** @type {CompositeOperation} */(setValue(tweenOptions.composition, composite));\n /** @type {String} */\n tweenParams.easing = parseWAAPIEasing(tweenOptionsEase);\n parsedPropertyValue = parseIndividualTweenValue($el, name, from, to, i, targetsLength);\n if (individualTransformProperty) {\n keyframes[`--${individualTransformProperty}`] = parsedPropertyValue;\n cachedTransforms[individualTransformProperty] = parsedPropertyValue;\n } else {\n keyframes[name] = parseIndividualTweenValue($el, name, from, to, i, targetsLength);\n }\n addWAAPIAnimation(this, $el, name, keyframes, tweenParams);\n if (!isUnd(from)) {\n if (!individualTransformProperty) {\n $el.style[name] = keyframes[name][0];\n } else {\n const key = `--${individualTransformProperty}`;\n $el.style.setProperty(key, keyframes[key][0]);\n }\n }\n } else {\n parsedPropertyValue = isArr(propertyValue) ?\n propertyValue.map((/** @type {any} */v) => normalizeTweenValue(name, v, $el, i, targetsLength)) :\n normalizeTweenValue(name, /** @type {any} */(propertyValue), $el, i, targetsLength);\n if (individualTransformProperty) {\n keyframes[`--${individualTransformProperty}`] = parsedPropertyValue;\n cachedTransforms[individualTransformProperty] = parsedPropertyValue;\n } else {\n keyframes[name] = parsedPropertyValue;\n }\n addWAAPIAnimation(this, $el, name, keyframes, tweenParams);\n }\n }\n if (hasIndividualTransforms) {\n let transforms = emptyString;\n for (let t in cachedTransforms) {\n transforms += `${transformsFragmentStrings[t]}var(--${t})) `;\n }\n $el.style.transform = transforms;\n }\n });\n\n if (scroll) {\n /** @type {ScrollObserver} */(this.autoplay).link(this);\n }\n }\n\n /**\n * @callback forEachCallback\n * @param {globalThis.Animation} animation\n */\n\n /**\n * @param {forEachCallback|String} callback\n * @return {this}\n */\n forEach(callback) {\n const cb = isStr(callback) ? (/** @type {globalThis.Animation} */a) => a[callback]() : callback;\n this.animations.forEach(cb);\n return this;\n }\n\n get speed() {\n return this._speed;\n }\n\n /** @param {Number} speed */\n set speed(speed) {\n this._speed = +speed;\n this.forEach(anim => anim.playbackRate = speed);\n }\n\n get currentTime() {\n const controlAnimation = this.controlAnimation;\n const timeScale = globals.timeScale;\n return this.completed ? this.duration : controlAnimation ? +controlAnimation.currentTime * (timeScale === 1 ? 1 : timeScale) : 0;\n }\n\n /** @param {Number} time */\n set currentTime(time) {\n const t = time * (globals.timeScale === 1 ? 1 : K);\n this.forEach(anim => {\n // Make sure the animation playState is not 'paused' in order to properly trigger an onfinish callback.\n // The \"paused\" play state supersedes the \"finished\" play state; if the animation is both paused and finished, the \"paused\" state is the one that will be reported.\n // https://developer.mozilla.org/en-US/docs/Web/API/Animation/finish_event\n if (t >= this.duration) anim.play();\n anim.currentTime = t;\n });\n }\n\n get progress() {\n return this.currentTime / this.duration;\n }\n\n /** @param {Number} progress */\n set progress(progress) {\n this.forEach(anim => anim.currentTime = progress * this.duration || 0);\n }\n\n resume() {\n if (!this.paused) return this;\n this.paused = false;\n // TODO: Store the current time, and seek back to the last position\n return this.forEach('play');\n }\n\n pause() {\n if (this.paused) return this;\n this.paused = true;\n return this.forEach('pause');\n }\n\n alternate() {\n this.reversed = !this.reversed;\n this.forEach('reverse');\n if (this.paused) this.forEach('pause');\n return this;\n }\n\n play() {\n if (this.reversed) this.alternate();\n return this.resume();\n }\n\n reverse() {\n if (!this.reversed) this.alternate();\n return this.resume();\n }\n\n /**\n * @param {Number} time\n * @param {Boolean} muteCallbacks\n */\n seek(time, muteCallbacks = false) {\n if (muteCallbacks) this.muteCallbacks = true;\n if (time < this.duration) this.completed = false;\n this.currentTime = time;\n this.muteCallbacks = false;\n if (this.paused) this.pause();\n return this;\n }\n\n restart() {\n this.completed = false;\n return this.seek(0, true).resume();\n }\n\n commitStyles() {\n return this.forEach('commitStyles');\n }\n\n complete() {\n return this.seek(this.duration);\n }\n\n cancel() {\n this.forEach('cancel');\n return this.pause();\n }\n\n revert() {\n this.cancel();\n this.targets.forEach(($el, i) => $el.setAttribute('style', this._inlineStyles[i]) );\n return this;\n }\n\n /**\n * @param {WAAPICallback} [callback]\n * @return {Promise}\n */\n then(callback = noop) {\n const then = this.then;\n const onResolve = () => {\n this.then = null;\n callback(this);\n this.then = then;\n this._resolve = noop;\n };\n return new Promise(r => {\n this._resolve = () => r(onResolve());\n if (this.completed) this._resolve();\n return this;\n });\n }\n}\n\nconst waapi = {\n/**\n * @param {DOMTargetsParam} targets\n * @param {WAAPIAnimationParams} params\n * @return {WAAPIAnimation}\n */\n animate: (targets, params) => new WAAPIAnimation(targets, params),\n convertEase: easingToLinear\n};\n\n\n\n\n/**\n * @param {Callback<Timer>} [callback]\n * @return {Timer}\n */\nconst sync = (callback = noop) => {\n return new Timer({ duration: 1 * globals.timeScale, onComplete: callback }, null, 0).resume();\n};\n\n/**\n * @overload\n * @param {DOMTargetSelector} targetSelector\n * @param {String} propName\n * @return {String}\n *\n * @overload\n * @param {JSTargetsParam} targetSelector\n * @param {String} propName\n * @return {Number|String}\n *\n * @overload\n * @param {DOMTargetsParam} targetSelector\n * @param {String} propName\n * @param {String} unit\n * @return {String}\n *\n * @overload\n * @param {TargetsParam} targetSelector\n * @param {String} propName\n * @param {Boolean} unit\n * @return {Number}\n *\n * @param {TargetsParam} targetSelector\n * @param {String} propName\n * @param {String|Boolean} [unit]\n */\nfunction getTargetValue(targetSelector, propName, unit) {\n const targets = registerTargets(targetSelector);\n if (!targets.length) return;\n const [ target ] = targets;\n const tweenType = getTweenType(target, propName);\n const normalizePropName = sanitizePropertyName(propName, target, tweenType);\n let originalValue = getOriginalAnimatableValue(target, normalizePropName);\n if (isUnd(unit)) {\n return originalValue;\n } else {\n decomposeRawValue(originalValue, decomposedOriginalValue);\n if (decomposedOriginalValue.t === valueTypes.NUMBER || decomposedOriginalValue.t === valueTypes.UNIT) {\n if (unit === false) {\n return decomposedOriginalValue.n;\n } else {\n const convertedValue = convertValueUnit(/** @type {DOMTarget} */(target), decomposedOriginalValue, /** @type {String} */(unit), false);\n return `${round(convertedValue.n, globals.precision)}${convertedValue.u}`;\n }\n }\n }\n}\n\n/**\n * @param {TargetsParam} targets\n * @param {AnimationParams} parameters\n * @return {JSAnimation}\n */\nconst setTargetValues = (targets, parameters) => {\n if (isUnd(parameters)) return;\n parameters.duration = minValue;\n // Do not overrides currently active tweens by default\n parameters.composition = setValue(parameters.composition, compositionTypes.none);\n // Skip init() and force rendering by playing the animation\n return new JSAnimation(targets, parameters, null, 0, true).resume();\n};\n\n/**\n * @param {TargetsArray} targetsArray\n * @param {JSAnimation} animation\n * @param {String} [propertyName]\n * @return {Boolean}\n */\nconst removeTargetsFromAnimation = (targetsArray, animation, propertyName) => {\n let tweensMatchesTargets = false;\n forEachChildren(animation, (/**@type {Tween} */tween) => {\n const tweenTarget = tween.target;\n if (targetsArray.includes(tweenTarget)) {\n const tweenName = tween.property;\n const tweenType = tween._tweenType;\n const normalizePropName = sanitizePropertyName(propertyName, tweenTarget, tweenType);\n if (!normalizePropName || normalizePropName && normalizePropName === tweenName) {\n // Make sure to flag the previous CSS transform tween to renderTransform\n if (tween.parent._tail === tween &&\n tween._tweenType === tweenTypes.TRANSFORM &&\n tween._prev &&\n tween._prev._tweenType === tweenTypes.TRANSFORM\n ) {\n tween._prev._renderTransforms = 1;\n }\n // Removes the tween from the selected animation\n removeChild(animation, tween);\n // Detach the tween from its siblings to make sure blended tweens are correctlly removed\n removeTweenSliblings(tween);\n tweensMatchesTargets = true;\n }\n }\n }, true);\n return tweensMatchesTargets;\n};\n\n/**\n * @param {TargetsParam} targets\n * @param {Renderable|WAAPIAnimation} [renderable]\n * @param {String} [propertyName]\n * @return {TargetsArray}\n */\nconst remove = (targets, renderable, propertyName) => {\n const targetsArray = parseTargets(targets);\n const parent = /** @type {Renderable|typeof engine} **/(renderable ? renderable : engine);\n const waapiAnimation = renderable && /** @type {WAAPIAnimation} */(renderable).controlAnimation && /** @type {WAAPIAnimation} */(renderable);\n for (let i = 0, l = targetsArray.length; i < l; i++) {\n const $el = /** @type {DOMTarget} */(targetsArray[i]);\n removeWAAPIAnimation($el, propertyName, waapiAnimation);\n }\n let removeMatches;\n if (parent._hasChildren) {\n let iterationDuration = 0;\n forEachChildren(parent, (/** @type {Renderable} */child) => {\n if (!child._hasChildren) {\n removeMatches = removeTargetsFromAnimation(targetsArray, /** @type {JSAnimation} */(child), propertyName);\n // Remove the child from its parent if no tweens and no children left after the removal\n if (removeMatches && !child._head) {\n child.cancel();\n removeChild(parent, child);\n } else {\n // Calculate the new iterationDuration value to handle onComplete with last child in render()\n const childTLOffset = child._offset + child._delay;\n const childDur = childTLOffset + child.duration;\n if (childDur > iterationDuration) {\n iterationDuration = childDur;\n }\n }\n }\n // Make sure to also remove engine's children targets\n // NOTE: Avoid recursion?\n if (child._head) {\n remove(targets, child, propertyName);\n } else {\n child._hasChildren = false;\n }\n }, true);\n // Update iterationDuration value to handle onComplete with last child in render()\n if (!isUnd(/** @type {Renderable} */(parent).iterationDuration)) {\n /** @type {Renderable} */(parent).iterationDuration = iterationDuration;\n }\n } else {\n removeMatches = removeTargetsFromAnimation(\n targetsArray,\n /** @type {JSAnimation} */(parent),\n propertyName\n );\n }\n\n if (removeMatches && !parent._head) {\n parent._hasChildren = false;\n // Cancel the parent if there are no tweens and no children left after the removal\n // We have to check if the .cancel() method exist to handle cases where the parent is the engine itself\n if (/** @type {Renderable} */(parent).cancel) /** @type {Renderable} */(parent).cancel();\n }\n\n return targetsArray;\n};\n\n/**\n * @param {(...args: any[]) => Tickable} constructor\n * @return {(...args: any[]) => Tickable}\n */\nconst keepTime = createRefreshable;\n\n/**\n * @param {String|Array} items\n * @return {any}\n */\nconst randomPick = items => items[random(0, items.length - 1)];\n\n/**\n * @param {Number|String} v\n * @param {Number} decimalLength\n * @return {String}\n */\nconst roundPad = (v, decimalLength) => (+v).toFixed(decimalLength);\n\n/**\n * @param {Number} v\n * @param {Number} totalLength\n * @param {String} padString\n * @return {String}\n */\nconst padStart = (v, totalLength, padString) => `${v}`.padStart(totalLength, padString);\n\n/**\n * @param {Number} v\n * @param {Number} totalLength\n * @param {String} padString\n * @return {String}\n */\nconst padEnd = (v, totalLength, padString) => `${v}`.padEnd(totalLength, padString);\n\n/**\n * @param {Number} v\n * @param {Number} min\n * @param {Number} max\n * @return {Number}\n */\nconst wrap = (v, min, max) => (((v - min) % (max - min) + (max - min)) % (max - min)) + min;\n\n/**\n * @param {Number} value\n * @param {Number} inLow\n * @param {Number} inHigh\n * @param {Number} outLow\n * @param {Number} outHigh\n * @return {Number}\n */\nconst mapRange = (value, inLow, inHigh, outLow, outHigh) => outLow + ((value - inLow) / (inHigh - inLow)) * (outHigh - outLow);\n\n/**\n * @param {Number} degrees\n * @return {Number}\n */\nconst degToRad = degrees => degrees * PI / 180;\n\n/**\n * @param {Number} radians\n * @return {Number}\n */\nconst radToDeg = radians => radians * 180 / PI;\n\n/**\n * https://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\n * @param {Number} start\n * @param {Number} end\n * @param {Number} amount\n * @param {Renderable|Boolean} [renderable]\n * @return {Number}\n */\nconst lerp = (start, end, amount, renderable) => {\n let dt = K / globals.defaults.frameRate;\n if (renderable !== false) {\n const ticker = /** @type Renderable */\n (renderable) ||\n (engine._hasChildren && engine);\n if (ticker && ticker.deltaTime) {\n dt = ticker.deltaTime;\n }\n }\n const t = 1 - Math.exp(-amount * dt * .1);\n return !amount ? start : amount === 1 ? end : (1 - t) * start + t * end;\n};\n\n// Chain-able utilities\n\n/**\n * @callback UtilityFunction\n * @param {...*} args\n * @return {Number|String}\n *\n * @param {UtilityFunction} fn\n * @param {Number} [last=0]\n * @return {function(...(Number|String)): function(Number|String): (Number|String)}\n */\nconst curry = (fn, last = 0) => (...args) => last ? v => fn(...args, v) : v => fn(v, ...args);\n\n/**\n * @param {Function} fn\n * @return {function(...(Number|String))}\n */\nconst chain = fn => {\n return (...args) => {\n const result = fn(...args);\n return new Proxy(noop, {\n apply: (_, __, [v]) => result(v),\n get: (_, prop) => chain(/**@param {...Number|String} nextArgs */(...nextArgs) => {\n const nextResult = utils[prop](...nextArgs);\n return (/**@type {Number|String} */v) => nextResult(result(v));\n })\n });\n }\n};\n\n/**\n * @param {UtilityFunction} fn\n * @param {Number} [right]\n * @return {function(...(Number|String)): UtilityFunction}\n */\nconst makeChainable = (fn, right = 0) => (...args) => (args.length < fn.length ? chain(curry(fn, right)) : fn)(...args);\n\n/**\n * @callback ChainedUtilsResult\n * @param {Number} value\n * @return {Number}\n *\n * @typedef {Object} ChainableUtils\n * @property {ChainedClamp} clamp\n * @property {ChainedRound} round\n * @property {ChainedSnap} snap\n * @property {ChainedWrap} wrap\n * @property {ChainedInterpolate} interpolate\n * @property {ChainedMapRange} mapRange\n * @property {ChainedRoundPad} roundPad\n * @property {ChainedPadStart} padStart\n * @property {ChainedPadEnd} padEnd\n * @property {ChainedDegToRad} degToRad\n * @property {ChainedRadToDeg} radToDeg\n *\n * @typedef {ChainableUtils & ChainedUtilsResult} ChainableUtil\n *\n * @callback ChainedClamp\n * @param {Number} min\n * @param {Number} max\n * @return {ChainableUtil}\n *\n * @callback ChainedRound\n * @param {Number} decimalLength\n * @return {ChainableUtil}\n *\n * @callback ChainedSnap\n * @param {Number} increment\n * @return {ChainableUtil}\n *\n * @callback ChainedWrap\n * @param {Number} min\n * @param {Number} max\n * @return {ChainableUtil}\n *\n * @callback ChainedInterpolate\n * @param {Number} start\n * @param {Number} end\n * @return {ChainableUtil}\n *\n * @callback ChainedMapRange\n * @param {Number} inLow\n * @param {Number} inHigh\n * @param {Number} outLow\n * @param {Number} outHigh\n * @return {ChainableUtil}\n *\n * @callback ChainedRoundPad\n * @param {Number} decimalLength\n * @return {ChainableUtil}\n *\n * @callback ChainedPadStart\n * @param {Number} totalLength\n * @param {String} padString\n * @return {ChainableUtil}\n *\n * @callback ChainedPadEnd\n * @param {Number} totalLength\n * @param {String} padString\n * @return {ChainableUtil}\n *\n * @callback ChainedDegToRad\n * @return {ChainableUtil}\n *\n * @callback ChainedRadToDeg\n * @return {ChainableUtil}\n */\n\nconst utils = {\n $: registerTargets,\n get: getTargetValue,\n set: setTargetValues,\n remove,\n cleanInlineStyles,\n random,\n randomPick,\n shuffle,\n lerp,\n sync,\n keepTime,\n clamp: /** @type {typeof clamp & ChainedClamp} */(makeChainable(clamp)),\n round: /** @type {typeof round & ChainedRound} */(makeChainable(round)),\n snap: /** @type {typeof snap & ChainedSnap} */(makeChainable(snap)),\n wrap: /** @type {typeof wrap & ChainedWrap} */(makeChainable(wrap)),\n interpolate: /** @type {typeof interpolate & ChainedInterpolate} */(makeChainable(interpolate, 1)),\n mapRange: /** @type {typeof mapRange & ChainedMapRange} */(makeChainable(mapRange)),\n roundPad: /** @type {typeof roundPad & ChainedRoundPad} */(makeChainable(roundPad)),\n padStart: /** @type {typeof padStart & ChainedPadStart} */(makeChainable(padStart)),\n padEnd: /** @type {typeof padEnd & ChainedPadEnd} */(makeChainable(padEnd)),\n degToRad: /** @type {typeof degToRad & ChainedDegToRad} */(makeChainable(degToRad)),\n radToDeg: /** @type {typeof radToDeg & ChainedRadToDeg} */(makeChainable(radToDeg)),\n};\n\n\n\n\n/**\n * Timeline's children offsets positions parser\n * @param {Timeline} timeline\n * @param {String} timePosition\n * @return {Number}\n */\nconst getPrevChildOffset = (timeline, timePosition) => {\n if (stringStartsWith(timePosition, '<')) {\n const goToPrevAnimationOffset = timePosition[1] === '<';\n const prevAnimation = /** @type {Tickable} */(timeline._tail);\n const prevOffset = prevAnimation ? prevAnimation._offset + prevAnimation._delay : 0;\n return goToPrevAnimationOffset ? prevOffset : prevOffset + prevAnimation.duration;\n }\n};\n\n/**\n * @param {Timeline} timeline\n * @param {TimelinePosition} [timePosition]\n * @return {Number}\n */\nconst parseTimelinePosition = (timeline, timePosition) => {\n let tlDuration = timeline.iterationDuration;\n if (tlDuration === minValue) tlDuration = 0;\n if (isUnd(timePosition)) return tlDuration;\n if (isNum(+timePosition)) return +timePosition;\n const timePosStr = /** @type {String} */(timePosition);\n const tlLabels = timeline ? timeline.labels : null;\n const hasLabels = !isNil(tlLabels);\n const prevOffset = getPrevChildOffset(timeline, timePosStr);\n const hasSibling = !isUnd(prevOffset);\n const matchedRelativeOperator = relativeValuesExecRgx.exec(timePosStr);\n if (matchedRelativeOperator) {\n const fullOperator = matchedRelativeOperator[0];\n const split = timePosStr.split(fullOperator);\n const labelOffset = hasLabels && split[0] ? tlLabels[split[0]] : tlDuration;\n const parsedOffset = hasSibling ? prevOffset : hasLabels ? labelOffset : tlDuration;\n const parsedNumericalOffset = +split[1];\n return getRelativeValue(parsedOffset, parsedNumericalOffset, fullOperator[0]);\n } else {\n return hasSibling ? prevOffset :\n hasLabels ? !isUnd(tlLabels[timePosStr]) ? tlLabels[timePosStr] :\n tlDuration : tlDuration;\n }\n};\n\n/**\n * @param {Timeline} tl\n * @return {Number}\n */\nfunction getTimelineTotalDuration(tl) {\n return clampInfinity(((tl.iterationDuration + tl._loopDelay) * tl.iterationCount) - tl._loopDelay) || minValue;\n}\n\n/**\n * @overload\n * @param {TimerParams} childParams\n * @param {Timeline} tl\n * @param {Number} timePosition\n * @return {Timeline}\n *\n * @overload\n * @param {AnimationParams} childParams\n * @param {Timeline} tl\n * @param {Number} timePosition\n * @param {TargetsParam} targets\n * @param {Number} [index]\n * @param {Number} [length]\n * @return {Timeline}\n *\n * @param {TimerParams|AnimationParams} childParams\n * @param {Timeline} tl\n * @param {Number} timePosition\n * @param {TargetsParam} [targets]\n * @param {Number} [index]\n * @param {Number} [length]\n */\nfunction addTlChild(childParams, tl, timePosition, targets, index, length) {\n const isSetter = isNum(childParams.duration) && /** @type {Number} */(childParams.duration) <= minValue;\n // Offset the tl position with -minValue for 0 duration animations or .set() calls in order to align their end value with the defined position\n const adjustedPosition = isSetter ? timePosition - minValue : timePosition;\n tick(tl, adjustedPosition, 1, 1, tickModes.AUTO);\n const tlChild = targets ?\n new JSAnimation(targets,/** @type {AnimationParams} */(childParams), tl, adjustedPosition, false, index, length) :\n new Timer(/** @type {TimerParams} */(childParams), tl, adjustedPosition);\n tlChild.init(1);\n // TODO: Might be better to insert at a position relative to startTime?\n addChild(tl, tlChild);\n forEachChildren(tl, (/** @type {Renderable} */child) => {\n const childTLOffset = child._offset + child._delay;\n const childDur = childTLOffset + child.duration;\n if (childDur > tl.iterationDuration) tl.iterationDuration = childDur;\n });\n tl.duration = getTimelineTotalDuration(tl);\n return tl;\n}\n\nclass Timeline extends Timer {\n\n /**\n * @param {TimelineParams} [parameters]\n */\n constructor(parameters = {}) {\n super(/** @type {TimerParams&TimelineParams} */(parameters), null, 0);\n /** @type {Number} */\n this.duration = 0; // TL duration starts at 0 and grows when adding children\n /** @type {Record<String, Number>} */\n this.labels = {};\n const defaultsParams = parameters.defaults;\n const globalDefaults = globals.defaults;\n /** @type {DefaultsParams} */\n this.defaults = defaultsParams ? mergeObjects(defaultsParams, globalDefaults) : globalDefaults;\n /** @type {Callback<this>} */\n this.onRender = parameters.onRender || globalDefaults.onRender;\n const tlPlaybackEase = setValue(parameters.playbackEase, globalDefaults.playbackEase);\n this._ease = tlPlaybackEase ? parseEasings(tlPlaybackEase) : null;\n /** @type {Number} */\n this.iterationDuration = 0;\n }\n\n /**\n * @overload\n * @param {TargetsParam} a1\n * @param {AnimationParams} a2\n * @param {TimelinePosition|StaggerFunction<Number|String>} [a3]\n * @return {this}\n *\n * @overload\n * @param {TimerParams} a1\n * @param {TimelinePosition} [a2]\n * @return {this}\n *\n * @param {TargetsParam|TimerParams} a1\n * @param {TimelinePosition|AnimationParams} a2\n * @param {TimelinePosition|StaggerFunction<Number|String>} [a3]\n */\n add(a1, a2, a3) {\n const isAnim = isObj(a2);\n const isTimer = isObj(a1);\n if (isAnim || isTimer) {\n this._hasChildren = true;\n if (isAnim) {\n const childParams = /** @type {AnimationParams} */(a2);\n // Check for function for children stagger positions\n if (isFnc(a3)) {\n const staggeredPosition = a3;\n const parsedTargetsArray = parseTargets(/** @type {TargetsParam} */(a1));\n // Store initial duration before adding new children that will change the duration\n const tlDuration = this.duration;\n // Store initial _iterationDuration before adding new children that will change the duration\n const tlIterationDuration = this.iterationDuration;\n // Store the original id in order to add specific indexes to the new animations ids\n const id = childParams.id;\n let i = 0;\n /** @type {Number} */\n const parsedLength = (parsedTargetsArray.length);\n parsedTargetsArray.forEach((/** @type {Target} */target) => {\n // Create a new parameter object for each staggered children\n const staggeredChildParams = { ...childParams };\n // Reset the duration of the timeline iteration before each stagger to prevent wrong start value calculation\n this.duration = tlDuration;\n this.iterationDuration = tlIterationDuration;\n if (!isUnd(id)) staggeredChildParams.id = id + '-' + i;\n addTlChild(\n staggeredChildParams,\n this,\n parseTimelinePosition(this, staggeredPosition(target, i, parsedLength, this)),\n target,\n i,\n parsedLength\n );\n i++;\n });\n } else {\n addTlChild(\n childParams,\n this,\n parseTimelinePosition(this, a3),\n /** @type {TargetsParam} */(a1),\n );\n }\n } else {\n // It's a Timer\n addTlChild(\n /** @type TimerParams */(a1),\n this,\n parseTimelinePosition(this,a2),\n );\n }\n return this.init(1); // 1 = internalRender\n }\n }\n\n /**\n * @overload\n * @param {Tickable} [synced]\n * @param {TimelinePosition} [position]\n * @return {this}\n *\n * @overload\n * @param {globalThis.Animation} [synced]\n * @param {TimelinePosition} [position]\n * @return {this}\n *\n * @overload\n * @param {WAAPIAnimation} [synced]\n * @param {TimelinePosition} [position]\n * @return {this}\n *\n * @param {Tickable|WAAPIAnimation|globalThis.Animation} [synced]\n * @param {TimelinePosition} [position]\n */\n sync(synced, position) {\n if (isUnd(synced) || synced && isUnd(synced.pause)) return this;\n synced.pause();\n const duration = +(/** @type {globalThis.Animation} */(synced).effect ? /** @type {globalThis.Animation} */(synced).effect.getTiming().duration : /** @type {Tickable} */(synced).duration);\n return this.add(synced, { currentTime: [0, duration], duration, ease: 'linear' }, position);\n }\n\n /**\n * @param {TargetsParam} targets\n * @param {AnimationParams} parameters\n * @param {TimelinePosition} [position]\n * @return {this}\n */\n set(targets, parameters, position) {\n if (isUnd(parameters)) return this;\n parameters.duration = minValue;\n parameters.composition = compositionTypes.replace;\n return this.add(targets, parameters, position);\n }\n\n /**\n * @param {Callback<Timer>} callback\n * @param {TimelinePosition} [position]\n * @return {this}\n */\n call(callback, position) {\n if (isUnd(callback) || callback && !isFnc(callback)) return this;\n return this.add({ duration: 0, onComplete: () => callback(this) }, position);\n }\n\n /**\n * @param {String} labelName\n * @param {TimelinePosition} [position]\n * @return {this}\n *\n */\n label(labelName, position) {\n if (isUnd(labelName) || labelName && !isStr(labelName)) return this;\n this.labels[labelName] = parseTimelinePosition(this, position);\n return this;\n }\n\n /**\n * @param {TargetsParam} targets\n * @param {String} [propertyName]\n * @return {this}\n */\n remove(targets, propertyName) {\n remove(targets, this, propertyName);\n return this;\n }\n\n /**\n * @param {Number} newDuration\n * @return {this}\n */\n stretch(newDuration) {\n const currentDuration = this.duration;\n if (currentDuration === normalizeTime(newDuration)) return this;\n const timeScale = newDuration / currentDuration;\n const labels = this.labels;\n forEachChildren(this, (/** @type {JSAnimation} */child) => child.stretch(child.duration * timeScale));\n for (let labelName in labels) labels[labelName] *= timeScale;\n return super.stretch(newDuration);\n }\n\n /**\n * @return {this}\n */\n refresh() {\n forEachChildren(this, (/** @type {JSAnimation} */child) => {\n if (child.refresh) child.refresh();\n });\n return this;\n }\n\n /**\n * @return {this}\n */\n revert() {\n super.revert();\n forEachChildren(this, (/** @type {JSAnimation} */child) => child.revert, true);\n return cleanInlineStyles(this);\n }\n\n /**\n * @param {Callback<this>} [callback]\n * @return {Promise}\n */\n then(callback) {\n return super.then(callback);\n }\n}\n\n/**\n * @param {TimelineParams} [parameters]\n * @return {Timeline}\n */\nconst createTimeline = parameters => new Timeline(parameters).init();\n\n\n\n\nclass Animatable {\n /**\n * @param {TargetsParam} targets\n * @param {AnimatableParams} parameters\n */\n constructor(targets, parameters) {\n if (scope.current) scope.current.register(this);\n const beginHandler = () => {\n if (this.callbacks.completed) this.callbacks.reset();\n this.callbacks.play();\n };\n const pauseHandler = () => {\n if (this.callbacks.completed) return;\n let paused = true;\n for (let name in this.animations) {\n const anim = this.animations[name];\n if (!anim.paused && paused) {\n paused = false;\n break;\n }\n }\n if (paused) {\n this.callbacks.complete();\n }\n };\n /** @type {AnimationParams} */\n const globalParams = {\n onBegin: beginHandler,\n onComplete: pauseHandler,\n onPause: pauseHandler,\n };\n /** @type {AnimationParams} */\n const callbacksAnimationParams = { v: 1, autoplay: false };\n const properties = {};\n this.targets = [];\n this.animations = {};\n /** @type {JSAnimation|null} */\n this.callbacks = null;\n if (isUnd(targets) || isUnd(parameters)) return;\n for (let propName in parameters) {\n const paramValue = parameters[propName];\n if (isKey(propName)) {\n properties[propName] = paramValue;\n } else if (stringStartsWith(propName, 'on')) {\n callbacksAnimationParams[propName] = paramValue;\n } else {\n globalParams[propName] = paramValue;\n }\n }\n this.callbacks = new JSAnimation({ v: 0 }, callbacksAnimationParams);\n for (let propName in properties) {\n const propValue = properties[propName];\n const isObjValue = isObj(propValue);\n /** @type {TweenParamsOptions} */\n let propParams = {};\n let to = '+=0';\n if (isObjValue) {\n const unit = propValue.unit;\n if (isStr(unit)) to += unit;\n } else {\n propParams.duration = propValue;\n }\n propParams[propName] = isObjValue ? mergeObjects({ to }, propValue) : to;\n const animParams = mergeObjects(globalParams, propParams);\n animParams.composition = compositionTypes.replace;\n animParams.autoplay = false;\n const animation = this.animations[propName] = new JSAnimation(targets, animParams, null, 0, false).init();\n if (!this.targets.length) this.targets.push(...animation.targets);\n /** @type {AnimatableProperty} */\n this[propName] = (to, duration, ease) => {\n const tween = /** @type {Tween} */(animation._head);\n if (isUnd(to) && tween) {\n const numbers = tween._numbers;\n if (numbers && numbers.length) {\n return numbers;\n } else {\n return tween._modifier(tween._number);\n }\n } else {\n forEachChildren(animation, (/** @type {Tween} */tween) => {\n if (isArr(to)) {\n for (let i = 0, l = /** @type {Array} */(to).length; i < l; i++) {\n if (!isUnd(tween._numbers[i])) {\n tween._fromNumbers[i] = /** @type {Number} */(tween._modifier(tween._numbers[i]));\n tween._toNumbers[i] = to[i];\n }\n }\n } else {\n tween._fromNumber = /** @type {Number} */(tween._modifier(tween._number));\n tween._toNumber = /** @type {Number} */(to);\n }\n if (!isUnd(ease)) tween._ease = parseEasings(ease);\n tween._currentTime = 0;\n });\n if (!isUnd(duration)) animation.stretch(duration);\n animation.reset(1).resume();\n return this;\n }\n };\n }\n }\n\n revert() {\n for (let propName in this.animations) {\n this[propName] = noop;\n this.animations[propName].revert();\n }\n this.animations = {};\n this.targets.length = 0;\n if (this.callbacks) this.callbacks.revert();\n return this;\n }\n}\n\n/**\n * @param {TargetsParam} targets\n * @param {AnimatableParams} parameters\n * @return {AnimatableObject}\n */\nconst createAnimatable = (targets, parameters) => /** @type {AnimatableObject} */ (new Animatable(targets, parameters));\n\n\n\n\n/*\n * Spring ease solver adapted from https://webkit.org/demos/spring/spring.js\n * Webkit Copyright © 2016 Apple Inc\n */\n\nconst maxSpringParamValue = K * 10;\n\n/**\n * @typedef {Object} SpringParams\n * @property {Number} [mass=1] - Mass, default 1\n * @property {Number} [stiffness=100] - Stiffness, default 100\n * @property {Number} [damping=10] - Damping, default 10\n * @property {Number} [velocity=0] - Initial velocity, default 0\n */\nclass Spring {\n /**\n * @param {SpringParams} [parameters]\n */\n constructor(parameters = {}) {\n this.timeStep = .02; // Interval fed to the solver to calculate duration\n this.restThreshold = .0005; // Values below this threshold are considered resting position\n this.restDuration = 200; // Duration in ms used to check if the spring is resting after reaching restThreshold\n this.maxDuration = 60000; // The maximum allowed spring duration in ms (default 1 min)\n this.maxRestSteps = this.restDuration / this.timeStep / K; // How many steps allowed after reaching restThreshold before stopping the duration calculation\n this.maxIterations = this.maxDuration / this.timeStep / K; // Calculate the maximum iterations allowed based on maxDuration\n this.m = clamp(setValue(parameters.mass, 1), 0, maxSpringParamValue);\n this.s = clamp(setValue(parameters.stiffness, 100), 1, maxSpringParamValue);\n this.d = clamp(setValue(parameters.damping, 10), .1, maxSpringParamValue);\n this.v = clamp(setValue(parameters.velocity, 0), -1e4, maxSpringParamValue);\n this.w0 = 0;\n this.zeta = 0;\n this.wd = 0;\n this.b = 0;\n this.solverDuration = 0;\n this.duration = 0;\n this.compute();\n /** @type {EasingFunction} */\n this.ease = t => t === 0 || t === 1 ? t : this.solve(t * this.solverDuration);\n }\n\n /** @type {EasingFunction} */\n solve(time) {\n const { zeta, w0, wd, b } = this;\n let t = time;\n if (zeta < 1) {\n t = exp(-t * zeta * w0) * (1 * cos(wd * t) + b * sin(wd * t));\n } else {\n t = (1 + b * t) * exp(-t * w0);\n }\n return 1 - t;\n }\n\n compute() {\n const { maxRestSteps, maxIterations, restThreshold, timeStep, m, d, s, v } = this;\n const w0 = this.w0 = clamp(sqrt(s / m), minValue, K);\n const zeta = this.zeta = d / (2 * sqrt(s * m));\n const wd = this.wd = zeta < 1 ? w0 * sqrt(1 - zeta * zeta) : 0;\n this.b = zeta < 1 ? (zeta * w0 + -v) / wd : -v + w0;\n let solverTime = 0;\n let restSteps = 0;\n let iterations = 0;\n while (restSteps < maxRestSteps && iterations < maxIterations) {\n if (abs(1 - this.solve(solverTime)) < restThreshold) {\n restSteps++;\n } else {\n restSteps = 0;\n }\n this.solverDuration = solverTime;\n solverTime += timeStep;\n iterations++;\n }\n this.duration = round(this.solverDuration * K, 0) * globals.timeScale;\n }\n\n get mass() {\n return this.m;\n }\n\n set mass(v) {\n this.m = clamp(setValue(v, 1), 0, maxSpringParamValue);\n this.compute();\n }\n\n get stiffness() {\n return this.s;\n }\n\n set stiffness(v) {\n this.s = clamp(setValue(v, 100), 1, maxSpringParamValue);\n this.compute();\n }\n\n get damping() {\n return this.d;\n }\n\n set damping(v) {\n this.d = clamp(setValue(v, 10), .1, maxSpringParamValue);\n this.compute();\n }\n\n get velocity() {\n return this.v;\n }\n\n set velocity(v) {\n this.v = clamp(setValue(v, 0), -1e4, maxSpringParamValue);\n this.compute();\n }\n}\n\n/**\n * @param {SpringParams} [parameters]\n * @returns {Spring}\n */\nconst createSpring = (parameters) => new Spring(parameters);\n\n\n\n\n/**\n * @param {Event} e\n */\nconst preventDefault = e => {\n if (e.cancelable) e.preventDefault();\n};\n\nclass DOMProxy {\n /** @param {Object} el */\n constructor(el) {\n this.el = el;\n this.zIndex = 0;\n this.parentElement = null;\n this.classList = {\n add: noop,\n remove: noop,\n };\n }\n\n get x() { return this.el.x || 0 };\n set x(v) { this.el.x = v; };\n\n get y() { return this.el.y || 0 };\n set y(v) { this.el.y = v; };\n\n get width() { return this.el.width || 0 };\n set width(v) { this.el.width = v; };\n\n get height() { return this.el.height || 0 };\n set height(v) { this.el.height = v; };\n\n getBoundingClientRect() {\n return {\n top: this.y,\n right: this.x,\n bottom: this.y + this.height,\n left: this.x + this.width,\n }\n }\n}\n\nclass Transforms {\n /**\n * @param {DOMTarget|DOMProxy} $el\n */\n constructor($el) {\n this.$el = $el;\n this.inlineTransforms = [];\n this.point = new DOMPoint();\n this.inversedMatrix = this.getMatrix().inverse();\n }\n\n /**\n * @param {Number} x\n * @param {Number} y\n * @return {DOMPoint}\n */\n normalizePoint(x, y) {\n this.point.x = x;\n this.point.y = y;\n return this.point.matrixTransform(this.inversedMatrix);\n }\n\n /**\n * @callback TraverseParentsCallback\n * @param {DOMTarget} $el\n * @param {Number} i\n */\n\n /**\n * @param {TraverseParentsCallback} cb\n */\n traverseUp(cb) {\n let $el = /** @type {DOMTarget|Document} */(this.$el.parentElement), i = 0;\n while ($el && $el !== doc) {\n cb(/** @type {DOMTarget} */($el), i);\n $el = /** @type {DOMTarget} */($el.parentElement);\n i++;\n }\n }\n\n getMatrix() {\n const matrix = new DOMMatrix();\n this.traverseUp($el => {\n const transformValue = getComputedStyle($el).transform;\n if (transformValue) {\n const elMatrix = new DOMMatrix(transformValue);\n matrix.preMultiplySelf(elMatrix);\n }\n });\n return matrix;\n }\n\n remove() {\n this.traverseUp(($el, i) => {\n this.inlineTransforms[i] = $el.style.transform;\n $el.style.transform = 'none';\n });\n }\n\n revert() {\n this.traverseUp(($el, i) => {\n const ct = this.inlineTransforms[i];\n if (ct === '') {\n $el.style.removeProperty('transform');\n } else {\n $el.style.transform = ct;\n }\n });\n }\n}\n\n/**\n * @template {Array<Number>|DOMTargetSelector|String|Number|Boolean|Function|DraggableCursorParams} T\n * @param {T | ((draggable: Draggable) => T)} value\n * @param {Draggable} draggable\n * @return {T}\n */\nconst parseDraggableFunctionParameter = (value, draggable) => value && isFnc(value) ? /** @type {Function} */(value)(draggable) : value;\n\nlet zIndex = 0;\n\nclass Draggable {\n /**\n * @param {TargetsParam} target\n * @param {DraggableParams} [parameters]\n */\n constructor(target, parameters = {}) {\n if (!target) return;\n if (scope.current) scope.current.register(this);\n const paramX = parameters.x;\n const paramY = parameters.y;\n const trigger = parameters.trigger;\n const modifier = parameters.modifier;\n const ease = parameters.releaseEase;\n const customEase = ease && parseEasings(ease);\n const hasSpring = !isUnd(ease) && !isUnd(/** @type {Spring} */(ease).ease);\n const xProp = /** @type {String} */(isObj(paramX) && !isUnd(/** @type {Object} */(paramX).mapTo) ? /** @type {Object} */(paramX).mapTo : 'translateX');\n const yProp = /** @type {String} */(isObj(paramY) && !isUnd(/** @type {Object} */(paramY).mapTo) ? /** @type {Object} */(paramY).mapTo : 'translateY');\n const container = parseDraggableFunctionParameter(parameters.container, this);\n this.containerArray = isArr(container) ? container : null;\n this.$container = /** @type {HTMLElement} */(container && !this.containerArray ? parseTargets(/** @type {DOMTarget} */(container))[0] : doc.body);\n this.useWin = this.$container === doc.body;\n /** @type {Window | HTMLElement} */\n this.$scrollContainer = this.useWin ? win : this.$container;\n this.$target = /** @type {HTMLElement} */(isObj(target) ? new DOMProxy(target) : parseTargets(target)[0]);\n this.$trigger = /** @type {HTMLElement} */(parseTargets(trigger ? trigger : target)[0]);\n this.fixed = getTargetValue(this.$target, 'position') === 'fixed';\n // Refreshable parameters\n this.isFinePointer = true;\n /** @type {[Number, Number, Number, Number]} */\n this.containerPadding = [0, 0, 0, 0];\n /** @type {Number} */\n this.containerFriction = 0;\n /** @type {Number} */\n this.releaseContainerFriction = 0;\n /** @type {Number|Array<Number>} */\n this.snapX = 0;\n /** @type {Number|Array<Number>} */\n this.snapY = 0;\n /** @type {Number} */\n this.scrollSpeed = 0;\n /** @type {Number} */\n this.scrollThreshold = 0;\n /** @type {Number} */\n this.dragSpeed = 0;\n /** @type {Number} */\n this.maxVelocity = 0;\n /** @type {Number} */\n this.minVelocity = 0;\n /** @type {Number} */\n this.velocityMultiplier = 0;\n /** @type {Boolean|DraggableCursorParams} */\n this.cursor = false;\n /** @type {Spring} */\n this.releaseXSpring = hasSpring ? /** @type {Spring} */(ease) : createSpring({\n mass: setValue(parameters.releaseMass, 1),\n stiffness: setValue(parameters.releaseStiffness, 80),\n damping: setValue(parameters.releaseDamping, 20),\n });\n /** @type {Spring} */\n this.releaseYSpring = hasSpring ? /** @type {Spring} */(ease) : createSpring({\n mass: setValue(parameters.releaseMass, 1),\n stiffness: setValue(parameters.releaseStiffness, 80),\n damping: setValue(parameters.releaseDamping, 20),\n });\n /** @type {EasingFunction} */\n this.releaseEase = customEase || eases.outQuint;\n /** @type {Boolean} */\n this.hasReleaseSpring = hasSpring;\n /** @type {Callback<this>} */\n this.onGrab = parameters.onGrab || noop;\n /** @type {Callback<this>} */\n this.onDrag = parameters.onDrag || noop;\n /** @type {Callback<this>} */\n this.onRelease = parameters.onRelease || noop;\n /** @type {Callback<this>} */\n this.onUpdate = parameters.onUpdate || noop;\n /** @type {Callback<this>} */\n this.onSettle = parameters.onSettle || noop;\n /** @type {Callback<this>} */\n this.onSnap = parameters.onSnap || noop;\n /** @type {Callback<this>} */\n this.onResize = parameters.onResize || noop;\n /** @type {Callback<this>} */\n this.onAfterResize = parameters.onAfterResize || noop;\n /** @type {[Number, Number]} */\n this.disabled = [0, 0];\n /** @type {AnimatableParams} */\n const animatableParams = {};\n if (modifier) animatableParams.modifier = modifier;\n if (isUnd(paramX) || paramX === true) {\n animatableParams[xProp] = 0;\n } else if (isObj(paramX)) {\n const paramXObject = /** @type {DraggableAxisParam} */(paramX);\n const animatableXParams = {};\n if (paramXObject.modifier) animatableXParams.modifier = paramXObject.modifier;\n if (paramXObject.composition) animatableXParams.composition = paramXObject.composition;\n animatableParams[xProp] = animatableXParams;\n } else if (paramX === false) {\n animatableParams[xProp] = 0;\n this.disabled[0] = 1;\n }\n if (isUnd(paramY) || paramY === true) {\n animatableParams[yProp] = 0;\n } else if (isObj(paramY)) {\n const paramYObject = /** @type {DraggableAxisParam} */(paramY);\n const animatableYParams = {};\n if (paramYObject.modifier) animatableYParams.modifier = paramYObject.modifier;\n if (paramYObject.composition) animatableYParams.composition = paramYObject.composition;\n animatableParams[yProp] = animatableYParams;\n } else if (paramY === false) {\n animatableParams[yProp] = 0;\n this.disabled[1] = 1;\n }\n /** @type {AnimatableObject} */\n this.animate = /** @type {AnimatableObject} */(new Animatable(this.$target, animatableParams));\n // Internal props\n this.xProp = xProp;\n this.yProp = yProp;\n this.destX = 0;\n this.destY = 0;\n this.deltaX = 0;\n this.deltaY = 0;\n this.scroll = {x: 0, y: 0};\n /** @type {[Number, Number, Number, Number]} */\n this.coords = [this.x, this.y, 0, 0]; // x, y, temp x, temp y\n /** @type {[Number, Number]} */\n this.snapped = [0, 0]; // x, y\n /** @type {[Number, Number, Number, Number, Number, Number, Number, Number]} */\n this.pointer = [0, 0, 0, 0, 0, 0, 0, 0]; // x1, y1, x2, y2, temp x1, temp y1, temp x2, temp y2\n /** @type {[Number, Number]} */\n this.scrollView = [0, 0]; // w, h\n /** @type {[Number, Number, Number, Number]} */\n this.dragArea = [0, 0, 0, 0]; // x, y, w, h\n /** @type {[Number, Number, Number, Number]} */\n this.containerBounds = [-1e12, maxValue, maxValue, -1e12]; // t, r, b, l\n /** @type {[Number, Number, Number, Number]} */\n this.scrollBounds = [0, 0, 0, 0]; // t, r, b, l\n /** @type {[Number, Number, Number, Number]} */\n this.targetBounds = [0, 0, 0, 0]; // t, r, b, l\n /** @type {[Number, Number]} */\n this.window = [0, 0]; // w, h\n /** @type {[Number, Number, Number]} */\n this.velocityStack = [0, 0, 0];\n /** @type {Number} */\n this.velocityStackIndex = 0;\n /** @type {Number} */\n this.velocityTime = now();\n /** @type {Number} */\n this.velocity = 0;\n /** @type {Number} */\n this.angle = 0;\n /** @type {JSAnimation} */\n this.cursorStyles = null;\n /** @type {JSAnimation} */\n this.triggerStyles = null;\n /** @type {JSAnimation} */\n this.bodyStyles = null;\n /** @type {JSAnimation} */\n this.targetStyles = null;\n /** @type {JSAnimation} */\n this.touchActionStyles = null;\n this.transforms = new Transforms(this.$target);\n this.overshootCoords = { x: 0, y: 0 };\n this.overshootTicker = new Timer({\n autoplay: false,\n onUpdate: () => {\n this.updated = true;\n this.manual = true;\n // Use a duration of 1 to prevent the animatable from completing immediately to prevent issues with onSettle()\n // https://github.com/juliangarnier/anime/issues/1045\n if (!this.disabled[0]) this.animate[this.xProp](this.overshootCoords.x, 1);\n if (!this.disabled[1]) this.animate[this.yProp](this.overshootCoords.y, 1);\n },\n onComplete: () => {\n this.manual = false;\n if (!this.disabled[0]) this.animate[this.xProp](this.overshootCoords.x, 0);\n if (!this.disabled[1]) this.animate[this.yProp](this.overshootCoords.y, 0);\n },\n }, null, 0).init();\n this.updateTicker = new Timer({ autoplay: false, onUpdate: () => this.update() }, null,0,).init();\n this.contained = !isUnd(container);\n this.manual = false;\n this.grabbed = false;\n this.dragged = false;\n this.updated = false;\n this.released = false;\n this.canScroll = false;\n this.enabled = false;\n this.initialized = false;\n this.activeProp = this.disabled[1] ? xProp : yProp;\n this.animate.callbacks.onRender = () => {\n const hasUpdated = this.updated;\n const hasMoved = this.grabbed && hasUpdated;\n const hasReleased = !hasMoved && this.released;\n const x = this.x;\n const y = this.y;\n const dx = x - this.coords[2];\n const dy = y - this.coords[3];\n this.deltaX = dx;\n this.deltaY = dy;\n this.coords[2] = x;\n this.coords[3] = y;\n // Check if dx or dy are not 0 to check if the draggable has actually moved\n // https://github.com/juliangarnier/anime/issues/1032\n if (hasUpdated && (dx || dy)) {\n this.onUpdate(this);\n }\n if (!hasReleased) {\n this.updated = false;\n } else {\n this.computeVelocity(dx, dy);\n this.angle = atan2(dy, dx);\n }\n };\n this.animate.callbacks.onComplete = () => {\n if ((!this.grabbed && this.released)) {\n // Set released to false before calling onSettle to avoid recursion\n this.released = false;\n }\n if (!this.manual) {\n this.deltaX = 0;\n this.deltaY = 0;\n this.velocity = 0;\n this.velocityStack[0] = 0;\n this.velocityStack[1] = 0;\n this.velocityStack[2] = 0;\n this.velocityStackIndex = 0;\n this.onSettle(this);\n }\n };\n this.resizeTicker = new Timer({\n autoplay: false,\n duration: 150 * globals.timeScale,\n onComplete: () => {\n this.onResize(this);\n this.refresh();\n this.onAfterResize(this);\n },\n }).init();\n this.parameters = parameters;\n this.resizeObserver = new ResizeObserver(() => {\n if (this.initialized) {\n this.resizeTicker.restart();\n } else {\n this.initialized = true;\n }\n });\n this.enable();\n this.refresh();\n this.resizeObserver.observe(this.$container);\n if (!isObj(target)) this.resizeObserver.observe(this.$target);\n }\n\n /**\n * @param {Number} dx\n * @param {Number} dy\n * @return {Number}\n */\n computeVelocity(dx, dy) {\n const prevTime = this.velocityTime;\n const curTime = now();\n const elapsed = curTime - prevTime;\n if (elapsed < 17) return this.velocity;\n this.velocityTime = curTime;\n const velocityStack = this.velocityStack;\n const vMul = this.velocityMultiplier;\n const minV = this.minVelocity;\n const maxV = this.maxVelocity;\n const vi = this.velocityStackIndex;\n velocityStack[vi] = round(clamp((sqrt(dx * dx + dy * dy) / elapsed) * vMul, minV, maxV), 5);\n const velocity = max(velocityStack[0], velocityStack[1], velocityStack[2]);\n this.velocity = velocity;\n this.velocityStackIndex = (vi + 1) % 3;\n return velocity;\n }\n\n /**\n * @param {Number} x\n * @param {Boolean} [muteUpdateCallback]\n * @return {this}\n */\n setX(x, muteUpdateCallback = false) {\n if (this.disabled[0]) return;\n const v = round(x, 5);\n this.overshootTicker.pause();\n this.manual = true;\n this.updated = !muteUpdateCallback;\n this.destX = v;\n this.snapped[0] = snap(v, this.snapX);\n this.animate[this.xProp](v, 0);\n this.manual = false;\n return this;\n }\n\n /**\n * @param {Number} y\n * @param {Boolean} [muteUpdateCallback]\n * @return {this}\n */\n setY(y, muteUpdateCallback = false) {\n if (this.disabled[1]) return;\n const v = round(y, 5);\n this.overshootTicker.pause();\n this.manual = true;\n this.updated = !muteUpdateCallback;\n this.destY = v;\n this.snapped[1] = snap(v, this.snapY);\n this.animate[this.yProp](v, 0);\n this.manual = false;\n return this;\n }\n\n get x() {\n return round(/** @type {Number} */(this.animate[this.xProp]()), globals.precision);\n }\n\n set x(x) {\n this.setX(x, false);\n }\n\n get y() {\n return round(/** @type {Number} */(this.animate[this.yProp]()), globals.precision);\n }\n\n set y(y) {\n this.setY(y, false);\n }\n\n get progressX() {\n return mapRange(this.x, this.containerBounds[3], this.containerBounds[1], 0, 1);\n }\n\n set progressX(x) {\n this.setX(mapRange(x, 0, 1, this.containerBounds[3], this.containerBounds[1]), false);\n }\n\n get progressY() {\n return mapRange(this.y, this.containerBounds[0], this.containerBounds[2], 0, 1);\n }\n\n set progressY(y) {\n this.setY(mapRange(y, 0, 1, this.containerBounds[0], this.containerBounds[2]), false);\n }\n\n updateScrollCoords() {\n const sx = round(this.useWin ? win.scrollX : this.$container.scrollLeft, 0);\n const sy = round(this.useWin ? win.scrollY : this.$container.scrollTop, 0);\n const [ cpt, cpr, cpb, cpl ] = this.containerPadding;\n const threshold = this.scrollThreshold;\n this.scroll.x = sx;\n this.scroll.y = sy;\n this.scrollBounds[0] = sy - this.targetBounds[0] + cpt - threshold;\n this.scrollBounds[1] = sx - this.targetBounds[1] - cpr + threshold;\n this.scrollBounds[2] = sy - this.targetBounds[2] - cpb + threshold;\n this.scrollBounds[3] = sx - this.targetBounds[3] + cpl - threshold;\n }\n\n updateBoundingValues() {\n const $container = this.$container;\n // Return early if no $container defined to prevents error when reading scrollWidth / scrollHeight\n // https://github.com/juliangarnier/anime/issues/1064\n if (!$container) return;\n const cx = this.x;\n const cy = this.y;\n const cx2 = this.coords[2];\n const cy2 = this.coords[3];\n // Prevents interfering with the scroll area in cases the target is outside of the container\n // Make sure the temp coords are also adjuset to prevents wrong delta calculation on updates\n this.coords[2] = 0;\n this.coords[3] = 0;\n this.setX(0, true);\n this.setY(0, true);\n this.transforms.remove();\n const iw = this.window[0] = win.innerWidth;\n const ih = this.window[1] = win.innerHeight;\n const uw = this.useWin;\n const sw = $container.scrollWidth;\n const sh = $container.scrollHeight;\n const fx = this.fixed;\n const transformContainerRect = $container.getBoundingClientRect();\n const [ cpt, cpr, cpb, cpl ] = this.containerPadding;\n this.dragArea[0] = uw ? 0 : transformContainerRect.left;\n this.dragArea[1] = uw ? 0 : transformContainerRect.top;\n this.scrollView[0] = uw ? clamp(sw, iw, sw) : sw;\n this.scrollView[1] = uw ? clamp(sh, ih, sh) : sh;\n this.updateScrollCoords();\n const { width, height, left, top, right, bottom } = $container.getBoundingClientRect();\n this.dragArea[2] = round(uw ? clamp(width, iw, iw) : width, 0);\n this.dragArea[3] = round(uw ? clamp(height, ih, ih) : height, 0);\n const containerOverflow = getTargetValue($container, 'overflow');\n const visibleOverflow = containerOverflow === 'visible';\n const hiddenOverflow = containerOverflow === 'hidden';\n this.canScroll = fx ? false :\n this.contained &&\n (($container === doc.body && visibleOverflow) || (!hiddenOverflow && !visibleOverflow)) &&\n (sw > this.dragArea[2] + cpl - cpr || sh > this.dragArea[3] + cpt - cpb) &&\n (!this.containerArray || (this.containerArray && !isArr(this.containerArray)));\n if (this.contained) {\n const sx = this.scroll.x;\n const sy = this.scroll.y;\n const canScroll = this.canScroll;\n const targetRect = this.$target.getBoundingClientRect();\n const hiddenLeft = canScroll ? uw ? 0 : $container.scrollLeft : 0;\n const hiddenTop = canScroll ? uw ? 0 : $container.scrollTop : 0;\n const hiddenRight = canScroll ? this.scrollView[0] - hiddenLeft - width : 0;\n const hiddenBottom = canScroll ? this.scrollView[1] - hiddenTop - height : 0;\n this.targetBounds[0] = round((targetRect.top + sy) - (uw ? 0 : top), 0);\n this.targetBounds[1] = round((targetRect.right + sx) - (uw ? iw : right), 0);\n this.targetBounds[2] = round((targetRect.bottom + sy) - (uw ? ih : bottom), 0);\n this.targetBounds[3] = round((targetRect.left + sx) - (uw ? 0 : left), 0);\n if (this.containerArray) {\n this.containerBounds[0] = this.containerArray[0] + cpt;\n this.containerBounds[1] = this.containerArray[1] - cpr;\n this.containerBounds[2] = this.containerArray[2] - cpb;\n this.containerBounds[3] = this.containerArray[3] + cpl;\n } else {\n this.containerBounds[0] = -round(targetRect.top - (fx ? clamp(top, 0, ih) : top) + hiddenTop - cpt, 0);\n this.containerBounds[1] = -round(targetRect.right - (fx ? clamp(right, 0, iw) : right) - hiddenRight + cpr, 0);\n this.containerBounds[2] = -round(targetRect.bottom - (fx ? clamp(bottom, 0, ih) : bottom) - hiddenBottom + cpb, 0);\n this.containerBounds[3] = -round(targetRect.left - (fx ? clamp(left, 0, iw) : left) + hiddenLeft - cpl, 0);\n }\n }\n this.transforms.revert();\n // Restore coordinates\n this.coords[2] = cx2;\n this.coords[3] = cy2;\n this.setX(cx, true);\n this.setY(cy, true);\n }\n\n /**\n * @param {Array} bounds\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\n isOutOfBounds(bounds, x, y) {\n // Returns 0 if not OB, 1 if x is OB, 2 if y is OB, 3 if both x and y are OB\n if (!this.contained) return 0;\n const [ bt, br, bb, bl ] = bounds;\n const [ dx, dy ] = this.disabled;\n const obx = !dx && x < bl || !dx && x > br;\n const oby = !dy && y < bt || !dy && y > bb;\n return obx && !oby ? 1 : !obx && oby ? 2 : obx && oby ? 3 : 0;\n }\n\n refresh() {\n const params = this.parameters;\n const paramX = params.x;\n const paramY = params.y;\n const container = parseDraggableFunctionParameter(params.container, this);\n const cp = parseDraggableFunctionParameter(params.containerPadding, this) || 0;\n const containerPadding = /** @type {[Number, Number, Number, Number]} */(isArr(cp) ? cp : [cp, cp, cp, cp]);\n const cx = this.x;\n const cy = this.y;\n const parsedCursorStyles = parseDraggableFunctionParameter(params.cursor, this);\n const cursorStyles = { onHover: 'grab', onGrab: 'grabbing' };\n if (parsedCursorStyles) {\n const { onHover, onGrab } = /** @type {DraggableCursorParams} */(parsedCursorStyles);\n if (onHover) cursorStyles.onHover = onHover;\n if (onGrab) cursorStyles.onGrab = onGrab;\n }\n this.containerArray = isArr(container) ? container : null;\n this.$container = /** @type {HTMLElement} */(container && !this.containerArray ? parseTargets(/** @type {DOMTarget} */(container))[0] : doc.body);\n this.useWin = this.$container === doc.body;\n /** @type {Window | HTMLElement} */\n this.$scrollContainer = this.useWin ? win : this.$container;\n this.isFinePointer = matchMedia('(pointer:fine)').matches;\n this.containerPadding = setValue(containerPadding, [0, 0, 0, 0]);\n this.containerFriction = clamp(setValue(parseDraggableFunctionParameter(params.containerFriction, this), .8), 0, 1);\n this.releaseContainerFriction = clamp(setValue(parseDraggableFunctionParameter(params.releaseContainerFriction, this), this.containerFriction), 0, 1);\n this.snapX = parseDraggableFunctionParameter(isObj(paramX) && !isUnd(paramX.snap) ? paramX.snap : params.snap, this);\n this.snapY = parseDraggableFunctionParameter(isObj(paramY) && !isUnd(paramY.snap) ? paramY.snap : params.snap, this);\n this.scrollSpeed = setValue(parseDraggableFunctionParameter(params.scrollSpeed, this), 1.5);\n this.scrollThreshold = setValue(parseDraggableFunctionParameter(params.scrollThreshold, this), 20);\n this.dragSpeed = setValue(parseDraggableFunctionParameter(params.dragSpeed, this), 1);\n this.minVelocity = setValue(parseDraggableFunctionParameter(params.minVelocity, this), 0);\n this.maxVelocity = setValue(parseDraggableFunctionParameter(params.maxVelocity, this), 50);\n this.velocityMultiplier = setValue(parseDraggableFunctionParameter(params.velocityMultiplier, this), 1);\n this.cursor = parsedCursorStyles === false ? false : cursorStyles;\n this.updateBoundingValues();\n\n // const ob = this.isOutOfBounds(this.containerBounds, this.x, this.y);\n // if (ob === 1 || ob === 3) this.progressX = px;\n // if (ob === 2 || ob === 3) this.progressY = py;\n\n // if (this.initialized && this.contained) {\n // if (this.progressX !== px) this.progressX = px;\n // if (this.progressY !== py) this.progressY = py;\n // }\n\n const [ bt, br, bb, bl ] = this.containerBounds;\n this.setX(clamp(cx, bl, br), true);\n this.setY(clamp(cy, bt, bb), true);\n }\n\n update() {\n this.updateScrollCoords();\n if (this.canScroll) {\n const [ cpt, cpr, cpb, cpl ] = this.containerPadding;\n const [ sw, sh ] = this.scrollView;\n const daw = this.dragArea[2];\n const dah = this.dragArea[3];\n const csx = this.scroll.x;\n const csy = this.scroll.y;\n const nsw = this.$container.scrollWidth;\n const nsh = this.$container.scrollHeight;\n const csw = this.useWin ? clamp(nsw, this.window[0], nsw) : nsw;\n const csh = this.useWin ? clamp(nsh, this.window[1], nsh) : nsh;\n const swd = sw - csw;\n const shd = sh - csh;\n // Handle cases where the scrollarea dimensions changes during drag\n if (this.dragged && swd > 0) {\n this.coords[0] -= swd;\n this.scrollView[0] = csw;\n }\n if (this.dragged && shd > 0) {\n this.coords[1] -= shd;\n this.scrollView[1] = csh;\n }\n // Handle autoscroll when target is at the edges of the scroll bounds\n const s = this.scrollSpeed * 10;\n const threshold = this.scrollThreshold;\n const [ x, y ] = this.coords;\n const [ st, sr, sb, sl ] = this.scrollBounds;\n const t = round(clamp((y - st + cpt) / threshold, -1, 0) * s, 0);\n const r = round(clamp((x - sr - cpr) / threshold, 0, 1) * s, 0);\n const b = round(clamp((y - sb - cpb) / threshold, 0, 1) * s, 0);\n const l = round(clamp((x - sl + cpl) / threshold, -1, 0) * s, 0);\n if (t || b || l || r) {\n const [nx, ny] = this.disabled;\n let scrollX = csx;\n let scrollY = csy;\n if (!nx) {\n scrollX = round(clamp(csx + (l || r), 0, sw - daw), 0);\n this.coords[0] -= csx - scrollX;\n }\n if (!ny) {\n scrollY = round(clamp(csy + (t || b), 0, sh - dah), 0);\n this.coords[1] -= csy - scrollY;\n }\n // Note: Safari mobile requires to use different scroll methods depending if using the window or not\n if (this.useWin) {\n this.$scrollContainer.scrollBy(-(csx - scrollX), -(csy - scrollY));\n } else {\n this.$scrollContainer.scrollTo(scrollX, scrollY);\n }\n }\n }\n const [ ct, cr, cb, cl ] = this.containerBounds;\n const [ px1, py1, px2, py2, px3, py3 ] = this.pointer;\n this.coords[0] += (px1 - px3) * this.dragSpeed;\n this.coords[1] += (py1 - py3) * this.dragSpeed;\n this.pointer[4] = px1;\n this.pointer[5] = py1;\n const [ cx, cy ] = this.coords;\n const [ sx, sy ] = this.snapped;\n const cf = (1 - this.containerFriction) * this.dragSpeed;\n this.setX(cx > cr ? cr + (cx - cr) * cf : cx < cl ? cl + (cx - cl) * cf : cx, false);\n this.setY(cy > cb ? cb + (cy - cb) * cf : cy < ct ? ct + (cy - ct) * cf : cy, false);\n this.computeVelocity(px1 - px3, py1 - py3);\n this.angle = atan2(py1 - py2, px1 - px2);\n const [ nsx, nsy ] = this.snapped;\n if (nsx !== sx && this.snapX || nsy !== sy && this.snapY) {\n this.onSnap(this);\n }\n }\n\n stop() {\n this.updateTicker.pause();\n this.overshootTicker.pause();\n // Pauses the in bounds onRelease animations\n for (let prop in this.animate.animations) this.animate.animations[prop].pause();\n remove(this, null, 'x');\n remove(this, null, 'y');\n remove(this, null, 'progressX');\n remove(this, null, 'progressY');\n remove(this.scroll); // Removes any active animations on the container scroll\n remove(this.overshootCoords); // Removes active overshoot animations\n return this;\n }\n\n /**\n * @param {Number} [duration]\n * @param {Number} [gap]\n * @param {EasingParam} [ease]\n * @return {this}\n */\n scrollInView(duration, gap = 0, ease = eases.inOutQuad) {\n this.updateScrollCoords();\n const x = this.destX;\n const y = this.destY;\n const scroll = this.scroll;\n const scrollBounds = this.scrollBounds;\n const canScroll = this.canScroll;\n if (!this.containerArray && this.isOutOfBounds(scrollBounds, x, y)) {\n const [ st, sr, sb, sl ] = scrollBounds;\n const t = round(clamp(y - st, -1e12, 0), 0);\n const r = round(clamp(x - sr, 0, maxValue), 0);\n const b = round(clamp(y - sb, 0, maxValue), 0);\n const l = round(clamp(x - sl, -1e12, 0), 0);\n new JSAnimation(scroll, {\n x: round(scroll.x + (l ? l - gap : r ? r + gap : 0), 0),\n y: round(scroll.y + (t ? t - gap : b ? b + gap : 0), 0),\n duration: isUnd(duration) ? 350 * globals.timeScale : duration,\n ease,\n onUpdate: () => {\n this.canScroll = false;\n this.$scrollContainer.scrollTo(scroll.x, scroll.y);\n }\n }).init().then(() => {\n this.canScroll = canScroll;\n });\n }\n return this;\n }\n\n handleHover() {\n if (this.isFinePointer && this.cursor && !this.cursorStyles) {\n this.cursorStyles = setTargetValues(this.$trigger, {\n cursor: /** @type {DraggableCursorParams} */(this.cursor).onHover\n });\n }\n }\n\n /**\n * @param {Number} [duration]\n * @param {Number} [gap]\n * @param {EasingParam} [ease]\n * @return {this}\n */\n animateInView(duration, gap = 0, ease = eases.inOutQuad) {\n this.stop();\n this.updateBoundingValues();\n const x = this.x;\n const y = this.y;\n const [ cpt, cpr, cpb, cpl ] = this.containerPadding;\n const bt = this.scroll.y - this.targetBounds[0] + cpt + gap;\n const br = this.scroll.x - this.targetBounds[1] - cpr - gap;\n const bb = this.scroll.y - this.targetBounds[2] - cpb - gap;\n const bl = this.scroll.x - this.targetBounds[3] + cpl + gap;\n const ob = this.isOutOfBounds([bt, br, bb, bl], x, y);\n if (ob) {\n const [ disabledX, disabledY ] = this.disabled;\n const destX = clamp(snap(x, this.snapX), bl, br);\n const destY = clamp(snap(y, this.snapY), bt, bb);\n const dur = isUnd(duration) ? 350 * globals.timeScale : duration;\n if (!disabledX && (ob === 1 || ob === 3)) this.animate[this.xProp](destX, dur, ease);\n if (!disabledY && (ob === 2 || ob === 3)) this.animate[this.yProp](destY, dur, ease);\n }\n return this;\n }\n\n /**\n * @param {MouseEvent|TouchEvent} e\n */\n handleDown(e) {\n const $eTarget = /** @type {HTMLElement} */(e.target);\n if (this.grabbed || /** @type {HTMLInputElement} */($eTarget).type === 'range') return;\n\n e.stopPropagation();\n\n this.grabbed = true;\n this.released = false;\n this.stop();\n this.updateBoundingValues();\n const touches = /** @type {TouchEvent} */(e).changedTouches;\n const eventX = touches ? touches[0].clientX : /** @type {MouseEvent} */(e).clientX;\n const eventY = touches ? touches[0].clientY : /** @type {MouseEvent} */(e).clientY;\n const { x, y } = this.transforms.normalizePoint(eventX, eventY);\n const [ ct, cr, cb, cl ] = this.containerBounds;\n const cf = (1 - this.containerFriction) * this.dragSpeed;\n const cx = this.x;\n const cy = this.y;\n this.coords[0] = this.coords[2] = !cf ? cx : cx > cr ? cr + (cx - cr) / cf : cx < cl ? cl + (cx - cl) / cf : cx;\n this.coords[1] = this.coords[3] = !cf ? cy : cy > cb ? cb + (cy - cb) / cf : cy < ct ? ct + (cy - ct) / cf : cy;\n this.pointer[0] = x;\n this.pointer[1] = y;\n this.pointer[2] = x;\n this.pointer[3] = y;\n this.pointer[4] = x;\n this.pointer[5] = y;\n this.pointer[6] = x;\n this.pointer[7] = y;\n this.deltaX = 0;\n this.deltaY = 0;\n this.velocity = 0;\n this.velocityStack[0] = 0;\n this.velocityStack[1] = 0;\n this.velocityStack[2] = 0;\n this.velocityStackIndex = 0;\n this.angle = 0;\n if (this.targetStyles) {\n this.targetStyles.revert();\n this.targetStyles = null;\n }\n const z = /** @type {Number} */(getTargetValue(this.$target, 'zIndex', false));\n zIndex = (z > zIndex ? z : zIndex) + 1;\n this.targetStyles = setTargetValues(this.$target, { zIndex });\n if (this.triggerStyles) {\n this.triggerStyles.revert();\n this.triggerStyles = null;\n }\n if (this.cursorStyles) {\n this.cursorStyles.revert();\n this.cursorStyles = null;\n }\n if (this.isFinePointer && this.cursor) {\n this.bodyStyles = setTargetValues(doc.body, {\n cursor: /** @type {DraggableCursorParams} */(this.cursor).onGrab\n });\n }\n this.scrollInView(100, 0, eases.out(3));\n this.onGrab(this);\n\n doc.addEventListener('touchmove', this);\n doc.addEventListener('touchend', this);\n doc.addEventListener('touchcancel', this);\n doc.addEventListener('mousemove', this);\n doc.addEventListener('mouseup', this);\n doc.addEventListener('selectstart', this);\n }\n\n /**\n * @param {MouseEvent|TouchEvent} e\n */\n handleMove(e) {\n if (!this.grabbed) return;\n const touches = /** @type {TouchEvent} */(e).changedTouches;\n const eventX = touches ? touches[0].clientX : /** @type {MouseEvent} */(e).clientX;\n const eventY = touches ? touches[0].clientY : /** @type {MouseEvent} */(e).clientY;\n const { x, y } = this.transforms.normalizePoint(eventX, eventY);\n const movedX = x - this.pointer[6];\n const movedY = y - this.pointer[7];\n\n let $parent = /** @type {HTMLElement} */(e.target);\n let isAtTop = false;\n let isAtBottom = false;\n let canTouchScroll = false;\n\n while (touches && $parent && $parent !== this.$trigger) {\n const overflowY = getTargetValue($parent, 'overflow-y');\n if (overflowY !== 'hidden' && overflowY !== 'visible') {\n const { scrollTop, scrollHeight, clientHeight } = $parent;\n if (scrollHeight > clientHeight) {\n canTouchScroll = true;\n isAtTop = scrollTop <= 3;\n isAtBottom = scrollTop >= (scrollHeight - clientHeight) - 3;\n break;\n }\n }\n $parent = /** @type {HTMLElement} */($parent.parentNode);\n }\n\n if (canTouchScroll && ((!isAtTop && !isAtBottom) || (isAtTop && movedY < 0) || (isAtBottom && movedY > 0))) {\n\n this.pointer[0] = x;\n this.pointer[1] = y;\n this.pointer[2] = x;\n this.pointer[3] = y;\n this.pointer[4] = x;\n this.pointer[5] = y;\n this.pointer[6] = x;\n this.pointer[7] = y;\n\n } else {\n\n preventDefault(e);\n\n // Needed to prevents click on handleUp\n if (!this.triggerStyles) this.triggerStyles = setTargetValues(this.$trigger, { pointerEvents: 'none' });\n // Needed to prevent page scroll while dragging on touch devvice\n this.$trigger.addEventListener('touchstart', preventDefault, { passive: false });\n this.$trigger.addEventListener('touchmove', preventDefault, { passive: false });\n this.$trigger.addEventListener('touchend', preventDefault);\n\n\n if ((!this.disabled[0] && abs(movedX) > 3) || (!this.disabled[1] && abs(movedY) > 3)) {\n\n this.updateTicker.resume();\n this.pointer[2] = this.pointer[0];\n this.pointer[3] = this.pointer[1];\n this.pointer[0] = x;\n this.pointer[1] = y;\n this.dragged = true;\n this.released = false;\n this.onDrag(this);\n }\n }\n }\n\n handleUp() {\n\n if (!this.grabbed) return;\n\n this.updateTicker.pause();\n\n if (this.triggerStyles) {\n this.triggerStyles.revert();\n this.triggerStyles = null;\n }\n\n if (this.bodyStyles) {\n this.bodyStyles.revert();\n this.bodyStyles = null;\n }\n\n const [ disabledX, disabledY ] = this.disabled;\n const [ px1, py1, px2, py2, px3, py3 ] = this.pointer;\n const [ ct, cr, cb, cl ] = this.containerBounds;\n const [ sx, sy ] = this.snapped;\n const springX = this.releaseXSpring;\n const springY = this.releaseYSpring;\n const releaseEase = this.releaseEase;\n const hasReleaseSpring = this.hasReleaseSpring;\n const overshootCoords = this.overshootCoords;\n const cx = this.x;\n const cy = this.y;\n const pv = this.computeVelocity(px1 - px3, py1 - py3);\n const pa = this.angle = atan2(py1 - py2, px1 - px2);\n const ds = pv * 150;\n const cf = (1 - this.releaseContainerFriction) * this.dragSpeed;\n const nx = cx + (cos(pa) * ds);\n const ny = cy + (sin(pa) * ds);\n const bx = nx > cr ? cr + (nx - cr) * cf : nx < cl ? cl + (nx - cl) * cf : nx;\n const by = ny > cb ? cb + (ny - cb) * cf : ny < ct ? ct + (ny - ct) * cf : ny;\n const dx = this.destX = clamp(round(snap(bx, this.snapX), 5), cl, cr);\n const dy = this.destY = clamp(round(snap(by, this.snapY), 5), ct, cb);\n const ob = this.isOutOfBounds(this.containerBounds, nx, ny);\n\n let durationX = 0;\n let durationY = 0;\n let easeX = releaseEase;\n let easeY = releaseEase;\n let longestReleaseDuration = 0;\n\n overshootCoords.x = cx;\n overshootCoords.y = cy;\n\n if (!disabledX) {\n const directionX = dx === cr ? cx > cr ? -1 : 1 : cx < cl ? -1 : 1;\n const distanceX = round(cx - dx, 0);\n springX.velocity = disabledY && hasReleaseSpring ? distanceX ? (ds * directionX) / abs(distanceX) : 0 : pv;\n const { ease, duration, restDuration } = springX;\n durationX = cx === dx ? 0 : hasReleaseSpring ? duration : duration - (restDuration * globals.timeScale);\n if (hasReleaseSpring) easeX = ease;\n if (durationX > longestReleaseDuration) longestReleaseDuration = durationX;\n }\n\n if (!disabledY) {\n const directionY = dy === cb ? cy > cb ? -1 : 1 : cy < ct ? -1 : 1;\n const distanceY = round(cy - dy, 0);\n springY.velocity = disabledX && hasReleaseSpring ? distanceY ? (ds * directionY) / abs(distanceY) : 0 : pv;\n const { ease, duration, restDuration } = springY;\n durationY = cy === dy ? 0 : hasReleaseSpring ? duration : duration - (restDuration * globals.timeScale);\n if (hasReleaseSpring) easeY = ease;\n if (durationY > longestReleaseDuration) longestReleaseDuration = durationY;\n }\n\n if (!hasReleaseSpring && ob && cf && (durationX || durationY)) {\n\n const composition = compositionTypes.blend;\n\n new JSAnimation(overshootCoords, {\n x: { to: bx, duration: durationX * .65 },\n y: { to: by, duration: durationY * .65 },\n ease: releaseEase,\n composition,\n }).init();\n\n new JSAnimation(overshootCoords, {\n x: { to: dx, duration: durationX },\n y: { to: dy, duration: durationY },\n ease: releaseEase,\n composition,\n }).init();\n\n this.overshootTicker.stretch(max(durationX, durationY)).restart();\n\n } else {\n\n if (!disabledX) this.animate[this.xProp](dx, durationX, easeX);\n if (!disabledY) this.animate[this.yProp](dy, durationY, easeY);\n\n }\n\n this.scrollInView(longestReleaseDuration, this.scrollThreshold, releaseEase);\n\n let hasSnapped = false;\n\n if (dx !== sx) {\n this.snapped[0] = dx;\n if (this.snapX) hasSnapped = true;\n }\n\n if (dy !== sy && this.snapY) {\n this.snapped[1] = dy;\n if (this.snapY) hasSnapped = true;\n }\n\n if (hasSnapped) this.onSnap(this);\n\n this.grabbed = false;\n this.dragged = false;\n this.updated = true;\n this.released = true;\n\n // It's important to trigger the callback after the release animations to be able to cancel them\n this.onRelease(this);\n\n this.$trigger.removeEventListener('touchstart', preventDefault);\n this.$trigger.removeEventListener('touchmove', preventDefault);\n this.$trigger.removeEventListener('touchend', preventDefault);\n\n doc.removeEventListener('touchmove', this);\n doc.removeEventListener('touchend', this);\n doc.removeEventListener('touchcancel', this);\n doc.removeEventListener('mousemove', this);\n doc.removeEventListener('mouseup', this);\n doc.removeEventListener('selectstart', this);\n }\n\n reset() {\n this.stop();\n this.resizeTicker.pause();\n this.grabbed = false;\n this.dragged = false;\n this.updated = false;\n this.released = false;\n this.canScroll = false;\n this.setX(0, true);\n this.setY(0, true);\n this.coords[0] = 0;\n this.coords[1] = 0;\n this.pointer[0] = 0;\n this.pointer[1] = 0;\n this.pointer[2] = 0;\n this.pointer[3] = 0;\n this.pointer[4] = 0;\n this.pointer[5] = 0;\n this.pointer[6] = 0;\n this.pointer[7] = 0;\n this.velocity = 0;\n this.velocityStack[0] = 0;\n this.velocityStack[1] = 0;\n this.velocityStack[2] = 0;\n this.velocityStackIndex = 0;\n this.angle = 0;\n return this;\n }\n\n enable() {\n if (!this.enabled) {\n this.enabled = true;\n this.$target.classList.remove('is-disabled');\n this.touchActionStyles = setTargetValues(this.$trigger, {\n touchAction: this.disabled[0] ? 'pan-x' : this.disabled[1] ? 'pan-y' : 'none'\n });\n this.$trigger.addEventListener('touchstart', this, { passive: true });\n this.$trigger.addEventListener('mousedown', this, { passive: true });\n this.$trigger.addEventListener('mouseenter', this);\n }\n return this;\n }\n\n disable() {\n this.enabled = false;\n this.grabbed = false;\n this.dragged = false;\n this.updated = false;\n this.released = false;\n this.canScroll = false;\n this.touchActionStyles.revert();\n if (this.cursorStyles) {\n this.cursorStyles.revert();\n this.cursorStyles = null;\n }\n if (this.triggerStyles) {\n this.triggerStyles.revert();\n this.triggerStyles = null;\n }\n if (this.bodyStyles) {\n this.bodyStyles.revert();\n this.bodyStyles = null;\n }\n if (this.targetStyles) {\n this.targetStyles.revert();\n this.targetStyles = null;\n }\n this.$target.classList.add('is-disabled');\n this.$trigger.removeEventListener('touchstart', this);\n this.$trigger.removeEventListener('mousedown', this);\n this.$trigger.removeEventListener('mouseenter', this);\n doc.removeEventListener('touchmove', this);\n doc.removeEventListener('touchend', this);\n doc.removeEventListener('touchcancel', this);\n doc.removeEventListener('mousemove', this);\n doc.removeEventListener('mouseup', this);\n doc.removeEventListener('selectstart', this);\n return this;\n }\n\n revert() {\n this.reset();\n this.disable();\n this.$target.classList.remove('is-disabled');\n this.updateTicker.revert();\n this.overshootTicker.revert();\n this.resizeTicker.revert();\n this.animate.revert();\n this.resizeObserver.disconnect();\n return this;\n }\n\n /**\n * @param {Event} e\n */\n handleEvent(e) {\n switch (e.type) {\n case 'mousedown':\n this.handleDown(/** @type {MouseEvent} */(e));\n break;\n case 'touchstart':\n this.handleDown(/** @type {TouchEvent} */(e));\n break;\n case 'mousemove':\n this.handleMove(/** @type {MouseEvent} */(e));\n break;\n case 'touchmove':\n this.handleMove(/** @type {TouchEvent} */(e));\n break;\n case 'mouseup':\n this.handleUp();\n break;\n case 'touchend':\n this.handleUp();\n break;\n case 'touchcancel':\n this.handleUp();\n break;\n case 'mouseenter':\n this.handleHover();\n break;\n case 'selectstart':\n preventDefault(e);\n break;\n }\n }\n}\n\n/**\n * @param {TargetsParam} target\n * @param {DraggableParams} [parameters]\n * @return {Draggable}\n */\nconst createDraggable = (target, parameters) => new Draggable(target, parameters);\n\n\n\n\nclass Scope {\n /** @param {ScopeParams} [parameters] */\n constructor(parameters = {}) {\n if (scope.current) scope.current.register(this);\n const rootParam = parameters.root;\n /** @type {Document|DOMTarget} */\n let root = doc;\n if (rootParam) {\n root = /** @type {ReactRef} */(rootParam).current ||\n /** @type {AngularRef} */(rootParam).nativeElement ||\n parseTargets(/** @type {DOMTargetSelector} */(rootParam))[0] ||\n doc;\n }\n const scopeDefaults = parameters.defaults;\n const globalDefault = globals.defaults;\n const mediaQueries = parameters.mediaQueries;\n /** @type {DefaultsParams} */\n this.defaults = scopeDefaults ? mergeObjects(scopeDefaults, globalDefault) : globalDefault;\n /** @type {Document|DOMTarget} */\n this.root = root;\n /** @type {Array<ScopeConstructorCallback>} */\n this.constructors = [];\n /** @type {Array<ScopeCleanupCallback>} */\n this.revertConstructors = [];\n /** @type {Array<Revertible>} */\n this.revertibles = [];\n /** @type {Array<ScopeConstructorCallback | ((scope: this) => Tickable)>} */\n this.constructorsOnce = [];\n /** @type {Array<ScopeCleanupCallback>} */\n this.revertConstructorsOnce = [];\n /** @type {Array<Revertible>} */\n this.revertiblesOnce = [];\n /** @type {Boolean} */\n this.once = false;\n /** @type {Number} */\n this.onceIndex = 0;\n /** @type {Record<String, ScopeMethod>} */\n this.methods = {};\n /** @type {Record<String, Boolean>} */\n this.matches = {};\n /** @type {Record<String, MediaQueryList>} */\n this.mediaQueryLists = {};\n /** @type {Record<String, any>} */\n this.data = {};\n if (mediaQueries) {\n for (let mq in mediaQueries) {\n const _mq = win.matchMedia(mediaQueries[mq]);\n this.mediaQueryLists[mq] = _mq;\n _mq.addEventListener('change', this);\n }\n }\n }\n\n /**\n * @param {Revertible} revertible\n */\n register(revertible) {\n const store = this.once ? this.revertiblesOnce : this.revertibles;\n store.push(revertible);\n }\n\n /**\n * @template T\n * @param {ScopedCallback<T>} cb\n * @return {T}\n */\n execute(cb) {\n let activeScope = scope.current;\n let activeRoot = scope.root;\n let activeDefaults = globals.defaults;\n scope.current = this;\n scope.root = this.root;\n globals.defaults = this.defaults;\n const mqs = this.mediaQueryLists;\n for (let mq in mqs) this.matches[mq] = mqs[mq].matches;\n const returned = cb(this);\n scope.current = activeScope;\n scope.root = activeRoot;\n globals.defaults = activeDefaults;\n return returned;\n }\n\n /**\n * @return {this}\n */\n refresh() {\n this.onceIndex = 0;\n this.execute(() => {\n let i = this.revertibles.length;\n let y = this.revertConstructors.length;\n while (i--) this.revertibles[i].revert();\n while (y--) this.revertConstructors[y](this);\n this.revertibles.length = 0;\n this.revertConstructors.length = 0;\n this.constructors.forEach((/** @type {ScopeConstructorCallback} */constructor) => {\n const revertConstructor = constructor(this);\n if (isFnc(revertConstructor)) {\n this.revertConstructors.push(revertConstructor);\n }\n });\n });\n return this;\n }\n\n /**\n * @overload\n * @param {String} a1\n * @param {ScopeMethod} a2\n * @return {this}\n *\n * @overload\n * @param {ScopeConstructorCallback} a1\n * @return {this}\n *\n * @param {String|ScopeConstructorCallback} a1\n * @param {ScopeMethod} [a2]\n */\n add(a1, a2) {\n this.once = false;\n if (isFnc(a1)) {\n const constructor = /** @type {ScopeConstructorCallback} */(a1);\n this.constructors.push(constructor);\n this.execute(() => {\n const revertConstructor = constructor(this);\n if (isFnc(revertConstructor)) {\n this.revertConstructors.push(revertConstructor);\n }\n });\n } else {\n this.methods[/** @type {String} */(a1)] = (/** @type {any} */...args) => this.execute(() => a2(...args));\n }\n return this;\n }\n\n /**\n * @param {ScopeConstructorCallback} scopeConstructorCallback\n * @return {this}\n */\n addOnce(scopeConstructorCallback) {\n this.once = true;\n if (isFnc(scopeConstructorCallback)) {\n const currentIndex = this.onceIndex++;\n const tracked = this.constructorsOnce[currentIndex];\n if (tracked) return this;\n const constructor = /** @type {ScopeConstructorCallback} */(scopeConstructorCallback);\n this.constructorsOnce[currentIndex] = constructor;\n this.execute(() => {\n const revertConstructor = constructor(this);\n if (isFnc(revertConstructor)) {\n this.revertConstructorsOnce.push(revertConstructor);\n }\n });\n }\n return this;\n }\n\n /**\n * @param {(scope: this) => Tickable} cb\n * @return {Tickable}\n */\n keepTime(cb) {\n this.once = true;\n const currentIndex = this.onceIndex++;\n const tracked = /** @type {(scope: this) => Tickable} */(this.constructorsOnce[currentIndex]);\n if (isFnc(tracked)) return tracked(this);\n const constructor = /** @type {(scope: this) => Tickable} */(createRefreshable(cb));\n this.constructorsOnce[currentIndex] = constructor;\n let trackedTickable;\n this.execute(() => {\n trackedTickable = constructor(this);\n });\n return trackedTickable;\n }\n\n /**\n * @param {Event} e\n */\n handleEvent(e) {\n switch (e.type) {\n case 'change':\n this.refresh();\n break;\n }\n }\n\n revert() {\n const revertibles = this.revertibles;\n const revertConstructors = this.revertConstructors;\n const revertiblesOnce = this.revertiblesOnce;\n const revertConstructorsOnce = this.revertConstructorsOnce;\n const mqs = this.mediaQueryLists;\n let i = revertibles.length;\n let j = revertConstructors.length;\n let k = revertiblesOnce.length;\n let l = revertConstructorsOnce.length;\n while (i--) revertibles[i].revert();\n while (j--) revertConstructors[j](this);\n while (k--) revertiblesOnce[k].revert();\n while (l--) revertConstructorsOnce[l](this);\n for (let mq in mqs) mqs[mq].removeEventListener('change', this);\n revertibles.length = 0;\n revertConstructors.length = 0;\n this.constructors.length = 0;\n revertiblesOnce.length = 0;\n revertConstructorsOnce.length = 0;\n this.constructorsOnce.length = 0;\n this.onceIndex = 0;\n this.matches = {};\n this.methods = {};\n this.mediaQueryLists = {};\n this.data = {};\n }\n}\n\n/**\n * @param {ScopeParams} [params]\n * @return {Scope}\n */\nconst createScope = params => new Scope(params);\n\n/**\n * @return {Number}\n */\nconst getMaxViewHeight = () => {\n const $el = doc.createElement('div');\n doc.body.appendChild($el);\n $el.style.height = '100lvh';\n const height = $el.offsetHeight;\n doc.body.removeChild($el);\n return height;\n};\n\n/**\n * @template {ScrollThresholdValue|String|Number|Boolean|Function|Object} T\n * @param {T | ((observer: ScrollObserver) => T)} value\n * @param {ScrollObserver} scroller\n * @return {T}\n */\nconst parseScrollObserverFunctionParameter = (value, scroller) => value && isFnc(value) ? /** @type {Function} */(value)(scroller) : value;\n\nconst scrollContainers = new Map();\n\nclass ScrollContainer {\n /**\n * @param {HTMLElement} $el\n */\n constructor($el) {\n /** @type {HTMLElement} */\n this.element = $el;\n /** @type {Boolean} */\n this.useWin = this.element === doc.body;\n /** @type {Number} */\n this.winWidth = 0;\n /** @type {Number} */\n this.winHeight = 0;\n /** @type {Number} */\n this.width = 0;\n /** @type {Number} */\n this.height = 0;\n /** @type {Number} */\n this.left = 0;\n /** @type {Number} */\n this.top = 0;\n /** @type {Number} */\n this.zIndex = 0;\n /** @type {Number} */\n this.scrollX = 0;\n /** @type {Number} */\n this.scrollY = 0;\n /** @type {Number} */\n this.prevScrollX = 0;\n /** @type {Number} */\n this.prevScrollY = 0;\n /** @type {Number} */\n this.scrollWidth = 0;\n /** @type {Number} */\n this.scrollHeight = 0;\n /** @type {Number} */\n this.velocity = 0;\n /** @type {Boolean} */\n this.backwardX = false;\n /** @type {Boolean} */\n this.backwardY = false;\n /** @type {Timer} */\n this.scrollTicker = new Timer({\n autoplay: false,\n onBegin: () => this.dataTimer.resume(),\n onUpdate: () => {\n const backwards = this.backwardX || this.backwardY;\n forEachChildren(this, (/** @type {ScrollObserver} */child) => child.handleScroll(), backwards);\n },\n onComplete: () => this.dataTimer.pause()\n }).init();\n /** @type {Timer} */\n this.dataTimer = new Timer({\n autoplay: false,\n frameRate: 30,\n onUpdate: self => {\n const dt = self.deltaTime;\n const px = this.prevScrollX;\n const py = this.prevScrollY;\n const nx = this.scrollX;\n const ny = this.scrollY;\n const dx = px - nx;\n const dy = py - ny;\n this.prevScrollX = nx;\n this.prevScrollY = ny;\n if (dx) this.backwardX = px > nx;\n if (dy) this.backwardY = py > ny;\n this.velocity = round(dt > 0 ? Math.sqrt(dx * dx + dy * dy) / dt : 0, 5);\n }\n }).init();\n /** @type {Timer} */\n this.resizeTicker = new Timer({\n autoplay: false,\n duration: 250 * globals.timeScale,\n onComplete: () => {\n this.updateWindowBounds();\n this.refreshScrollObservers();\n this.handleScroll();\n }\n }).init();\n /** @type {Timer} */\n this.wakeTicker = new Timer({\n autoplay: false,\n duration: 500 * globals.timeScale,\n onBegin: () => {\n this.scrollTicker.resume();\n },\n onComplete: () => {\n this.scrollTicker.pause();\n }\n }).init();\n /** @type {ScrollObserver} */\n this._head = null;\n /** @type {ScrollObserver} */\n this._tail = null;\n this.updateScrollCoords();\n this.updateWindowBounds();\n this.updateBounds();\n this.refreshScrollObservers();\n this.handleScroll();\n this.resizeObserver = new ResizeObserver(() => this.resizeTicker.restart());\n this.resizeObserver.observe(this.element);\n (this.useWin ? win : this.element).addEventListener('scroll', this, false);\n }\n\n updateScrollCoords() {\n const useWin = this.useWin;\n const $el = this.element;\n this.scrollX = round(useWin ? win.scrollX : $el.scrollLeft, 0);\n this.scrollY = round(useWin ? win.scrollY : $el.scrollTop, 0);\n }\n\n updateWindowBounds() {\n this.winWidth = win.innerWidth;\n this.winHeight = getMaxViewHeight();\n }\n\n updateBounds() {\n const style = getComputedStyle(this.element);\n const $el = this.element;\n this.scrollWidth = $el.scrollWidth + parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n this.scrollHeight = $el.scrollHeight + parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n this.updateWindowBounds();\n let width, height;\n if (this.useWin) {\n width = this.winWidth;\n height = this.winHeight;\n } else {\n const elRect = $el.getBoundingClientRect();\n width = $el.clientWidth;\n height = $el.clientHeight;\n this.top = elRect.top;\n this.left = elRect.left;\n }\n this.width = width;\n this.height = height;\n }\n\n refreshScrollObservers() {\n forEachChildren(this, (/** @type {ScrollObserver} */child) => {\n if (child._debug) {\n child.removeDebug();\n }\n });\n this.updateBounds();\n forEachChildren(this, (/** @type {ScrollObserver} */child) => {\n child.refresh();\n if (child._debug) {\n child.debug();\n }\n });\n }\n\n refresh() {\n this.updateWindowBounds();\n this.updateBounds();\n this.refreshScrollObservers();\n this.handleScroll();\n }\n\n handleScroll() {\n this.updateScrollCoords();\n this.wakeTicker.restart();\n }\n\n /**\n * @param {Event} e\n */\n handleEvent(e) {\n switch (e.type) {\n case 'scroll':\n this.handleScroll();\n break;\n }\n }\n\n revert() {\n this.scrollTicker.cancel();\n this.dataTimer.cancel();\n this.resizeTicker.cancel();\n this.wakeTicker.cancel();\n this.resizeObserver.disconnect();\n (this.useWin ? win : this.element).removeEventListener('scroll', this);\n scrollContainers.delete(this.element);\n }\n}\n\n/**\n * @param {TargetsParam} target\n * @return {ScrollContainer}\n */\nconst registerAndGetScrollContainer = target => {\n const $el = /** @type {HTMLElement} */(target ? parseTargets(target)[0] || doc.body : doc.body);\n let scrollContainer = scrollContainers.get($el);\n if (!scrollContainer) {\n scrollContainer = new ScrollContainer($el);\n scrollContainers.set($el, scrollContainer);\n }\n return scrollContainer;\n};\n\n/**\n * @param {HTMLElement} $el\n * @param {Number|string} v\n * @param {Number} size\n * @param {Number} [under]\n * @param {Number} [over]\n * @return {Number}\n */\nconst convertValueToPx = ($el, v, size, under, over) => {\n const clampMin = v === 'min';\n const clampMax = v === 'max';\n const value = v === 'top' || v === 'left' || v === 'start' || clampMin ? 0 :\n v === 'bottom' || v === 'right' || v === 'end' || clampMax ? '100%' :\n v === 'center' ? '50%' :\n v;\n const { n, u } = decomposeRawValue(value, decomposedOriginalValue);\n let px = n;\n if (u === '%') {\n px = (n / 100) * size;\n } else if (u) {\n px = convertValueUnit($el, decomposedOriginalValue, 'px', true).n;\n }\n if (clampMax && under < 0) px += under;\n if (clampMin && over > 0) px += over;\n return px;\n};\n\n/**\n * @param {HTMLElement} $el\n * @param {ScrollThresholdValue} v\n * @param {Number} size\n * @param {Number} [under]\n * @param {Number} [over]\n * @return {Number}\n */\nconst parseBoundValue = ($el, v, size, under, over) => {\n /** @type {Number} */\n let value;\n if (isStr(v)) {\n const matchedOperator = relativeValuesExecRgx.exec(/** @type {String} */(v));\n if (matchedOperator) {\n const splitter = matchedOperator[0];\n const operator = splitter[0];\n const splitted = /** @type {String} */(v).split(splitter);\n const clampMin = splitted[0] === 'min';\n const clampMax = splitted[0] === 'max';\n const valueAPx = convertValueToPx($el, splitted[0], size, under, over);\n const valueBPx = convertValueToPx($el, splitted[1], size, under, over);\n if (clampMin) {\n const min = getRelativeValue(convertValueToPx($el, 'min', size), valueBPx, operator);\n value = min < valueAPx ? valueAPx : min;\n } else if (clampMax) {\n const max = getRelativeValue(convertValueToPx($el, 'max', size), valueBPx, operator);\n value = max > valueAPx ? valueAPx : max;\n } else {\n value = getRelativeValue(valueAPx, valueBPx, operator);\n }\n } else {\n value = convertValueToPx($el, v, size, under, over);\n }\n } else {\n value = /** @type {Number} */(v);\n }\n return round(value, 0);\n};\n\n/**\n * @param {JSAnimation} linked\n * @return {HTMLElement}\n */\nconst getAnimationDomTarget = linked => {\n let $linkedTarget;\n const linkedTargets = linked.targets;\n for (let i = 0, l = linkedTargets.length; i < l; i++) {\n const target = linkedTargets[i];\n if (target[isDomSymbol]) {\n $linkedTarget = /** @type {HTMLElement} */(target);\n break;\n }\n }\n return $linkedTarget;\n};\n\nlet scrollerIndex = 0;\n\nconst debugColors$1 = ['#FF4B4B','#FF971B','#FFC730','#F9F640','#7AFF5A','#18FF74','#17E09B','#3CFFEC','#05DBE9','#33B3F1','#638CF9','#C563FE','#FF4FCF','#F93F8A'];\n\nclass ScrollObserver {\n /**\n * @param {ScrollObserverParams} parameters\n */\n constructor(parameters = {}) {\n if (scope.current) scope.current.register(this);\n const syncMode = setValue(parameters.sync, 'play pause');\n const ease = syncMode ? parseEasings(/** @type {EasingParam} */(syncMode)) : null;\n const isLinear = syncMode && (syncMode === 'linear' || syncMode === none);\n const isEase = syncMode && !(ease === none && !isLinear);\n const isSmooth = syncMode && (isNum(syncMode) || syncMode === true || isLinear);\n const isMethods = syncMode && (isStr(syncMode) && !isEase && !isSmooth);\n const syncMethods = isMethods ? /** @type {String} */(syncMode).split(' ').map(\n (/** @type {String} */m) => () => {\n const linked = this.linked;\n return linked && linked[m] ? linked[m]() : null;\n }\n ) : null;\n const biDirSync = isMethods && syncMethods.length > 2;\n /** @type {Number} */\n this.index = scrollerIndex++;\n /** @type {String|Number} */\n this.id = !isUnd(parameters.id) ? parameters.id : this.index;\n /** @type {ScrollContainer} */\n this.container = registerAndGetScrollContainer(parameters.container);\n /** @type {HTMLElement} */\n this.target = null;\n /** @type {Tickable|WAAPIAnimation} */\n this.linked = null;\n /** @type {Boolean} */\n this.repeat = null;\n /** @type {Boolean} */\n this.horizontal = null;\n /** @type {ScrollThresholdParam|ScrollThresholdValue|ScrollThresholdCallback} */\n this.enter = null;\n /** @type {ScrollThresholdParam|ScrollThresholdValue|ScrollThresholdCallback} */\n this.leave = null;\n /** @type {Boolean} */\n this.sync = isEase || isSmooth || !!syncMethods;\n /** @type {EasingFunction} */\n this.syncEase = isEase ? ease : null;\n /** @type {Number} */\n this.syncSmooth = isSmooth ? syncMode === true || isLinear ? 1 : /** @type {Number} */(syncMode) : null;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncEnter = syncMethods && !biDirSync && syncMethods[0] ? syncMethods[0] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncLeave = syncMethods && !biDirSync && syncMethods[1] ? syncMethods[1] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncEnterForward = syncMethods && biDirSync && syncMethods[0] ? syncMethods[0] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncLeaveForward = syncMethods && biDirSync && syncMethods[1] ? syncMethods[1] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncEnterBackward = syncMethods && biDirSync && syncMethods[2] ? syncMethods[2] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncLeaveBackward = syncMethods && biDirSync && syncMethods[3] ? syncMethods[3] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onEnter = parameters.onEnter || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onLeave = parameters.onLeave || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onEnterForward = parameters.onEnterForward || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onLeaveForward = parameters.onLeaveForward || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onEnterBackward = parameters.onEnterBackward || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onLeaveBackward = parameters.onLeaveBackward || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onUpdate = parameters.onUpdate || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncComplete = parameters.onSyncComplete || noop;\n /** @type {Boolean} */\n this.reverted = false;\n /** @type {Boolean} */\n this.completed = false;\n /** @type {Boolean} */\n this.began = false;\n /** @type {Boolean} */\n this.isInView = false;\n /** @type {Boolean} */\n this.forceEnter = false;\n /** @type {Boolean} */\n this.hasEntered = false;\n // /** @type {Array.<Number>} */\n // this.offsets = [];\n /** @type {Number} */\n this.offset = 0;\n /** @type {Number} */\n this.offsetStart = 0;\n /** @type {Number} */\n this.offsetEnd = 0;\n /** @type {Number} */\n this.distance = 0;\n /** @type {Number} */\n this.prevProgress = 0;\n /** @type {Array} */\n this.thresholds = ['start', 'end', 'end', 'start'];\n /** @type {[Number, Number, Number, Number]} */\n this.coords = [0, 0, 0, 0];\n /** @type {JSAnimation} */\n this.debugStyles = null;\n /** @type {HTMLElement} */\n this.$debug = null;\n /** @type {ScrollObserverParams} */\n this._params = parameters;\n /** @type {Boolean} */\n this._debug = setValue(parameters.debug, false);\n /** @type {ScrollObserver} */\n this._next = null;\n /** @type {ScrollObserver} */\n this._prev = null;\n addChild(this.container, this);\n // Wait for the next frame to add to the container in order to handle calls to link()\n sync(() => {\n if (this.reverted) return;\n if (!this.target) {\n const target = /** @type {HTMLElement} */(parseTargets(parameters.target)[0]);\n this.target = target || doc.body;\n this.refresh();\n }\n if (this._debug) this.debug();\n });\n }\n\n /**\n * @param {Tickable|WAAPIAnimation} linked\n */\n link(linked) {\n if (linked) {\n // Make sure to pause the linked object in case it's added later\n linked.pause();\n this.linked = linked;\n // Try to use a target of the linked object if no target parameters specified\n if (!this._params.target) {\n /** @type {HTMLElement} */\n let $linkedTarget;\n if (!isUnd(/** @type {JSAnimation} */(linked).targets)) {\n $linkedTarget = getAnimationDomTarget(/** @type {JSAnimation} */(linked));\n } else {\n forEachChildren(/** @type {Timeline} */(linked), (/** @type {JSAnimation} */child) => {\n if (child.targets && !$linkedTarget) {\n $linkedTarget = getAnimationDomTarget(/** @type {JSAnimation} */(child));\n }\n });\n }\n // Fallback to body if no target found\n this.target = $linkedTarget || doc.body;\n this.refresh();\n }\n }\n return this;\n }\n\n get velocity() {\n return this.container.velocity;\n }\n\n get backward() {\n return this.horizontal ? this.container.backwardX : this.container.backwardY;\n }\n\n get scroll() {\n return this.horizontal ? this.container.scrollX : this.container.scrollY;\n }\n\n get progress() {\n const p = (this.scroll - this.offsetStart) / this.distance;\n return p === Infinity || isNaN(p) ? 0 : round(clamp(p, 0, 1), 6);\n }\n\n refresh() {\n this.reverted = false;\n const params = this._params;\n this.repeat = setValue(parseScrollObserverFunctionParameter(params.repeat, this), true);\n this.horizontal = setValue(parseScrollObserverFunctionParameter(params.axis, this), 'y') === 'x';\n this.enter = setValue(parseScrollObserverFunctionParameter(params.enter, this), 'end start');\n this.leave = setValue(parseScrollObserverFunctionParameter(params.leave, this), 'start end');\n this.updateBounds();\n this.handleScroll();\n return this;\n }\n\n removeDebug() {\n if (this.$debug) {\n this.$debug.parentNode.removeChild(this.$debug);\n this.$debug = null;\n }\n if (this.debugStyles) {\n this.debugStyles.revert();\n this.$debug = null;\n }\n return this;\n }\n\n debug() {\n this.removeDebug();\n const container = this.container;\n const isHori = this.horizontal;\n const $existingDebug = container.element.querySelector(':scope > .animejs-onscroll-debug');\n const $debug = doc.createElement('div');\n const $thresholds = doc.createElement('div');\n const $triggers = doc.createElement('div');\n const color = debugColors$1[this.index % debugColors$1.length];\n const useWin = container.useWin;\n const containerWidth = useWin ? container.winWidth : container.width;\n const containerHeight = useWin ? container.winHeight : container.height;\n const scrollWidth = container.scrollWidth;\n const scrollHeight = container.scrollHeight;\n const size = this.container.width > 360 ? 320 : 260;\n const offLeft = isHori ? 0 : 10;\n const offTop = isHori ? 10 : 0;\n const half = isHori ? 24 : size / 2;\n const labelHeight = isHori ? half : 15;\n const labelWidth = isHori ? 60 : half;\n const labelSize = isHori ? labelWidth : labelHeight;\n const repeat = isHori ? 'repeat-x' : 'repeat-y';\n /**\n * @param {Number} v\n * @return {String}\n */\n const gradientOffset = v => isHori ? '0px '+(v)+'px' : (v)+'px'+' 2px';\n /**\n * @param {String} c\n * @return {String}\n */\n const lineCSS = (c) => `linear-gradient(${isHori ? 90 : 0}deg, ${c} 2px, transparent 1px)`;\n /**\n * @param {String} p\n * @param {Number} l\n * @param {Number} t\n * @param {Number} w\n * @param {Number} h\n * @return {String}\n */\n const baseCSS = (p, l, t, w, h) => `position:${p};left:${l}px;top:${t}px;width:${w}px;height:${h}px;`;\n $debug.style.cssText = `${baseCSS('absolute', offLeft, offTop, isHori ? scrollWidth : size, isHori ? size : scrollHeight)}\n pointer-events: none;\n z-index: ${this.container.zIndex++};\n display: flex;\n flex-direction: ${isHori ? 'column' : 'row'};\n filter: drop-shadow(0px 1px 0px rgba(0,0,0,.75));\n `;\n $thresholds.style.cssText = `${baseCSS('sticky', 0, 0, isHori ? containerWidth : half, isHori ? half : containerHeight)}`;\n if (!$existingDebug) {\n $thresholds.style.cssText += `background:\n ${lineCSS('#FFFF')}${gradientOffset(half-10)} / ${isHori ? '100px 100px' : '100px 100px'} ${repeat},\n ${lineCSS('#FFF8')}${gradientOffset(half-10)} / ${isHori ? '10px 10px' : '10px 10px'} ${repeat};\n `;\n }\n $triggers.style.cssText = `${baseCSS('relative', 0, 0, isHori ? scrollWidth : half, isHori ? half : scrollHeight)}`;\n if (!$existingDebug) {\n $triggers.style.cssText += `background:\n ${lineCSS('#FFFF')}${gradientOffset(0)} / ${isHori ? '100px 10px' : '10px 100px'} ${repeat},\n ${lineCSS('#FFF8')}${gradientOffset(0)} / ${isHori ? '10px 0px' : '0px 10px'} ${repeat};\n `;\n }\n const labels = [' enter: ', ' leave: '];\n this.coords.forEach((v, i) => {\n const isView = i > 1;\n const value = (isView ? 0 : this.offset) + v;\n const isTail = i % 2;\n const isFirst = value < labelSize;\n const isOver = value > (isView ? isHori ? containerWidth : containerHeight : isHori ? scrollWidth : scrollHeight) - labelSize;\n const isFlip = (isView ? isTail && !isFirst : !isTail && !isFirst) || isOver;\n const $label = doc.createElement('div');\n const $text = doc.createElement('div');\n const dirProp = isHori ? isFlip ? 'right' : 'left' : isFlip ? 'bottom' : 'top';\n const flipOffset = isFlip ? (isHori ? labelWidth : labelHeight) + (!isView ? isHori ? -1 : -2 : isHori ? -1 : isOver ? 0 : -2) : !isView ? isHori ? 1 : 0 : isHori ? 1 : 0;\n // $text.innerHTML = `${!isView ? '' : labels[isTail] + ' '}${this.id}: ${this.thresholds[i]} ${isView ? '' : labels[isTail]}`;\n $text.innerHTML = `${this.id}${labels[isTail]}${this.thresholds[i]}`;\n $label.style.cssText = `${baseCSS('absolute', 0, 0, labelWidth, labelHeight)}\n display: flex;\n flex-direction: ${isHori ? 'column' : 'row'};\n justify-content: flex-${isView ? 'start' : 'end'};\n align-items: flex-${isFlip ? 'end' : 'start'};\n border-${dirProp}: 2px ${isTail ? 'solid' : 'solid'} ${color};\n `;\n $text.style.cssText = `\n overflow: hidden;\n max-width: ${(size / 2) - 10}px;\n height: ${labelHeight};\n margin-${isHori ? isFlip ? 'right' : 'left' : isFlip ? 'bottom' : 'top'}: -2px;\n padding: 1px;\n font-family: ui-monospace, monospace;\n font-size: 10px;\n letter-spacing: -.025em;\n line-height: 9px;\n font-weight: 600;\n text-align: ${isHori && isFlip || !isHori && !isView ? 'right' : 'left'};\n white-space: pre;\n text-overflow: ellipsis;\n color: ${isTail ? color : 'rgba(0,0,0,.75)'};\n background-color: ${isTail ? 'rgba(0,0,0,.65)' : color};\n border: 2px solid ${isTail ? color : 'transparent'};\n border-${isHori ? isFlip ? 'top-left' : 'top-right' : isFlip ? 'top-left' : 'bottom-left'}-radius: 5px;\n border-${isHori ? isFlip ? 'bottom-left' : 'bottom-right' : isFlip ? 'top-right' : 'bottom-right'}-radius: 5px;\n `;\n $label.appendChild($text);\n let position = value - flipOffset + (isHori ? 1 : 0);\n $label.style[isHori ? 'left' : 'top'] = `${position}px`;\n // $label.style[isHori ? 'left' : 'top'] = value - flipOffset + (!isFlip && isFirst && !isView ? 1 : isFlip ? 0 : -2) + 'px';\n (isView ? $thresholds : $triggers).appendChild($label);\n });\n\n $debug.appendChild($thresholds);\n $debug.appendChild($triggers);\n container.element.appendChild($debug);\n\n if (!$existingDebug) $debug.classList.add('animejs-onscroll-debug');\n this.$debug = $debug;\n const containerPosition = getTargetValue(container.element, 'position');\n if (containerPosition === 'static') {\n this.debugStyles = setTargetValues(container.element, { position: 'relative '});\n }\n\n }\n\n updateBounds() {\n if (this._debug) {\n this.removeDebug();\n }\n let stickys;\n const $target = this.target;\n const container = this.container;\n const isHori = this.horizontal;\n const linked = this.linked;\n let linkedTime;\n let $el = $target;\n // let offsetX = 0;\n // let offsetY = 0;\n // let $offsetParent = $el;\n /** @type {Element} */\n if (linked) {\n linkedTime = linked.currentTime;\n linked.seek(0, true);\n }\n /* Old implementation to get offset and targetSize before fixing https://github.com/juliangarnier/anime/issues/1021\n // const isContainerStatic = getTargetValue(container.element, 'position') === 'static' ? setTargetValues(container.element, { position: 'relative '}) : false;\n // while ($el && $el !== container.element && $el !== doc.body) {\n // const isSticky = getTargetValue($el, 'position') === 'sticky' ?\n // setTargetValues($el, { position: 'static' }) :\n // false;\n // if ($el === $offsetParent) {\n // offsetX += $el.offsetLeft || 0;\n // offsetY += $el.offsetTop || 0;\n // $offsetParent = $el.offsetParent;\n // }\n // $el = /** @type {HTMLElement} */($el.parentElement);\n // if (isSticky) {\n // if (!stickys) stickys = [];\n // stickys.push(isSticky);\n // }\n // }\n // if (isContainerStatic) isContainerStatic.revert();\n // const offset = isHori ? offsetX : offsetY;\n // const targetSize = isHori ? $target.offsetWidth : $target.offsetHeight;\n\n while ($el && $el !== container.element && $el !== doc.body) {\n const isSticky = getTargetValue($el, 'position') === 'sticky' ? setTargetValues($el, { position: 'static' }) : false;\n $el = $el.parentElement;\n if (isSticky) {\n if (!stickys) stickys = [];\n stickys.push(isSticky);\n }\n }\n const rect = $target.getBoundingClientRect();\n const offset = isHori ? rect.left + container.scrollX - container.left : rect.top + container.scrollY - container.top;\n const targetSize = isHori ? rect.width : rect.height;\n const containerSize = isHori ? container.width : container.height;\n const scrollSize = isHori ? container.scrollWidth : container.scrollHeight;\n const maxScroll = scrollSize - containerSize;\n const enter = this.enter;\n const leave = this.leave;\n\n /** @type {ScrollThresholdValue} */\n let enterTarget = 'start';\n /** @type {ScrollThresholdValue} */\n let leaveTarget = 'end';\n /** @type {ScrollThresholdValue} */\n let enterContainer = 'end';\n /** @type {ScrollThresholdValue} */\n let leaveContainer = 'start';\n\n if (isStr(enter)) {\n const splitted = /** @type {String} */(enter).split(' ');\n enterContainer = splitted[0];\n enterTarget = splitted.length > 1 ? splitted[1] : enterTarget;\n } else if (isObj(enter)) {\n const e = /** @type {ScrollThresholdParam} */(enter);\n if (!isUnd(e.container)) enterContainer = e.container;\n if (!isUnd(e.target)) enterTarget = e.target;\n } else if (isNum(enter)) {\n enterContainer = /** @type {Number} */(enter);\n }\n\n if (isStr(leave)) {\n const splitted = /** @type {String} */(leave).split(' ');\n leaveContainer = splitted[0];\n leaveTarget = splitted.length > 1 ? splitted[1] : leaveTarget;\n } else if (isObj(leave)) {\n const t = /** @type {ScrollThresholdParam} */(leave);\n if (!isUnd(t.container)) leaveContainer = t.container;\n if (!isUnd(t.target)) leaveTarget = t.target;\n } else if (isNum(leave)) {\n leaveContainer = /** @type {Number} */(leave);\n }\n\n const parsedEnterTarget = parseBoundValue($target, enterTarget, targetSize);\n const parsedLeaveTarget = parseBoundValue($target, leaveTarget, targetSize);\n const under = (parsedEnterTarget + offset) - containerSize;\n const over = (parsedLeaveTarget + offset) - maxScroll;\n const parsedEnterContainer = parseBoundValue($target, enterContainer, containerSize, under, over);\n const parsedLeaveContainer = parseBoundValue($target, leaveContainer, containerSize, under, over);\n const offsetStart = parsedEnterTarget + offset - parsedEnterContainer;\n const offsetEnd = parsedLeaveTarget + offset - parsedLeaveContainer;\n const scrollDelta = offsetEnd - offsetStart;\n // this.offsets[0] = offsetX;\n // this.offsets[1] = offsetY;\n this.offset = offset;\n this.offsetStart = offsetStart;\n this.offsetEnd = offsetEnd;\n this.distance = scrollDelta <= 0 ? 0 : scrollDelta;\n this.thresholds = [enterTarget, leaveTarget, enterContainer, leaveContainer];\n this.coords = [parsedEnterTarget, parsedLeaveTarget, parsedEnterContainer, parsedLeaveContainer];\n if (stickys) {\n stickys.forEach(sticky => sticky.revert());\n }\n if (linked) {\n linked.seek(linkedTime, true);\n }\n if (this._debug) {\n this.debug();\n }\n }\n\n handleScroll() {\n const linked = this.linked;\n const sync = this.sync;\n const syncEase = this.syncEase;\n const syncSmooth = this.syncSmooth;\n const shouldSeek = linked && (syncEase || syncSmooth);\n const isHori = this.horizontal;\n const container = this.container;\n const scroll = this.scroll;\n const isBefore = scroll <= this.offsetStart;\n const isAfter = scroll >= this.offsetEnd;\n const isInView = !isBefore && !isAfter;\n const isOnTheEdge = scroll === this.offsetStart || scroll === this.offsetEnd;\n const forceEnter = !this.hasEntered && isOnTheEdge;\n const $debug = this._debug && this.$debug;\n let hasUpdated = false;\n let syncCompleted = false;\n let p = this.progress;\n\n if (isBefore && this.began) {\n this.began = false;\n }\n\n if (p > 0 && !this.began) {\n this.began = true;\n }\n\n if (shouldSeek) {\n const lp = linked.progress;\n if (syncSmooth && isNum(syncSmooth)) {\n if (/** @type {Number} */(syncSmooth) < 1) {\n const step = 0.0001;\n const snap = lp < p && p === 1 ? step : lp > p && !p ? -1e-4 : 0;\n p = round(lerp(lp, p, interpolate(.01, .2, /** @type {Number} */(syncSmooth)), false) + snap, 6);\n }\n } else if (syncEase) {\n p = syncEase(p);\n }\n hasUpdated = p !== this.prevProgress;\n syncCompleted = lp === 1;\n if (hasUpdated && !syncCompleted && (syncSmooth && lp)) {\n container.wakeTicker.restart();\n }\n }\n\n if ($debug) {\n const sticky = isHori ? container.scrollY : container.scrollX;\n $debug.style[isHori ? 'top' : 'left'] = sticky + 10 + 'px';\n }\n\n // Trigger enter callbacks if already in view or when entering the view\n if ((isInView && !this.isInView) || (forceEnter && !this.forceEnter && !this.hasEntered)) {\n if (isInView) this.isInView = true;\n if (!this.forceEnter || !this.hasEntered) {\n if ($debug && isInView) $debug.style.zIndex = `${this.container.zIndex++}`;\n this.onSyncEnter(this);\n this.onEnter(this);\n if (this.backward) {\n this.onSyncEnterBackward(this);\n this.onEnterBackward(this);\n } else {\n this.onSyncEnterForward(this);\n this.onEnterForward(this);\n }\n this.hasEntered = true;\n if (forceEnter) this.forceEnter = true;\n } else if (isInView) {\n this.forceEnter = false;\n }\n }\n\n if (isInView || !isInView && this.isInView) {\n hasUpdated = true;\n }\n\n if (hasUpdated) {\n if (shouldSeek) linked.seek(linked.duration * p);\n this.onUpdate(this);\n }\n\n if (!isInView && this.isInView) {\n this.isInView = false;\n this.onSyncLeave(this);\n this.onLeave(this);\n if (this.backward) {\n this.onSyncLeaveBackward(this);\n this.onLeaveBackward(this);\n } else {\n this.onSyncLeaveForward(this);\n this.onLeaveForward(this);\n }\n if (sync && !syncSmooth) {\n syncCompleted = true;\n }\n }\n\n if (p >= 1 && this.began && !this.completed && (sync && syncCompleted || !sync)) {\n if (sync) {\n this.onSyncComplete(this);\n }\n this.completed = true;\n if ((!this.repeat && !linked) || (!this.repeat && linked && linked.completed)) {\n this.revert();\n }\n }\n\n if (p < 1 && this.completed) {\n this.completed = false;\n }\n\n this.prevProgress = p;\n }\n\n revert() {\n if (this.reverted) return;\n const container = this.container;\n removeChild(container, this);\n if (!container._head) {\n container.revert();\n }\n if (this._debug) {\n this.removeDebug();\n }\n this.reverted = true;\n return this;\n }\n\n}\n\n/**\n * @param {ScrollObserverParams} [parameters={}]\n * @return {ScrollObserver}\n */\nconst onScroll = (parameters = {}) => new ScrollObserver(parameters);\n\n\n\n\nconst segmenter = (typeof Intl !== 'undefined') && Intl.Segmenter;\nconst valueRgx = /\\{value\\}/g;\nconst indexRgx = /\\{i\\}/g;\nconst whiteSpaceGroupRgx = /(\\s+)/;\nconst whiteSpaceRgx = /^\\s+$/;\nconst lineType = 'line';\nconst wordType = 'word';\nconst charType = 'char';\nconst dataLine = `data-line`;\n\n/**\n * @typedef {Object} Segment\n * @property {String} segment\n * @property {Boolean} [isWordLike]\n */\n\n/**\n * @typedef {Object} Segmenter\n * @property {function(String): Iterable<Segment>} segment\n */\n\n/** @type {Segmenter} */\nlet wordSegmenter = null;\n/** @type {Segmenter} */\nlet graphemeSegmenter = null;\nlet $splitTemplate = null;\n\n/**\n * @param {Segment} seg\n * @return {Boolean}\n */\nconst isSegmentWordLike = seg => {\n return seg.isWordLike ||\n seg.segment === ' ' || // Consider spaces as words first, then handle them diffrently later\n isNum(+seg.segment); // Safari doesn't considers numbers as words\n};\n\n/**\n * @param {HTMLElement} $el\n */\nconst setAriaHidden = $el => $el.setAttribute('aria-hidden', 'true');\n\n/**\n * @param {DOMTarget} $el\n * @param {String} type\n * @return {Array<HTMLElement>}\n */\nconst getAllTopLevelElements = ($el, type) => [.../** @type {*} */($el.querySelectorAll(`[data-${type}]:not([data-${type}] [data-${type}])`))];\n\nconst debugColors = { line: '#00D672', word: '#FF4B4B', char: '#5A87FF' };\n\n/**\n * @param {HTMLElement} $el\n */\nconst filterEmptyElements = $el => {\n if (!$el.childElementCount && !$el.textContent.trim()) {\n const $parent = $el.parentElement;\n $el.remove();\n if ($parent) filterEmptyElements($parent);\n }\n};\n\n/**\n * @param {HTMLElement} $el\n * @param {Number} lineIndex\n * @param {Set<HTMLElement>} bin\n * @returns {Set<HTMLElement>}\n */\nconst filterLineElements = ($el, lineIndex, bin) => {\n const dataLineAttr = $el.getAttribute(dataLine);\n if (dataLineAttr !== null && +dataLineAttr !== lineIndex || $el.tagName === 'BR') bin.add($el);\n let i = $el.childElementCount;\n while (i--) filterLineElements(/** @type {HTMLElement} */($el.children[i]), lineIndex, bin);\n return bin;\n};\n\n/**\n * @param {'line'|'word'|'char'} type\n * @param {splitTemplateParams} params\n * @return {String}\n */\nconst generateTemplate = (type, params = {}) => {\n let template = ``;\n const classString = isStr(params.class) ? ` class=\"${params.class}\"` : '';\n const cloneType = setValue(params.clone, false);\n const wrapType = setValue(params.wrap, false);\n const overflow = wrapType ? wrapType === true ? 'clip' : wrapType : cloneType ? 'clip' : false;\n if (wrapType) template += `<span${overflow ? ` style=\"overflow:${overflow};\"` : ''}>`;\n template += `<span${classString}${cloneType ? ` style=\"position:relative;\"` : ''} data-${type}=\"{i}\">`;\n if (cloneType) {\n const left = cloneType === 'left' ? '-100%' : cloneType === 'right' ? '100%' : '0';\n const top = cloneType === 'top' ? '-100%' : cloneType === 'bottom' ? '100%' : '0';\n template += `<span>{value}</span>`;\n template += `<span inert style=\"position:absolute;top:${top};left:${left};white-space:nowrap;\">{value}</span>`;\n } else {\n template += `{value}`;\n }\n template += `</span>`;\n if (wrapType) template += `</span>`;\n return template;\n};\n\n/**\n * @param {String|SplitFunctionValue} htmlTemplate\n * @param {Array<HTMLElement>} store\n * @param {Node|HTMLElement} node\n * @param {DocumentFragment} $parentFragment\n * @param {'line'|'word'|'char'} type\n * @param {Boolean} debug\n * @param {Number} lineIndex\n * @param {Number} [wordIndex]\n * @param {Number} [charIndex]\n * @return {HTMLElement}\n */\nconst processHTMLTemplate = (htmlTemplate, store, node, $parentFragment, type, debug, lineIndex, wordIndex, charIndex) => {\n const isLine = type === lineType;\n const isChar = type === charType;\n const className = `_${type}_`;\n const template = isFnc(htmlTemplate) ? htmlTemplate(node) : htmlTemplate;\n const displayStyle = isLine ? 'block' : 'inline-block';\n $splitTemplate.innerHTML = template\n .replace(valueRgx, `<i class=\"${className}\"></i>`)\n .replace(indexRgx, `${isChar ? charIndex : isLine ? lineIndex : wordIndex}`);\n const $content = $splitTemplate.content;\n const $highestParent = /** @type {HTMLElement} */($content.firstElementChild);\n const $split = /** @type {HTMLElement} */($content.querySelector(`[data-${type}]`)) || $highestParent;\n const $replacables = /** @type {NodeListOf<HTMLElement>} */($content.querySelectorAll(`i.${className}`));\n const replacablesLength = $replacables.length;\n if (replacablesLength) {\n $highestParent.style.display = displayStyle;\n $split.style.display = displayStyle;\n $split.setAttribute(dataLine, `${lineIndex}`);\n if (!isLine) {\n $split.setAttribute('data-word', `${wordIndex}`);\n if (isChar) $split.setAttribute('data-char', `${charIndex}`);\n }\n let i = replacablesLength;\n while (i--) {\n const $replace = $replacables[i];\n const $closestParent = $replace.parentElement;\n $closestParent.style.display = displayStyle;\n if (isLine) {\n $closestParent.innerHTML = /** @type {HTMLElement} */(node).innerHTML;\n } else {\n $closestParent.replaceChild(node.cloneNode(true), $replace);\n }\n }\n store.push($split);\n $parentFragment.appendChild($content);\n } else {\n console.warn(`The expression \"{value}\" is missing from the provided template.`);\n }\n if (debug) $highestParent.style.outline = `1px dotted ${debugColors[type]}`;\n return $highestParent;\n};\n\n/**\n * A class that splits text into words and wraps them in span elements while preserving the original HTML structure.\n * @class\n */\nclass TextSplitter {\n /**\n * @param {HTMLElement|NodeList|String|Array<HTMLElement>} target\n * @param {TextSplitterParams} [parameters]\n */\n constructor(target, parameters = {}) {\n // Only init segmenters when needed\n if (!wordSegmenter) wordSegmenter = segmenter ? new segmenter([], { granularity: wordType }) : {\n segment: (text) => {\n const segments = [];\n const words = text.split(whiteSpaceGroupRgx);\n for (let i = 0, l = words.length; i < l; i++) {\n const segment = words[i];\n segments.push({\n segment,\n isWordLike: !whiteSpaceRgx.test(segment), // Consider non-whitespace as word-like\n });\n }\n return segments;\n }\n };\n if (!graphemeSegmenter) graphemeSegmenter = segmenter ? new segmenter([], { granularity: 'grapheme' }) : {\n segment: text => [...text].map(char => ({ segment: char }))\n };\n if (!$splitTemplate && isBrowser) $splitTemplate = doc.createElement('template');\n if (scope.current) scope.current.register(this);\n const { words, chars, lines, accessible, includeSpaces, debug } = parameters;\n const $target = /** @type {HTMLElement} */((target = isArr(target) ? target[0] : target) && /** @type {Node} */(target).nodeType ? target : (getNodeList(target) || [])[0]);\n const lineParams = lines === true ? {} : lines;\n const wordParams = words === true || isUnd(words) ? {} : words;\n const charParams = chars === true ? {} : chars;\n this.debug = setValue(debug, false);\n this.includeSpaces = setValue(includeSpaces, false);\n this.accessible = setValue(accessible, true);\n this.linesOnly = lineParams && (!wordParams && !charParams);\n /** @type {String|false|SplitFunctionValue} */\n this.lineTemplate = isObj(lineParams) ? generateTemplate(lineType, /** @type {splitTemplateParams} */(lineParams)) : lineParams;\n /** @type {String|false|SplitFunctionValue} */\n this.wordTemplate = isObj(wordParams) || this.linesOnly ? generateTemplate(wordType, /** @type {splitTemplateParams} */(wordParams)) : wordParams;\n /** @type {String|false|SplitFunctionValue} */\n this.charTemplate = isObj(charParams) ? generateTemplate(charType, /** @type {splitTemplateParams} */(charParams)) : charParams;\n this.$target = $target;\n this.html = $target && $target.innerHTML;\n this.lines = [];\n this.words = [];\n this.chars = [];\n this.effects = [];\n this.effectsCleanups = [];\n this.cache = null;\n this.ready = false;\n this.width = 0;\n this.resizeTimeout = null;\n const handleSplit = () => this.html && (lineParams || wordParams || charParams) && this.split();\n // Make sure this is declared before calling handleSplit() in case revert() is called inside an effect callback\n this.resizeObserver = new ResizeObserver(() => {\n // Use a setTimeout instead of a Timer for better tree shaking\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n const currentWidth = /** @type {HTMLElement} */($target).offsetWidth;\n if (currentWidth === this.width) return;\n this.width = currentWidth;\n handleSplit();\n }, 150);\n });\n // Only declare the font ready promise when splitting by lines and not alreay split\n if (this.lineTemplate && !this.ready) {\n doc.fonts.ready.then(handleSplit);\n } else {\n handleSplit();\n }\n $target ? this.resizeObserver.observe($target) : console.warn('No Text Splitter target found.');\n }\n\n /**\n * @param {(...args: any[]) => Tickable | (() => void)} effect\n * @return this\n */\n addEffect(effect) {\n if (!isFnc(effect)) return console.warn('Effect must return a function.');\n const refreshableEffect = createRefreshable(effect);\n this.effects.push(refreshableEffect);\n if (this.ready) this.effectsCleanups[this.effects.length - 1] = refreshableEffect(this);\n return this;\n }\n\n revert() {\n clearTimeout(this.resizeTimeout);\n this.lines.length = this.words.length = this.chars.length = 0;\n this.resizeObserver.disconnect();\n // Make sure to revert the effects after disconnecting the resizeObserver to avoid triggering it in the process\n this.effectsCleanups.forEach(cleanup => isFnc(cleanup) ? cleanup(this) : cleanup.revert && cleanup.revert());\n this.$target.innerHTML = this.html;\n return this;\n }\n\n /**\n * Recursively processes a node and its children\n * @param {Node} node\n */\n splitNode(node) {\n const wordTemplate = this.wordTemplate;\n const charTemplate = this.charTemplate;\n const includeSpaces = this.includeSpaces;\n const debug = this.debug;\n const nodeType = node.nodeType;\n if (nodeType === 3) {\n const nodeText = node.nodeValue;\n // If the nodeText is only whitespace, leave it as is\n if (nodeText.trim()) {\n const tempWords = [];\n const words = this.words;\n const chars = this.chars;\n const wordSegments = wordSegmenter.segment(nodeText);\n const $wordsFragment = doc.createDocumentFragment();\n let prevSeg = null;\n for (const wordSegment of wordSegments) {\n const segment = wordSegment.segment;\n const isWordLike = isSegmentWordLike(wordSegment);\n // Determine if this segment should be a new word, first segment always becomes a new word\n if (!prevSeg || (isWordLike && (prevSeg && (isSegmentWordLike(prevSeg))))) {\n tempWords.push(segment);\n } else {\n // Only concatenate if both current and previous are non-word-like and don't contain spaces\n const lastWordIndex = tempWords.length - 1;\n const lastWord = tempWords[lastWordIndex];\n if (!lastWord.includes(' ') && !segment.includes(' ')) {\n tempWords[lastWordIndex] += segment;\n } else {\n tempWords.push(segment);\n }\n }\n prevSeg = wordSegment;\n }\n\n for (let i = 0, l = tempWords.length; i < l; i++) {\n const word = tempWords[i];\n if (!word.trim()) {\n // Preserve whitespace only if includeSpaces is false and if the current space is not the first node\n if (i && includeSpaces) continue;\n $wordsFragment.appendChild(doc.createTextNode(word));\n } else {\n const nextWord = tempWords[i + 1];\n const hasWordFollowingSpace = includeSpaces && nextWord && !nextWord.trim();\n const wordToProcess = word;\n const charSegments = charTemplate ? graphemeSegmenter.segment(wordToProcess) : null;\n const $charsFragment = charTemplate ? doc.createDocumentFragment() : doc.createTextNode(hasWordFollowingSpace ? word + '\\xa0' : word);\n if (charTemplate) {\n const charSegmentsArray = [...charSegments];\n for (let j = 0, jl = charSegmentsArray.length; j < jl; j++) {\n const charSegment = charSegmentsArray[j];\n const isLastChar = j === jl - 1;\n // If this is the last character and includeSpaces is true with a following space, append the space\n const charText = isLastChar && hasWordFollowingSpace ? charSegment.segment + '\\xa0' : charSegment.segment;\n const $charNode = doc.createTextNode(charText);\n processHTMLTemplate(charTemplate, chars, $charNode, /** @type {DocumentFragment} */($charsFragment), charType, debug, -1, words.length, chars.length);\n }\n }\n if (wordTemplate) {\n processHTMLTemplate(wordTemplate, words, $charsFragment, $wordsFragment, wordType, debug, -1, words.length, chars.length);\n // Chars elements must be re-parsed in the split() method if both words and chars are parsed\n } else if (charTemplate) {\n $wordsFragment.appendChild($charsFragment);\n } else {\n $wordsFragment.appendChild(doc.createTextNode(word));\n }\n // Skip the next iteration if we included a space\n if (hasWordFollowingSpace) i++;\n }\n }\n node.parentNode.replaceChild($wordsFragment, node);\n }\n } else if (nodeType === 1) {\n // Converting to an array is necessary to work around childNodes pottential mutation\n const childNodes = /** @type {Array<Node>} */([.../** @type {*} */(node.childNodes)]);\n for (let i = 0, l = childNodes.length; i < l; i++) this.splitNode(childNodes[i]);\n }\n }\n\n /**\n * @param {Boolean} clearCache\n * @return {this}\n */\n split(clearCache = false) {\n const $el = this.$target;\n const isCached = !!this.cache && !clearCache;\n const lineTemplate = this.lineTemplate;\n const wordTemplate = this.wordTemplate;\n const charTemplate = this.charTemplate;\n const fontsReady = doc.fonts.status !== 'loading';\n const canSplitLines = lineTemplate && fontsReady;\n this.ready = !lineTemplate || fontsReady;\n if (canSplitLines || clearCache) {\n // No need to revert effects animations here since it's already taken care by the refreshable\n this.effectsCleanups.forEach(cleanup => isFnc(cleanup) && cleanup(this));\n }\n if (!isCached) {\n if (clearCache) {\n $el.innerHTML = this.html;\n this.words.length = this.chars.length = 0;\n }\n this.splitNode($el);\n this.cache = $el.innerHTML;\n }\n if (canSplitLines) {\n if (isCached) $el.innerHTML = this.cache;\n this.lines.length = 0;\n if (wordTemplate) this.words = getAllTopLevelElements($el, wordType);\n }\n // Always reparse characters after a line reset or if both words and chars are activated\n if (charTemplate && (canSplitLines || wordTemplate)) {\n this.chars = getAllTopLevelElements($el, charType);\n }\n // Words are used when lines only and prioritized over chars\n const elementsArray = this.words.length ? this.words : this.chars;\n let y, linesCount = 0;\n for (let i = 0, l = elementsArray.length; i < l; i++) {\n const $el = elementsArray[i];\n const { top, height } = $el.getBoundingClientRect();\n if (y && top - y > height * .5) linesCount++;\n $el.setAttribute(dataLine, `${linesCount}`);\n const nested = $el.querySelectorAll(`[${dataLine}]`);\n let c = nested.length;\n while (c--) nested[c].setAttribute(dataLine, `${linesCount}`);\n y = top;\n }\n if (canSplitLines) {\n const linesFragment = doc.createDocumentFragment();\n const parents = new Set();\n const clones = [];\n for (let lineIndex = 0; lineIndex < linesCount + 1; lineIndex++) {\n const $clone = /** @type {HTMLElement} */($el.cloneNode(true));\n filterLineElements($clone, lineIndex, new Set()).forEach($el => {\n const $parent = $el.parentElement;\n if ($parent) parents.add($parent);\n $el.remove();\n });\n clones.push($clone);\n }\n parents.forEach(filterEmptyElements);\n for (let cloneIndex = 0, clonesLength = clones.length; cloneIndex < clonesLength; cloneIndex++) {\n processHTMLTemplate(lineTemplate, this.lines, clones[cloneIndex], linesFragment, lineType, this.debug, cloneIndex);\n }\n $el.innerHTML = '';\n $el.appendChild(linesFragment);\n if (wordTemplate) this.words = getAllTopLevelElements($el, wordType);\n if (charTemplate) this.chars = getAllTopLevelElements($el, charType);\n }\n // Remove the word wrappers and clear the words array if lines split only\n if (this.linesOnly) {\n const words = this.words;\n let w = words.length;\n while (w--) {\n const $word = words[w];\n $word.replaceWith($word.textContent);\n }\n words.length = 0;\n }\n if (this.accessible && (canSplitLines || !isCached)) {\n const $accessible = doc.createElement('span');\n // Make the accessible element visually-hidden (https://www.scottohara.me/blog/2017/04/14/inclusively-hidden.html)\n $accessible.style.cssText = `position:absolute;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);width:1px;height:1px;white-space:nowrap;`;\n // $accessible.setAttribute('tabindex', '-1');\n $accessible.innerHTML = this.html;\n $el.insertBefore($accessible, $el.firstChild);\n this.lines.forEach(setAriaHidden);\n this.words.forEach(setAriaHidden);\n this.chars.forEach(setAriaHidden);\n }\n this.width = /** @type {HTMLElement} */($el).offsetWidth;\n if (canSplitLines || clearCache) {\n this.effects.forEach((effect, i) => this.effectsCleanups[i] = effect(this));\n }\n return this;\n }\n\n refresh() {\n this.split(true);\n }\n}\n\n/**\n * @param {HTMLElement|NodeList|String|Array<HTMLElement>} target\n * @param {TextSplitterParams} [parameters]\n * @return {TextSplitter}\n */\nconst split = (target, parameters) => new TextSplitter(target, parameters);\n\nconst text = {\n split,\n};\n\n\n\n\n/**\n * @overload\n * @param {Number} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<Number>}\n */\n/**\n * @overload\n * @param {String} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<String>}\n */\n/**\n * @overload\n * @param {[Number, Number]} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<Number>}\n */\n/**\n * @overload\n * @param {[String, String]} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<String>}\n */\n/**\n * @param {Number|String|[Number, Number]|[String, String]} val The staggered value or range\n * @param {StaggerParams} [params] The stagger parameters\n * @return {StaggerFunction<Number|String>}\n */\nconst stagger = (val, params = {}) => {\n let values = [];\n let maxValue = 0;\n const from = params.from;\n const reversed = params.reversed;\n const ease = params.ease;\n const hasEasing = !isUnd(ease);\n const hasSpring = hasEasing && !isUnd(/** @type {Spring} */(ease).ease);\n const staggerEase = hasSpring ? /** @type {Spring} */(ease).ease : hasEasing ? parseEasings(ease) : null;\n const grid = params.grid;\n const axis = params.axis;\n const customTotal = params.total;\n const fromFirst = isUnd(from) || from === 0 || from === 'first';\n const fromCenter = from === 'center';\n const fromLast = from === 'last';\n const fromRandom = from === 'random';\n const isRange = isArr(val);\n const useProp = params.use;\n const val1 = isRange ? parseNumber(val[0]) : parseNumber(val);\n const val2 = isRange ? parseNumber(val[1]) : 0;\n const unitMatch = unitsExecRgx.exec((isRange ? val[1] : val) + emptyString);\n const start = params.start || 0 + (isRange ? val1 : 0);\n let fromIndex = fromFirst ? 0 : isNum(from) ? from : 0;\n return (target, i, t, tl) => {\n const [ registeredTarget ] = registerTargets(target);\n const total = isUnd(customTotal) ? t : customTotal;\n const customIndex = !isUnd(useProp) ? isFnc(useProp) ? useProp(registeredTarget, i, total) : getOriginalAnimatableValue(registeredTarget, useProp) : false;\n const staggerIndex = isNum(customIndex) || isStr(customIndex) && isNum(+customIndex) ? +customIndex : i;\n if (fromCenter) fromIndex = (total - 1) / 2;\n if (fromLast) fromIndex = total - 1;\n if (!values.length) {\n for (let index = 0; index < total; index++) {\n if (!grid) {\n values.push(abs(fromIndex - index));\n } else {\n const fromX = !fromCenter ? fromIndex % grid[0] : (grid[0] - 1) / 2;\n const fromY = !fromCenter ? floor(fromIndex / grid[0]) : (grid[1] - 1) / 2;\n const toX = index % grid[0];\n const toY = floor(index / grid[0]);\n const distanceX = fromX - toX;\n const distanceY = fromY - toY;\n let value = sqrt(distanceX * distanceX + distanceY * distanceY);\n if (axis === 'x') value = -distanceX;\n if (axis === 'y') value = -distanceY;\n values.push(value);\n }\n maxValue = max(...values);\n }\n if (staggerEase) values = values.map(val => staggerEase(val / maxValue) * maxValue);\n if (reversed) values = values.map(val => axis ? (val < 0) ? val * -1 : -val : abs(maxValue - val));\n if (fromRandom) values = shuffle(values);\n }\n const spacing = isRange ? (val2 - val1) / maxValue : val1;\n const offset = tl ? parseTimelinePosition(tl, isUnd(params.start) ? tl.iterationDuration : start) : /** @type {Number} */(start);\n /** @type {String|Number} */\n let output = offset + ((spacing * round(values[staggerIndex], 2)) || 0);\n if (params.modifier) output = params.modifier(output);\n if (unitMatch) output = `${output}${unitMatch[2]}`;\n return output;\n }\n};\n\nexport { Animatable, Draggable, JSAnimation, Scope, ScrollObserver, Spring, TextSplitter, Timeline, Timer, WAAPIAnimation, animate, createAnimatable, createDraggable, createScope, createSpring, createTimeline, createTimer, eases, engine, onScroll, scrollContainers, stagger, svg, text, utils, waapi };\n","import { animate, stagger, text } from \"animejs\";\n\nexport class Animation {\n animations: {[name: string]: (el: HTMLElement, params: Record<string, any>, onComplete: () => void, loop: boolean) => void} = {};\n linkAnimations = new Map<HTMLElement, () => void>();\n\n registerAnimation(name: string, handler: (el: HTMLElement, params: Record<string, any>, onComplete: () => void, loop: boolean) => void) {\n this.animations[name] = handler;\n }\n\n runAnimation(name: string, el: HTMLElement, params: Record<string, any>, onComplete: () => void, loop: boolean) {\n const animation = this.animations[name];\n if (animation) {\n animation(el, params, onComplete, loop);\n } else {\n console.warn(`No animation registered with name: ${name}`);\n onComplete();\n }\n }\n\n addLinkAnimation(link: HTMLElement, fn: () => void) {\n this.linkAnimations.set(link, fn);\n }\n\n runLinkAnimation(link: HTMLElement) {\n const fn = this.linkAnimations.get(link);\n if (fn) {\n fn();\n }\n }\n\n constructor() {\n this.registerAnimation(\"typewriter\", function(el, params, onComplete, loop) {\n const { chars } = text.split(el, { words: false, chars: true });\n\n const fadeDuration = params.fadeDuration || 100; // ms fade-in per character\n const interval = params.interval || 100; // ms between each character appearing\n\n animate(chars, {\n opacity: [0, 1],\n easing: \"linear\",\n duration: fadeDuration,\n delay: stagger(interval, { start: params.start || 0 }),\n loop: loop,\n onComplete: onComplete\n });\n });\n\n this.registerAnimation(\"toast\", function(el, params, onComplete, loop) {\n const { words } = text.split(el, { words: true, chars: false });\n\n const fadeDuration = params.fadeDuration || 100; // ms fade-in per word\n const interval = params.interval || 200; // ms between each word appearing\n\n animate(words, {\n opacity: [0, 1],\n y: [\n { to: [\"100%\", \"0%\"] },\n ],\n easing: \"linear\",\n duration: fadeDuration,\n delay: stagger(interval, { start: params.start || 0 }),\n loop: loop,\n onComplete: onComplete\n });\n });\n }\n}","import * as animejs from \"animejs\";\n\nexport const imports = {\n animejs\n};","import { SquiffyApi, SquiffyInitOptions, Story, Section, Passage } from \"./types.js\";\nimport { TextProcessor } from \"./textProcessor.js\";\nimport { Emitter, SquiffyEventMap } from \"./events.js\";\nimport { State } from \"./state.js\";\nimport { updateStory } from \"./updater.js\";\nimport { PluginManager } from \"./pluginManager.js\";\nimport { Plugins } from \"./plugins/index.js\";\nimport { LinkHandler } from \"./linkHandler.js\";\nimport { Animation } from \"./animation.js\";\nimport { imports } from \"./import.js\";\n\nexport type { SquiffyApi } from \"./types.js\";\n\nexport const init = async (options: SquiffyInitOptions): Promise<SquiffyApi> => {\n let story: Story;\n let currentSection: Section;\n let currentSectionElement: HTMLElement;\n let currentPassageElement: HTMLElement;\n let currentBlockOutputElement: HTMLElement;\n let scrollPosition = 0;\n const emitter = new Emitter<SquiffyEventMap>();\n const transitions: (() => Promise<void>)[] = [];\n let runningTransitions = false;\n \n async function handleLink(link: HTMLElement): Promise<boolean> {\n if (runningTransitions) return false;\n const outputSection = link.closest(\".squiffy-output-section\");\n if (outputSection !== currentSectionElement) return false;\n\n if (link.classList.contains(\"disabled\")) return false;\n\n const passage = link.getAttribute(\"data-passage\");\n const section = link.getAttribute(\"data-section\");\n\n if (passage !== null) {\n disableLink(link);\n set(\"_turncount\", get(\"_turncount\") + 1);\n await processLink(link);\n if (passage) {\n currentBlockOutputElement = null;\n await showPassage(passage);\n }\n const turnPassage = \"@\" + get(\"_turncount\");\n if (currentSection.passages) {\n if (turnPassage in currentSection.passages) {\n await showPassage(turnPassage);\n }\n if (\"@last\" in currentSection.passages && get(\"_turncount\") >= (currentSection.passageCount || 0)) {\n await showPassage(\"@last\");\n }\n }\n\n emitter.emit(\"linkClick\", { linkType: \"passage\" });\n return true;\n }\n \n if (section !== null) {\n await processLink(link);\n if (section) {\n await go(section);\n }\n\n emitter.emit(\"linkClick\", { linkType: \"section\" });\n return true;\n }\n\n const [handled, type, result] = linkHandler.handleLink(link);\n \n if (handled) {\n if (result?.disableLink) {\n disableLink(link);\n }\n\n save();\n\n emitter.emit(\"linkClick\", { linkType: type });\n return true;\n }\n\n return false;\n }\n\n async function handleClick(event: Event) {\n const target = event.target as HTMLElement;\n if (target.classList.contains(\"squiffy-link\")) {\n await handleLink(target);\n }\n }\n \n function disableLink(link: Element) {\n link.classList.add(\"disabled\");\n link.setAttribute(\"tabindex\", \"-1\");\n }\n\n function enableLink(link: Element) {\n link.classList.remove(\"disabled\");\n link.removeAttribute(\"tabindex\");\n }\n \n async function begin() {\n if (!load()) {\n await go(story.start);\n }\n }\n \n async function processLink(link: HTMLElement) {\n animation.runLinkAnimation(link);\n await runTransitions();\n const settersJson = link.getAttribute(\"data-set\");\n if (settersJson) {\n const setters = JSON.parse(settersJson) as string[];\n for (const attribute of setters) {\n setAttribute(attribute);\n }\n }\n }\n \n function setAttribute(expr: string) {\n expr = expr.replace(/^(\\w*\\s*):=(.*)$/, (_, name, value) => (name + \"=\" + ui.processText(value, true)));\n const setRegex = /^([\\w]*)\\s*=\\s*(.*)$/;\n const setMatch = setRegex.exec(expr);\n if (setMatch) {\n const lhs = setMatch[1];\n let rhs = setMatch[2];\n if (isNaN(rhs as any)) {\n if (rhs.startsWith(\"@\")) rhs = get(rhs.substring(1));\n set(lhs, rhs);\n }\n else {\n set(lhs, parseFloat(rhs));\n }\n }\n else {\n const incDecRegex = /^([\\w]*)\\s*([+\\-*/])=\\s*(.*)$/;\n const incDecMatch = incDecRegex.exec(expr);\n if (incDecMatch) {\n const lhs = incDecMatch[1];\n const op = incDecMatch[2];\n let rhs = incDecMatch[3];\n if (rhs.startsWith(\"@\")) rhs = get(rhs.substring(1));\n const rhsNumeric = parseFloat(rhs);\n let value = get(lhs);\n if (value === null) value = 0;\n if (op == \"+\") {\n value += rhsNumeric;\n }\n if (op == \"-\") {\n value -= rhsNumeric;\n }\n if (op == \"*\") {\n value *= rhsNumeric;\n }\n if (op == \"/\") {\n value /= rhsNumeric;\n }\n set(lhs, value);\n }\n else {\n let value = true;\n if (expr.startsWith(\"not \")) {\n expr = expr.substring(4);\n value = false;\n }\n set(expr, value);\n }\n }\n }\n\n async function go(sectionName: string) {\n const oldCanGoBack = canGoBack();\n newSection(sectionName);\n currentSection = story.sections[sectionName];\n if (!currentSection) return;\n set(\"_section\", sectionName);\n state.setSeen(sectionName);\n const master = story.sections[\"\"];\n if (master?.clear || currentSection.clear) {\n clearScreen();\n }\n if (master) {\n await run(master, \"[[]]\");\n }\n await run(currentSection, `[[${sectionName}]]`);\n // The JS might have changed which section we're in\n if (get(\"_section\") == sectionName) {\n set(\"_turncount\", 0);\n writeUndoLog();\n save();\n }\n const newCanGoBack = canGoBack();\n if (newCanGoBack != oldCanGoBack) {\n emitter.emit(\"canGoBackChanged\", { canGoBack: newCanGoBack });\n }\n }\n\n function runJs(index: number, extra: any = null) {\n const squiffy = {\n get: get,\n set: set,\n ui: {\n transition: addTransition,\n write: ui.write,\n scrollToEnd: ui.scrollToEnd,\n },\n story: {\n go: go,\n },\n element: outputElementContainer,\n import: imports,\n ...extra\n };\n story.js[index](squiffy, get, set);\n }\n \n async function run(section: Section, source: string) {\n if (section.attributes) {\n await processAttributes(section.attributes);\n }\n if (section.jsIndex !== undefined) {\n runJs(section.jsIndex);\n }\n\n ui.write(section.text || \"\", source);\n\n await runTransitions();\n }\n\n async function runTransitions() {\n runningTransitions = true;\n currentSectionElement.classList.add(\"links-disabled\");\n for (const transition of transitions) {\n await transition();\n }\n transitions.length = 0;\n runningTransitions = false;\n currentSectionElement.classList.remove(\"links-disabled\");\n }\n \n async function showPassage(passageName: string) {\n const oldCanGoBack = canGoBack();\n let passage = currentSection.passages && currentSection.passages[passageName];\n const masterSection = story.sections[\"\"];\n if (!passage && masterSection && masterSection.passages) passage = masterSection.passages[passageName];\n if (!passage) {\n throw `No passage named ${passageName} in the current section or master section`;\n }\n state.setSeen(passageName);\n\n const passages: Passage[] = [];\n const runFns: (() => Promise<void>)[] = [];\n\n if (masterSection && masterSection.passages) {\n const masterPassage = masterSection.passages[\"\"];\n if (masterPassage) {\n passages.push(masterPassage);\n runFns.push(() => run(masterPassage, \"[[]][]\"));\n }\n }\n\n const master = currentSection.passages && currentSection.passages[\"\"];\n if (master) {\n passages.push(master);\n runFns.push(() => run(master, `[[${get(\"_section\")}]][]`));\n }\n\n passages.push(passage);\n runFns.push(() => run(passage, `[[${get(\"_section\")}]][${passageName}]`));\n\n if (passages.some(p => p.clear)) {\n clearScreen();\n createSectionElement();\n }\n\n currentPassageElement = document.createElement(\"div\");\n currentPassageElement.classList.add(\"squiffy-output-passage\");\n currentPassageElement.setAttribute(\"data-passage\", `${passageName}`);\n\n currentSectionElement.appendChild(currentPassageElement);\n currentBlockOutputElement = null;\n\n for (const fn of runFns) {\n await fn();\n }\n\n writeUndoLog();\n save();\n const newCanGoBack = canGoBack();\n if (newCanGoBack != oldCanGoBack) {\n emitter.emit(\"canGoBackChanged\", { canGoBack: newCanGoBack });\n }\n }\n \n async function processAttributes(attributes: string[]) {\n for (const attribute of attributes) {\n setAttribute(attribute);\n }\n }\n \n function restart() {\n state.reset();\n // TODO: This feels like the wrong way of triggering location.reload()\n // - should be a separate setting to the scroll setting.\n if (settings.scroll === \"element\" || settings.scroll === \"none\") {\n outputElement.innerHTML = \"\";\n begin();\n }\n else {\n location.reload();\n }\n }\n \n function save() {\n // TODO: Queue up all attribute changes and save them only when this is called\n set(\"_output\", outputElement.innerHTML);\n }\n \n function load() {\n const runUiJs = () => {\n if (story.uiJsIndex !== undefined) {\n runJs(story.uiJsIndex, {\n registerAnimation: animation.registerAnimation.bind(animation),\n });\n }\n };\n\n state.load();\n const output = get(\"_output\");\n if (!output) {\n runUiJs();\n return false;\n }\n\n outputElement.innerHTML = output;\n\n setCurrentSectionElement();\n setCurrentPassageElement();\n currentBlockOutputElement = outputElement.querySelector(\".squiffy-output-block:last-child\");\n\n currentSection = story.sections[get(\"_section\")];\n runUiJs();\n pluginManager.onLoad();\n return true;\n }\n\n function newBlockOutputElement() {\n currentBlockOutputElement = document.createElement(\"div\");\n currentBlockOutputElement.classList.add(\"squiffy-output-block\");\n (currentPassageElement || currentSectionElement)?.appendChild(currentBlockOutputElement);\n }\n \n function newSection(sectionName?: string) {\n if (currentSectionElement) {\n currentSectionElement.querySelectorAll(\"input\").forEach(el => {\n const attribute = el.getAttribute(\"data-attribute\") || el.id;\n if (attribute) set(attribute, el.value);\n el.disabled = true;\n });\n \n currentSectionElement.querySelectorAll(\"[contenteditable]\").forEach(el => {\n const attribute = el.getAttribute(\"data-attribute\") || el.id;\n if (attribute) set(attribute, el.innerHTML);\n (el as HTMLElement).contentEditable = \"false\";\n });\n \n currentSectionElement.querySelectorAll(\"textarea\").forEach(el => {\n const attribute = el.getAttribute(\"data-attribute\") || el.id;\n if (attribute) set(attribute, el.value);\n el.disabled = true;\n });\n }\n\n currentPassageElement = null;\n createSectionElement(sectionName);\n newBlockOutputElement();\n }\n\n function createSectionElement(sectionName?: string) {\n currentSectionElement = document.createElement(\"div\");\n currentSectionElement.classList.add(\"squiffy-output-section\");\n currentSectionElement.setAttribute(\"data-section\", sectionName ?? get(\"_section\"));\n if (!sectionName) {\n currentSectionElement.setAttribute(\"data-clear\", \"true\");\n }\n outputElement.appendChild(currentSectionElement);\n }\n\n function getClearStack() {\n return outputElement.querySelector<HTMLElement>(\".squiffy-clear-stack\");\n }\n\n function clearScreen() {\n // Callers should call createSectionElement() after calling this function, so there's a place for new\n // output to go. We don't call this automatically within this function, in case we're just about to create\n // a new section anyway.\n let clearStack = getClearStack();\n if (!clearStack) {\n clearStack = document.createElement(\"div\");\n clearStack.classList.add(\"squiffy-clear-stack\");\n clearStack.style.display = \"none\";\n outputElement.prepend(clearStack);\n }\n\n const clearStackItem = document.createElement(\"div\");\n clearStack.appendChild(clearStackItem);\n\n // Move everything in the outputElement (except the clearStack itself) into the new clearStackItem\n for (const child of [...outputElement.children]) {\n if (child !== clearStack) {\n clearStackItem.appendChild(child);\n }\n }\n\n // NOTE: If we offer an option to disable the \"back\" feature, all of the above can be replaced with:\n // outputElement.innerHTML = '';\n }\n\n function unClearScreen() {\n const clearStack = getClearStack();\n for (const child of [...outputElement.children]) {\n if (child !== clearStack) {\n child.remove();\n }\n }\n\n const clearStackItem = clearStack.children[clearStack.children.length - 1];\n for (const child of [...clearStackItem.children]) {\n outputElement.appendChild(child);\n }\n clearStackItem.remove();\n }\n \n const ui = {\n write: (text: string, source: string) => {\n scrollPosition = outputElement.scrollHeight;\n\n const html = ui.processText(text, false).trim();\n\n // Previously, we skipped the rest of this if \"html\" came back as an empty string.\n // But, we _do_ always want the block to be created, in the editor at least - as the\n // author might be in the middle of an edit. When they start writing text for this\n // source (section or passage), we want it to appear in the right place.\n // TODO: What if this comes from a master section/passage though, and there's no\n // text (just a script)? Or if there's conditional text that doesn't display?\n\n if (!currentBlockOutputElement) {\n newBlockOutputElement();\n }\n\n const div = document.createElement(\"div\");\n if (source) {\n div.setAttribute(\"data-source\", source);\n }\n\n div.innerHTML = html;\n pluginManager.onWrite(div);\n currentBlockOutputElement.appendChild(div);\n ui.scrollToEnd();\n },\n clearScreen: () => {\n clearScreen();\n createSectionElement();\n },\n scrollToEnd: () => {\n if (settings.scroll === \"none\") {\n // do nothing\n }\n else if (settings.scroll === \"element\") {\n outputElement.lastElementChild.scrollIntoView({ block: \"end\", inline: \"nearest\", behavior: \"smooth\" });\n }\n else {\n let scrollTo = scrollPosition;\n const currentScrollTop = Math.max(document.body.scrollTop, document.documentElement.scrollTop);\n if (scrollTo > currentScrollTop) {\n const maxScrollTop = document.documentElement.scrollHeight - window.innerHeight;\n if (scrollTo > maxScrollTop) scrollTo = maxScrollTop;\n window.scrollTo({ top: scrollTo, behavior: \"smooth\" });\n }\n }\n },\n processText: (text: string, inline: boolean) => {\n return textProcessor.process(text, inline);\n },\n };\n\n function update(newStory: Story) {\n if (newStory.start != story.start) {\n story = newStory;\n state.reset();\n outputElement.innerHTML = \"\";\n go(story.start);\n return;\n }\n\n updateStory(story, newStory, outputElement, ui, disableLink);\n\n story = newStory;\n\n setCurrentSectionElement();\n setCurrentPassageElement();\n }\n\n function setCurrentSectionElement() {\n // Multiple .squiffy-output-section elements may be \"last-child\" if some have been moved to the clear-stack,\n // so we want the very last one\n const allSectionElements = outputElement.querySelectorAll<HTMLElement>(\".squiffy-output-section:last-child\");\n currentSectionElement = allSectionElements[allSectionElements.length - 1];\n const sectionName = currentSectionElement.getAttribute(\"data-section\");\n currentSection = story.sections[sectionName];\n }\n\n function setCurrentPassageElement() {\n currentPassageElement = currentSectionElement.querySelector(\".squiffy-output-passage:last-child\");\n }\n\n function getHistoryCount() {\n const clearStack = getClearStack();\n const sectionPassageCount = outputElement.querySelectorAll(\".squiffy-output-section\").length\n + outputElement.querySelectorAll(\".squiffy-output-passage\").length;\n\n if (!clearStack) {\n return sectionPassageCount;\n }\n\n return sectionPassageCount + clearStack.children.length;\n }\n\n function canGoBack() {\n return getHistoryCount() > 1;\n }\n\n function goBack() {\n if (!canGoBack()) {\n return;\n }\n\n const clearStack = getClearStack();\n\n if (currentPassageElement) {\n const currentPassage = currentPassageElement.getAttribute(\"data-passage\");\n doUndo(currentPassageElement.getAttribute(\"data-undo\"));\n currentPassageElement.remove();\n\n // If there's nothing left in the outputElement except for an empty section element that\n // was created when the screen was cleared, pop the clear-stack.\n\n let hasEmptySection = false;\n let hasOtherElements = false;\n for (const child of outputElement.children) {\n if (child === clearStack) {\n continue;\n }\n if (child.getAttribute(\"data-clear\") == \"true\" && child.children.length == 0) {\n hasEmptySection = true;\n continue;\n }\n hasOtherElements = true;\n break;\n }\n\n if (hasEmptySection && !hasOtherElements) {\n unClearScreen();\n setCurrentSectionElement();\n }\n\n for (const link of currentSectionElement.querySelectorAll(\"a.squiffy-link[data-passage]\")) {\n if (link.getAttribute(\"data-passage\") == currentPassage) {\n enableLink(link);\n }\n }\n\n setCurrentPassageElement();\n }\n else {\n doUndo(currentSectionElement.getAttribute(\"data-undo\"));\n currentSectionElement.remove();\n\n // If there's nothing left in the outputElement except for the clear-stack, pop it\n let hasOtherElements = false;\n for (const child of [...outputElement.children]) {\n if (child === clearStack) {\n continue;\n }\n hasOtherElements = true;\n break;\n }\n\n if (!hasOtherElements) {\n unClearScreen();\n }\n\n setCurrentSectionElement();\n setCurrentPassageElement();\n }\n\n if (!canGoBack()) {\n emitter.emit(\"canGoBackChanged\", { canGoBack: false });\n }\n }\n\n // We create a separate div inside the passed-in element. This allows us to clear the text output, but\n // without affecting any overlays that may have been added to the container (for transitions).\n const outputElementContainer = options.element;\n const outputElement = document.createElement(\"div\");\n outputElementContainer.appendChild(outputElement);\n story = options.story;\n\n const settings = {\n scroll: options.scroll || \"body\",\n persist: (options.persist === undefined) ? true : options.persist,\n onSet: options.onSet || (() => {})\n };\n\n if (options.persist === true && !story.id) {\n console.warn(\"Persist is set to true in Squiffy runtime options, but no story id has been set. Persist will be disabled.\");\n settings.persist = false;\n }\n\n if (settings.scroll === \"element\") {\n outputElement.style.overflowY = \"auto\";\n }\n\n outputElement.addEventListener(\"click\", handleClick);\n outputElement.addEventListener(\"keypress\", async function (event) {\n if (event.key !== \"Enter\") return;\n await handleClick(event);\n });\n\n let undoLog: Record<string, any> = {};\n\n const onSet = function(attribute: string, oldValue: any) {\n if (attribute == \"_output\") return;\n if (attribute in undoLog) return;\n undoLog[attribute] = oldValue;\n };\n\n const writeUndoLog = function() {\n (currentPassageElement ?? currentSectionElement).setAttribute(\"data-undo\", JSON.stringify(undoLog));\n undoLog = {};\n };\n\n const doUndo = function(undosJson: string | null) {\n if (!undosJson) return;\n const undos = JSON.parse(undosJson) as Record<string, any>;\n if (!undos) return;\n for (const attribute of Object.keys(undos)) {\n state.setInternal(attribute, undos[attribute], false);\n }\n };\n\n const state = new State(settings.persist, story.id || \"\", settings.onSet, emitter, onSet);\n const get = state.get.bind(state);\n const set = state.set.bind(state);\n\n const textProcessor = new TextProcessor(story, state, () => currentSection);\n const linkHandler = new LinkHandler();\n\n const getSectionText = (sectionName: string) => {\n if (sectionName in story.sections) {\n return story.sections[sectionName].text || null;\n }\n return null;\n };\n\n const getPassageText = (name: string) => {\n if (currentSection.passages && name in currentSection.passages) {\n return currentSection.passages[name].text || null;\n } else if (\"passages\" in story.sections[\"\"] && story.sections[\"\"].passages && name in story.sections[\"\"].passages) {\n return story.sections[\"\"].passages![name].text || null;\n }\n return null;\n };\n\n const addTransition = (fn: () => Promise<void>) => {\n transitions.push(fn);\n };\n\n const animation = new Animation();\n\n const pluginManager = new PluginManager(outputElement, textProcessor, state, linkHandler,\n getSectionText, getPassageText, ui.processText, addTransition, animation, emitter);\n pluginManager.add(Plugins.ReplaceLabel());\n pluginManager.add(Plugins.RotateSequencePlugin());\n pluginManager.add(Plugins.RandomPlugin());\n pluginManager.add(Plugins.LivePlugin());\n pluginManager.add(Plugins.AnimatePlugin());\n\n return {\n begin: begin,\n restart: restart,\n get: get,\n set: set,\n clickLink: handleLink,\n update: update,\n goBack: goBack,\n on: (e, h) => emitter.on(e, h),\n off: (e, h) => emitter.off(e, h),\n once: (e, h) => emitter.once(e, h),\n };\n};"],"names":["L","O","G","l","E","h","s","m","xe","be","Re","C","Oe","j","se","ie","Te","F","we","Q","ye","Pe","v","U","Se","oe","$e","K","re","_e","Le","Me","ze","ae","Ae","D","W","le","Ee","ue","Ce","Ie","Be","pe","qe","ve","ce","De","He","Ze","Ge","Ne","je","Fe","q","Qe","he","de","Ue","X","Ke","N","We","I","M","Xe","ke","w","J","V","o","a","u","z","ge","fe","Je","y","e","__publicField","t","n","r","i","c","f","k","x","g","T","H","ee","te","ne","me","Z","A","Y","p","b","P","$","R","S","_a","B","_","d","Nt","jt","utils","extend","indexOf","escapeExpression","isEmpty","createFrame","blockParams","appendContextPath","escape","badChars","possible","escapeChar","chr","obj","key","toString","isFunction","value","isArray","array","len","string","object","frame","params","ids","contextPath","id","exports","errorProps","Exception","message","node","loc","line","endLineNumber","column","endColumn","tmp","idx","module","_utils","require$$0","instance","context","options","inverse","fn","data","_interopRequireDefault","_exception","require$$1","_exception2","ret","execIteration","field","index","last","newContext","iterator","it","priorKey","conditional","args","level","helpers","registerDefaultHelpers","moveHelperToHooks","_helpersBlockHelperMissing","_helpersBlockHelperMissing2","_helpersEach","_helpersEach2","_helpersHelperMissing","require$$2","_helpersHelperMissing2","_helpersIf","require$$3","_helpersIf2","_helpersLog","require$$4","_helpersLog2","_helpersLookup","require$$5","_helpersLookup2","_helpersWith","require$$6","_helpersWith2","helperName","keepHelper","props","container","original","decorators","registerDefaultDecorators","_decoratorsInline","_decoratorsInline2","logger","levelMap","method","_len","_key","createNewLookupObject_1","createNewLookupObject","sources","protoAccess","createProtoAccessControl","resultIsAllowed","resetLoggedProperties","_createNewLookupObject","_logger","_logger2","loggedProperties","runtimeOptions","defaultMethodWhiteList","defaultPropertyWhiteList","result","protoAccessControl","propertyName","checkWhiteList","protoAccessControlForType","logUnexpecedPropertyAccessOnce","base","HandlebarsEnvironment","_helpers","_decorators","_internalProtoAccess","VERSION","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","objectType","partials","name","partial","log","SafeString","wrapHelper_1","wrapHelper","helper","transformOptionsFn","wrapper","runtime","checkRevision","template","wrapProgram","resolvePartial","invokePartial","noop","_interopRequireWildcard","newObj","Utils","_base","_internalWrapHelper","compilerInfo","compilerRevision","currentRevision","runtimeVersions","compilerVersions","templateSpec","env","templateWasPrecompiledWithCompilerV7","invokePartialWrapper","extendedOptions","lines","parent","depths","current","declaredBlockParams","programWrapper","depth","param","common","initData","main","executeDecorators","mergedHelpers","wrapHelpersToPassLookupProperty","keepHelperInHelpers","prog","currentDepths","currentPartialBlock","partialBlock","passLookupPropertyOption","lookupProperty","Handlebars","$Handlebars","_handlebarsBase","_handlebarsSafeString","_handlebarsSafeString2","_handlebarsException","_handlebarsException2","_handlebarsUtils","_handlebarsRuntime","_handlebarsNoConflict","_handlebarsNoConflict2","create","hb","spec","inst","AST","path","handlebars","parser","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","program","str","hash","input","self","stack","vstack","lstack","table","yyloc","ranges","lex","token","symbol","state","action","yyval","newState","expected","errStr","lexer","ch","oldLines","past","next","pre","match","tempMatch","rules","condition","yy_","$avoiding_name_collisions","YY_START","strip","start","end","Parser","Visitor","visitSubExpression","visitBlock","visitPartial","pair","mustache","block","_visitor","_visitor2","WhitespaceControl","doStandalone","isRoot","body","_isPrevWhitespace","isPrevWhitespace","_isNextWhitespace","isNextWhitespace","openStandalone","closeStandalone","inlineStandalone","omitRight","omitLeft","firstInverse","lastInverse","inverseStrip","prev","sibling","multiple","SourceLocation","stripFlags","stripComment","preparePath","prepareMustache","prepareRawBlock","prepareBlock","prepareProgram","preparePartialBlock","validateClose","open","close","errorNode","source","locInfo","comment","parts","dig","part","isLiteral","escapeFlag","escaped","decorator","openRawBlock","contents","openBlock","inverseAndProgram","inverted","statements","firstLoc","lastLoc","parseWithoutProcessing","parse","_parser","_parser2","_whitespaceControl","_whitespaceControl2","Helpers","ast","compiler","Compiler","precompile","compile","_ast","_ast2","slice","other","opcode","otherOpcode","argEquals","childCompiler","guid","bodyLength","transformLiteralToPath","type","partialName","isDynamic","indent","content","sexpr","isBlock","scoped","blockParamId","number","bool","pairs","isSimple","isBlockParam","isHelper","isEligible","_name","val","blockParamIndex","blockParamChild","omitEmpty","environment","compiled","compileInput","execOptions","setupOptions","literal","intToCharMap","base64","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","base64Vlq","encoded","digit","vlq","aStr","aIndex","aOutParam","strLen","shift","continuation","getArg","aArgs","aName","aDefaultValue","urlRegexp","dataUrlRegexp","urlParse","aUrl","urlGenerate","aParsedUrl","url","normalize","aPath","isAbsolute","up","join","aRoot","aPathUrl","aRootUrl","joined","relative","supportsNullProto","identity","toSetString","isProtoString","fromSetString","length","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","strcmp","compareByGeneratedPositionsDeflated","onlyCompareGenerated","aStr1","aStr2","compareByGeneratedPositionsInflated","parseSourceMapInput","computeSourceURL","sourceRoot","sourceURL","sourceMapURL","parsed","util","has","hasNativeMap","ArraySet","aArray","aAllowDuplicates","set","sStr","isDuplicate","aIdx","arraySet","generatedPositionAfter","lineA","lineB","columnA","columnB","MappingList","aCallback","aThisArg","aMapping","mappingList","base64VLQ","SourceMapGenerator","aSourceMapConsumer","generator","mapping","newMapping","sourceFile","sourceRelative","generated","aSourceFile","aSourceContent","aSourceMapPath","newSources","newNames","aGenerated","aOriginal","aSource","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","nameIdx","sourceIdx","mappings","aSources","aSourceRoot","map","sourceMapGenerator","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","mid","swap","ary","temp","randomIntInRange","low","high","doQuickSort","comparator","pivotIndex","pivot","quickSort","binarySearch","SourceMapConsumer","aSourceMap","aSourceMapURL","sourceMap","IndexedSourceMapConsumer","BasicSourceMapConsumer","aContext","aOrder","order","needle","originalLine","originalColumn","sourceMapConsumer","version","names","sourcesContent","file","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","Mapping","generatedLine","cachedSegments","originalMappings","segment","aMappings","aLineName","aColumnName","aComparator","nextMapping","sc","nullOnMissing","fileUriAbsPath","sections","lastOffset","offset","offsetLine","offsetColumn","sectionIndex","section","generatedPosition","sectionMappings","adjustedMapping","REGEX_NEWLINE","NEWLINE_CODE","isSourceNode","SourceNode","aLine","aColumn","aChunks","aGeneratedCode","aRelativePath","remainingLines","remainingLinesIndex","shiftNextLine","lineContents","getNextLine","newLine","lastGeneratedLine","lastGeneratedColumn","lastMapping","addMappingWithCode","nextLine","code","aChunk","chunk","aFn","aSep","newChildren","aPattern","aReplacement","lastChild","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent","sourceNode","SourceMap","srcFile","chunks","castChunk","codeGen","CodeGen","iter","_this","entries","_codeGen","_codeGen2","Literal","JavaScriptCompiler","revision","versions","location","explicit","asObject","opcodes","_context","programs","varDeclarations","locals","aliasCount","alias","appendOnly","appendFirst","sourceSeen","bufferStart","bufferEnd","blockHelperMissing","blockName","local","falsy","strict","_this2","strictLookup","lookup","paramSize","foundDecorator","nonHelper","possibleFunctionCalls","functionLookupCode","functionCall","items","separator","helperCall","child","children","existing","programParams","expr","item","callback","prefix","createdStack","usedLiteral","top","inlineStack","entry","wrapped","inline","blockHelper","paramsInit","foundHelper","callContext","contexts","types","objectArgs","useRegister","reservedWords","compilerWords","requireTerminal","_handlebarsRuntime2","_handlebarsCompilerAst","_handlebarsCompilerAst2","_handlebarsCompilerBase","_handlebarsCompilerCompiler","_handlebarsCompilerJavascriptCompiler","_handlebarsCompilerJavascriptCompiler2","_handlebarsCompilerVisitor","_handlebarsCompilerVisitor2","_create","TextProcessor","story","currentSection","attribute","addAdditionalParameters","setters","text","passage","marked.parseInline","marked.parse","Emitter","event","handler","off","payload","err","State","persist","storyId","onSet","emitter","onSetInternal","raiseEvents","keys","sectionName","seenSections","updateStory","oldStory","newStory","outputElement","ui","disableLink","safeQuerySelector","getSectionContent","getPassageContent","updateElementTextPreservingDisabledPassageLinks","element","disabledPassages","el","link","existingSection","elements","newSection","existingPassage","newPassage","PluginManager","textProcessor","linkHandler","getSectionText","getPassageText","processText","addTransition","animation","plugin","fadeReplace","resolve","ReplaceLabel","squiffy","RotateSequencePlugin","rotateSequence","stringItems","rotation","rotate","optionsString","handleLink","isRotate","rotateResult","remaining","RandomPlugin","randomIndex","LivePlugin","sq","promises","selector","oldContent","newContent","sectionText","passageText","setQueue","AnimatePlugin","parseDataset","dataset","setupAnimations","runAnimation","currentContent","links","attrs","Plugins","LinkHandler","isBrowser","win","doc","tweenTypes","valueTypes","tickModes","compositionTypes","isRegisteredTargetSymbol","isDomSymbol","isSvgSymbol","transformsSymbol","morphPointsSymbol","proxyTargetSymbol","minValue","maxValue","maxFps","emptyString","shortTransforms","validTransforms","transformsFragmentStrings","hexTestRgx","rgbExecRgx","rgbaExecRgx","hslExecRgx","hslaExecRgx","digitWithExponentRgx","unitsExecRgx","lowerCaseRgx","transformsExecRgx","relativeValuesExecRgx","defaults","scope","globals","globalVersions","toLowerCase","stringStartsWith","sub","now","isArr","isObj","isNum","isStr","isFnc","isUnd","isNil","isSvg","isHex","isRgb","isHsl","isCol","isKey","parseNumber","pow","sqrt","sin","cos","abs","exp","ceil","floor","asin","max","atan2","PI","_round","clamp","min","powCache","round","decimalLength","snap","increment","closest","cv","interpolate","progress","random","shuffle","clampInfinity","normalizeTime","cloneArray","mergeObjects","o1","o2","merged","o1p","forEachChildren","reverse","prevProp","nextProp","adjustedNextProp","currentNext","removeChild","addChild","sortMethod","createRefreshable","constructor","tracked","currentIteration","currentIterationProgress","reversed","alternate","cleanup","Clock","initTime","frameRate","previousFrameDuration","fr","fps","frameDuration","playbackRate","pbr","time","scheduledTime","elapsedTime","frameDelta","delta","render","tickable","muteCallbacks","internalRender","tickMode","duration","completed","iterationDuration","iterationCount","_currentIteration","_loopDelay","_reversed","_alternate","_hasChildren","tickableDelay","tickablePrevAbsoluteTime","tickableEndTime","tickableAbsoluteTime","tickablePrevTime","tickableCurrentTime","deltaTime","isCurrentTimeAboveZero","isCurrentTimeEqualOrAboveDuration","isSetter","forcedTick","isOdd","iterationElapsedTime","hasRendered","isReversed","_ease","iterationTime","isRunningBackwards","forcedRender","absoluteTime","tween","tweenTarget","tweenStyle","tweenTargetTransforms","tweenTargetTransformsProperties","tweenTransformsNeedUpdate","tweenComposition","tweenCurrentTime","tweenChangeDuration","tweenAbsEndTime","tweenNextRep","tweenPrevRep","tweenHasComposition","tweenNewTime","tweenProgress","tweenModifier","tweenValueType","tweenType","tweenIsObject","tweenIsNumber","tweenPrecision","tn","ns","tweenProperty","tick","tl","tlIsRunningBackwards","tlChildrenTime","tlCildrenTickTime","tlChildrenHasRendered","tlChildrenHaveCompleted","tlIterationDuration","childDuration","childStartTime","childEndTime","childTime","childTickMode","additive","addAdditiveAnimation","lookups","propertyAnimation","tweens","lookupTween","valueType","additiveValues","additiveValue","engineTickMethod","engineCancelMethod","Engine","engineSpeed","engineFps","activeTickable","nextTickable","tickEngine","killEngine","unit","isSecond","newScale","scaleFactor","precision","engine","parseInlineTransforms","target","propName","animationInlineStyles","inlineTransforms","inlinedStylesPropertyValue","cachedTransforms","inlinePropertyName","inlinePropertyValue","getNodeList","parseTargets","targets","flattened","nodeList","jl","subItem","kl","registerTargets","parsedTargetsArray","parsedTargetsLength","isSvgType","getPath","$parsedSvg","morphTo","path2","$path1","$path2","isPath","previousPoints","v1","v2","length1","length2","maxPoints","pointOnPath1","pointOnPath2","getScaleFactor","$el","ctm","scaleX","scaleY","createDrawableProxy","pathLength","computedStyles","strokeLineCap","$scalled","currentCap","proxy","property","values","os","d1","d2","newCap","createDrawable","getPathPoint","$path","getPathProgess","pathProperty","totalLength","inSvg","p0","p1","createMotionPath","cssReservedProperties","isValidSVGAttribute","elParentNode","svg","rgbToRgba","rgbValue","rgba","hexToRgba","hexValue","hexLength","isShort","hue2rgb","hslToRgba","hslValue","hsla","convertColorStringValuesToRgbaArray","colorString","setValue","targetValue","defaultValue","getFunctionValue","total","store","func","computed","getTweenType","prop","getCSSValue","inlineStyles","getOriginalAnimatableValue","getRelativeValue","operator","createDecomposedValueTargetObject","decomposeRawValue","rawValue","targetObject","num","unitMatch","matchedNumbers","decomposeTweenValue","decomposedOriginalValue","getTweenSiblings","lookupMap","targetLookup","addTweenSortMethod","overrideTween","composeTween","siblings","tweenCompositionType","tweenAbsStartTime","prevSibling","prevParent","prevAbsEndTime","prevPrevSibling","absoluteUpdateStartTime","prevChangeStartTime","prevTLOffset","updatedPrevChangeDuration","pausePrevParentAnimation","prevParentTL","pausePrevParentTL","additiveTweenSiblings","additiveAnimation","toNumber","toNumbers","removeTweenSliblings","tweenReplaceSiblings","addTweensLookup","addTargetProps","shouldClean","resetTimerProperties","timer","reviveTimer","timerId","Timer","parameters","parentPosition","delay","loop","loopDelay","autoplay","onComplete","onLoop","onPause","onBegin","onBeforeUpdate","onUpdate","timerInitTime","timerDefaults","timerDelay","timerDuration","timerLoop","timerLoopDelay","timerIterationCount","offsetPosition","cancelled","paused","timeScale","isPaused","count","iterations","newDuration","currentDuration","normlizedDuration","ap","then","onResolve","createTimer","none","calcBezier","aT","aA1","aA2","binarySubdivide","aX","mX1","mX2","aA","aB","currentX","currentT","cubicBezier","mY1","mY2","steps","fromStart","roundMethod","linear","argsLength","totalPoints","firstArg","lastArg","xPoints","yPoints","arg","splitValue","percent","prevX","prevY","irregular","randomness","previousValue","spacing","segmentEnd","randomVariation","randomValue","halfPI","doublePI","easeInPower","easeInFunctions","pow2","overshoot","amplitude","period","easeTypes","easeIn","parseEaseString","easesFunctions","easesLookups","parsedFn","split","eases","list","easeType","JSEasesLookups","parseEasings","ease","propertyNamesCache","sanitizePropertyName","cachedPropertyName","lowerCaseName","angleUnitsMap","convertedValuesCache","convertValueUnit","decomposedValue","force","currentUnit","currentNumber","cachedKey","cached","convertedValue","tempEl","parentNode","parentEl","elStyle","currentUnitWidth","newUnitWidth","factor","cleanInlineStyles","renderable","targetStyle","originalInlinedValue","fromTargetObject","toTargetObject","toFunctionStore","keyframesTargetArray","fastSetValuesArray","keyObjectTarget","tweenId","keyframes","generateKeyframes","properties","propertyNames","propArray","newKey","keyValue","totalDuration","prevKey","keyObj","durProgress","prevEase","currentEase","JSAnimation","fastSet","parsedTargets","targetsLength","kfParams","playbackEase","modifier","composition","onRender","animDefaults","animaPlaybackEase","animEase","hasSpring","tEasing","tDuration","tDelay","tModifier","tComposition","animInlineStyles","absoluteOffsetTime","iterationDelay","animationAnimationLength","shouldTriggerRender","targetIndex","ti","lastTransformGroupIndex","lastTransformGroupLength","propValue","isPropValueArray","arrayLength","isNotObjectValue","prevTween","firstTweenChangeStartTime","lastTweenChangeEndTime","tweenIndex","keyframe","computedToValue","tweenToValue","tweenFromValue","keyEasing","tweenEasing","tweenDuration","tweenDelay","computedComposition","hasFromvalue","hasToValue","isFromToArray","isFromToValue","tweenStartTime","absoluteStartTime","nextSibling","complexValue","notComplexValue","unitValue","notUnitValue","colorValue","notColorValue","valueToConvert","longestValue","shortestValue","tweenUpdateDuration","additiveTween","tweenFunc","ogValue","animate","easingToLinear","samples","points","WAAPIEasesLookups","WAAPIeases","parseWAAPIEasing","parsedEase","easing","transformsShorthands","commonDefaultPXProperties","validIndividualTransforms","axis","transformsPropertiesRegistered","WAAPIAnimationsLookups","removeWAAPIAnimation","nextLookup","matchTarget","matchProperty","matchParent","anim","lookupParent","addWAAPIAnimation","animTotalDuration","handleRemove","normalizeTweenValue","parseIndividualTweenValue","from","to","tweenValue","computedTo","WAAPIAnimation","isSkew","isScale","isTranslate","isAngle","syntax","spring","scroll","direction","fill","hasIndividualTransforms","composite","tweenParams","propertyValue","individualTransformProperty","parsedPropertyValue","tweenOptions","tweenOptionsEase","tweenOptionsSpring","transforms","cb","speed","controlAnimation","waapi","sync","getTargetValue","targetSelector","normalizePropName","originalValue","setTargetValues","removeTargetsFromAnimation","targetsArray","tweensMatchesTargets","tweenName","remove","waapiAnimation","removeMatches","childDur","keepTime","randomPick","roundPad","padStart","padString","padEnd","wrap","mapRange","inLow","inHigh","outLow","outHigh","degToRad","degrees","radToDeg","radians","lerp","amount","dt","ticker","curry","chain","__","nextArgs","nextResult","makeChainable","right","getPrevChildOffset","timeline","timePosition","goToPrevAnimationOffset","prevAnimation","prevOffset","parseTimelinePosition","tlDuration","timePosStr","tlLabels","hasLabels","hasSibling","matchedRelativeOperator","fullOperator","labelOffset","parsedOffset","parsedNumericalOffset","getTimelineTotalDuration","addTlChild","childParams","adjustedPosition","tlChild","Timeline","defaultsParams","globalDefaults","tlPlaybackEase","a1","a2","a3","isAnim","isTimer","staggeredPosition","parsedLength","staggeredChildParams","synced","position","labelName","labels","createTimeline","Animatable","beginHandler","pauseHandler","globalParams","callbacksAnimationParams","paramValue","isObjValue","propParams","animParams","numbers","createAnimatable","maxSpringParamValue","Spring","zeta","w0","wd","maxRestSteps","maxIterations","restThreshold","timeStep","solverTime","restSteps","createSpring","preventDefault","DOMProxy","Transforms","matrix","transformValue","elMatrix","ct","parseDraggableFunctionParameter","draggable","zIndex","Draggable","paramX","paramY","trigger","customEase","xProp","yProp","animatableParams","paramXObject","animatableXParams","paramYObject","animatableYParams","hasUpdated","hasReleased","dx","dy","prevTime","curTime","elapsed","velocityStack","vMul","minV","maxV","vi","velocity","muteUpdateCallback","sx","sy","cpt","cpr","cpb","cpl","threshold","$container","cx","cy","cx2","cy2","iw","ih","uw","sw","sh","fx","transformContainerRect","width","height","left","bottom","containerOverflow","visibleOverflow","hiddenOverflow","canScroll","targetRect","hiddenLeft","hiddenTop","hiddenRight","hiddenBottom","bounds","bt","br","bb","bl","obx","oby","cp","containerPadding","parsedCursorStyles","cursorStyles","onHover","onGrab","daw","dah","csx","csy","nsw","nsh","csw","csh","swd","shd","st","sr","sb","sl","nx","ny","scrollX","scrollY","cr","cl","px1","py1","px2","py2","px3","py3","cf","nsx","nsy","gap","scrollBounds","ob","disabledX","disabledY","destX","destY","dur","$eTarget","touches","eventX","eventY","movedX","movedY","$parent","isAtTop","isAtBottom","canTouchScroll","overflowY","scrollTop","scrollHeight","clientHeight","springX","springY","releaseEase","hasReleaseSpring","overshootCoords","pv","pa","ds","bx","by","durationX","durationY","easeX","easeY","longestReleaseDuration","directionX","distanceX","restDuration","directionY","distanceY","hasSnapped","createDraggable","Scope","rootParam","root","scopeDefaults","globalDefault","mediaQueries","mq","_mq","revertible","activeScope","activeRoot","activeDefaults","mqs","returned","revertConstructor","scopeConstructorCallback","currentIndex","trackedTickable","revertibles","revertConstructors","revertiblesOnce","revertConstructorsOnce","createScope","getMaxViewHeight","parseScrollObserverFunctionParameter","scroller","scrollContainers","ScrollContainer","backwards","px","py","useWin","style","elRect","registerAndGetScrollContainer","scrollContainer","convertValueToPx","size","under","over","clampMin","clampMax","parseBoundValue","matchedOperator","splitter","splitted","valueAPx","valueBPx","getAnimationDomTarget","linked","$linkedTarget","linkedTargets","scrollerIndex","debugColors$1","ScrollObserver","syncMode","isLinear","isEase","isSmooth","isMethods","syncMethods","biDirSync","isHori","$existingDebug","$debug","$thresholds","$triggers","color","containerWidth","containerHeight","scrollWidth","offLeft","offTop","half","labelHeight","labelWidth","labelSize","repeat","gradientOffset","lineCSS","baseCSS","isView","isTail","isFirst","isOver","isFlip","$label","$text","dirProp","flipOffset","stickys","$target","linkedTime","isSticky","rect","targetSize","containerSize","maxScroll","enter","leave","enterTarget","leaveTarget","enterContainer","leaveContainer","parsedEnterTarget","parsedLeaveTarget","parsedEnterContainer","parsedLeaveContainer","offsetStart","offsetEnd","scrollDelta","sticky","syncEase","syncSmooth","shouldSeek","isBefore","isAfter","isInView","isOnTheEdge","forceEnter","syncCompleted","lp","onScroll","segmenter","valueRgx","indexRgx","whiteSpaceGroupRgx","whiteSpaceRgx","lineType","wordType","charType","dataLine","wordSegmenter","graphemeSegmenter","$splitTemplate","isSegmentWordLike","seg","setAriaHidden","getAllTopLevelElements","debugColors","filterEmptyElements","filterLineElements","lineIndex","bin","dataLineAttr","generateTemplate","classString","cloneType","wrapType","overflow","processHTMLTemplate","htmlTemplate","$parentFragment","debug","wordIndex","charIndex","isLine","isChar","className","displayStyle","$content","$highestParent","$split","$replacables","replacablesLength","$replace","$closestParent","TextSplitter","segments","words","char","chars","accessible","includeSpaces","lineParams","wordParams","charParams","handleSplit","currentWidth","effect","refreshableEffect","wordTemplate","charTemplate","nodeType","nodeText","tempWords","wordSegments","$wordsFragment","prevSeg","wordSegment","isWordLike","lastWordIndex","word","nextWord","hasWordFollowingSpace","wordToProcess","charSegments","$charsFragment","charSegmentsArray","charSegment","charText","$charNode","childNodes","clearCache","isCached","lineTemplate","fontsReady","canSplitLines","elementsArray","linesCount","nested","linesFragment","parents","clones","$clone","cloneIndex","clonesLength","$word","$accessible","stagger","hasEasing","staggerEase","grid","customTotal","fromFirst","fromCenter","fromLast","fromRandom","isRange","useProp","val1","val2","fromIndex","registeredTarget","customIndex","staggerIndex","fromX","fromY","toX","toY","output","Animation","fadeDuration","interval","imports","animejs","init","currentSectionElement","currentPassageElement","currentBlockOutputElement","scrollPosition","transitions","runningTransitions","get","processLink","showPassage","turnPassage","go","handled","save","handleClick","enableLink","begin","load","runTransitions","settersJson","setAttribute","setMatch","lhs","rhs","incDecMatch","op","rhsNumeric","oldCanGoBack","canGoBack","master","clearScreen","run","writeUndoLog","newCanGoBack","runJs","extra","outputElementContainer","processAttributes","transition","passageName","masterSection","passages","runFns","masterPassage","createSectionElement","attributes","restart","settings","runUiJs","setCurrentSectionElement","setCurrentPassageElement","pluginManager","newBlockOutputElement","getClearStack","clearStack","clearStackItem","unClearScreen","html","div","scrollTo","currentScrollTop","maxScrollTop","update","allSectionElements","getHistoryCount","sectionPassageCount","goBack","currentPassage","doUndo","hasEmptySection","hasOtherElements","undoLog","oldValue","undosJson","undos"],"mappings":"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AI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GA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GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,GAAK,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,GAAK,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,GAAK,CAAE,GAAI,IAAK,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,GAAK,CAAE,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,GAAG,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,56]}