{"version":3,"sources":["core/polyfills.js","core/clone.js","core/equal.js","appConnect.js","cordova.js","core/dom.js","core/parser.js","core/dataScope.js","core/BaseComponent.js","core/pathToRegexp.js","core/hjson.js","core/flow.js","components/app.js","components/form.js","components/formElement.js","components/textarea.js","components/input.js","components/inputFile.js","components/inputFileMultiple.js","components/inputNumber.js","components/button.js","components/radio.js","components/radioGroup.js","components/checkbox.js","components/checkboxGroup.js","components/select.js","components/selectMultiple.js","components/value.js","components/repeat.js","components/repeatItem.js","components/fetch.js","components/serverconnect.js","components/serverconnectForm.js","components/if.js","components/datetime.js","components/apiAction.js","components/apiForm.js","components/array.js","components/group.js","components/flow.js","components/toggle.js","attributes/bind.js","attributes/on.js","attributes/repeat.js","attributes/class.js","attributes/hide.js","attributes/show.js","attributes/html.js","attributes/text.js","attributes/style.js","formatters/global.js","actions/core.js","actions/collections.js","actions/console.js"],"names":["window","Element","prototype","closest","s","i","matches","this","document","ownerDocument","querySelectorAll","el","length","item","parentElement","NodeList","forEach","Array","dmx","toString","Object","hasOwnProperty","reFlags","reTypedType","eq","value","other","assocIndexOf","array","key","getMapData","data","type","isKeyable","map","Hash","entries","index","clear","entry","set","__data__","create","size","delete","result","has","get","HASH_UNDEFINED","undefined","ListCache","pop","splice","push","MapCache","hash","Map","string","Stack","pairs","LARGE_ARRAY_SIZE","getType","call","slice","isArray","isObject","cloneArrayBuffer","arrayBuffer","constructor","byteLength","Uint8Array","cloneTypedArray","typedArray","buffer","byteOffset","initType","object","imageData","regexp","dataView","Ctor","source","exec","lastIndex","width","height","clone","stack","stacked","subValue","add","test","isTypedArray","props","keys","iteratee","arrayEach","objValue","assignValue","equalArrays","arrLength","arrValue","othValue","equal","equalDeep","objIsArr","othIsArr","objType","othType","isSameType","String","from","equalByType","objProps","objLength","objCtor","othCtor","equalObjects","__components","__attributes","before","mount","mounted","__formatters","boolean","global","number","any","__adapters","__actions","__startup","Set","config","mapping","form","input","textarea","select","reIgnoreElement","rePrefixed","reExpression","reExpressionReplace","reToggleAttribute","reDashAlpha","reUppercase","_wr","orig","history","rv","apply","arguments","e","Event","toLowerCase","dispatchEvent","pushState","replaceState","appConnect","node","cb","app","alert","title","onpopstate","setTimeout","state","requestUpdate","onhashchange","App","Component","$update","documentElement","style","visibility","addEventListener","Promise","all","then","appNode","querySelector","removeAttribute","useHistory","extend","extended","deep","merge","obj","prop","noop","isset","val","v","parseDate","struct","offset","n","Date","k","UTC","d","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","setHours","setMinutes","setSeconds","setMilliseconds","arr","hashCode","o","str","JSON","stringify","charCodeAt","Math","abs","randomizer","seed","repeatItems","repeat","items","l","assign","$key","$index","$value","escapeRegExp","replace","validate","tagName","elements","dirty","checkValidity","validateReset","queue","event","task","shift","fn","context","nextTick","postMessage","updateRequested","idents","debounce","delay","timeout","clearTimeout","cancelAnimationFrame","requestAnimationFrame","throttle","args","keyCodes","bs","tab","enter","esc","space","left","up","right","down","backspace","pause","capslock","escape","pageup","pagedown","end","home","arrowleft","arrowup","arrowright","arrowdown","insert","numlock","scrolllock","semicolon","comma","minus","period","slash","backquote","bracketleft","backslash","bracketright","quote","numpad0","numpad1","numpad2","numpad3","numpad4","numpad5","numpad6","numpad7","numpad8","numpad9","numpadmultiply","numpadadd","numpadsubstract","numpaddivide","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","digit0","digit1","digit2","digit3","digit4","digit5","digit6","digit7","digit8","digit9","keya","keyb","keyc","keyd","keye","keyf","keyg","keyh","keyi","keyj","keyk","keyl","keym","keyn","keyo","keyp","keyq","keyr","keyt","keyu","keyv","keyw","keyx","keyy","keyz","eventListener","target","eventType","handler","modifiers","listener","self","currentTarget","ctrl","ctrlKey","alt","altKey","shiftKey","meta","metaKey","originalEvent","nsp","includes","MouseEvent","button","parseInt","button0","button1","button2","button3","button4","KeyboardEvent","keyVal","which","stop","stopPropagation","prevent","preventDefault","$data","pageX","pageY","x","clientX","y","clientY","WheelEvent","deltaX","deltaY","deltaZ","deltaMode","PointerEvent","pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","TouchEvent","touchMap","touch","identifier","screenX","screenY","touches","changedTouches","targetTouches","rotation","scale","location","code","Dom7","nodeType","once","capture","jQuery","passive","createClass","proto","parentClass","Cls","Config","tag","extends","BaseComponent","initialData","attributes","methods","events","parent","Attribute","name","hook","Formatters","Formatter","Adapter","Actions","actions","Action","action","Startup","promise","protocol","resolve","$","selector","len","addClass","className","classList","removeClass","remove","toggleClass","toggle","hasClass","contains","attr","attrs","getAttribute","setAttribute","removeAttr","css","getComputedStyle","getPropertyValue","setProperty","each","callback","append","children","j","appendChild","appendTo","detach","parentNode","removeChild","empty","innerHTML","dom","id","getElementById","query","elem","createElement","walk","hasChildNodes","childNodes","getAttributes","attribute","specified","substr","argument","split","part","pos","indexOf","fullName","oldNode","newNode","replaceChild","cache","SUPPORTED_TYPES","Boolean","Null","Undefinec","Number","BigInt","RegExp","Blob","File","FileList","ArrayBuffer","ImageBitmap","ImageData","DataView","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array","OPERATORS","in","ESCAPE","f","r","t","EXPRESSIONS","a","b","pow","c","RESERVED","scope","null","true","false","_","__dmxScope__","ZERO","getIdents","tokens","match","concat","lexer","reduce","token","startsWith","exp","start","ch","ch2","ch3","op","isQuote","read","readString","isDigid","is","peek","readNumber","isAlpha","readIdent","testRegexp","readRegexp","isWhitespace","Error","chars","isAlphaNum","isExpOperator","hex","fromCharCode","rep","exponent","next","ident","idx","ok","parse","substring","trim","expression","expect","doParse","err","console","error","consume","conditional","middle","logicalAnd","logicalOr","bitwiseXor","bitwiseOr","bitwiseAnd","equality","relational","addictive","bitwiseShift","multiplicative","unary","primary","objectMember","warn","functionCall","objectIndex","func","ctx","argsFn","indexFn","log","random","del","DataScope","$node","bindings","propBindings","listeners","dmxDomId","$parseAttributes","$initialData","render","beforeMount","$mount","$customAttributes","dmxComponent","dmxRendered","destroy","$parse","find","found","__find","__replace","child","$destroy","$type","component","__remove","beforeUpdate","update","updated","beforeDestroy","destroyed","removeEventListener","ComponentEvent","createEvent","initEvent","bubbles","cancelable","defineProperty","defaultPrevented","$addChild","debug","hasAttribute","findIndex","isComponent","__WAPPLER__","nodeValue","$addBinding","oldValue","updatedProps","$updateBindings","$updatePropBindings","$canSkip","binding","didUpdate","callbacks","options","default","isNaN","$propBinding","bind","Function","$event","$originalEvent","method","$placeholder","$destroyChildren","updateRelated","ignoreParents","pathToRegexp","compile","tokensToFunction","tokensToRegExp","PATH_REGEXP","join","res","path","defaultDelimiter","delimiter","whitelist","pathEscaped","m","escaped","prev","group","modifier","optional","pattern","prefix","escapeGroup","escapeString","encode","encodeURIComponent","segment","TypeError","flags","sensitive","strict","endsWith","route","endToken","isEndDelimited","groups","regexpToRegexp","parts","arrayToRegexp","stringToRegexp","Hjson","text","at","escapee","isPunctuatorChar","col","line","charAt","offs","allowML","exitCh","mlString","uffff","triple","indent","skipIndent","skip","keyname","white","tryParseNumber","stopAtNext","leadingZeros","testLeading","isFinite","errorClosingHint","search","report","possibleErr","hint","withoutBraces","isEol","chf","tfnns","checkTrailing","rootValue","Flow","_execStep","output","run","flow","_exec","_each","curr","steps","catch","step","disabled","valueOf","onload","ready","load","parseQuery","querystring","p","decodeURIComponent","base","content","decodeURI","pathname","novalidate","submit","direct","_submit","reset","invalid","noValidate","onsubmit","onreset","elm","validity","valid","focus","HTMLFormElement","grecaptcha","updateData","validationMessage","focused","setValue","disable","changed","defaultValue","fields","activeElement","file","onchange","files","date","lastModified","lastModifiedDate","toISOString","dataUrl","reader","FileReader","readAsDataURL","checked","check","defaultChecked","updateValue","values","filter","radio","isDefault","unchecked","checkbox","selectedIndex","selectedValue","selectedText","optionText","optionValue","setSelectedIndex","renderOptions","option","selected","defaultSelected","innerText","rerender","prevItems","childKeys","$template","createDocumentFragment","firstChild","_rerender","_willUpdate","_update","_clear","RepeatItem","nextPos","_clone","aStart","bStart","aEnd","bEnd","outer","_moveChild","_insertChild","_removeChild","aLength","bLength","aNullable","sources","fill","moved","synced","keyIndex","seq","_lis","fragment","cloneNode","$nodes","u","il","insertBefore","fetch","status","links","paging","headers","executing","uploading","processing","downloading","uploadProgress","position","total","percent","downloadProgress","lastError","message","response","url","params","noload","ttl","credentials","abort","reload","_reset","done","unauthorized","forbidden","success","upload","ProgressEvent","download","xhr","XMLHttpRequest","onabort","onerror","ontimeout","onprogress","qs","_url","WebviewProxy","convertProxyUrl","now","created","toUpperCase","FormData","open","header","setRequestHeader","withCredentials","send","_done","responseText","arrHeaders","getAllResponseHeaders","linkHeader","link","linkUrl","qry","acc","info","rel","page","pages","first","last","countHeader","statusText","loaded","lengthComputable","ceil","sockets","eventName","socket","Socket","on","refresh","emit","autosubmit","clearData","dmxExtraData","dmxExtraElements","extra","element","_parseJsonForm","setCustomValidity","bootstrap5forms","setBootstrap5Message","bootstrap4forms","setBootstrap4Message","bootstrap3forms","setBootstrapMessage","setErrorMessage","parseSteps","selectedOptions","opt","org","re","reNumeric","p1","nextType","current","condition","show","hide","nodes","template","_render","_destroy","datetime","interval","utc","timer","year","month","day","hours","minutes","seconds","pad","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","dateString","tz","count","newItem","addUniq","insertAfter","replaceAt","removeAt","reverse","sort","$param","running","src","preload","autorun","param","throwError","runSub","textContent","uri","reject","isUpdated","uncheck","nodeName","returnValue","placeholder","createComment","fast","orgValue","orgPriority","getPropertyPriority","property","important","json","subflow","comment","wait","lower","upper","floating","rnd","floor","round","confirm","else","prompt","parentScope","parentOutput","$name","$number","$oddeven","outputFields","field","if","conditions","when","cases","while","loop","switch","case","tryCatch","try","runJS","function","setGlobal","setSession","sessionStorage","setItem","getSession","getItem","removeSession","removeItem","setStorage","localStorage","getStorage","removeStorage","dataType","body","collection","overwrite","row","column","columns","keep","newRow","rename","toFill","rows","startAt","desc","collection1","collection2","matchAll","l2","row2","hasMatch","label","time","timeEnd","groupEnd"],"mappings":";;;;;;AACAA,OAAAC,UAAAA,QAAAC,UAAAC,UACAF,QAAAC,UAAAC,QACA,SAAAC,GACA,IACAC,EADAC,GAAAC,KAAAC,UAAAD,KAAAE,eAAAC,iBAAAN,GAEAO,EAAAJ,KACA,GAEA,IADAF,EAAAC,EAAAM,SACAP,GAAA,GAAAC,EAAAO,KAAAR,KAAAM,WACAN,EAAA,IAAAM,EAAAA,EAAAG,gBACA,OAAAH,IAKAX,OAAAe,WAAAA,SAAAb,UAAAc,UACAD,SAAAb,UAAAc,QAAAC,MAAAf,UAAAc,SCjBA,WAEAhB,OAAAkB,IAAAlB,OAAAkB,KAAA,GAIA,IAEAC,EAAAC,OAAAlB,UAAAiB,SACAE,EAAAD,OAAAlB,UAAAmB,eAEAC,EAAA,OACAC,EAAA,iEAEAC,EAAA,SAAAC,EAAAC,GACA,OAAAD,IAAAC,GAAAD,GAAAA,GAAAC,GAAAA,GAGAC,EAAA,SAAAC,EAAAC,GAEA,IADA,IAAAjB,EAAAgB,EAAAhB,OACAA,KACA,GAAAY,EAAAI,EAAAhB,GAAA,GAAAiB,GACA,OAAAjB,EAGA,OAAA,GAUAkB,EAAA,SAAAC,EAAAF,GACA,OARA,SAAAJ,GACA,IAAAO,SAAAP,EACA,MAAA,UAAAO,GAAA,UAAAA,GAAA,UAAAA,GAAA,WAAAA,EACA,cAAAP,EACA,OAAAA,EAIAQ,CAAAJ,GACAE,EAAA,iBAAAF,EAAA,SAAA,QACAE,EAAAG,KAGAC,EAAA,SAAAC,GACA,IAAAC,GAAA,EACAzB,EAAA,MAAAwB,EAAA,EAAAA,EAAAxB,OAGA,IADAL,KAAA+B,UACAD,EAAAzB,GAAA,CACA,IAAA2B,EAAAH,EAAAC,GACA9B,KAAAiC,IAAAD,EAAA,GAAAA,EAAA,MAIAJ,EAAAjC,UAAA,CACAoC,MAAA,WACA/B,KAAAkC,SAAArB,OAAAsB,OAAA,MACAnC,KAAAoC,KAAA,GAGAC,OAAA,SAAAf,GACA,IAAAgB,EAAAtC,KAAAuC,IAAAjB,WAAAtB,KAAAkC,SAAAZ,GAEA,OADAtB,KAAAoC,MAAAE,EAAA,EAAA,EACAA,GAGAE,IAAA,SAAAlB,GACA,IAAAgB,EAAAtC,KAAAkC,SAAAZ,GACA,OAAAgB,IAAAG,oBAAAC,EAAAJ,GAGAC,IAAA,SAAAjB,GACA,YAAAoB,IAAA1C,KAAAkC,SAAAZ,IAGAW,IAAA,SAAAX,EAAAJ,GAGA,OAFAlB,KAAAoC,MAAApC,KAAAuC,IAAAjB,GAAA,EAAA,EACAtB,KAAAkC,SAAAZ,QAAAoB,IAAAxB,EAAAuB,eAAAvB,EACAlB,OAIA,IAAA2C,EAAA,SAAAd,GACA,IAAAC,GAAA,EACAzB,EAAA,MAAAwB,EAAA,EAAAA,EAAAxB,OAEA,IADAL,KAAA+B,UACAD,EAAAzB,GAAA,CACA,IAAA2B,EAAAH,EAAAC,GACA9B,KAAAiC,IAAAD,EAAA,GAAAA,EAAA,MAIAW,EAAAhD,UAAA,CACAoC,MAAA,WACA/B,KAAAkC,SAAA,GACAlC,KAAAoC,KAAA,GAGAC,OAAA,SAAAf,GACA,IAAAE,EAAAxB,KAAAkC,SACAJ,EAAAV,EAAAI,EAAAF,GACA,QAAAQ,EAAA,KAIAA,GADAN,EAAAnB,OAAA,EAEAmB,EAAAoB,MAEApB,EAAAqB,OAAAf,EAAA,KAEA9B,KAAAoC,MACA,IAGAI,IAAA,SAAAlB,GACA,IAAAE,EAAAxB,KAAAkC,SACAJ,EAAAV,EAAAI,EAAAF,GACA,OAAAQ,EAAA,OAAAY,EAAAlB,EAAAM,GAAA,IAGAS,IAAA,SAAAjB,GACA,OAAAF,EAAApB,KAAAkC,SAAAZ,IAAA,GAGAW,IAAA,SAAAX,EAAAJ,GACA,IAAAM,EAAAxB,KAAAkC,SACAJ,EAAAV,EAAAI,EAAAF,GAOA,OANAQ,EAAA,KACA9B,KAAAoC,KACAZ,EAAAsB,KAAA,CAAAxB,EAAAJ,KAEAM,EAAAM,GAAA,GAAAZ,EAEAlB,OAIA,IAAA+C,EAAA,SAAAlB,GACA,IAAAC,GAAA,EACAzB,EAAA,MAAAwB,EAAA,EAAAA,EAAAxB,OAEA,IADAL,KAAA+B,UACAD,EAAAzB,GAAA,CACA,IAAA2B,EAAAH,EAAAC,GACA9B,KAAAiC,IAAAD,EAAA,GAAAA,EAAA,MAIAe,EAAApD,UAAA,CACAoC,MAAA,WACA/B,KAAAoC,KAAA,EACApC,KAAAkC,SAAA,CACAc,KAAA,IAAApB,EACAD,IAAA,IAAAsB,IACAC,OAAA,IAAAtB,IAIAS,OAAA,SAAAf,GACA,IAAAgB,EAAAf,EAAAvB,KAAAkC,SAAAZ,GAAA,OAAAA,GAEA,OADAtB,KAAAoC,MAAAE,EAAA,EAAA,EACAA,GAGAE,IAAA,SAAAlB,GACA,OAAAC,EAAAvB,KAAAkC,SAAAZ,GAAAkB,IAAAlB,IAGAiB,IAAA,SAAAjB,GACA,OAAAC,EAAAvB,KAAAkC,SAAAZ,GAAAiB,IAAAjB,IAGAW,IAAA,SAAAX,EAAAJ,GACA,IAAAM,EAAAD,EAAAvB,KAAAkC,SAAAZ,GACAc,EAAAZ,EAAAY,KAGA,OAFAZ,EAAAS,IAAAX,EAAAJ,GACAlB,KAAAoC,MAAAZ,EAAAY,MAAAA,EAAA,EAAA,EACApC,OAIA,IAAAmD,EAAA,SAAAtB,GACA,IAAAL,EAAAxB,KAAAkC,SAAA,IAAAS,EAAAd,GACA7B,KAAAoC,KAAAZ,EAAAY,MAGAe,EAAAxD,UAAA,CACAoC,MAAA,WACA/B,KAAAkC,SAAA,IAAAS,EACA3C,KAAAoC,KAAA,GAGAC,OAAA,SAAAf,GACA,IAAAE,EAAAxB,KAAAkC,SACAI,EAAAd,EAAA,OAAAF,GAEA,OADAtB,KAAAoC,KAAAZ,EAAAY,KACAE,GAGAE,IAAA,SAAAlB,GACA,OAAAtB,KAAAkC,SAAAM,IAAAlB,IAGAiB,IAAA,SAAAjB,GACA,OAAAtB,KAAAkC,SAAAK,IAAAjB,IAGAW,IAAA,SAAAX,EAAAJ,GACA,IAAAM,EAAAxB,KAAAkC,SACA,GAAAV,aAAAmB,EAAA,CACA,IAAAS,EAAA5B,EAAAU,SACA,GAAAkB,EAAA/C,OAAAgD,IAGA,OAFAD,EAAAN,KAAA,CAAAxB,EAAAJ,IACAlB,KAAAoC,OAAAZ,EAAAY,KACApC,KAEAwB,EAAAxB,KAAAkC,SAAA,IAAAa,EAAAK,GAIA,OAFA5B,EAAAS,IAAAX,EAAAJ,GACAlB,KAAAoC,KAAAZ,EAAAY,KACApC,OAIA,IAWAsD,EAAA,SAAApC,GACA,OAAAN,EAAA2C,KAAArC,GAAAsC,MAAA,GAAA,IAGAC,EAAA,SAAAvC,GACA,OAAAR,MAAA+C,QAAAvC,IAGAwC,EAAA,SAAAxC,GACA,OAAA,MAAAA,GAAA,iBAAAA,GAsBAyC,EAAA,SAAAC,GACA,IAAAtB,EAAA,IAAAsB,EAAAC,YAAAD,EAAAE,YAEA,OADA,IAAAC,WAAAzB,GAAAL,IAAA,IAAA8B,WAAAH,IACAtB,GAQA0B,EAAA,SAAAC,GACA,IAAAC,EAAAP,EAAAM,EAAAC,QACA,OAAA,IAAAD,EAAAJ,YAAAK,EAAAD,EAAAE,WAAAF,EAAA5D,SAkBA+D,EAAA,SAAAC,EAAA5C,GACA,IAVA6C,EACA9C,EAPA+C,EACAjC,EAXAkC,EACAN,EAyBAO,EAAAJ,EAAAR,YAEA,OAAApC,GACA,IAAA,cACA,OAAAkC,IAEA,IAAA,UACA,IAAA,OACA,OAAA,IAAAc,GAAAJ,GAEA,IAAA,WACA,OApCAH,EAAAP,GADAa,EAqCAH,GApCAH,QACA,IAAAM,EAAAX,YAAAK,EAAAM,EAAAL,WAAAK,EAAAV,YAqCA,IAAA,eACA,IAAA,eACA,IAAA,YACA,IAAA,aACA,IAAA,aACA,IAAA,aACA,IAAA,oBACA,IAAA,cACA,IAAA,cACA,OAAAE,EAAAK,GAEA,IAAA,MACA,IAAA,MACA,OAAA,IAAAI,EAEA,IAAA,SACA,IAAA,SACA,OAAA,IAAAA,EAAAJ,GAEA,IAAA,SACA,OAhDA/B,EAAA,IADAiC,EAiDAF,GAhDAR,YAAAU,EAAAG,OAAA3D,EAAA4D,KAAAJ,KACAK,UAAAL,EAAAK,UACAtC,EAgDA,IAAA,YACA,OA7CAd,EAAAwC,GADAM,EA8CAD,GA7CA7C,MACA,IAAA8C,EAAAT,YAAArC,EAAA8C,EAAAO,MAAAP,EAAAQ,UAgDAC,EAAA,SAAA7D,EAAAI,EAAA+C,EAAAW,GACA,IAAA1C,EAEA,IAAAoB,EAAAxC,GACA,OAAAA,EAGA,IApDAG,EAoDAI,EAAA6B,EAAApC,GAGAoB,EADAmB,EAAAvC,GArDA,IADAG,EAuDAH,GAtDA2C,YAAAxC,EAAAhB,QAwDA,UAAAoB,EACA,GAEA2C,EAAAlD,EAAAO,GAMA,IAAAwD,GAFAD,EAAAA,GAAA,IAAA7B,GAEAX,IAAAtB,GACA,GAAA+D,EACA,OAAAA,EAIA,GAFAD,EAAA/C,IAAAf,EAAAoB,GAEA,OAAAb,EAKA,OAJAP,EAAAT,SAAA,SAAAyE,EAAA5D,GACAgB,EAAAL,IAAAX,EAAAyD,EAAAG,EAAA5D,EAAAJ,EAAA8D,OAGA1C,EAGA,GAAA,OAAAb,EAKA,OAJAP,EAAAT,SAAA,SAAAyE,GACA5C,EAAA6C,IAAAJ,EAAAG,EAAAA,EAAAhE,EAAA8D,OAGA1C,EAGA,GAtIA,SAAApB,GACA,OAAAwC,EAAAxC,IAAAF,EAAAoE,KAAA9B,EAAApC,IAqIAmE,CAAAnE,GACA,OAAAoB,EAGA,IAAAgD,EAAA7B,EAAAvC,QAAAwB,EAAA7B,OAAA0E,KAAA1E,OAAAK,IASA,OA1KA,SAAAG,EAAAmE,GAGA,IAFA,IAAA1D,GAAA,EACAzB,EAAAgB,EAAAhB,SACAyB,EAAAzB,IACA,IAAAmF,EAAAnE,EAAAS,GAAAA,EAAAT,MA8JAoE,CAAAH,GAAApE,GAAA,SAAAgE,EAAA5D,GACAgE,IAEAJ,EAAAhE,EADAI,EAAA4D,IAzIA,SAAAb,EAAA/C,EAAAJ,GAEA,GAAA,aAAAI,EAAA,CAEA,IAAAoE,EAAArB,EAAA/C,GAEAR,EAAAyC,KAAAc,EAAA/C,IAAAL,EAAAyE,EAAAxE,UAIAwB,IAAAxB,GAAAI,KAAA+C,KAFAA,EAAA/C,GAAAJ,IAoIAyE,CAAArD,EAAAhB,EAAAyD,EAAAG,EAAA5D,EAAAJ,EAAA8D,OAGA1C,GAGA3B,IAAAoE,MAAAA,EA1YA,GCAA,WAEAtF,OAAAkB,IAAAlB,OAAAkB,KAAA,GAIA,IAAAG,EAAAD,OAAAlB,UAAAmB,eAEAE,EAAA,iEAMAsC,EAAA,SAAApC,GACA,OAAAN,SAAA2C,KAAArC,GAAAsC,MAAA,GAAA,IAGAE,EAAA,SAAAxC,GACA,MAAA,iBAAAA,GAAA,OAAAA,GAwDA0E,EAAA,SAAAvE,EAAAF,GACA,IAAA0E,EAAAxE,EAAAhB,OAGA,GAAAwF,GAFA1E,EAAAd,OAGA,OAAA,EAKA,IAFA,IAAAyB,GAAA,IAEAA,EAAA+D,GAAA,CACA,IAAAC,EAAAzE,EAAAS,GACAiE,EAAA5E,EAAAW,GAEA,GAAAgE,IAAAC,IAAAC,EAAAF,EAAAC,GACA,OAAA,EAIA,OAAA,GAkDAE,EAAA,SAAA5B,EAAAlD,GACA,IAAA+E,EAAAxF,MAAA+C,QAAAY,GACA8B,EAAAzF,MAAA+C,QAAAtC,GACAiF,EAAAF,EAAA,QAAA5C,EAAAe,GACAgC,EAAAF,EAAA,QAAA7C,EAAAnC,GAGAmF,EAAAF,GAAAC,EAEA,OAAAC,KAJA,UAAAF,GAKAF,GApIA,SAAAhF,GACA,OAAAwC,EAAAxC,IAAAF,EAAAoE,KAAA9B,EAAApC,IAmIAmE,CAAAhB,GACAuB,EAAAvB,EAAAlD,GA/GA,SAAAkD,EAAAlD,EAAAM,GACA,OAAAA,GACA,IAAA,WACA,GAAA4C,EAAAP,YAAA3C,EAAA2C,YAAAO,EAAAF,YAAAhD,EAAAgD,WACA,OAAA,EAEAE,EAAAA,EAAAH,OACA/C,EAAAA,EAAA+C,OAEA,IAAA,cACA,QAAAG,EAAAP,YAAA3C,EAAA2C,aAAAkC,EAAA,IAAAjC,WAAAM,GAAA,IAAAN,WAAA5C,KAKA,IAAA,UACA,IAAA,OACA,IAAA,SACA,OApDA,SAAAD,EAAAC,GACA,OAAAD,IAAAC,GAAAD,GAAAA,GAAAC,GAAAA,EAmDAF,EAAAoD,GAAAlD,GAEA,IAAA,SACA,IAAA,SACA,OAAAkD,GAAAkC,OAAApF,GAEA,IAAA,MACA,IAAA,MACA,OAAAkD,EAAAjC,MAAAjB,EAAAiB,MACAwD,EAAAlF,MAAA8F,KAAAnC,GAAA3D,MAAA8F,KAAArF,KAqFAsF,CAAApC,EAAAlD,EAAAiF,KAGAE,GA9DA,SAAAjC,EAAAlD,GACA,IAAAuF,EAAA7F,OAAA0E,KAAAlB,GACAsC,EAAAD,EAAArG,OAIA,GAAAsG,GAHA9F,OAAA0E,KAAApE,GACAd,OAGA,OAAA,EAKA,IAFA,IAAAiB,EAAAQ,EAAA6E,EAEA7E,KAEA,GADAR,EAAAoF,EAAA5E,IACAhB,EAAAyC,KAAApC,EAAAG,GACA,OAAA,EAMA,IAFA,IAAAgB,GAAA,IAEAR,EAAA6E,GAAA,CAEA,IAAAjB,EAAArB,EADA/C,EAAAoF,EAAA5E,IAEAiE,EAAA5E,EAAAG,GAEA,GAAAoE,IAAAK,IAAAC,EAAAN,EAAAK,GAAA,CACAzD,GAAA,EACA,OAIA,GAAAA,EAAA,CACA,IAAAsE,EAAAvC,EAAAR,YACAgD,EAAA1F,EAAA0C,YAEA+C,GAAAC,KACA,gBAAAxC,MAAA,gBAAAlD,IACA,mBAAAyF,GAAAA,aAAAA,GACA,mBAAAC,GAAAA,aAAAA,IACAvE,GAAA,GAIA,OAAAA,EAsBAwE,CAAAzC,EAAAlD,IAGA6E,EAAA,SAAA9E,EAAAC,GACA,OAAAD,IAAAC,IAGA,MAAAD,GAAA,MAAAC,IAAAuC,EAAAxC,KAAAwC,EAAAvC,GACAD,GAAAA,GAAAC,GAAAA,EAEA8E,EAAA/E,EAAAC,KAGAR,IAAAqF,MAAAA,EAhLA,GCAAvG,OAAAkB,IAAAlB,OAAAkB,KAAAE,OAAAsB,OAAA,MAEAxB,IAAAoG,aAAAlG,OAAAsB,OAAA,MACAxB,IAAAqG,aAAA,CACAC,OAAApG,OAAAsB,OAAA,MACA+E,MAAArG,OAAAsB,OAAA,MACAgF,QAAAtG,OAAAsB,OAAA,OAEAxB,IAAAyG,aAAA,CACAC,QAAAxG,OAAAsB,OAAA,MACAmF,OAAAzG,OAAAsB,OAAA,MACAe,OAAArC,OAAAsB,OAAA,MACAoF,OAAA1G,OAAAsB,OAAA,MACAkC,OAAAxD,OAAAsB,OAAA,MACAd,MAAAR,OAAAsB,OAAA,MACAqF,IAAA3G,OAAAsB,OAAA,OAEAxB,IAAA8G,WAAA5G,OAAAsB,OAAA,MACAxB,IAAA+G,UAAA7G,OAAAsB,OAAA,MACAxB,IAAAgH,UAAA,IAAAC,IAGAjH,IAAAkH,OAAA,CACAC,QAAA,CACAC,KAAA,OACA,oEAAA,SACA,oBAAA,QACA,uBAAA,WACA,6BAAA,sBACA,mBAAA,aAEAC,MAAA,QACAC,SAAA,WACA,mBAAA,kBACAC,OAAA,SACA,kBAAA,iBACA,eAAA,gBAIAvH,IAAAwH,gBAAA,oBACAxH,IAAAyH,WAAA,SACAzH,IAAA0H,aAAA,gBACA1H,IAAA2H,oBAAA,iBACA3H,IAAA4H,kBAAA,gJACA5H,IAAA6H,YAAA,YACA7H,IAAA8H,YAAA,SAIA,WACA,MAAAC,EAAA,SAAAjH,GACA,MAAAkH,EAAAC,QAAAnH,GAEA,OAAA,WACA,MAAAoH,EAAAF,EAAAG,MAAA9I,KAAA+I,WACAC,EAAA,IAAAC,MAAAxH,EAAAyH,eAGA,OAFAF,EAAAD,UAAAA,UACAtJ,OAAA0J,cAAAH,GACAH,IAIAD,QAAAQ,UAAAV,EAAA,aACAE,QAAAS,aAAAX,EAAA,gBAdA,GAiBA/H,IAAA2I,WAAA,SAAAC,EAAAC,GACA,GAAA7I,IAAA8I,IACA,OAAAC,MAAA,wBAGA,GAAAH,EAAA,CAKAX,QAAAS,aAAA,CAAAM,MAAA1J,SAAA0J,OAAA,IAEAlK,OAAAmK,WAAA,SAAAZ,GACAa,YAAA,KACAb,EAAAc,OAAAd,EAAAc,MAAAH,QACA1J,SAAA0J,MAAAX,EAAAc,MAAAH,OAEAhJ,IAAAoJ,kBACA,IAGAtK,OAAAuK,aAAA,WACArJ,IAAAoJ,iBAGA,IAAAE,EAAAtJ,IAAAuJ,UAAA,OAEAvJ,IAAA8I,IAAA,IAAAQ,EAAAV,EAAA5I,IAAA2G,QACA3G,IAAA8I,IAAAU,UACAX,GAAAA,SAvBAA,GAAAA,KA0BAvJ,SAAAmK,gBAAAC,MAAAC,WAAA,SAEArK,SAAAsK,iBAAA,oBAAA,KACAC,QAAAC,IAAA9J,IAAAgH,WAAA+C,MAAA,KACA,IAAAC,EAAA1K,SAAA2K,cAAA,kEAEAjK,IAAA2I,WAAAqB,GAAA,WACA1K,SAAAmK,gBAAAC,MAAAC,WAAA,GACAK,GAAAA,EAAAE,gBAAA,oBAKAlK,IAAAmK,WAAArL,OAAAmJ,SAAAnJ,OAAAmJ,QAAAQ,UAEAzI,IAAAoK,OAAA,WAEA,IAAAC,EAAA,GACAC,GAAA,EACAnL,EAAA,EACAO,EAAA0I,UAAA1I,OAGA,qBAAAQ,OAAAlB,UAAAiB,SAAA2C,KAAAwF,UAAA,MACAkC,EAAAlC,UAAA,GACAjJ,KAuBA,IAnBA,IAAAoL,EAAA,SAAAC,GACA,IAAA,IAAAC,KAAAD,EAEA,aAAAC,GAEAvK,OAAAlB,UAAAmB,eAAAyC,KAAA4H,EAAAC,KAEAH,GAAA,oBAAApK,OAAAlB,UAAAiB,SAAA2C,KAAA4H,EAAAC,IACAJ,EAAAI,GAAAzK,IAAAoK,QAAA,EAAAC,EAAAI,GAAAD,EAAAC,IAEA,MAAAD,EAAAC,KACAJ,EAAAI,GAAAD,EAAAC,MAQAtL,EAAAO,EAAAP,IAAA,CACA,IAAAqL,EAAApC,UAAAjJ,GACAoL,EAAAC,GAGA,OAAAH,GAGArK,IAAA0K,KAAA,aAEA1K,IAAA2K,MAAA,SAAAC,GACA,YAAA7I,IAAA8I,GAGA7K,IAAA8K,UAAA,SAAAN,GACA,GAAA,iBAAAA,EAAA,CACA,IAAAO,EAAAC,EAAA,EAAAC,EAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,IAEA,GAAA,OAAAT,EAAAjC,cACA,OAAA,IAAA2C,KAGA,GAAAH,EAAA,wIAAA/G,KAAAwG,GAAA,CACA,IAAA,IAAAW,EAAAhM,EAAA,EAAAgM,EAAAF,EAAA9L,KAAAA,EACA4L,EAAAI,IAAAJ,EAAAI,IAAA,EAMA,OAHAJ,EAAA,KAAAA,EAAA,IAAA,GAAA,EACAA,EAAA,IAAAA,EAAA,IAAA,OAEAhJ,IAAAgJ,EAAA,GACA,IAAAG,KAAAH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAEA,MAAAA,EAAA,SAAAhJ,IAAAgJ,EAAA,KACAC,EAAA,GAAAD,EAAA,IAAAA,EAAA,IACA,MAAAA,EAAA,KAAAC,EAAA,EAAAA,IAGA,IAAAE,KAAAA,KAAAE,IAAAL,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAC,EAAAD,EAAA,GAAAA,EAAA,MAEA,GAAAA,EAAA,mFAAA/G,KAAAwG,GAAA,CACA,IAAAa,EAAA,IAAAH,KAYA,MAXA,MAAAH,EAAA,IACAM,EAAAC,aAAAP,EAAA,IAAA,GACAM,EAAAE,eAAAR,EAAA,IAAA,GACAM,EAAAG,eAAAT,EAAA,IAAA,GACAM,EAAAI,oBAAAV,EAAA,IAAA,KAEAM,EAAAK,UAAAX,EAAA,IAAA,GACAM,EAAAM,YAAAZ,EAAA,IAAA,GACAM,EAAAO,YAAAb,EAAA,IAAA,GACAM,EAAAQ,iBAAAd,EAAA,IAAA,IAEAM,EAGA,OAAA,IAAAH,KAAAV,GACA,MAAA,iBAAAA,EACA,IAAAU,KAAA,IAAAV,GAEA,IAAAU,KAAA,KAIAlL,IAAAU,MAAA,SAAAoL,GACA,OAAA,MAAAA,EAAA,GACA/L,MAAAf,UAAA6D,MAAAD,KAAAkJ,IAGA9L,IAAA+L,SAAA,SAAAC,GACA,GAAA,MAAAA,EAAA,OAAA,EACA,IACA7M,EADA8M,EAAAC,KAAAC,UAAAH,GACA3J,EAAA,EACA,IAAAlD,EAAA,EAAAA,EAAA8M,EAAAvM,OAAAP,IACAkD,GAAAA,GAAA,GAAAA,EAAA4J,EAAAG,WAAAjN,GACAkD,GAAAA,EAEA,OAAAgK,KAAAC,IAAAjK,IAGArC,IAAAuM,WAAA,SAAAC,GAEA,OADAA,GAAAA,GAAA,EACA,WAEA,OADAA,GAAA,KAAAA,EAAA,OAAA,QACA,SAIAxM,IAAAyM,YAAA,SAAAC,GACA,MAAAC,EAAA,GAEA,GAAAD,EACA,GAAA,iBAAAA,EACA,GAAA3M,MAAA+C,QAAA4J,GACA,IAAA,IAAAvN,EAAA,EAAAyN,EAAAF,EAAAhN,OAAAP,EAAAyN,EAAAzN,IAAA,CACA,MAAAQ,EAAAK,IAAAoE,MAAAsI,EAAAvN,IACAwN,EAAAxK,KAAAjC,OAAA2M,OAAA,GAAAlN,EAAA,CACAmN,KAAA3N,EACA4N,OAAA5N,EACA6N,OAAArN,SAGA,CACA,IAAAR,EAAA,EACA,IAAA,MAAAwB,KAAA+L,EACA,GAAAA,EAAAvM,eAAAQ,GAAA,CACA,MAAAhB,EAAAK,IAAAoE,MAAAsI,EAAA/L,IACAgM,EAAAxK,KAAAjC,OAAA2M,OAAA,GAAAlN,EAAA,CACAmN,KAAAnM,EACAoM,OAAA5N,EACA6N,OAAArN,KAEAR,UAIA,GAAA,iBAAAuN,EACA,IAAA,IAAAzB,EAAA,EAAAA,EAAAyB,EAAAzB,IACA0B,EAAAxK,KAAA,CACA2K,KAAAlH,OAAAqF,GACA8B,OAAA9B,EACA+B,OAAA/B,EAAA,IAMA,OAAA0B,GAGA3M,IAAAiN,aAAA,SAAArC,GAEA,OAAAA,EAAAsC,QAAA,sBAAA,SAGAlN,IAAAmN,SAAA,SAAAvE,GAKA,MAJA,QAAAA,EAAAwE,SACArN,MAAA8F,KAAA+C,EAAAyE,UAAAvN,SAAA8I,GAAAA,EAAA0E,OAAA,IAGA1E,EAAA2E,iBAGAvN,IAAAwN,cAAA,SAAA5E,KAIA,MACA,MAAA6E,EAAA,GAEA3O,OAAA8K,iBAAA,WAAA8D,IACA,GAAAA,EAAA3J,SAAAjF,QAAA,gBAAA4O,EAAA7M,MAAA4M,EAAA/N,OAAA,CACA,MAAAiO,EAAAF,EAAAG,QACAD,EAAAE,GAAAjL,KAAA+K,EAAAG,aAIA9N,IAAA+N,SAAA,CAAAF,EAAAC,KACAL,EAAAtL,KAAA,CAAA0L,GAAAA,EAAAC,QAAAA,IACAhP,OAAAkP,YAAA,cAAA,OAZA,GAuBAhO,IAAAoJ,cAAA,WACA,IAAA6E,GAAA,EACAtJ,EAAA,IAAAsC,IAEA,OAAA,SAAAwD,GACA9F,EAAAH,IAAAiG,GAAA,KAEAwD,IACAA,GAAA,EAEAjO,IAAA+N,UAAA,WAEA,GADAE,GAAA,EACAjO,IAAA8I,IAAA,CAEA,IAAAoF,EAAA,IAAAjH,IAAAtC,GAEAA,EAAAvD,QAEApB,IAAA8I,IAAAU,QAAA0E,SAlBA,GAyBAlO,IAAAmO,SAAA,SAAAN,EAAAO,GACA,IAAAC,EAEA,OAAA,WACA,MAAAxF,EAAA,KACAgF,EAAA1F,MAAA9I,KAAA+I,YAGAgG,GACAE,aAAAD,GACAA,EAAAnF,WAAAL,EAAAuF,KAEAG,qBAAAF,GACAA,EAAAG,sBAAA3F,MAKA7I,IAAAyO,SAAA,SAAAZ,EAAAO,GACA,IACAM,EADAD,GAAA,EAGA,OAAA,WAGA,GAFAC,EAAA3O,MAAA8F,KAAAuC,YAEAqG,EAAA,CACA,MAAA5F,EAAA,KACA4F,GAAA,EACAC,GAAAb,EAAA1F,MAAA9I,KAAAqP,IAGAb,EAAA1F,MAAA9I,KAAAqP,GAEAA,OAAA3M,EACA0M,GAAA,EAEAL,EACAlF,WAAAL,EAAAuF,GAEAI,sBAAA3F,MAMA7I,IAAA2O,SAAA,CACAC,GAAA,EACAC,IAAA,EACAC,MAAA,GACAC,IAAA,GACAC,MAAA,GACAC,KAAA,GACAC,GAAA,GACAC,MAAA,GACAC,KAAA,GACA1N,OAAA,GAEA2N,UAAA,EACAC,MAAA,GACAC,SAAA,GACAC,OAAA,GACAC,OAAA,GACAC,SAAA,GACAC,IAAA,GACAC,KAAA,GACAC,UAAA,GACAC,QAAA,GACAC,WAAA,GACAC,UAAA,GACAC,OAAA,GACAC,QAAA,IACAC,WAAA,IACAC,UAAA,IACA/K,MAAA,IACAgL,MAAA,IACAC,MAAA,IACAC,OAAA,IACAC,MAAA,IACAC,UAAA,IACAC,YAAA,IACAC,UAAA,IACAC,aAAA,IACAC,MAAA,IAEAC,QAAA,GACAC,QAAA,GACAC,QAAA,GACAC,QAAA,GACAC,QAAA,IACAC,QAAA,IACAC,QAAA,IACAC,QAAA,IACAC,QAAA,IACAC,QAAA,IACAC,eAAA,IACAC,UAAA,IACAC,gBAAA,IACAC,aAAA,IAEAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IAEAC,OAAA,GACAC,OAAA,GACAC,OAAA,GACAC,OAAA,GACAC,OAAA,GACAC,OAAA,GACAC,OAAA,GACAC,OAAA,GACAC,OAAA,GACAC,OAAA,GAEAC,KAAA,CAAA,GAAA,IACAC,KAAA,CAAA,GAAA,IACAC,KAAA,CAAA,GAAA,IACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAvP,KAAA,CAAA,GAAA,KACAwP,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,KACAC,KAAA,CAAA,GAAA,MAGA1U,IAAA2U,cAAA,SAAAC,EAAAC,EAAAC,EAAAC,GACA,IAAA1G,EAAAI,EAEA,MAAAuG,EAAA,SAAAtH,GACA,KAAAqH,EAAAE,MAAAvH,EAAAkH,SAAAlH,EAAAwH,kBACAH,EAAAI,MAAAzH,EAAA0H,YACAL,EAAAM,KAAA3H,EAAA4H,WACAP,EAAAnH,OAAAF,EAAA6H,aACAR,EAAAS,MAAA9H,EAAA+H,aAEA/H,EAAAgI,eAAAhI,GAAAiI,KAAAzV,OAAA0E,KAAAmQ,GAAAa,UAAAlI,EAAAgI,eAAAhI,GAAAiI,MAAA,CAIA,IAAAjI,EAAAgI,eAAAhI,aAAAmI,WAAA,CACA,GAAA,MAAAd,EAAAe,QAAApI,EAAAoI,SAAAC,SAAAhB,EAAAe,OAAA,KAAA,GAAA,OACA,GAAAf,EAAAiB,SAAA,GAAAtI,EAAAoI,OAAA,OACA,GAAAf,EAAAkB,SAAA,GAAAvI,EAAAoI,OAAA,OACA,GAAAf,EAAAmB,SAAA,GAAAxI,EAAAoI,OAAA,OACA,GAAAf,EAAAoB,SAAA,GAAAzI,EAAAoI,OAAA,OACA,GAAAf,EAAAqB,SAAA,GAAA1I,EAAAoI,OAAA,OAGA,IAAApI,EAAAgI,eAAAhI,aAAA2I,cAAA,CACA,IAAAzR,EAAA,GAEA1E,OAAA0E,KAAAmQ,GAAAjV,SAAA,SAAAa,GACA,IAAA2V,EAAAP,SAAApV,EAAA,IAEA2V,EACA1R,EAAAzC,KAAAmU,GACAtW,IAAA2O,SAAAhO,IACAiE,EAAAzC,KAAAnC,IAAA2O,SAAAhO,OAIA,IAAA,IAAAxB,EAAA,EAAAA,EAAAyF,EAAAlF,OAAAP,IACA,GAAAY,MAAA+C,QAAA8B,EAAAzF,KACA,IAAAyF,EAAAzF,GAAAyW,SAAAlI,EAAA6I,OAAA,YACA,GAAA7I,EAAA6I,QAAA3R,EAAAzF,GAAA,OA2CA,GAvCA4V,EAAAyB,MAAA9I,EAAA+I,kBACA1B,EAAA2B,SAAAhJ,EAAAiJ,iBAEAjJ,EAAAgI,gBAAAhI,EAAAA,EAAAgI,eAEAhI,EAAAkJ,QAAAlJ,EAAAkJ,MAAA,IAEAlJ,aAAAmI,aACAnI,EAAAkJ,MAAAtB,OAAA5H,EAAA4H,OACA5H,EAAAkJ,MAAAxB,QAAA1H,EAAA0H,QACA1H,EAAAkJ,MAAAnB,QAAA/H,EAAA+H,QACA/H,EAAAkJ,MAAArB,SAAA7H,EAAA6H,SACA7H,EAAAkJ,MAAAC,MAAAnJ,EAAAmJ,MACAnJ,EAAAkJ,MAAAE,MAAApJ,EAAAoJ,MACApJ,EAAAkJ,MAAAG,EAAArJ,EAAAqJ,GAAArJ,EAAAsJ,QACAtJ,EAAAkJ,MAAAK,EAAAvJ,EAAAuJ,GAAAvJ,EAAAwJ,QACAxJ,EAAAkJ,MAAAd,OAAApI,EAAAoI,QAGApI,aAAAyJ,aACAzJ,EAAAkJ,MAAAQ,OAAA1J,EAAA0J,OACA1J,EAAAkJ,MAAAS,OAAA3J,EAAA2J,OACA3J,EAAAkJ,MAAAU,OAAA5J,EAAA4J,OACA5J,EAAAkJ,MAAAW,UAAA7J,EAAA6J,WAGAzY,OAAA0Y,cAAA9J,aAAA8J,eACA9J,EAAAkJ,MAAAa,UAAA/J,EAAA+J,UACA/J,EAAAkJ,MAAA1S,MAAAwJ,EAAAxJ,MACAwJ,EAAAkJ,MAAAzS,OAAAuJ,EAAAvJ,OACAuJ,EAAAkJ,MAAAc,SAAAhK,EAAAgK,SACAhK,EAAAkJ,MAAAe,mBAAAjK,EAAAiK,mBACAjK,EAAAkJ,MAAAgB,MAAAlK,EAAAkK,MACAlK,EAAAkJ,MAAAiB,MAAAnK,EAAAmK,MACAnK,EAAAkJ,MAAAkB,MAAApK,EAAAoK,MACApK,EAAAkJ,MAAAmB,YAAArK,EAAAqK,YACArK,EAAAkJ,MAAAoB,UAAAtK,EAAAsK,WAGAlZ,OAAAmZ,YAAAvK,aAAAuK,WAAA,CACA,MAAAC,EAAAC,IAAA,CACAC,WAAAD,EAAAC,WACAC,QAAAF,EAAAE,QACAC,QAAAH,EAAAG,QACAtB,QAAAmB,EAAAnB,QACAE,QAAAiB,EAAAjB,QACAL,MAAAsB,EAAAtB,MACAC,MAAAqB,EAAArB,QAGApJ,EAAAkJ,MAAAtB,OAAA5H,EAAA4H,OACA5H,EAAAkJ,MAAAxB,QAAA1H,EAAA0H,QACA1H,EAAAkJ,MAAAnB,QAAA/H,EAAA+H,QACA/H,EAAAkJ,MAAArB,SAAA7H,EAAA6H,SACA7H,EAAAkJ,MAAA2B,QAAAxY,MAAA8F,KAAA6H,EAAA6K,SAAAvX,IAAAkX,GACAxK,EAAAkJ,MAAA4B,eAAAzY,MAAA8F,KAAA6H,EAAA8K,gBAAAxX,IAAAkX,GACAxK,EAAAkJ,MAAA6B,cAAA1Y,MAAA8F,KAAA6H,EAAA+K,eAAAzX,IAAAkX,GACAxK,EAAAkJ,MAAA8B,SAAAhL,EAAAgL,SACAhL,EAAAkJ,MAAA+B,MAAAjL,EAAAiL,MAcA,GAXAjL,aAAA2I,gBACA3I,EAAAkJ,MAAAtB,OAAA5H,EAAA4H,OACA5H,EAAAkJ,MAAAxB,QAAA1H,EAAA0H,QACA1H,EAAAkJ,MAAAnB,QAAA/H,EAAA+H,QACA/H,EAAAkJ,MAAArB,SAAA7H,EAAA6H,SACA7H,EAAAkJ,MAAAgC,SAAAlL,EAAAkL,SACAlL,EAAAkJ,MAAAlK,OAAAgB,EAAAhB,OACAgB,EAAAkJ,MAAAiC,KAAAnL,EAAAmL,KACAnL,EAAAkJ,MAAAjW,IAAA+M,EAAA/M,KAGAoU,EAAA5G,SACAG,aAAAD,GACAA,EAAAnF,YAAA,KACA4L,EAAA3M,MAAA9I,KAAA+I,aACA2N,SAAAhB,EAAA5G,SAAA,KAAA,OACA,CAAA,IAAA4G,EAAAtG,SASA,OAAAqG,EAAA3M,MAAA9I,KAAA+I,WARAqG,IACAA,GAAA,EACAqG,EAAA3M,MAAA9I,KAAA+I,WACAc,YAAA,KACAuF,GAAA,IACAsH,SAAAhB,EAAAtG,SAAA,KAAA,OAOAsG,EAAAA,GAAA,GAEAjW,OAAAga,MAAA,IAAAlE,EAAAmE,SACAD,KAAAlE,GAAAG,EAAAiE,KAAA,OAAA,MAAAnE,EAAA3H,QAAA,KAAA,KAAA8H,IAAAD,EAAAkE,SACAna,OAAAoa,SAAAnE,EAAAkE,QACAC,OAAAtE,GAAAG,EAAAiE,KAAA,MAAA,MAAAnE,EAAA3H,QAAA,KAAA,KAAA8H,GAEAJ,EAAAhL,iBAAAiL,EAAA3H,QAAA,KAAA,KAAA8H,EAAA,CACAiE,UAAAlE,EAAAkE,QACAD,OAAAjE,EAAAiE,KACAG,UAAApE,EAAAoE,WAKAnZ,IAAAoZ,YAAA,SAAAC,EAAAC,GACA,IAAAC,EAAA,WACAF,EAAAnW,aACAmW,EAAAnW,YAAAiF,MAAA9I,KAAA+I,YAYA,OARAkR,GAAAA,EAAAta,YACAua,EAAAva,UAAAkB,OAAAsB,OAAA8X,EAAAta,YAGAkB,OAAA2M,OAAA0M,EAAAva,UAAAqa,GAEAE,EAAAva,UAAAkE,YAAAqW,EAEAA,GAGAvZ,IAAAwZ,OAAA,SAAAtS,GACAhH,OAAA2M,OAAA7M,IAAAkH,OAAAA,IAGAlH,IAAAuJ,UAAA,SAAAkQ,EAAAJ,GACA,GAAAA,EAAA,CACA,IAAAC,EAAAtZ,IAAAuJ,UAAA8P,EAAAK,UAAA1Z,IAAA2Z,cAEAN,EAAAO,YAAA1Z,OAAA2M,OAAA,GAAAyM,EAAAta,UAAA4a,YAAAP,EAAAO,aACAP,EAAAQ,WAAA3Z,OAAA2M,OAAA,GAAAyM,EAAAta,UAAA6a,WAAAR,EAAAQ,YACAR,EAAAS,QAAA5Z,OAAA2M,OAAA,GAAAyM,EAAAta,UAAA8a,QAAAT,EAAAS,SACAT,EAAAU,OAAA7Z,OAAA2M,OAAA,GAAAyM,EAAAta,UAAA+a,OAAAV,EAAAU,QAEAV,EAAAlZ,eAAA,iBACAkZ,EAAAnW,YAAA,SAAA0F,EAAAoR,GACAV,EAAA1W,KAAAvD,KAAAuJ,EAAAoR,KAIAX,EAAAvY,KAAA2Y,EAEA,IAAAlQ,EAAAvJ,IAAAoZ,YAAAC,EAAAC,GACA/P,EAAAmQ,QAAAL,EAAAK,QAEA1Z,IAAAoG,aAAAqT,GAAAlQ,EAGA,OAAAvJ,IAAAoG,aAAAqT,IAGAzZ,IAAAia,UAAA,SAAAC,EAAAC,EAAAtM,GACA7N,IAAAqG,aAAA8T,KACAna,IAAAqG,aAAA8T,GAAA,IAEAna,IAAAqG,aAAA8T,GAAAD,GAAArM,GAGA7N,IAAAoa,WAAA,SAAAtZ,EAAAkL,GAIA,IAAA,IAAAkO,KAHAla,IAAAyG,aAAA3F,KACAd,IAAAyG,aAAA3F,GAAA,IAEAkL,EACAA,EAAA7L,eAAA+Z,KACAla,IAAAyG,aAAA3F,GAAAoZ,GAAAlO,EAAAkO,KAKAla,IAAAqa,UAAA,SAAAvZ,EAAAoZ,EAAArM,GACA7N,IAAAyG,aAAA3F,KACAd,IAAAyG,aAAA3F,GAAA,IAEAd,IAAAyG,aAAA3F,GAAAoZ,GAAArM,GAGA7N,IAAAsa,QAAA,SAAAxZ,EAAAoZ,EAAArM,GASA,OARA7N,IAAA8G,WAAAhG,KACAd,IAAA8G,WAAAhG,GAAA,IAGA+M,IACA7N,IAAA8G,WAAAhG,GAAAoZ,GAAArM,GAGA7N,IAAA8G,WAAAhG,GAAAoZ,IAGAla,IAAAua,QAAA,SAAAC,GACA,IAAA,IAAAN,KAAAM,EACAA,EAAAra,eAAA+Z,KACAla,IAAA+G,UAAAmT,GAAAM,EAAAN,KAKAla,IAAAya,OAAA,SAAAP,EAAAQ,GACA1a,IAAA+G,UAAAmT,GAAAQ,GAGA1a,IAAA2a,QAAA,SAAAC,GACA5a,IAAAgH,UAAAxC,IAAAoW,ICjuBA,QAAAtb,SAAAsZ,SAAAiC,UACA7a,IAAA2a,QAAA,IAAA9Q,SAAAiR,GAAAxb,SAAAsK,iBAAA,cAAAkR,MCHA,WAEA,IAAAC,EAAA,SAAAC,GACA,KAAA3b,gBAAA0b,GACA,OAAA,IAAAA,EAAAC,GAEA,GAAAA,aAAAD,EACA,OAAAC,EAEA,IAAAA,EAAA,OAAA3b,KACA,IAAA4b,EAAAD,EAAAtb,OACA,GAAAsb,EAAAjC,SACA1Z,KAAA,GAAA2b,EACA3b,KAAAK,OAAA,MACA,CAAA,GAAA,iBAAAsb,EACA,OAAAD,EAAAzb,SAAAE,iBAAAwb,IACA,GAAAC,EACA,IAAA,IAAA9b,EAAA,EAAAA,EAAA8b,EAAA9b,IACA6b,EAAA7b,IAAA6b,EAAA7b,GAAA4Z,WACA1Z,KAAAA,KAAAK,QAAAsb,EAAA7b,GACAE,KAAAK,UAIA,OAAAL,MAGA0b,EAAA/b,UAAA,CACAkE,YAAA6X,EACArb,OAAA,EAEAwb,SAAA,SAAAC,GACA,IAAA,IAAAhc,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACAE,KAAAF,GAAAic,UAAA5W,IAAA2W,GAEA,OAAA9b,MAGAgc,YAAA,SAAAF,GACA,IAAA,IAAAhc,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACAE,KAAAF,GAAAic,UAAAE,OAAAH,GAEA,OAAA9b,MAGAkc,YAAA,SAAAJ,GACA,IAAA,IAAAhc,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACAE,KAAAF,GAAAic,UAAAI,OAAAL,GAEA,OAAA9b,MAGAoc,SAAA,SAAAN,GACA,QAAA9b,KAAA,IACAA,KAAA,GAAA+b,UAAAM,SAAAP,IAGAQ,KAAA,SAAAC,EAAArb,GACA,GAAA,IAAA6H,UAAA1I,QAAA,iBAAAkc,EACA,OAAAvc,KAAA,IAAAA,KAAA,GAAAwc,aAAAD,GAEA,IAAA,IAAAzc,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACA,GAAA,IAAAiJ,UAAA1I,OACAL,KAAAF,GAAA2c,aAAAF,EAAArb,QAEA,IAAA,IAAAob,KAAAC,EACAA,EAAAzb,eAAAwb,IACAtc,KAAAF,GAAA2c,aAAAH,EAAAC,EAAAD,IAMA,OAAAtc,MAGA0c,WAAA,SAAAJ,GACA,IAAA,IAAAxc,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACAE,KAAAF,GAAA+K,gBAAAyR,GAEA,OAAAtc,MAGAoL,KAAA,SAAA9F,EAAApE,GACA,GAAA,IAAA6H,UAAA1I,QAAA,iBAAAiF,EACA,OAAAtF,KAAA,IAAAA,KAAA,GAAAsF,GAEA,IAAA,IAAAxF,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACA,GAAA,IAAAiJ,UAAA1I,OACAL,KAAAF,GAAAwF,GAAApE,OAEA,IAAA,IAAAkK,KAAA9F,EACAA,EAAAxE,eAAAsK,KACApL,KAAAF,GAAAsL,GAAA9F,EAAA8F,IAMA,OAAApL,MAGA2c,IAAA,SAAArX,EAAApE,GACA,GAAA,IAAA6H,UAAA1I,QAAA,iBAAAiF,EACA,OAAAtF,KAAA,IAAAP,OAAAmd,iBAAA5c,KAAA,GAAA,MAAA6c,iBAAAvX,GAEA,IAAA,IAAAxF,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACA,GAAA,IAAAiJ,UAAA1I,OACAL,KAAAF,GAAAuK,MAAAyS,YAAAxX,EAAApE,QAEA,IAAA,IAAAkK,KAAA9F,EACAA,EAAAxE,eAAAsK,IACApL,KAAAF,GAAAuK,MAAAyS,YAAA1R,EAAA9F,EAAA8F,IAMA,OAAApL,MAGA+c,KAAA,SAAAC,EAAAvO,GACA,IAAAuO,EAAA,OAAAhd,KACA,IAAA,IAAAF,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACA,IAAA,IAAAkd,EAAAzZ,KAAAkL,GAAAzO,KAAAF,GAAAA,EAAAE,KAAAF,IACA,OAAAE,KAGA,OAAAA,MAGAid,OAAA,WACA,IAAA,IAAAnd,EAAA,EAAAA,EAAAiJ,UAAA1I,OAAAP,IAGA,IAFA,IAAAod,EAAAxB,EAAA3S,UAAAjJ,IAEAqd,EAAA,EAAAA,EAAAD,EAAA7c,OAAA8c,IACAnd,KAAA,GAAAod,YAAAF,EAAAC,IAGA,OAAAnd,MAGAqd,SAAA,SAAA1C,GAEA,OADAe,EAAAf,GAAAsC,OAAAjd,MACAA,MAGAsd,OAAA,WACA,IAAA,IAAAxd,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACAE,KAAAF,GAAAyd,YACAvd,KAAAF,GAAAyd,WAAAC,YAAAxd,KAAAF,IAGA,OAAAE,MAGAyd,MAAA,WACA,IAAA,IAAA3d,EAAA,EAAAA,EAAAE,KAAAK,OAAAP,IACAE,KAAAF,GAAA4d,UAAA,GAEA,OAAA1d,OAIAW,IAAAgd,IAAA,CAEAnb,IAAA,SAAAob,GACA,OAAAlC,EAAAzb,SAAA4d,eAAAD,KAGA1V,OAAA,SAAA4V,GACA,OAAApC,EAAAoC,IAGA3b,OAAA,SAAA4L,GACA,IAAAgQ,EAAA9d,SAAA+d,cAAAjQ,GACA,OAAA2N,EAAAqC,IAGA1B,SAAA,SAAA9S,GACA,OAAAtJ,SAAAmK,gBAAAiS,SAAA9S,IAGA0U,KAAA,SAAA1U,EAAAiF,EAAAC,GACA,GAAAlF,EAAA,CACA,IAAA,IAAAiF,EAAAjL,KAAAkL,EAAAlF,GAEA,OACAA,EAAA2U,iBACAxd,MAAAf,UAAA6D,MAAAD,KAAAgG,EAAA4U,WAAA,GAAA1d,SAAA,SAAA8I,GACA5I,IAAAgd,IAAAM,KAAA1U,EAAAiF,EAAAC,QAMA2P,cAAA,SAAA7U,GACA,IAAAiR,EAAA,GAEA,GAAA,GAAAjR,EAAAmQ,SACA,IAAA,IAAA5Z,EAAA,EAAAA,EAAAyJ,EAAAiR,WAAAna,OAAAP,IAAA,CACA,IAAAue,EAAA9U,EAAAiR,WAAA1a,GAEA,GAAAue,GAAAA,EAAAC,WAAA3d,IAAAyH,WAAAhD,KAAAiZ,EAAAxD,MAAA,CACA,IAAAA,EAAAwD,EAAAxD,KAAA0D,OAAA,GACAC,EAAA,KACA9I,EAAA,GAEAmF,EAAA4D,MAAA,KAAAhe,SAAA,SAAAie,EAAA5e,GACA,GAAA,IAAAA,EACA+a,EAAA6D,MACA,CACA,IAAAC,EAAAD,EAAAE,QAAA,KACAD,EAAA,EACAjJ,EAAAgJ,EAAAH,OAAA,EAAAI,IAAAD,EAAAH,OAAAI,EAAA,GAEAjJ,EAAAgJ,IAAA,MAKA,IAAAC,EAAA9D,EAAA+D,QAAA,KACAD,EAAA,IACAH,EAAA3D,EAAA0D,OAAAI,EAAA,GACA9D,EAAAA,EAAA0D,OAAA,EAAAI,IAGAnE,EAAA1X,KAAA,CACA+X,KAAAA,EACAgE,SAAAR,EAAAxD,KACA3Z,MAAAmd,EAAAnd,MACAsd,SAAAA,EACA9I,UAAAA,KAMA,OAAA8E,GAGAyB,OAAA,SAAA1S,GACA7I,MAAA+C,QAAA8F,GACAA,EAAA9I,SAAA,SAAA8I,GACA5I,IAAAgd,IAAA1B,OAAA1S,MAGAA,EAAA0S,UAIApO,QAAA,SAAAiR,EAAAC,GACAD,EAAAvB,YACAuB,EAAAvB,WAAAyB,aAAAD,EAAAD,KA7PA,GCAA,WAEA,IAAAG,EAAA,GAGAC,EAAA,CACAC,QAAA,UACAC,KAAA,OACAC,UAAA,YACAC,OAAA,SACAC,OAAA,SACAhZ,OAAA,SACAsF,KAAA,OACA2T,OAAA,SACAC,KAAA,OACAC,KAAA,OACAC,SAAA,WACAC,YAAA,cACAC,YAAA,cACAC,UAAA,YACApf,MAAA,QACAG,OAAA,SACAoC,IAAA,MACA2E,IAAA,MACAmY,SAAA,QACAC,UAAA,QACAjc,WAAA,QACAkc,kBAAA,QACAC,WAAA,QACAC,YAAA,QACAC,WAAA,QACAC,YAAA,QACAC,aAAA,QACAC,aAAA,QACAC,cAAA,QACAC,eAAA,SAGAC,EAAA,CACA,IAAA,UACA,IAAA,UACA,IAAA,UACA,IAAA,UACA,IAAA,YACA,IAAA,YACA,IAAA,SACA,IAAA,QACA,IAAA,OACA,IAAA,QACA,IAAA,WAEA,IAAA,YACA,IAAA,YACA,IAAA,iBACA,IAAA,iBACA,IAAA,iBAEA,MAAA,WACA,MAAA,WACA,KAAA,WACA,KAAA,WACA,IAAA,aACA,IAAA,aACA,KAAA,aACA,KAAA,aACAC,GAAA,aAEA,KAAA,cACA,KAAA,aACA,IAAA,cAEA,IAAA,cACA,IAAA,aACA,IAAA,cACA,IAAA,cACA,KAAA,gBACA,KAAA,gBACA,MAAA,iBAGAC,EAAA,CACAhV,EAAA,KACAiV,EAAA,KACAC,EAAA,KACAC,EAAA,KACAvV,EAAA,KACA,IAAA,IACA,IAAA,IACA,IAAA,KAGAwV,EAAA,CACA,KAAA,SAAAC,EAAAC,GAAA,OAAAlU,KAAAmU,IAAAF,IAAAC,MACA,KAAA,SAAAD,EAAAC,GAAA,OAAA,OAAAD,EAAAA,KAAAC,IAAAD,GACAN,GAAA,SAAAM,EAAAC,GAAA,OAAAD,MAAAC,KACA,IAAA,SAAAD,EAAAC,EAAAE,GAAA,OAAAH,IAAAC,IAAAE,KACA,IAAA,SAAAH,EAAAC,GAAA,OAAAD,EAAAA,IAAAC,EAAAA,IAAA,MAAAD,EAAAC,EAAA,MAAAA,EAAAD,EAAAA,EAAAC,GACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,MAAA,SAAAD,EAAAC,GAAA,OAAAD,MAAAC,KACA,MAAA,SAAAD,EAAAC,GAAA,OAAAD,MAAAC,KACA,KAAA,SAAAD,EAAAC,GAAA,OAAAD,KAAAC,KACA,KAAA,SAAAD,EAAAC,GAAA,OAAAD,KAAAC,KACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,KAAA,SAAAD,EAAAC,GAAA,OAAAD,KAAAC,KACA,KAAA,SAAAD,EAAAC,GAAA,OAAAD,KAAAC,KACA,KAAA,SAAAD,EAAAC,GAAA,OAAAD,KAAAC,KACA,KAAA,SAAAD,EAAAC,GAAA,OAAAD,KAAAC,KACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,IAAA,SAAAD,EAAAC,GAAA,OAAAD,IAAAC,KACA,KAAA,SAAAD,EAAAC,GAAA,OAAAD,KAAAC,KACA,KAAA,SAAAD,EAAAC,GAAA,OAAAD,KAAAC,KACA,MAAA,SAAAD,EAAAC,GAAA,OAAAD,MAAAC,KACA,IAAA,SAAAD,GAAA,OAAAA,KACA,IAAA,SAAAA,GAAA,OAAAA,MAGAI,EAAA,CACArhB,KAAA,SAAAshB,GAAA,OAAA,WAAA,OAAAA,EAAA9f,OACAkB,UAAA,WAAA,OAAA,cACA6e,KAAA,WAAA,OAAA,WAAA,OAAA,OACAC,KAAA,WAAA,OAAA,WAAA,OAAA,IACAC,MAAA,WAAA,OAAA,WAAA,OAAA,IACAC,EAAA,WAAA,OAAA,WAAA,MAAA,CAAAC,cAAA,MAGAC,EAAA,WAAA,OAAA,GAEAjhB,IAAA2C,QAAA,SAAA6H,GACA,OAAA+T,EAAAre,OAAAlB,UAAAiB,SAAA2C,KAAA4H,GAAA3H,MAAA,GAAA,KAGA7C,IAAAkhB,UAAA,SAAAjV,GACA,GAAA,iBAAAA,EAAA,MAAA,GAEA,IAAAkV,EAAA,GAEA,GAAAlV,EAAA2J,SAAA,MAAA,CACA,IAAAwL,EAEA,KAAA,OAAAA,EAAAphB,IAAA2H,oBAAA3D,KAAAiI,KACAkV,EAAAA,EAAAE,OAAArhB,IAAAshB,MAAAF,EAAA,UAGAD,EAAAnhB,IAAAshB,MAAArV,GAGA,OAAAkV,EAAAI,QAAA,CAAArT,EAAAsT,KACA,SAAAA,EAAAtH,KACAhM,EAAA/L,KAAAqf,EAAAjhB,OACA,UAAAihB,EAAAtH,MACAsH,EAAAjhB,MAAAkhB,WAAA,QACAvT,EAAAA,EAAAmT,OAAArhB,IAAAkhB,UAAAM,EAAAjhB,SAGA2N,IACA,KAGAlO,IAAAshB,MAAA,SAAAI,GACA,GAAApD,EAAAoD,GACA,OAAApD,EAAAoD,GAKA,IAFA,IAAAF,EAAAtH,EAAAyH,EAAAC,EAAAC,EAAAC,EAAAX,EAAA,GAAAhgB,EAAA,EAAA4gB,GAAA,EAEA5gB,EAAAugB,EAAAhiB,QAAA,CAKA,GAJAiiB,EAAAxgB,EAIA6gB,EAFAJ,EAAAK,MAEAF,EACA7H,EAAA,SACAsH,EAAAU,EAAAN,GACAG,GAAA,OAEA,IAAAI,EAAAP,IAAAQ,EAAA,MAAAC,KAAAF,EAAAE,OAAAN,EACA7H,EAAA,SACAsH,EAAAc,IACAP,GAAA,OAEA,GAAAQ,EAAAX,IAAAG,EACA7H,EAAA,QACAsH,EAAAgB,IACAJ,EAAA,OACAlI,EAAA,UAEA6H,GAAA,OAEA,GAAAK,EAAA,MAAAL,IAAA,KAAAP,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,IAAAiB,IACAvI,EAAA,SACAsH,EAAAkB,IACAX,GAAA,MAEA,CAAA,GAAAY,EAAAf,GAAA,CAEAzgB,IACA,SAEA,IAAA2gB,EAAAG,EAAA,KAAAlC,EAAA+B,GACA5H,EAAA6F,EAAA+B,GACAN,EAAAM,EACAC,GAAA,EACA5gB,GAAA,OAEA,IAAA0gB,EAAAI,EAAA,KAAAlC,EAAA8B,GACA3H,EAAA6F,EAAA8B,GACAL,EAAAK,EACAE,GAAA,EACA5gB,GAAA,MAEA,CAAA,IAAA4e,EAAA6B,GAQA,MAAAgB,MAAA,kCAAAhB,EAAA,eAAAzgB,EAAA,mBAAAugB,EAAA,KAPAxH,EAAA6F,EAAA6B,GACAJ,EAAAI,EACAG,GAAA,EACA5gB,KAOAggB,EAAAhf,KAAA,CACA+X,KAAAA,EACA/Y,MAAAwgB,EACAphB,MAAAihB,IAMA,OAFAlD,EAAAoD,GAAAP,EAEAA,EAEA,SAAAc,EAAAhX,GACA,OAAAA,EAAA,EAAAyW,EAAA9D,OAAAzc,EAAA8J,GAAAyW,EAAAvgB,GAGA,SAAAkhB,EAAApX,GAEA,OAAA9J,GADA8J,EAAAA,GAAA,GACAyW,EAAAhiB,QAAAgiB,EAAAvgB,EAAA8J,GAGA,SAAAmX,EAAAS,GACA,OAAA,GAAAA,EAAA5E,QAAA2D,GAGA,SAAAI,EAAAJ,GACA,MAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,EAGA,SAAAO,EAAAP,GACA,OAAAA,GAAA,KAAAA,GAAA,IAGA,SAAAW,EAAAX,GACA,OAAAA,GAAA,KAAAA,GAAA,KACAA,GAAA,KAAAA,GAAA,KACA,KAAAA,GAAA,KAAAA,EAGA,SAAAkB,EAAAlB,GACA,OAAAW,EAAAX,IAAAO,EAAAP,GAGA,SAAAe,EAAAf,GACA,MAAA,KAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,KAAAA,EAGA,SAAAmB,EAAAnB,GACA,MAAA,KAAAA,GAAA,KAAAA,GAAAO,EAAAP,GAGA,SAAAM,EAAArR,GACA,IAAAtO,EAAA,GAAAiN,GAAA,EAIA,IAFArO,IAEAA,EAAAugB,EAAAhiB,QAAA,CAIA,GAHAkiB,EAAAK,IAGAzS,EAAA,CAEA,GAAA,KAAAoS,EAAA,CACAzgB,IACA,IAAA6hB,EAAAf,EAAA,GACA,GAAAe,EAAA5B,MAAA,eACA,MAAAwB,MAAA,oCAAAzhB,EAAA,mBAAAugB,EAAA,KAEAnf,GAAAqD,OAAAqd,aAAAlN,SAAAiN,EAAA,KACA7hB,GAAA,MAEA,CACA,IAAA+hB,EAAAjD,EAAA2B,GACArf,GAAA2gB,GAAAtB,EAGApS,GAAA,OAEA,GAAA,MAAAoS,EAEApS,GAAA,MAEA,CAAA,GAAAoS,GAAA/Q,EAMA,OAJA1P,IACA,KAAA0P,IACAtO,EAAA,KAAAA,EAAA,MAEAA,EAGAA,GAAAqf,EAGAzgB,IAGA,MAAAyhB,MAAA,qCAAAlB,EAAA,KAGA,SAAAY,IAGA,IAFA,IAAA1b,EAAA,GAAAuc,GAAA,EAEAhiB,EAAAugB,EAAAhiB,QAAA,CAGA,GAFAkiB,EAAAK,IAEAG,EAAA,MAAAC,KAAAF,EAAAE,MAAAF,EAAAP,GACAhb,GAAAgb,MAEA,CACA,IAAAwB,EAAAf,IAEA,GAAAD,EAAA,OAAAW,EAAAK,GACAxc,GAAA,IACAuc,GAAA,MAEA,CAAA,KAAAJ,EAAAnB,IAAAwB,GAAAjB,EAAAiB,IAAAD,GAIA,CAAA,IAAAJ,EAAAnB,IAAAwB,GAAAjB,EAAAiB,KAAAD,EAIA,MAHA,MAAAP,MAAA,qBAAAhB,EAAA,oBAAAF,EAAA,KAJA9a,GAAAgb,EACAuB,GAAA,GAUAhiB,IAKA,OAAAyF,EAGA,SAAA4b,IAGA,IAFA,IAAAa,EAAA,GAEAliB,EAAAugB,EAAAhiB,QAGAojB,EAFAlB,EAAAK,MAGAoB,GAAAzB,EAMAzgB,IAGA,OAAAkiB,EAGA,SAAAX,IACA,IAAA9e,EAAA,GAAAmR,EAAA,GAAAvF,GAAA,EAIA,IAFArO,IAEAA,EAAAugB,EAAAhiB,QAAA,CAIA,GAHAkiB,EAAAK,IAGAzS,EACAA,GAAA,OAEA,GAAA,MAAAoS,EAEApS,GAAA,OAEA,GAAA,KAAAoS,EAAA,CAIA,IAFAzgB,KAEA,GAAA,MAAA8c,QAAA2D,EAAAK,MACAlN,GAAA6M,EACAzgB,IAIA,OAAA,IAAA0d,OAAAjb,EAAAmR,GAGAnR,GAAAge,EACAzgB,IAGA,MAAAyhB,MAAA,sCAAAlB,EAAA,KAGA,SAAAe,IACA,IAAAa,EAAAniB,EAAAoiB,GAAA,EAEA,IACAb,IACA,MAAAra,GACAkb,GAAA,EAOA,OAHApiB,EAAAmiB,EACA1B,EAAA,IAEA2B,IAIAvjB,IAAAwjB,MAAA,SAAA9B,EAAAf,GAIA,GAHAA,EAAAA,GAAA3gB,IAAA8I,IAGA9I,IAAA0H,aAAAjD,KAAAid,GACA,MAAA,MAAAA,EAAA9D,OAAA,EAAA,IAAA,MAAA8D,EAAA9D,QAAA,KAAA,GAAA8D,EAAAzD,QAAA,KAAA,GACAje,IAAAwjB,MAAA9B,EAAA+B,UAAA,EAAA/B,EAAAhiB,OAAA,GAAAihB,GAGAe,EAAAxU,QAAAlN,IAAA2H,qBAAA,SAAA6Z,EAAAE,GACA,IAAAnhB,EAAAP,IAAAwjB,MAAA9B,EAAAf,GACA,OAAA,MAAApgB,EAAA,GAAAA,KAIA,GAAAmhB,EAAAgC,OAAA,CAEA,IAAAnjB,EAEA,IACA,IAAAuN,EAAAqT,EAAAnhB,IAAAshB,MAAAI,GAAA7e,MAAA,GACAtC,EA0DA,WACA,IAAA+f,EAAA,GAEA,OAKA,GAJAa,EAAAzhB,OAAA,KAAA2iB,EAAA,YAAAA,EAAA,cAAAA,EAAA,YAAAA,EAAA,UAAAA,EAAA,UACA/B,EAAAne,KAAAwhB,MAGAC,EAAA,WAAAA,EAAA,QACA,OAAA,GAAAtD,EAAA5gB,OAAA4gB,EAAA,GAAAC,KAIA,SAAAA,IAGA,IAFA,IAAAhgB,EAEApB,EAAA,EAAAA,EAAAmhB,EAAA5gB,OAAAP,IAAA,CACA,IAAAkJ,EAAAiY,EAAAnhB,GACAkJ,IAAA9H,EAAA8H,KAGA,OAAA9H,GA/EAsjB,GACA,MAAAC,GACAC,QAAAC,MAAAF,GAGA,OAAAvjB,EAIA,SAAA0hB,IACA,GAAA,IAAAd,EAAAzhB,OACA,MAAAkjB,MAAA,iCAAAlB,EAAA,KAGA,OAAAP,EAAA,GAGA,SAAAkB,EAAAha,GACA,GAAA8Y,EAAAzhB,OAAA,EAAA,CACA,IAAA8hB,EAAAL,EAAA,GAEA,IAAA9Y,GAAAmZ,EAAAtH,MAAA7R,EACA,OAAAmZ,EAIA,OAAA,EAGA,SAAAoC,EAAAvb,GACA,IAAAmZ,EAAAa,EAAAha,GAEA,QAAAmZ,IACAL,EAAAvT,QACA4T,GAMA,SAAAyC,EAAA5b,GACA,IAAAub,EAAAvb,GACA,MAAAua,MAAA,gCAAAva,EAAA,oBAAAqZ,EAAA,KAIA,SAAA7T,EAAA6T,GACA,IAAAhT,EAAA3O,MAAAf,UAAA6D,MAAAD,KAAAwF,UAAA,GAEA,OAAA,WACA,OAAAiY,EAAAlgB,eAAAuhB,GACArB,EAAAqB,GAAAvZ,MAAAwY,EAAAjS,GAEAgT,GA8BA,SAAAiC,IACA,OAAAO,IAGA,SAAAA,IACA,IAAAC,EAAAlV,EAeA,WACA,IAAAuS,EAAAvS,EAAAmV,IAEA,OAAA,CACA,KAAA5C,EAAAoC,EAAA,eAGA,OAAA3U,EAFAA,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAAmV,MApBAC,GAEA,GAAAT,EAAA,YAAA,CAGA,GAFAO,EAAAD,IAEAN,EAAA,SACA,OAAA/V,EAAA,IAAAoB,EAAAkV,EAAAD,KAEA,MAAAtB,MAAA,kCAAAlB,EAAA,KAGA,OAAAzS,EAgBA,SAAAmV,IACA,IAAA5C,EAAAvS,EASA,WACA,IAAAuS,EAAAvS,EAAAqV,KAEA9C,EAAAoC,EAAA,iBACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAAqV,MAGA,OAAArV,EAhBAsV,GAMA,OAJA/C,EAAAoC,EAAA,kBACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAAmV,MAGAnV,EAaA,SAAAqV,IACA,IAAA9C,EAAAvS,EAAAuV,IAMA,OAJAhD,EAAAoC,EAAA,kBACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAAuV,MAGAvV,EAGA,SAAAuV,IACA,IAAAhD,EAAAvS,EAAAwV,IAMA,OAJAjD,EAAAoC,EAAA,kBACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAAuV,MAGAvV,EAGA,SAAAwV,IACA,IAAAjD,EAAAvS,EAAAyV,IAMA,OAJAlD,EAAAoC,EAAA,eACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAAwV,MAGAxV,EAGA,SAAAyV,IACA,IAAAlD,EAAAvS,EAWA,WACA,IAAAuS,EAAAvS,EAAA0V,IAEA,KAAAnD,EAAAoC,EAAA,kBACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAA0V,KAGA,OAAA1V,EAlBA2V,GAMA,OAJApD,EAAAoC,EAAA,iBACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAAyV,MAGAzV,EAeA,SAAA0V,IAGA,IAFA,IAAAnD,EAAAvS,EAAA4V,IAEArD,EAAAoC,EAAA,cACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAA4V,KAGA,OAAA5V,EAGA,SAAA4V,IAGA,IAFA,IAAArD,EAAAvS,EAAA6V,IAEAtD,EAAAoC,EAAA,mBACA3U,EAAApB,EAAA2T,EAAAjhB,MAAA0O,EAAA6V,KAGA,OAAA7V,EAGA,SAAA6V,IACA,IAAAtD,EAEA,OAAAA,EAAAoC,EAAA,cACA,KAAApC,EAAAjhB,MACAwkB,IAEAlX,EAAA2T,EAAAjhB,MAAA0gB,EAAA6D,MAEAtD,EAAAoC,EAAA,gBACA/V,EAAA2T,EAAAjhB,MAAAukB,KAEAC,IAIA,SAAAA,IACA,IAAAxkB,EAAA6iB,EAEA,GAAAQ,EAAA,WACArjB,EAAAojB,IACAM,EAAA,gBACA,GAAAL,EAAA,WAAA,CACA,IAAApZ,EAAA,GAEA,GAAA,WAAAyX,IAAA/H,KACA,EAAA,CACA,IAAAvZ,EAAAijB,IAAArjB,MACA0jB,EAAA,SACAzZ,EAAA7J,GAAAgjB,GAAAA,SACAC,EAAA,UAGArjB,EAAAsN,EAAArD,GAEAyZ,EAAA,gBACA,GAAAL,EAAA,aAAA,CACA,IAAA9X,EAAA,GAEA,GAAA,aAAAmW,IAAA/H,KACA,GACApO,EAAA3J,KAAAwhB,GAAAA,UACAC,EAAA,UAGArjB,EAAAsN,EAAA/B,GAEAmY,EAAA,kBACA,GAAAL,EAAA,UACArjB,EAAA8hB,IAAA2C,EAAAnX,EAAA8S,EAAA9f,OAAAgN,EAAA8S,EAAA9f,UACA,CACA,IAAA2gB,EAAAoC,IAEA,IAAA,IAAApC,EACA,MAAAoB,MAAA,6BAAAlB,EAAA,KAIAnhB,EADA,SAAAihB,EAAAtH,KACAwG,EAAAvgB,eAAAqhB,EAAAjhB,OACAmgB,EAAAc,EAAAjhB,OAAAogB,GACA,WAAA,OAAAA,EAAA9e,IAAA2f,EAAAjhB,QACA,UAAAihB,EAAAtH,KACArM,EAAA7N,IAAAyG,aAAAE,OAAA6a,EAAAjhB,QAAA,WACAzB,OAAAmmB,MAAAlB,QAAAkB,KAAA,aAAAzD,EAAAjhB,MAAA,mBAAAmhB,EAAA,qBAIA,WAAA,OAAAF,EAAAjhB,OAIA,KAAA6iB,EAAAQ,EAAA,YAAAA,EAAA,cAAAA,EAAA,WACA,GAAA,KAAAR,EAAA7iB,MACAA,EAAA2kB,EAAA3kB,EAAAuN,QACA,GAAA,KAAAsV,EAAA7iB,MACAuN,EAAAvN,EACAA,EAAA4kB,EAAA5kB,OACA,CAAA,GAAA,KAAA6iB,EAAA7iB,MAIA,MAAAqiB,MAAA,8BAAAlB,EAAA,KAHA5T,EAAAvN,EACAA,EAAAykB,EAAAzkB,GAQA,OAFAuN,EAAA,KAEAvN,EAGA,SAAA2kB,EAAAE,EAAAC,GACA,IAAAC,EAAA,GAEA,GAAA,WAAArD,IAAA/H,KACA,GACAoL,EAAAnjB,KAAAwhB,WACAC,EAAA,UAKA,OAFAK,EAAA,WAEA,WACA,IAAAvV,EAAA,GAEA2W,GACA3W,EAAAvM,KAAAkjB,KAGA,IAAA,IAAAlmB,EAAA,EAAAA,EAAAmmB,EAAA5lB,OAAAP,IACAuP,EAAAvM,KAAAmjB,EAAAnmB,MAKA,OAFAimB,KAAAplB,IAAA0K,MAEAvC,MAAAwY,EAAAjS,IAIA,SAAAyW,EAAAzhB,GACA,IAAA6hB,EAAA5B,IAIA,OAFAM,EAAA,aAEA,WACA,IAAAjY,EAAAtI,IACAvE,EAAAomB,IAEA,GAAA,iBAAAvZ,GAAA,MAAAA,EAEA,OAAAA,EAAAgV,aACAL,EAAA9e,IAAA1C,GAGA,OAAAa,IAAA2C,QAAAqJ,GACAA,EAAAnK,IAAA1C,GAGA6M,EAAA7M,IAIA,SAAA6lB,EAAAthB,GACA,IAAA8d,EAAAoC,IAEA,OAAA,WACA,IAAA5X,EAAAtI,IACA5C,EAAAd,IAAA2C,QAAAqJ,GAEA,MAAA,UAAAwV,EAAAtH,KACA,OAAApZ,GAAA,mBAAAkL,EAAAnK,IAAA,KAAA2f,EAAAjhB,QACAwjB,QAAAyB,IAAA,WAAAhE,EAAAjhB,MAAAyL,EAAAnK,IAAA,KAAA2f,EAAAjhB,QACAyL,EAAAnK,IAAA,KAAA2f,EAAAjhB,QAGA,UAAAO,GAAA,mBAAAkL,EAAA,KAAAwV,EAAAjhB,OACAyL,EAAA,KAAAwV,EAAAjhB,OAGAP,IAAAyG,aAAA3F,IAAAd,IAAAyG,aAAA3F,GAAA0gB,EAAAjhB,OACAP,IAAAyG,aAAA3F,GAAA0gB,EAAAjhB,OAGAP,IAAAyG,aAAA,KAAAzG,IAAAyG,aAAA,IAAA+a,EAAAjhB,OACAP,IAAAyG,aAAA,IAAA+a,EAAAjhB,OAGA,WACA,MAAAyL,GAAA+X,QAAAkB,MAAAlB,QAAAkB,KAAA,aAAAzD,EAAAjhB,MAAA,mBAAAmhB,EAAA,4BAAA5gB,IAKAkL,GAAAA,EAAAgV,aACAL,EAAA9e,IAAA2f,EAAAjhB,OAGA,OAAAO,EACAkL,EAAAnK,IAAA2f,EAAAjhB,OAGAyL,GAAAA,EAAA7L,eAAAqhB,EAAAjhB,OAAAyL,EAAAwV,EAAAjhB,YAAAwB,KAz0BA,GCAA/B,IAAA2G,OAAA,CACA9F,KAAA,GACA2L,KAAAH,KAAAoZ,SACA5jB,IAAA,SAAAqY,GACA,GAAA7a,KAAAwB,KAAAV,eAAA+Z,GACA,OAAA7a,KAAAwB,KAAAqZ,IAKA5Y,IAAA,SAAA4Y,EAAA3Z,GACA,GAAA,iBAAA2Z,EASAla,IAAAqF,MAAAhG,KAAAwB,KAAAqZ,GAAA3Z,KACAlB,KAAAwB,KAAAqZ,GAAA3Z,EACAP,IAAAoJ,cAAA8Q,SAVA,IAAA,IAAAzP,KAAAyP,EACAA,EAAA/Z,eAAAsK,IACApL,KAAAiC,IAAAmJ,EAAAyP,EAAAzP,KAWAib,IAAA,SAAAxL,UACA7a,KAAAwB,KAAAqZ,GACAla,IAAAoJ,cAAA8Q,KAIAla,IAAA2lB,UAAA,SAAA9kB,EAAAmZ,GAKA,MAJA,iBAAAnZ,IACAA,EAAA,CAAAmM,OAAAnM,IAGA,CACAmZ,OAAAA,GAAAha,IAAA2G,OACA9F,KAAAA,EACA2L,KAAAH,KAAAoZ,SACA5jB,IAAA,SAAAqY,GACA,OAAA7a,KAAAwB,KAAAV,eAAA+Z,GACA7a,KAAAwB,KAAAqZ,GAGA7a,KAAA2a,OACA,UAAAE,EACA7a,KAAA2a,OAAAnZ,KAGAxB,KAAA2a,OAAAnY,IAAAqY,QALA,GAUA5Y,IAAA,SAAA4Y,EAAA3Z,GACA,GAAA,iBAAA2Z,EASAla,IAAAqF,MAAAhG,KAAAwB,KAAAqZ,GAAA3Z,KACAlB,KAAAwB,KAAAqZ,GAAA3Z,QATA,IAAA,IAAAkK,KAAAyP,EACAA,EAAA/Z,eAAAsK,IACApL,KAAAiC,IAAAmJ,EAAAyP,EAAAzP,KAUAib,IAAA,SAAAxL,UACA7a,KAAAwB,KAAAqZ,MCtEAla,IAAA2Z,cAAA3Z,IAAAoZ,YAAA,CAEAlW,YAAA,SAAA0F,EAAAoR,GACA3a,KAAAumB,MAAAhd,EACAvJ,KAAA2a,OAAAA,EACA3a,KAAAwmB,SAAA,GACAxmB,KAAAymB,aAAA,GACAzmB,KAAAkd,SAAA,GACAld,KAAA0mB,UAAA,GACA1mB,KAAAsF,MAAA,GACAtF,KAAAwB,KAAA,GACAxB,KAAAmN,KAAAH,KAAAoZ,SAEApmB,KAAA6a,KAAAtR,EAAAiT,aAAA,OAAAjT,EAAAiT,aAAA,SAAAxc,KAAAyB,KAAAyH,cAAA2E,QAAA,QAAA,IACA7N,KAAA6a,KAAA7a,KAAA6a,KAAAhN,QAAA,SAAA,IACA7N,KAAA2mB,SAAApd,EAAAiT,aAAA,YAEA,IACAxc,KAAA4mB,iBAAArd,GACAvJ,KAAA6mB,eACA7mB,KAAA8mB,OAAAvd,IACA,IAAAvJ,KAAA+mB,YAAAxd,KACAvJ,KAAAgnB,OAAAzd,GACAvJ,KAAAumB,QAEAvmB,KAAAinB,kBAAA,UAAAjnB,KAAAumB,OACAvmB,KAAA2mB,UAEA3mB,KAAAumB,MAAA9J,aAAA,WAAAzc,KAAA2mB,UAEA3mB,KAAAumB,MAAAW,aAAAlnB,KACAA,KAAAumB,MAAAY,aAAA,GAEAnnB,KAAAmJ,cAAA,SACAnJ,KAAAmH,WAEA,MAAA6B,GACA0b,QAAAC,MAAA3b,KAIAoR,IAAA,KACAG,YAAA,GACAC,WAAA,GACAC,QAAA,GACAC,OAAA,CACAxT,MAAA+B,MACAme,QAAAne,OAGA6d,OAAA,SAAAvd,GACAvJ,KAAAumB,OACAvmB,KAAAqnB,UAKAC,KAAA,SAAAzM,GACA,GAAA7a,KAAA6a,MAAAA,EAAA,OAAA7a,KAEA,IAAA,IAAAF,EAAA,EAAAA,EAAAE,KAAAkd,SAAA7c,OAAAP,IAAA,CACA,IAAAynB,EAAAvnB,KAAAkd,SAAApd,GAAAwnB,KAAAzM,GACA,GAAA0M,EAAA,OAAAA,EAGA,OAAA,MAIAC,OAAA,SAAAb,GACA,GAAA3mB,KAAA2mB,UAAAA,EAAA,OAAA3mB,KAEA,IAAA,IAAAF,EAAA,EAAAA,EAAAE,KAAAkd,SAAA7c,OAAAP,IAAA,CACA,IAAAynB,EAAAvnB,KAAAkd,SAAApd,GAAA0nB,OAAAb,GACA,GAAAY,EAAA,OAAAA,EAGA,OAAA,MAIAE,UAAA,SAAAd,GACA,IAAAe,EAAA1nB,KAAAwnB,OAAAb,GAEA,GAAAe,EAAA,CACAA,EAAAC,WAEA,IAAApe,EAAAtJ,SAAA2K,cAAA,cAAA+b,EAAA,MACA,GAAApd,EAAA,CACA,IAAAzH,EAAA4lB,EAAA/M,OAAAuC,SAAA0B,QAAA8I,GACAxd,EAAAvJ,IAAAoG,aAAA2gB,EAAAlmB,KAAAomB,OAEA,GAAA9lB,GAAA,GAAAoI,EAAA,CACA,IAAA2d,EAAA,IAAA3d,EAAAX,EAAAme,EAAA/M,QACA+M,EAAA/M,OAAAuC,SAAAra,OAAAf,EAAA,EAAA+lB,GACAA,EAAAhN,MACA6M,EAAA/M,OAAAxV,IAAA0iB,EAAAhN,KAAAgN,EAAArmB,OAKAb,IAAAoJ,kBAKA+d,SAAA,SAAAnB,GACA,IAAAe,EAAA1nB,KAAAwnB,OAAAb,GAEA,GAAAe,EAAA,CACAA,EAAAC,WAEA,IAAA7lB,EAAA4lB,EAAA/M,OAAAuC,SAAA0B,QAAA5e,MACA8B,GAAA,GACA4lB,EAAA/M,OAAAuC,SAAAra,OAAAf,EAAA,GAGAnB,IAAAoJ,kBAIAgd,YAAApmB,IAAA0K,KACAlE,QAAAxG,IAAA0K,KAEA0c,aAAApnB,IAAA0K,KACA2c,OAAArnB,IAAA0K,KACA4c,QAAAtnB,IAAA0K,KAEA6c,cAAAvnB,IAAA0K,KACA8c,UAAAxnB,IAAA0K,KAEAd,iBAAA,SAAA9I,EAAAub,GACAvb,KAAAzB,KAAA0mB,YACA1mB,KAAA0mB,UAAAjlB,GAAA,IAAAmG,KAEA5H,KAAA0mB,UAAAjlB,GAAA0D,IAAA6X,IAGAoL,oBAAA,SAAA3mB,EAAAub,GACAvb,KAAAzB,KAAA0mB,WACA1mB,KAAA0mB,UAAAjlB,GAAAY,OAAA2a,IAGA7T,cAAA,SAAAkF,EAAA/I,EAAA9D,EAAA8U,GACA,GAAA,iBAAAjI,EACA,IACA,IAAAga,EAAAroB,KAAA0a,OAAArM,GACAA,EAAA,IAAAga,EAAAha,EAAA/I,GACA,MAAAmf,GACA,IAAAjP,EAAAnH,EAGA,IAFAA,EAAApO,SAAAqoB,YAAA,gBACAC,UAAA/S,EAAAlQ,GAAAA,EAAAkjB,QAAAljB,GAAAA,EAAAmjB,cACApa,aAAApF,OAEA,OADAyb,QAAAkB,KAAA,iBAAAvX,EAAArO,KAAA0a,SACA,EAEA,IAAApD,EAAAjJ,EAAAiJ,eACAjJ,EAAAiJ,eAAA,WACAA,EAAA/T,KAAAvD,MACA,IACAa,OAAA6nB,eAAA1oB,KAAA,mBAAA,CACAwC,IAAA,WACA,OAAA,KAGA,MAAAwG,GACAhJ,KAAA2oB,kBAAA,EAEA,OAAAta,GAKA,KAAAA,EAAA5M,QAAAzB,KAAA0mB,WAAA,OAAA,EAEArY,EAAAiI,IAAAA,EACAjI,EAAAkH,OAAAvV,KACAqO,EAAAkJ,MAAA/V,GAAA,GACA,IAAA,IAAAmU,KAAA3V,KAAA0mB,UAAArY,EAAA5M,OACA,IAAAkU,EAAApS,KAAAvD,KAAAqO,IACAA,EAAAiJ,iBAIA,OAAAjJ,EAAAsa,kBAGAC,UAAA,SAAA/N,EAAAtR,GACA,IACAse,EAAA,IAAA3d,EADAvJ,IAAAoG,aAAA8T,IACAtR,EAAAvJ,MACAA,KAAAkd,SAAApa,KAAA+kB,GACAA,EAAAhN,OACA7a,KAAAwB,KAAAqmB,EAAAhN,OAAAla,IAAAkoB,OACAnE,QAAAkB,KAAA,mBAAAiC,EAAAhN,KAAA,0CAGA7a,KAAAiC,IAAA4lB,EAAAhN,KAAAgN,EAAArmB,QAIAylB,kBAAA,SAAAnM,EAAAvR,GACA5I,IAAAgd,IAAAS,cAAA7U,GAAA9I,SAAA,SAAA6b,GACA3b,IAAAqG,aAAA8T,GAAAwB,EAAAzB,QACAtR,EAAAsB,gBAAAyR,EAAAuC,UACAle,IAAAqG,aAAA8T,GAAAwB,EAAAzB,MAAAtX,KAAAvD,KAAAuJ,EAAA+S,MAEAtc,OAGAqnB,OAAA,SAAA9d,GAGA,GAFAA,EAAAA,GAAAvJ,KAAAumB,MAIA,GAAA,IAAAhd,EAAAmQ,SAwCA,IAAAnQ,EAAAmQ,WAEA/Y,IAAAkH,OAAAC,SACAjH,OAAA0E,KAAA5E,IAAAkH,OAAAC,SAAArH,SAAA,SAAAkB,GACAhB,IAAAU,MAAAkI,EAAApJ,iBAAAwB,IAAAlB,SAAA,SAAA8I,GACAA,EAAAuf,aAAA,OACAvf,EAAAkT,aAAA,KAAA,OAAA9b,IAAAkH,OAAAC,QAAAnG,UAMAhB,IAAAgd,IAAAM,KAAA1U,GAAA,SAAAA,GACA,GAAAA,GAAAvJ,KAAAumB,MAAA,CAMA,GAAA,IAAAhd,EAAAmQ,SAAA,CACA,IAAA3L,EAAAxE,EAAAwE,QAAA7E,cACAsR,EAAA7Z,IAAAgd,IAAAS,cAAA7U,GAMA,GAJAA,EAAAuf,aAAA,QACA/a,EAAAxE,EAAAiT,aAAA,OAGA7b,IAAAwH,gBAAA/C,KAAA2I,GAEA,OAAA,EAKA,GAFA/N,KAAAinB,kBAAA,SAAA1d,IAEA,IADAiR,EAAAuO,WAAA,SAAAzM,GAAA,MAAA,WAAAA,EAAAzB,QACA,OAAA,EAEA,GAAAla,IAAAyH,WAAAhD,KAAA2I,GAGA,OAFAA,EAAAA,EAAAF,QAAA,SAAA,OAEAlN,IAAAoG,cACAwC,EAAAyf,aAAA,EACAzf,EAAA4d,YAEA1nB,OAAAwpB,aAIA1f,EAAA2d,cAAA3d,EAAA2d,aAAAG,SAEA1mB,IAAAwH,gBAAA/C,KAAAmE,EAAAwE,UACAxE,EAAA2d,aAAAG,UARArnB,KAAA4oB,UAAA7a,EAAAxE,IAYA,QAEAmb,QAAAkB,KAAA,4BAAA7X,GAMA/N,KAAAinB,kBAAA,UAAA1d,GAIA,GAAA,IAAAA,EAAAmQ,UACA/Y,IAAA0H,aAAAjD,KAAAmE,EAAA2f,WAAA,CACA,IAAAA,EAAA3f,EAAA2f,UAEA,MAAAA,EAAA3K,OAAA,EAAA,IAAA,MAAA2K,EAAA3K,QAAA,KAAA,GAAA2K,EAAAtK,QAAA,KAAA,KACAsK,EAAAA,EAAA9E,UAAA,EAAA8E,EAAA7oB,OAAA,IA0BAL,KAAAmpB,YAAAD,GAAA,SAAAhoB,EAAAkoB,GACA7f,EAAA2f,UAAAhoB,SAIAlB,YA7IA,GAAAW,IAAA0H,aAAAjD,KAAAmE,EAAA2f,WAAA,CACA,IAAAA,EAAA3f,EAAA2f,UAEA,MAAAA,EAAA3K,OAAA,EAAA,IAAA,MAAA2K,EAAA3K,QAAA,KAAA,GAAA2K,EAAAtK,QAAA,KAAA,KACAsK,EAAAA,EAAA9E,UAAA,EAAA8E,EAAA7oB,OAAA,IA2BAL,KAAAmpB,YAAAD,GAAA,SAAAhoB,EAAAkoB,GACA7f,EAAA2f,UAAAhoB,OAgHAiJ,QAAA,SAAA0E,GACA,IACA,IAAA,IAAA7O,KAAA+nB,aAAAlZ,GAAA,CACA,MAAAvJ,EAAA3E,IAAAoE,MAAA/E,KAAAsF,OAEA+jB,GADArpB,KAAAspB,gBAAAtpB,KAAAwmB,SAAA3X,GACA7O,KAAAupB,oBAAA1a,IAIA,IACA7O,KAAAgoB,OAAA1iB,EAAA+jB,GACA,MAAArgB,GACA0b,QAAAC,MAAA3b,GAIAhJ,KAAAkd,SAAAzc,SAAA,SAAAinB,GACAA,EAAAvd,QAAA0E,MAGA7O,KAAAioB,WAEA,MAAAjf,GACA0b,QAAAC,MAAA3b,KAIAwgB,SAAA,SAAAC,EAAA5a,GACA,GAAAA,IAAAA,EAAAtM,IAAA,KAAA,CACA,IAAA,MAAAyhB,KAAAyF,EAAA5a,OACA,GAAAA,EAAAtM,IAAAyhB,GACA,OAAA,EAIA,OAAA,EAGA,OAAA,GAGAsF,gBAAA,SAAA9C,EAAA3X,GACA,IAAA6a,GAAA,EAEA,IAAA,MAAApF,KAAAkC,EACA,GAAAA,EAAA1lB,eAAAwjB,GAAA,CACA,MAAAmF,EAAAjD,EAAAlC,GAEA,GAAAtkB,KAAAwpB,SAAAC,EAAA5a,GAAA,SAEA,MAAA3N,EAAAP,IAAAwjB,MAAAG,EAAAtkB,MAEA,IAAAW,IAAAqF,MAAA9E,EAAAuoB,EAAAvoB,OAAA,CACA,IAAA,MAAA8b,KAAAyM,EAAAE,UACA3M,EAAAzZ,KAAAvD,KAAAkB,EAAAuoB,EAAAvoB,OAGAwoB,GAAA,EACAD,EAAAvoB,MAAAP,IAAAoE,MAAA7D,IAKA,OAAAwoB,GAGAH,oBAAA,SAAA1a,GACA,MAAAoZ,EAAA,IAAArgB,IAEA,IAAA,MAAAwD,KAAApL,KAAAymB,aACA,GAAAzmB,KAAAymB,aAAA3lB,eAAAsK,GAAA,CACA,MAAAqe,EAAAzpB,KAAAymB,aAAArb,GAEA,GAAApL,KAAAwpB,SAAAC,EAAA5a,GAAA,SAEA,MAAA3N,EAAAP,IAAAwjB,MAAAsF,EAAAnF,WAAAtkB,MAEAW,IAAAqF,MAAA9E,EAAAuoB,EAAAvoB,SACAuoB,EAAAzM,SAAAzZ,KAAAvD,KAAAkB,GACAuoB,EAAAvoB,MAAAP,IAAAoE,MAAA7D,GACA+mB,EAAA9iB,IAAAiG,IAKA,OAAA6c,GAGArB,iBAAA,SAAArd,GACA,IAAAqM,EAAA5V,KAEAA,KAAAwa,aACA3Z,OAAA0E,KAAAvF,KAAAwa,YAAA/Z,SAAA,SAAA2K,GACA,IAAAwe,EAAAhU,EAAA4E,WAAApP,GACAlK,EAAA0oB,EAAAC,QA2BA,GAzBAtgB,EAAAuf,aAAA1d,KACAwe,EAAAnoB,MAAA0d,QACAje,GAAA,GAEAA,EAAAqI,EAAAiT,aAAApR,GAEAwe,EAAAnoB,MAAA6d,QAEApe,IAAA4oB,MAAAxK,OAAApe,MACAA,EAAAoe,OAAApe,IAIA0oB,EAAAnoB,MAAA8E,SACArF,EAAAqF,OAAArF,IAGA0oB,EAAA9b,WAAA8b,EAAA9b,SAAA5M,KACAA,EAAA0oB,EAAAC,UAIAtgB,EAAAsB,gBAAAO,IAGA7B,EAAAuf,aAAA,YAAA1d,GAAA,CACA,MAAAkZ,EAAA/a,EAAAiT,aAAA,YAAApR,GACA4R,EAAAhd,KAAA+pB,aAAA3e,GAAA4e,KAAAhqB,MAEAA,KAAAymB,aAAArb,GAAA,CACAkZ,WAAAA,EACAtH,SAAAA,EACAnO,OAAAlO,IAAAkhB,UAAAyC,GACApjB,MAAA,MAGAqI,EAAAsB,gBAAA,YAAAO,GAGAwK,EAAAtQ,MAAA8F,GAAAzK,IAAAoE,MAAA7D,KACAlB,MAEAA,KAAAupB,uBAGAvpB,KAAA0a,QACA7Z,OAAA0E,KAAAvF,KAAA0a,QAAAja,SAAA,SAAA4N,GACA9E,EAAAuf,aAAA,KAAAza,KAEA1N,IAAA2U,cAAAM,EAAAvH,EAAA4b,SAAA,QAAA1gB,EAAAiT,aAAA,KAAAnO,IAAA,IACA9E,EAAAsB,gBAAA,KAAAwD,OAKA1N,IAAAgd,IAAAS,cAAA7U,GAAA9I,SAAA,SAAA6b,GACA,MAAAA,EAAAzB,MAAA7a,KAAA0a,OAAA4B,EAAAkC,YACA7d,IAAA2U,cAAAM,EAAA0G,EAAAkC,UAAA,SAAAnQ,GAUA,OATAA,EAAAgI,gBACAhI,EAAAA,EAAAgI,eAGA1V,IAAAwjB,MAAA7H,EAAApb,MAAAP,IAAA2lB,UAAA,CACA4D,OAAA7b,EAAAkJ,MACA4S,eAAA9b,GACAuH,MAGA0G,EAAA5G,WAEAnM,EAAAsB,gBAAAyR,EAAAuC,aAEA7e,OAGA+pB,aAAA,SAAA3e,GACA,IAAAwe,EAAA5pB,KAAAwa,WAAApP,GACAwK,EAAA5V,KAEA,OAAA,SAAAkB,QACAwB,IAAAxB,IACAA,EAAA0oB,EAAAC,SAGAD,EAAAnoB,MAAA0d,UACAje,IAAAA,GAGA,MAAAA,IACA0oB,EAAAnoB,MAAA6d,SAIApe,EAHA,KAAAA,GAAA4oB,MAAAxK,OAAApe,IAGA0oB,EAAAC,QAFAvK,OAAApe,IAMA0oB,EAAAnoB,MAAA8E,SACArF,EAAAqF,OAAArF,KAIA0oB,EAAA9b,WAAA8b,EAAA9b,SAAA5M,KACAA,EAAA0oB,EAAAC,SAGAjU,EAAAtQ,MAAA8F,GAAAzK,IAAAoE,MAAA7D,KAIA2lB,aAAA,WACAhmB,OAAA2M,OACAxN,KAAAwB,KACA,CAAAomB,MAAA5nB,KAAAyB,MACA,mBAAAzB,KAAAua,YAAAva,KAAAua,cAAAva,KAAAua,aAGA1Z,OAAA0E,KAAAvF,KAAAya,SAAAha,SAAA,SAAA2pB,GACA,IAAAxU,EAAA5V,KACAA,KAAAwB,KAAA,KAAA4oB,GAAA,WACA,OAAAxU,EAAA6E,QAAA2P,GAAAthB,MAAA8M,EAAAlV,MAAAf,UAAA6D,MAAAD,KAAAwF,UAAA,OAEA/I,OAGAgnB,OAAA,SAAAzd,GACAvJ,KAAAqqB,cAAArqB,KAAAumB,OACA5lB,IAAAgd,IAAA9P,QAAA7N,KAAAqqB,aAAArqB,KAAAumB,QAIA4C,YAAA,SAAA7E,EAAA9a,GACAxJ,KAAAwmB,SAAAlC,GAAAtkB,KAAAwmB,SAAAlC,IAAA,CACAA,WAAAA,EACApjB,MAAAP,IAAAwjB,MAAAG,EAAAtkB,MACA2pB,UAAA,GACA9a,OAAAlO,IAAAkhB,UAAAyC,IAEAtkB,KAAAwmB,SAAAlC,GAAAqF,UAAA7mB,KAAA0G,GACAA,EAAAjG,KAAAvD,KAAAA,KAAAwmB,SAAAlC,GAAApjB,QAGAymB,SAAA,WACA3nB,KAAAmJ,cAAA,WACAnJ,KAAAkoB,gBACAloB,KAAAsqB,mBACAtqB,KAAA2a,QACA3a,KAAA2a,OAAA0L,IAAArmB,KAAA6a,MAEA7a,KAAAumB,OACA5lB,IAAAgd,IAAA1B,OAAAjc,KAAAumB,OAEAvmB,KAAAmoB,aAGAmC,iBAAA,WACAtqB,KAAAkd,SAAAzc,SAAA,SAAAinB,GACAA,EAAAC,cAGA3nB,KAAAkd,SAAA,IAKAqN,cAAA,WACA,GAAAvqB,KAAA2a,OAAA,CACA,IAAAA,EAAA3a,KAAA2a,OACA,KAAAA,IACAA,EAAAnZ,MAAA,UAAAmZ,EAAAnZ,KAAAomB,OAAA,eAAAjN,EAAAnZ,KAAAomB,OACAjnB,IAAAoJ,cAAA4Q,EAAAE,MAEAF,EAAAA,EAAAA,SAKAnY,IAAA,SAAAqY,EAAA2P,GACA,OAAAxqB,KAAAwB,KAAAV,eAAA+Z,GACA7a,KAAAwB,KAAAqZ,GAGA7a,KAAA2a,SAAA,IAAA6P,EACA,UAAA3P,EACA7a,KAAA2a,OAAAnZ,KAGAxB,KAAA2a,OAAAnY,IAAAqY,GAGA,MAGA1V,IAAA,SAAA0V,EAAA3Z,GACAlB,KAAAwB,KAAAqZ,GACAna,MAAA+C,QAAAzD,KAAAwB,KAAAqZ,IACA7a,KAAAwB,KAAAqZ,GAAA/X,KAAA5B,GAEAlB,KAAAwB,KAAAqZ,GAAA,CAAA7a,KAAAwB,KAAAqZ,GAAA3Z,GAGAlB,KAAAiC,IAAA4Y,EAAA3Z,GAEAP,IAAAoJ,cAAA8Q,GACAla,IAAAoJ,cAAA/J,KAAA6a,MACA7a,KAAAuqB,iBAGAtoB,IAAA,SAAA4Y,EAAA3Z,GACA,GAAA,iBAAA2Z,EASAla,IAAAqF,MAAAhG,KAAAwB,KAAAqZ,GAAA3Z,KACAlB,KAAAwB,KAAAqZ,GAAA3Z,EACAP,IAAAoJ,cAAA8Q,GACAla,IAAAoJ,cAAA/J,KAAA6a,MACA7a,KAAAuqB,sBAZA,IAAA,IAAAnf,KAAAyP,EACAA,EAAA/Z,eAAAsK,IACApL,KAAAiC,IAAAmJ,EAAAyP,EAAAzP,KAcAib,IAAA,SAAAxL,UACA7a,KAAAwB,KAAAqZ,GACAla,IAAAoJ,cAAA8Q,GACAla,IAAAoJ,cAAA/J,KAAA6a,MACA7a,KAAAuqB,mBC7qBA,WAKA5pB,IAAA8pB,aAAAA,EACA9pB,IAAA8pB,aAAAtG,MAAAA,EACAxjB,IAAA8pB,aAAAC,QAiHA,SAAA9d,EAAAgd,GACA,OAAAe,EAAAxG,EAAAvX,EAAAgd,KAjHAjpB,IAAA8pB,aAAAE,iBAAAA,EACAhqB,IAAA8pB,aAAAG,eAAAA,EAKA,IAOAC,EAAA,IAAArL,OAAA,CAGA,UAMA,uFACAsL,KAAA,KAAA,KASA,SAAA3G,EAAAvX,EAAAgd,GAUA,IATA,IAOAmB,EAPAjJ,EAAA,GACAxgB,EAAA,EACAQ,EAAA,EACAkpB,EAAA,GACAC,EAAArB,GAAAA,EAAAsB,WA/BA,IAgCAC,EAAAvB,GAAAA,EAAAuB,gBAAAzoB,EACA0oB,GAAA,EAGA,QAAAL,EAAAF,EAAAlmB,KAAAiI,KAAA,CACA,IAAAye,EAAAN,EAAA,GACAO,EAAAP,EAAA,GACApf,EAAAof,EAAAjpB,MAKA,GAJAkpB,GAAApe,EAAApJ,MAAA1B,EAAA6J,GACA7J,EAAA6J,EAAA0f,EAAAhrB,OAGAirB,EACAN,GAAAM,EAAA,GACAF,GAAA,MAFA,CAMA,IAAAG,EAAA,GACA1Q,EAAAkQ,EAAA,GACAnR,EAAAmR,EAAA,GACAS,EAAAT,EAAA,GACAU,EAAAV,EAAA,GAEA,IAAAK,GAAAJ,EAAA3qB,OAAA,CACA,IAAAyL,EAAAkf,EAAA3qB,OAAA,EACA+gB,EAAA4J,EAAAlf,KACAqf,GAAAA,EAAAvM,QAAAwC,IAAA,KAGAmK,EAAAnK,EACA4J,EAAAA,EAAAxnB,MAAA,EAAAsI,IAKAkf,IACAlJ,EAAAhf,KAAAkoB,GACAA,EAAA,GACAI,GAAA,GAGA,IAAA/d,EAAA,MAAAoe,GAAA,MAAAA,EACAC,EAAA,MAAAD,GAAA,MAAAA,EACAE,EAAA/R,GAAA4R,EACAN,EAAAK,GAAAN,EAEAnJ,EAAAhf,KAAA,CACA+X,KAAAA,GAAAvZ,IACAsqB,OAAAL,EACAL,UAAAA,EACAQ,SAAAA,EACAre,OAAAA,EACAse,QAAAA,EACAE,EAAAF,GACA,KAAAG,EAAAZ,IAAAD,EAAAC,EAAAA,EAAAD,GAAA,SASA,OAJAD,GAAAlpB,EAAA8K,EAAAvM,SACAyhB,EAAAhf,KAAAkoB,EAAApe,EAAA2R,OAAAzc,IAGAggB,EAiBA,SAAA6I,EAAA7I,GAKA,IAHA,IAAA/hB,EAAA,IAAAW,MAAAohB,EAAAzhB,QAGAP,EAAA,EAAAA,EAAAgiB,EAAAzhB,OAAAP,IACA,iBAAAgiB,EAAAhiB,KACAC,EAAAD,GAAA,IAAA0f,OAAA,OAAAsC,EAAAhiB,GAAA6rB,QAAA,OAIA,OAAA,SAAAnqB,EAAAooB,GAIA,IAHA,IAAAoB,EAAA,GACAe,EAAAnC,GAAAA,EAAAmC,QAAAC,mBAEAlsB,EAAA,EAAAA,EAAAgiB,EAAAzhB,OAAAP,IAAA,CACA,IAAAqiB,EAAAL,EAAAhiB,GAEA,GAAA,iBAAAqiB,EAAA,CAKA,IACA8J,EADA/qB,EAAAM,EAAAA,EAAA2gB,EAAAtH,WAAAnY,EAGA,GAAAhC,MAAA+C,QAAAvC,GAAA,CACA,IAAAihB,EAAA9U,OACA,MAAA,IAAA6e,UAAA,aAAA/J,EAAAtH,KAAA,kCAGA,GAAA,IAAA3Z,EAAAb,OAAA,CACA,GAAA8hB,EAAAuJ,SAAA,SAEA,MAAA,IAAAQ,UAAA,aAAA/J,EAAAtH,KAAA,qBAGA,IAAA,IAAAsC,EAAA,EAAAA,EAAAjc,EAAAb,OAAA8c,IAAA,CAGA,GAFA8O,EAAAF,EAAA7qB,EAAAic,GAAAgF,IAEApiB,EAAAD,GAAAsF,KAAA6mB,GACA,MAAA,IAAAC,UAAA,iBAAA/J,EAAAtH,KAAA,eAAAsH,EAAAwJ,QAAA,KAGAX,IAAA,IAAA7N,EAAAgF,EAAAyJ,OAAAzJ,EAAA+I,WAAAe,QAMA,GAAA,iBAAA/qB,GAAA,iBAAAA,GAAA,kBAAAA,GAWA,IAAAihB,EAAAuJ,SAEA,MAAA,IAAAQ,UAAA,aAAA/J,EAAAtH,KAAA,YAAAsH,EAAA9U,OAAA,WAAA,iBAbA,CAGA,GAFA4e,EAAAF,EAAAxlB,OAAArF,GAAAihB,IAEApiB,EAAAD,GAAAsF,KAAA6mB,GACA,MAAA,IAAAC,UAAA,aAAA/J,EAAAtH,KAAA,eAAAsH,EAAAwJ,QAAA,eAAAM,EAAA,KAGAjB,GAAA7I,EAAAyJ,OAAAK,QAtCAjB,GAAA7I,EA+CA,OAAA6I,GAUA,SAAAc,EAAAlf,GACA,OAAAA,EAAAiB,QAAA,4BAAA,QASA,SAAAge,EAAAL,GACA,OAAAA,EAAA3d,QAAA,eAAA,QASA,SAAAse,EAAAvC,GACA,OAAAA,GAAAA,EAAAwC,UAAA,GAAA,IAsEA,SAAAxB,EAAA9I,EAAAvc,EAAAqkB,GAWA,IARA,IAAAyC,GAFAzC,EAAAA,GAAA,IAEAyC,OACA/J,GAAA,IAAAsH,EAAAtH,MACAhS,GAAA,IAAAsZ,EAAAtZ,IACA4a,EAAAtB,EAAAsB,WA9RA,IA+RAoB,EAAA,GAAAtK,OAAA4H,EAAA0C,UAAA,IAAA3qB,IAAAmqB,GAAA9J,OAAA,KAAA8I,KAAA,KACAyB,EAAAjK,EAAA,IAAA,GAGAxiB,EAAA,EAAAA,EAAAgiB,EAAAzhB,OAAAP,IAAA,CACA,IAAAqiB,EAAAL,EAAAhiB,GAEA,GAAA,iBAAAqiB,EACAoK,GAAAT,EAAA3J,OACA,CACA,IAAAvI,EAAAuI,EAAA9U,OACA,MAAA8U,EAAAwJ,QAAA,OAAAG,EAAA3J,EAAA+I,WAAA,MAAA/I,EAAAwJ,QAAA,MACAxJ,EAAAwJ,QAEApmB,GAAAA,EAAAzC,KAAAqf,GAEAA,EAAAuJ,SACAvJ,EAAAyJ,OAGAW,GAAA,MAAAT,EAAA3J,EAAAyJ,QAAA,IAAAhS,EAAA,MAFA2S,GAAA,IAAA3S,EAAA,KAKA2S,GAAAT,EAAA3J,EAAAyJ,QAAA,IAAAhS,EAAA,KAKA,GAAAtJ,EACA+b,IAAAE,GAAA,MAAAT,EAAAZ,GAAA,MAEAqB,GAAA,MAAAD,EAAA,IAAA,MAAAA,EAAA,QACA,CACA,IAAAE,EAAA1K,EAAAA,EAAAzhB,OAAA,GACAosB,EAAA,iBAAAD,EACAA,EAAAA,EAAAnsB,OAAA,KAAA6qB,OACAxoB,IAAA8pB,EAEAH,IAAAE,GAAA,MAAAT,EAAAZ,GAAA,MAAAoB,EAAA,OACAG,IAAAF,GAAA,MAAAT,EAAAZ,GAAA,IAAAoB,EAAA,KAGA,OAAA,IAAA9M,OAAA+M,EAAAJ,EAAAvC,IAeA,SAAAa,EAAAO,EAAAzlB,EAAAqkB,GACA,OAAAoB,aAAAxL,OA7HA,SAAAwL,EAAAzlB,GACA,IAAAA,EAAA,OAAAylB,EAGA,IAAA0B,EAAA1B,EAAAtmB,OAAAqd,MAAA,aAEA,GAAA2K,EACA,IAAA,IAAA5sB,EAAA,EAAAA,EAAA4sB,EAAArsB,OAAAP,IACAyF,EAAAzC,KAAA,CACA+X,KAAA/a,EACA8rB,OAAA,KACAV,UAAA,KACAQ,UAAA,EACAre,QAAA,EACAse,QAAA,OAKA,OAAAX,EA2GA2B,CAAA3B,EAAAzlB,GAGA7E,MAAA+C,QAAAunB,GAnGA,SAAAA,EAAAzlB,EAAAqkB,GAGA,IAFA,IAAAgD,EAAA,GAEA9sB,EAAA,EAAAA,EAAAkrB,EAAA3qB,OAAAP,IACA8sB,EAAA9pB,KAAA2nB,EAAAO,EAAAlrB,GAAAyF,EAAAqkB,GAAAllB,QAGA,OAAA,IAAA8a,OAAA,MAAAoN,EAAA9B,KAAA,KAAA,IAAAqB,EAAAvC,IA6FAiD,CAAA,EAAAtnB,EAAAqkB,GAlFA,SAAAoB,EAAAzlB,EAAAqkB,GACA,OAAAgB,EAAAzG,EAAA6G,EAAApB,GAAArkB,EAAAqkB,GAoFAkD,CAAA,EAAAvnB,EAAAqkB,IA/WA,GCAAnqB,OAAAstB,QACAttB,OAAAstB,MAAA,GAEAA,MAAA5I,MAAA,SAAAzf,GAGA,IAAAsoB,EACAC,EACA1K,EACA2K,EAAA,CACA,IAAA,IACA,IAAA,IACA,KAAA,KACA,IAAA,IACAhM,EAAA,KACAL,EAAA,KACAjV,EAAA,KACAkV,EAAA,KACAC,EAAA,MAQA,SAAAoM,EAAA/L,GACA,MAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,EAIA,SAAAuD,EAAA0G,GACA,IAAAvrB,EAAAstB,EAAA,EAAAC,EAAA,EACA,IAAAvtB,EAAAmtB,EAAA,EAAAntB,EAAA,GAAA,OAAAktB,EAAAltB,GAAAA,IAAAstB,KACA,KAAAttB,EAAA,EAAAA,IAAA,OAAAktB,EAAAltB,IAAAutB,IACA,MAAA,IAAA9J,MAAA8H,EAAA,YAAAgC,EAAA,IAAAD,EAAA,OAAAJ,EAAAzO,OAAA0O,EAAAG,EAAA,IAAA,QAGA,SAAArJ,IAIA,OAFAxB,EAAAyK,EAAAM,OAAAL,GACAA,IACA1K,EAGA,SAAAS,EAAAuK,GAEA,OAAAP,EAAAM,OAAAL,EAAAM,GAGA,SAAArqB,EAAAsqB,GAOA,IAJA,IAAAtqB,EAAA,GAGAuqB,EAAAlL,EACAwB,KAAA,CACA,GAAAxB,IAAAkL,EAEA,OADA1J,IACAyJ,GAAA,MAAAC,GAAA,MAAAlL,GAAA,IAAArf,EAAA7C,QAEA0jB,IACA2J,KACAxqB,EAEA,GAAA,OAAAqf,EAEA,GADAwB,IACA,MAAAxB,EAAA,CAEA,IADA,IAAAoL,EAAA,EACA7tB,EAAA,EAAAA,EAAA,EAAAA,IAAA,CACAikB,IACA,IAAAJ,EAAAvC,EAAAmB,EAAAxV,WAAA,GACAwV,GAAA,KAAAA,GAAA,IAAAoB,EAAAvC,EAAA,GACAmB,GAAA,KAAAA,GAAA,IAAAoB,EAAAvC,EAAA,GAAA,GACAmB,GAAA,KAAAA,GAAA,IAAAoB,EAAAvC,EAAA,GAAA,GACAuD,EAAA,gBAAApC,GACAoL,EAAA,GAAAA,EAAAhK,EAEAzgB,GAAAqD,OAAAqd,aAAA+J,OACA,CAAA,GAAA,iBAAAT,EAAA3K,GAEA,MADArf,GAAAgqB,EAAA3K,OAEA,OAAAA,GAAA,OAAAA,EACAoC,EAAA,iCAEAzhB,GAAAqf,EAGAoC,EAAA,cAGA,SAAA+I,IAMA,IAJA,IAAAxqB,EAAA,GAAA0qB,EAAA,EAGAC,EAAA,IACA,CACA,IAAAzM,EAAA4B,GAAA6K,EAAA,GACA,IAAAzM,GAAA,OAAAA,EAAA,MACAyM,IAGA,SAAAC,IAEA,IADA,IAAAC,EAAAF,EACAtL,GAAAA,GAAA,KAAA,OAAAA,GAAAwL,KAAA,GAAAhK,IAIA,KAAAxB,GAAAA,GAAA,KAAA,OAAAA,GAAAwB,IAIA,IAHA,OAAAxB,IAAAwB,IAAA+J,OAGA,CACA,GAAAvL,EAEA,CAAA,GAAA,MAAAA,EAAA,CAGA,GAFAqL,IACA7J,IACA,IAAA6J,EAEA,MADA,OAAA1qB,EAAAM,OAAA,KAAAN,EAAAA,EAAAM,MAAA,GAAA,IACAN,EACA,SAEA,KAAA0qB,EAAA,GACA1qB,GAAA,IACA0qB,SAXAjJ,EAAA,wBAcA,OAAApC,GACArf,GAAA,KACA6gB,IACA+J,MAEA,OAAAvL,IAAArf,GAAAqf,GACAwB,MAKA,SAAAiK,IAIA,GAAA,MAAAzL,GAAA,MAAAA,EAAA,OAAArf,GAAA,GAGA,IADA,IAAA2X,EAAA,GAAAyH,EAAA2K,EAAAtd,GAAA,IACA,CACA,GAAA,MAAA4S,EAGA,OAFA1H,EACAlL,GAAA,GAAAA,IAAAkL,EAAAxa,SAAA4sB,EAAA3K,EAAA3S,EAAAgV,EAAA,8DADAA,EAAA,gEAEA9J,EACA0H,GAAA,IACAA,EACA5S,EAAA,IAAAA,EAAAkL,EAAAxa,QADAskB,EAAA,8DAEAwI,EAAA5K,GACAoC,EAAA,UAAApC,EAAA,mHAEA1H,GAAA0H,EAEAwB,KAIA,SAAAkK,IACA,KAAA1L,GAAA,CAEA,KAAAA,GAAAA,GAAA,KAAAwB,IAEA,GAAA,MAAAxB,GAAA,MAAAA,GAAA,MAAAS,EAAA,GACA,KAAAT,GAAA,OAAAA,GAAAwB,QACA,CAAA,GAAA,MAAAxB,GAAA,MAAAS,EAAA,GAIA,MAFA,IADAe,IAAAA,IACAxB,IAAA,MAAAA,GAAA,MAAAS,EAAA,KAAAe,IACAxB,IAAAwB,IAAAA,OA4CA,SAAAmK,EAAAlB,EAAAmB,GAGA,IAAA5mB,EAEAgb,EAFArf,EAAA,GAAAkrB,EAAA,EAAAC,GAAA,EACApB,EAAA,EAEA,SAAAlJ,IAGA,OAFAxB,EAAAyK,EAAAM,OAAAL,GACAA,IACA1K,EAQA,IALAwB,IACA,MAAAxB,IACArf,EAAA,IACA6gB,KAEAxB,GAAA,KAAAA,GAAA,KACA8L,IACA,KAAA9L,EAAA6L,IACAC,GAAA,GAEAnrB,GAAAqf,EACAwB,IAGA,GADAsK,GAAAD,IACA,MAAA7L,EAEA,IADArf,GAAA,IACA6gB,KAAAxB,GAAA,KAAAA,GAAA,KACArf,GAAAqf,EAEA,GAAA,MAAAA,GAAA,MAAAA,EAOA,IANArf,GAAAqf,EACAwB,IACA,MAAAxB,GAAA,MAAAA,IACArf,GAAAqf,EACAwB,KAEAxB,GAAA,KAAAA,GAAA,KACArf,GAAAqf,EACAwB,IAKA,KAAAxB,GAAAA,GAAA,KAAAwB,IASA,OAPAoK,IAEA,MAAA5L,GAAA,MAAAA,GAAA,MAAAA,GACA,MAAAA,IAAA,MAAAA,GAAA,MAAAyK,EAAAC,IAAA,MAAAD,EAAAC,MAAA1K,EAAA,IAGAhb,GAAArE,EACAqf,GAAA6L,IAAAE,SAAA/mB,QAAA,EACAA,EAGA,SAAAgnB,EAAArtB,GACA,SAAAstB,EAAAttB,EAAAqhB,GACA,IAAAziB,EAAAgM,EAAAzL,EAAA0qB,EACA,cAAA7pB,GACA,IAAA,SACAA,EAAA0d,QAAA2D,IAAA,IAAAwI,EAAA7pB,GACA,MACA,IAAA,SACA,GAAA,mBAAAL,OAAAlB,UAAAiB,SAAAkI,MAAA5H,GACA,IAAApB,EAAA,EAAAO,EAAAa,EAAAb,OAAAP,EAAAO,EAAAP,IACAirB,EAAAyD,EAAAttB,EAAApB,GAAAyiB,IAAAwI,OAGA,IAAAjf,KAAA5K,EACAL,OAAAlB,UAAAmB,eAAAyC,KAAArC,EAAA4K,KACAif,EAAAyD,EAAAttB,EAAA4K,GAAAyW,IAAAwI,GAIA,OAAAA,EAGA,SAAA0D,EAAAlM,GACA,IAAAmM,EAAAF,EAAAttB,EAAAqhB,GACA,OAAAmM,EACA,UAAAnM,EAAA,yDACAmM,EADA,iEAGA,GAGA,OAAAD,EAAA,MAAAA,EAAA,KAGA,SAAAptB,IAIA,IAAAA,EAAA,GACA,IAGA,GAFA0iB,IACAkK,IACA,MAAA1L,EAEA,OADAwB,IACA1iB,EAGA,KAAAkhB,GAAA,CAMA,GALAlhB,EAAAyB,KAAA5B,KACA+sB,IAGA,MAAA1L,IAAAwB,IAAAkK,KACA,MAAA1L,EAEA,OADAwB,IACA1iB,EAEA4sB,IAGAtJ,EAAA,qDACA,MAAA3b,GAEA,MADAA,EAAA2lB,KAAA3lB,EAAA2lB,MAAAJ,EAAAltB,GACA2H,GAIA,SAAA3E,EAAAuqB,GAGA,IAAAttB,EAAA,GAAA+C,EAAA,GAEA,IAOA,GANAuqB,GAEA7K,IAGAkK,IACA,MAAA1L,IAAAqM,EAEA,OADA7K,IACA1f,EAEA,KAAAke,GAAA,CAWA,GAVAjhB,EAAA0sB,IACAC,IACA,MAAA1L,GAAAoC,EAAA,4BAAApC,EAAA,KACAwB,IAEA1f,EAAA/C,GAAAJ,IACA+sB,IAGA,MAAA1L,IAAAwB,IAAAkK,KACA,MAAA1L,IAAAqM,EAEA,OADA7K,IACA1f,EAEA4pB,IAGA,GAAAW,EAAA,OAAAvqB,EACAsgB,EAAA,sDACA,MAAA3b,GAEA,MADAA,EAAA2lB,KAAA3lB,EAAA2lB,MAAAJ,EAAAlqB,GACA2E,GAIA,SAAA9H,IAIA,OADA+sB,IACA1L,GACA,IAAA,IAAA,OAAAle,IACA,IAAA,IAAA,OAAAhD,IACA,IAAA,IACA,IAAA,IAAA,OAAA6B,GAAA,GACA,QAAA,OAvNA,WAGA,IAAAhC,EAAAqhB,EAIA,IAHA4K,EAAA5K,IACAoC,EAAA,iCAAApC,EAAA,6DAEA,CACAwB,IAEA,IAAA8K,EAAA,OAAAtM,GAAA,OAAAA,GAAA,KAAAA,EACA,GAAAsM,GACA,MAAAtM,GAAA,MAAAA,GAAA,MAAAA,GACA,MAAAA,GACA,MAAAA,IAAA,MAAAS,EAAA,IAAA,MAAAA,EAAA,IACA,CAIA,IAAA8L,EAAA5tB,EAAA,GACA,OAAA4tB,GACA,IAAA,IAAA,GAAA,UAAA5tB,EAAAmjB,OAAA,OAAA,EAAA,MACA,IAAA,IAAA,GAAA,SAAAnjB,EAAAmjB,OAAA,OAAA,KAAA,MACA,IAAA,IAAA,GAAA,SAAAnjB,EAAAmjB,OAAA,OAAA,EAAA,MACA,QACA,GAAA,MAAAyK,GAAAA,GAAA,KAAAA,GAAA,IAAA,CACA,IAAAljB,EAAAsiB,EAAAhtB,GACA,QAAAwB,IAAAkJ,EAAA,OAAAA,GAGA,GAAAijB,EAEA,OAAA3tB,EAAAmjB,OAGAnjB,GAAAqhB,GAoLAwM,IAIA,SAAAC,EAAAxjB,GAGA,OAFAyiB,IACA1L,GAAAoC,EAAA,2CACAnZ,EAYA,GAAA,iBAAA9G,EAAA,MAAA,IAAA6e,MAAA,0BAGA,OAFAyJ,EAAAtoB,EAzYAuoB,EAAA,EACA1K,EAAA,IA8XA,WAEA,OADA0L,IACA1L,GACA,IAAA,IAAA,OAAAyM,EAAA3qB,KACA,IAAA,IAAA,OAAA2qB,EAAA3tB,KACA,QAAA,OAAA2tB,EAAA9tB,MAOA+tB,KCjaAtuB,IAAAuuB,KAAAvuB,IAAAoZ,YAAA,CAEAlW,YAAA,SAAA8W,GACA,KAAA3a,gBAAAW,IAAAuuB,MACA,OAAA,IAAAvuB,IAAAuuB,KAAAvU,GAGAlb,OAAA+K,SACAka,QAAAkB,KAAA,qDAGA5lB,KAAAmvB,UAAAnvB,KAAAmvB,UAAAnF,KAAAhqB,MAEAA,KAAAshB,MAAA,IAAA3gB,IAAA2lB,UAAA,GAAA3L,GACA3a,KAAAovB,OAAA,IAGAC,IAAA,SAAAC,GACA,IAAA1Z,EAAA5V,KAIA,OAFAA,KAAAovB,OAAA,GAEApvB,KAAAuvB,MAAAD,EAAA3qB,MAAA2qB,GAAA5kB,MAAA,WAIA,OAHA/J,IAAAkoB,OACAnE,QAAAmE,MAAA,WAAAjT,EAAAwZ,QAEAxZ,EAAAwZ,WAIAI,MAAA,SAAA/iB,EAAA+B,GACA,OAAAhE,QAAAiR,QAAAhP,GAAA/B,MAAA,SAAA+B,GAGA,OAFAA,EAAA/L,MAAA+C,QAAAgJ,GAAAA,EAAA,CAAAA,IAEAyV,QAAA,SAAAqJ,EAAAkE,EAAA3vB,GACA,OAAAyrB,EAAA7gB,MAAA,WACA,OAAA8D,EAAAihB,EAAA3vB,EAAA2M,EAAApM,QAAAqK,MAAA,SAAApI,GACAA,IACAmK,EAAA3M,GAAAwC,WAIAkI,QAAAiR,WAAA/Q,MAAA,WACA,OAAA+B,SAKA8iB,MAAA,SAAAD,GACA,IAAA1Z,EAAA5V,KAEA,GAAAsvB,EAAAI,MAAA,CACA,IAAAnU,EAAAvb,KAAAwvB,MAAAF,EAAAI,MAAA1vB,KAAAmvB,WAQA,OANAG,EAAAK,OACApU,EAAAoU,OAAA,SAAAlL,GACA,OAAA7O,EAAA4Z,MAAAF,EAAAK,MAAA/Z,EAAAuZ,cAIA5T,EAGA,OAAAvb,KAAAwvB,MAAAF,EAAAtvB,KAAAmvB,YAGAA,UAAA,SAAAS,GACA,IAAAha,EAAA5V,KAMA,IAAA,IAAA6a,KAJAla,IAAAkoB,OACAnE,QAAAmE,MAAA,YAAA+G,GAGAA,EAAA,CACA,GAAAA,EAAA9uB,eAAA+Z,IAAAla,IAAA+G,UAAAmT,GAAA,CACA,IAAAQ,EAAA1a,IAAA+G,UAAAmT,GAAAmP,KAAAhqB,MACA4pB,EAAAgG,EAAA/U,GAMA,OAJAla,IAAAkoB,OACAnE,QAAAmE,MAAA,cAAAhO,EAAA+O,GAGAA,EAAAiG,SACArlB,QAAAiR,UAGAjR,QAAAiR,QAAAJ,EAAAuO,IAAAlf,MAAA,SAAA0kB,GACAxF,EAAA/O,OAEAla,IAAAkoB,OACAnE,QAAAmE,MAAA,WAAAe,EAAA/O,KAAAuU,GAGAxZ,EAAA0L,MAAArf,IAAA2nB,EAAA/O,KAAAuU,GAEAxF,EAAAwF,SACAzuB,IAAAkoB,OACAnE,QAAAmE,MAAA,aAAAe,EAAA/O,KAAAuU,GAEAxZ,EAAAwZ,OAAAxF,EAAA/O,MAAAuU,OAKA,MAAA,IAAA7L,MAAA,UAAA1I,EAAA,qBAKAsJ,MAAA,SAAAjjB,GACA,GAAA,MAAAA,EAAA,OAAAA,EAIA,GAAA,iBAFAA,EAAAA,EAAA4uB,WAEA,CACA,IAAA3kB,EAAAjK,EAAAsC,MAAA,GAAA,GAEA,IAAA,IAAAlC,KAAAJ,EACAA,EAAAJ,eAAAQ,KACA6J,EAAA7J,GAAAtB,KAAAmkB,MAAAjjB,EAAAI,GAAAtB,KAAAshB,QAIA,OAAAnW,EAGA,MAAA,iBAAAjK,IAAA,GAAAA,EAAA0d,QAAA,MACAje,IAAAwjB,MAAAjjB,EAAAlB,KAAAshB,OAGApgB,KAKAP,IAAAuuB,KAAAG,IAAA,SAAAC,EAAA9tB,GAEA,OADA,IAAAb,IAAAuuB,KAAA1tB,GACA6tB,IAAAC,ICzIA3uB,IAAAuJ,UAAA,MAAA,CAEArG,YAAA,SAAA0F,EAAAoR,GACA3a,KAAA+vB,OAAA/vB,KAAA+vB,OAAA/F,KAAAhqB,MACAW,IAAA2Z,cAAA/W,KAAAvD,KAAAuJ,EAAAoR,IAGAJ,YAAA,CACAuD,MAAA,IAGAtD,WAAA,GAEAC,QAAA,GAEAC,OAAA,CACAsV,MAAA/mB,MACAgnB,KAAAhnB,OAGA6d,OAAA,SAAAvd,GACAvJ,KAAAkwB,aACAlwB,KAAAqnB,SACA5nB,OAAA2oB,oBAAA,OAAApoB,KAAA+vB,QACAtwB,OAAA8K,iBAAA,OAAAvK,KAAA+vB,QACApvB,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,WACAnJ,OAGAgoB,OAAA,WACAhoB,KAAAkwB,cAGAH,OAAA,WACA/vB,KAAAmJ,cAAA,SAGA+mB,WAAA,WACA,IAAAC,EAAA,GAEA1wB,OAAA8Z,SAAAiV,OACA2B,EAAA1wB,OAAA8Z,SAAAiV,OAAAjQ,OAAA,GACA9e,OAAA8Z,SAAAvW,KAAA4b,QAAA,OACAuR,EAAA1wB,OAAA8Z,SAAAvW,KAAAub,OAAA9e,OAAA8Z,SAAAvW,KAAA4b,QAAA,KAAA,IACAA,QAAA,KAAA,IACAuR,EAAAA,EAAA5R,OAAA,EAAA4R,EAAAvR,QAAA,OAIA,IAAAd,EAAAqS,EAAA1R,MAAA,KAAAyD,QAAA,SAAApE,EAAAY,GACA,IAAA0R,EAAA1R,EAAA7Q,QAAA,MAAA,KAAA4Q,MAAA,KAIA,OAHA2R,EAAA,KACAtS,EAAAuS,mBAAAD,EAAA,KAAAC,mBAAAD,EAAA,IAAA,KAEAtS,IACA,IAEAwS,EAAArwB,SAAA2K,cAAA,wBACA2hB,EAAAtsB,SAAA2K,cAAA,yBACA,GAAA2hB,GAAAA,EAAAgE,QAAA,CACA,IAAAhrB,EAAA,GACAylB,EAAAuB,EAAAgE,QAEAD,GAAAA,EAAAC,UACAvF,EAAAsF,EAAAC,QAAA1iB,QAAA,MAAA,IAAAmd,GAGA,IACAjJ,EADAphB,IAAA8pB,aAAAO,EAAAzlB,EAAA,CAAA+K,KAAA,IACA3L,KAAA6rB,UAAA/wB,OAAA8Z,SAAAkX,WAEA1O,GACAxc,EAAA9E,SAAA,SAAAa,EAAAQ,GACAgc,EAAAxc,EAAAuZ,MAAAkH,EAAAjgB,EAAA,MAKA9B,KAAAiC,IAAA,QAAA6b,MC9EAnd,IAAAuJ,UAAA,OAAA,CAEAkQ,IAAA,OAEAI,WAAA,CACAkW,WAAA,CACAjvB,KAAA0d,QACA0K,SAAA,IAIApP,QAAA,CACAkW,OAAA,SAAAC,GACAA,EACA5wB,KAAA6wB,UAEA7wB,KAAA2wB,UAIAG,MAAA,WACA9wB,KAAA8wB,SAGAhjB,SAAA,WACA9N,KAAA8N,aAIA4M,OAAA,CACAqW,QAAA9nB,MACA0nB,OAAA1nB,OAGA6d,OAAA,SAAAvd,GACA5I,IAAA2Z,cAAA3a,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAumB,MAAAyK,YAAA,EACAhxB,KAAAumB,MAAAhc,iBAAA,SAAAvK,KAAAixB,SAAAjH,KAAAhqB,OACAA,KAAAumB,MAAAhc,iBAAA,QAAAvK,KAAAkxB,QAAAlH,KAAAhqB,QAGA2wB,OAAA,SAAAnvB,GACA,GAAAxB,KAAAsF,MAAAorB,YAAA1wB,KAAA8N,WACA9N,KAAAmJ,cAAA,SAAA,CAAAsf,YAAA,KACAzoB,KAAA6wB,cAEA,CACAlwB,IAAAoJ,gBACA/J,KAAAmJ,cAAA,WACA,IAAAgoB,EAAAxwB,IAAAU,MAAArB,KAAAumB,MAAAvY,UAAAsZ,MAAA,SAAA6J,GACA,IAAAA,EAAAC,SAAAC,MAAA,OAAA,KAEAF,GACAA,EAAAG,UAKAT,QAAA,WAEAU,gBAAA5xB,UAAAgxB,OAAAptB,KAAAvD,KAAAumB,QAGAuK,MAAA,WAEAS,gBAAA5xB,UAAAmxB,MAAAvtB,KAAAvD,KAAAumB,QAGAzY,SAAA,WACA,OAAAnN,IAAAmN,SAAA9N,KAAAumB,QAGA0K,SAAA,SAAA5iB,GACAA,EAAAiJ,iBACAtX,KAAA2wB,UAGAO,QAAA,SAAA7iB,GACA1N,IAAAwN,cAAAnO,KAAAumB,OACA9mB,OAAA+xB,YAAAxxB,KAAAumB,MAAA3b,cAAA,iBACA4mB,WAAAV,QAEAnwB,IAAAoJ,mBClFApJ,IAAAuJ,UAAA,eAAA,CAEArG,YAAA,SAAA0F,EAAAoR,GACA3a,KAAAyxB,WAAA9wB,IAAAmO,SAAA9O,KAAAyxB,WAAAzH,KAAAhqB,OACAW,IAAA2Z,cAAA/W,KAAAvD,KAAAuJ,EAAAoR,IAGAJ,YAAA,CACArZ,MAAA,GACA2uB,UAAA,EACA6B,kBAAA,GACAX,SAAA,EACAY,SAAA,GAGAnX,WAAA,CACAtZ,MAAA,CACAO,KAAA8E,OACAsjB,QAAA,IAGAgG,SAAA,CACApuB,KAAA0d,QACA0K,SAAA,IAIApP,QAAA,CACAmX,SAAA,SAAA1wB,GACAlB,KAAA4xB,SAAA1wB,IAGAowB,MAAA,WACAtxB,KAAAsxB,SAGAO,QAAA,SAAAA,GACA7xB,KAAA6xB,QAAAA,IAGA/jB,SAAA,WACA9N,KAAA8N,aAIA4M,OAAA,CACAuN,QAAAhf,MACA6oB,QAAA7oB,OAGA6d,OAAA,SAAAvd,GACA5I,IAAA2Z,cAAA3a,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAumB,MAAArlB,MAAAlB,KAAAsF,MAAApE,OAAA,GACAlB,KAAAumB,MAAAsJ,SAAA7vB,KAAAsF,MAAAuqB,SACA7vB,KAAAumB,MAAAwL,aAAA/xB,KAAAsF,MAAApE,OAAA,GACAlB,KAAAumB,MAAAhc,iBAAA,QAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAAhc,iBAAA,SAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAAhc,iBAAA,UAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAAhc,iBAAA,QAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAAhc,iBAAA,OAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OAGAA,KAAAyxB,cAGAzJ,OAAA,SAAA1iB,EAAA0sB,GACAA,EAAAzvB,IAAA,WACAvC,KAAAumB,MAAAwL,aAAA/xB,KAAAsF,MAAApE,OAAA,GACAlB,KAAA4xB,SAAA5xB,KAAAsF,MAAApE,QAGAoE,EAAAuqB,UAAA7vB,KAAAsF,MAAAuqB,WACA7vB,KAAAumB,MAAAsJ,SAAA7vB,KAAAsF,MAAAuqB,UAGA7vB,KAAAyxB,cAGAA,WAAA,SAAApjB,GACAA,GAAArO,KAAAumB,MAAAtY,OACAtN,IAAAmN,SAAA9N,KAAAumB,OAGAvmB,KAAAumB,MAAArlB,QAAAlB,KAAAwB,KAAAN,OACAP,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,WACAkF,GAAArO,KAAAmJ,cAAA,aACAnJ,MAGAA,KAAAiC,IAAA,QAAAjC,KAAAumB,MAAArlB,OACAlB,KAAAiC,IAAA,WAAAjC,KAAAumB,MAAAsJ,UACA7vB,KAAAiC,IAAA,UAAAjC,KAAAumB,QAAAtmB,SAAAgyB,eAEAjyB,KAAAumB,MAAAtY,QACAjO,KAAAiC,IAAA,WAAAjC,KAAAumB,MAAA6K,SAAAC,OACArxB,KAAAiC,IAAA,oBAAAjC,KAAAumB,MAAAmL,qBAIAE,SAAA,SAAA1wB,GACAlB,KAAAumB,MAAArlB,MAAAA,GAAA,GACAlB,KAAAyxB,cAGAH,MAAA,WACAtxB,KAAAumB,MAAA+K,SAGAO,QAAA,SAAAA,GACA7xB,KAAAumB,MAAAsJ,UAAA,IAAAgC,EACA7xB,KAAAyxB,cAGA3jB,SAAA,WACAnN,IAAAmN,SAAA9N,KAAAumB,OACAvmB,KAAAyxB,gBCpHA9wB,IAAAuJ,UAAA,WAAA,CAEAmQ,QAAA,eAEAD,IAAA,WAEA0M,OAAA,SAAAvd,GACA,IAAAvJ,KAAAsF,MAAApE,MAAA,CACA,IAAAA,EAAAlB,KAAAumB,MAAArlB,OACA,IAAAA,EAAA0d,QAAA,MACA5e,KAAAsF,MAAApE,MAAAP,IAAAwjB,MAAAjjB,EAAAlB,MAEAA,KAAAsF,MAAApE,MAAAA,EAGAP,IAAAuJ,UAAA,gBAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,MCfA5I,IAAAuJ,UAAA,QAAA,CACAmQ,QAAA,eACAD,IAAA,UCFAzZ,IAAAuJ,UAAA,aAAA,CAEAmQ,QAAA,QAEAE,YAAA,CACA2X,KAAA,MAGApL,OAAA,SAAAvd,GACA5I,IAAAuJ,UAAA,gBAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAumB,MAAAhc,iBAAA,SAAAvK,KAAAmyB,SAAAnI,KAAAhqB,OACAA,KAAAumB,MAAAxe,MACA/H,KAAAumB,MAAAxe,KAAAwC,iBAAA,QAAAvK,KAAAmyB,SAAAnI,KAAAhqB,QAIAmyB,SAAA,WACA,IAAA3wB,EAAA,KAEA,GAAAxB,KAAAumB,MAAA6L,MAAA/xB,OAAA,CACA,IAAA6xB,EAAAlyB,KAAAumB,MAAA6L,MAAA,GAEA5wB,EAAA,CACA6wB,MAAAH,EAAAI,aAAA,IAAAzmB,KAAAqmB,EAAAI,cAAAJ,EAAAK,kBAAAC,cACA3X,KAAAqX,EAAArX,KACAzY,KAAA8vB,EAAA9vB,KACAX,KAAAywB,EAAAzwB,KACAgxB,QAAA,OAGA,IAAAP,EAAAzwB,KAAAmd,QAAA,WAAAsT,EAAAQ,SACAR,EAAAQ,OAAA,IAAAC,WAEAT,EAAAQ,OAAA3C,OAAA,SAAA1hB,GACA7M,EAAAixB,QAAApkB,EAAAkH,OAAAjT,OACA3B,IAAAoJ,iBAGAmoB,EAAAQ,OAAAE,cAAAV,IAIAlyB,KAAAiC,IAAA,OAAAT,IAGAowB,SAAA,WACAlN,QAAAkB,KAAA,yCC9CAjlB,IAAAuJ,UAAA,sBAAA,CAEAmQ,QAAA,QAEAE,YAAA,CACA6X,MAAA,IAGAtL,OAAA,SAAAvd,GACA5I,IAAAuJ,UAAA,gBAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAumB,MAAAhc,iBAAA,SAAAvK,KAAAmyB,SAAAnI,KAAAhqB,OACAA,KAAAumB,MAAAxe,MACA/H,KAAAumB,MAAAxe,KAAAwC,iBAAA,QAAAvK,KAAAmyB,SAAAnI,KAAAhqB,QAIAmyB,SAAA,WACA,IACAC,EAAA1xB,MAAAf,UAAA6D,MAAAD,KAAAvD,KAAAumB,MAAA6L,OAAAzwB,KAAA,SAAAuwB,GACA,IAAA1wB,EAAA,CACA6wB,MAAAH,EAAAI,aAAA,IAAAzmB,KAAAqmB,EAAAI,cAAAJ,EAAAK,kBAAAC,cACA3X,KAAAqX,EAAArX,KACAzY,KAAA8vB,EAAA9vB,KACAX,KAAAywB,EAAAzwB,KACAgxB,QAAA,MAcA,OAXA,IAAAP,EAAAzwB,KAAAmd,QAAA,WAAAsT,EAAAQ,SACAR,EAAAQ,OAAA,IAAAC,WAEAT,EAAAQ,OAAA3C,OAAA,SAAA1hB,GACA7M,EAAAixB,QAAApkB,EAAAkH,OAAAjT,OACA3B,IAAAoJ,iBAGAmoB,EAAAQ,OAAAE,cAAAV,IAGA1wB,KAGAxB,KAAAiC,IAAA,QAAAmwB,IAGAR,SAAA,WACAlN,QAAAkB,KAAA,yCC7CAjlB,IAAAuJ,UAAA,eAAA,CAEAmQ,QAAA,QAEAyM,OAAA,SAAAvd,GACA5I,IAAAuJ,UAAA,gBAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAiC,IAAA,SAAAjC,KAAAsF,MAAApE,QAGAuwB,WAAA,SAAApjB,GACAA,GAAArO,KAAAumB,MAAAtY,OACAtN,IAAAmN,SAAA9N,KAAAumB,OAGAvmB,KAAAumB,MAAArlB,QAAAlB,KAAAwB,KAAAN,OACAP,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,WACAkF,GAAArO,KAAAmJ,cAAA,aACAnJ,MAEAA,KAAAiC,IAAA,QAAAjC,KAAAumB,MAAArlB,OAAAlB,KAAAumB,MAAArlB,MAAA,MACAlB,KAAAiC,IAAA,WAAAjC,KAAAumB,MAAAsJ,UAEA7vB,KAAAumB,MAAAtY,QACAjO,KAAAiC,IAAA,WAAAjC,KAAAumB,MAAA6K,SAAAC,OACArxB,KAAAiC,IAAA,oBAAAjC,KAAAumB,MAAAmL,uBCzBA/wB,IAAAuJ,UAAA,SAAA,CAEAmQ,QAAA,eAEAD,IAAA,SAEAI,WAAA,CACA/Y,KAAA,CACAA,KAAA8E,OACAsjB,QAAA,SACA/b,SAAA,SAAAvC,GACA,MAAA,2BAAAnG,KAAAmG,MAKAub,OAAA,SAAAvd,GACA5I,IAAAuJ,UAAA,gBAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAumB,MAAA9kB,KAAAzB,KAAAsF,MAAA7D,QClBAd,IAAAuJ,UAAA,QAAA,CAEAmQ,QAAA,eAEAE,YAAA,CACAsY,SAAA,GAGAzY,IAAA,QAEAI,WAAA,CACAqY,QAAA,CACApxB,KAAA0d,QACA0K,SAAA,IAIApP,QAAA,CACAvS,OAAA,SAAA4qB,GACA9yB,KAAAkI,OAAA4qB,KAIAhM,OAAA,SAAAvd,GACA5I,IAAAuJ,UAAA,gBAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAumB,MAAAhc,iBAAA,QAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAA9kB,KAAA,QACAzB,KAAAumB,MAAAsM,QAAA7yB,KAAAsF,MAAAutB,QACA7yB,KAAAumB,MAAAwM,eAAA/yB,KAAAsF,MAAAutB,QACA7yB,KAAAiC,IAAA,UAAAjC,KAAAsF,MAAAutB,UAGA7K,OAAA,SAAA1iB,EAAA0sB,GACArxB,IAAAuJ,UAAA,gBAAAvK,UAAAqoB,OAAAzkB,KAAAvD,KAAAsF,EAAA0sB,GAEA1sB,EAAAutB,UAAA7yB,KAAAsF,MAAAutB,UACA7yB,KAAAumB,MAAAsM,QAAA7yB,KAAAsF,MAAAutB,QACA7yB,KAAAumB,MAAAwM,eAAA/yB,KAAAsF,MAAAutB,SAGA7yB,KAAAyxB,cAGAA,WAAA,SAAApjB,GACA1N,IAAAuJ,UAAA,gBAAAvK,UAAA8xB,WAAAluB,KAAAvD,KAAAqO,GACArO,KAAAwB,KAAAqxB,SAAA7yB,KAAAumB,MAAAsM,SACAlyB,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,WACAkF,GAAArO,KAAAmJ,cAAA,aACAnJ,MAEAA,KAAAiC,IAAA,UAAAjC,KAAAumB,MAAAsM,UAGA3qB,OAAA,SAAA4qB,GACA9yB,KAAAumB,MAAAsM,SAAA,IAAAC,KCvDAnyB,IAAAuJ,UAAA,cAAA,CAEAqQ,YAAA,CACArZ,MAAA,IAGAkZ,IAAA,MAEAI,WAAA,CACAtZ,MAAA,CACAO,KAAA8E,OACAsjB,QAAA,KAIApP,QAAA,CACAmX,SAAA,SAAA1wB,GACAlB,KAAA4xB,SAAA1wB,KAIAwZ,OAAA,CACAuN,QAAAhf,OAGA6d,OAAA,SAAAvd,GACA5I,IAAA2Z,cAAA3a,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAA4xB,SAAA5xB,KAAAsF,MAAApE,QAGA8mB,OAAA,SAAA1iB,GACA3E,IAAA2Z,cAAA3a,UAAAqoB,OAAAzkB,KAAAvD,KAAAsF,GAEAA,EAAApE,OAAAlB,KAAAsF,MAAApE,QACAlB,KAAAgzB,aAAA,EACAryB,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,aACAnJ,QAIAioB,QAAA,WACAjoB,KAAAgzB,cACAhzB,KAAAgzB,aAAA,EACAhzB,KAAA4xB,SAAA5xB,KAAAsF,MAAApE,OAAA,IAGA,IAAA+xB,EAAAvyB,MAAAf,UAAA6D,MAAAD,KAAAvD,KAAAumB,MAAApmB,iBAAA,sBAAA+yB,QAAA,SAAAC,GACA,OAAAA,EAAAtD,UAAAsD,EAAAN,WACAlxB,KAAA,SAAAwxB,GACA,OAAAA,EAAAjyB,SAGAP,IAAAqF,MAAAhG,KAAAwB,KAAAN,MAAA+xB,EAAA,MAEAjzB,KAAAiC,IAAA,QAAAgxB,EAAA,IACAtyB,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,aACAnJ,QAIA4xB,SAAA,SAAA1wB,EAAAkyB,GACA1yB,MAAAf,UAAA6D,MAAAD,KAAAvD,KAAAumB,MAAApmB,iBAAA,sBAAAM,SAAA,SAAA0yB,GACAA,EAAAN,QAAAM,EAAAjyB,OAAAA,EACAkyB,IAAAD,EAAAJ,eAAAI,EAAAN,YAEA7yB,KAAAioB,aCnEAtnB,IAAAuJ,UAAA,WAAA,CAEAmQ,QAAA,eAEAE,YAAA,CACAsY,SAAA,GAGAzY,IAAA,QAEAI,WAAA,CACAqY,QAAA,CACApxB,KAAA0d,QACA0K,SAAA,IAIApP,QAAA,CACAvS,OAAA,SAAA4qB,GACA9yB,KAAAkI,OAAA4qB,KAIApY,OAAA,CACAmY,QAAA5pB,MACAoqB,UAAApqB,OAGA6d,OAAA,SAAAvd,GACA5I,IAAAuJ,UAAA,gBAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAumB,MAAAhc,iBAAA,QAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAA9kB,KAAA,WACAzB,KAAAumB,MAAAsM,QAAA7yB,KAAAsF,MAAAutB,QACA7yB,KAAAumB,MAAAwM,eAAA/yB,KAAAsF,MAAAutB,QACA7yB,KAAAiC,IAAA,UAAAjC,KAAAsF,MAAAutB,UAGA7K,OAAA,SAAA1iB,EAAA0sB,GACArxB,IAAAuJ,UAAA,gBAAAvK,UAAAqoB,OAAAzkB,KAAAvD,KAAAsF,EAAA0sB,GAEA1sB,EAAAutB,UAAA7yB,KAAAsF,MAAAutB,UACA7yB,KAAAumB,MAAAsM,QAAA7yB,KAAAsF,MAAAutB,QACA7yB,KAAAumB,MAAAwM,eAAA/yB,KAAAsF,MAAAutB,SAGA7yB,KAAAyxB,cAGAA,WAAA,SAAApjB,GACA1N,IAAAuJ,UAAA,gBAAAvK,UAAA8xB,WAAAluB,KAAAvD,KAAAqO,GACArO,KAAAwB,KAAAqxB,SAAA7yB,KAAAumB,MAAAsM,SACAlyB,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,WACAkF,IACArO,KAAAmJ,cAAA,WACAnJ,KAAAmJ,cAAAnJ,KAAAumB,MAAAsM,QAAA,UAAA,gBAEA7yB,MAEAA,KAAAiC,IAAA,UAAAjC,KAAAumB,MAAAsM,UAGA3qB,OAAA,SAAA4qB,GACA9yB,KAAAumB,MAAAsM,SAAA,IAAAC,KC/DAnyB,IAAAuJ,UAAA,iBAAA,CAEAqQ,YAAA,CACArZ,MAAA,IAGAkZ,IAAA,MAEAI,WAAA,CACAtZ,MAAA,CACAO,KAAAf,MACAmpB,QAAA,KAIApP,QAAA,CACAmX,SAAA,SAAA1wB,GACAlB,KAAA4xB,SAAA1wB,KAIAwZ,OAAA,CACAuN,QAAAhf,OAGA6d,OAAA,SAAAvd,GACA5I,IAAA2Z,cAAA3a,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAA4xB,SAAA5xB,KAAAsF,MAAApE,QAGA8mB,OAAA,SAAA1iB,EAAA0sB,GACArxB,IAAA2Z,cAAA3a,UAAAqoB,OAAAzkB,KAAAvD,KAAAsF,EAAA0sB,GAEAA,EAAAzvB,IAAA,WACAvC,KAAAgzB,aAAA,IAIA/K,QAAA,WACAjoB,KAAAgzB,cACAhzB,KAAAgzB,aAAA,EACAhzB,KAAA4xB,SAAA5xB,KAAAsF,MAAApE,QAGA,IAAAA,EAAAR,MAAAf,UAAA6D,MAAAD,KAAAvD,KAAAumB,MAAApmB,iBAAA,yBAAA+yB,QAAA,SAAAI,GACA,OAAAA,EAAAzD,UAAAyD,EAAAT,WACAlxB,KAAA,SAAA2xB,GACA,OAAAA,EAAApyB,SAGAP,IAAAqF,MAAAhG,KAAAwB,KAAAN,MAAAA,KAEAlB,KAAAiC,IAAA,QAAAf,GACAP,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,aACAnJ,QAIA4xB,SAAA,SAAA1wB,EAAAkyB,GACA1yB,MAAA+C,QAAAvC,KAAAA,EAAA,CAAAA,IACAR,MAAAf,UAAA6D,MAAAD,KAAAvD,KAAAumB,MAAApmB,iBAAA,yBAAAM,SAAA,SAAA6yB,GACAA,EAAAT,QAAA3xB,EAAA0d,QAAA0U,EAAApyB,QAAA,EACAkyB,IAAAE,EAAAP,eAAAO,EAAAT,YAEA7yB,KAAAioB,aCjEAtnB,IAAAuJ,UAAA,SAAA,CAEAmQ,QAAA,eAEAE,YAAA,CACAgZ,eAAA,EACAC,cAAA,GACAC,aAAA,IAGArZ,IAAA,SAEAI,WAAA,CACAoP,QAAA,CACAnoB,KAAAf,MACAmpB,QAAA,IAEA6J,WAAA,CACAjyB,KAAA8E,OACAsjB,QAAA,UAEA8J,YAAA,CACAlyB,KAAA8E,OACAsjB,QAAA,WAIApP,QAAA,CACAmZ,iBAAA,SAAA9xB,GACA9B,KAAAumB,MAAAgN,cAAAzxB,EACA9B,KAAAyxB,eAIA3K,OAAA,SAAAvd,GACAvJ,KAAA4pB,QAAA,GACA5pB,KAAAsF,MAAApE,MAGAlB,KAAAgzB,aAAA,EAFAhzB,KAAAsF,MAAApE,MAAAlB,KAAAumB,MAAArlB,MAIAP,IAAA2Z,cAAA3a,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GACAvJ,KAAAumB,MAAAsJ,SAAA7vB,KAAAsF,MAAAuqB,SACA7vB,KAAAumB,MAAAhc,iBAAA,SAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAAhc,iBAAA,UAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAAhc,iBAAA,QAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAAumB,MAAAhc,iBAAA,OAAAvK,KAAAyxB,WAAAzH,KAAAhqB,OACAA,KAAA6zB,gBACA7zB,KAAAyxB,cAGAzJ,OAAA,SAAA1iB,EAAA0sB,GACAA,EAAAzvB,IAAA,aACAvC,KAAA6zB,gBACA7zB,KAAAgzB,aAAA,GAGAhB,EAAAzvB,IAAA,WACAvC,KAAAgzB,aAAA,GAGA1tB,EAAAuqB,UAAA7vB,KAAAsF,MAAAuqB,WACA7vB,KAAAumB,MAAAsJ,SAAA7vB,KAAAsF,MAAAuqB,UAGA7vB,KAAAyxB,cAGAxJ,QAAA,WACAjoB,KAAAgzB,cACAhzB,KAAAgzB,aAAA,EACAhzB,KAAA4xB,SAAA5xB,KAAAsF,MAAApE,OAAA,GACAlB,KAAAyxB,eAIAA,WAAA,SAAApjB,GACA1N,IAAAuJ,UAAA,gBAAAvK,UAAA8xB,WAAAluB,KAAAvD,KAAAqO,GACA,IAAAklB,EAAAvzB,KAAAumB,MAAAgN,cACAvzB,KAAAiC,IAAA,gBAAAsxB,GACAvzB,KAAAiC,IAAA,gBAAAjC,KAAAumB,MAAAqD,QAAA2J,IAAAvzB,KAAAumB,MAAAqD,QAAA2J,GAAAryB,OAAA,IACAlB,KAAAiC,IAAA,eAAAjC,KAAAumB,MAAAqD,QAAA2J,IAAAvzB,KAAAumB,MAAAqD,QAAA2J,GAAAvG,MAAA,KAGA4E,SAAA,SAAA1wB,EAAAkyB,GACAzyB,IAAAU,MAAArB,KAAAumB,MAAAqD,SAAAnpB,SAAA,SAAAqzB,GACAA,EAAAC,SAAAD,EAAA5yB,OAAAA,EACAkyB,IAAAU,EAAAE,gBAAAF,EAAAC,cAIAF,cAAA,WACA7zB,KAAA4pB,QAAA/mB,OAAA,GAAApC,SAAA,SAAA8I,GACA5I,IAAAgd,IAAA1B,OAAA1S,MAGA5I,IAAAyM,YAAApN,KAAAsF,MAAAskB,SAAAnpB,SAAA,SAAAqzB,GACA,iBAAAA,IAAAA,EAAA,CAAAnmB,OAAAmmB,IACA,IAAAvqB,EAAAtJ,SAAA+d,cAAA,UACAzU,EAAArI,MAAAP,IAAAwjB,MAAAnkB,KAAAsF,MAAAquB,YAAAhzB,IAAA2lB,UAAAwN,EAAA9zB,OACAuJ,EAAA0qB,UAAAtzB,IAAAwjB,MAAAnkB,KAAAsF,MAAAouB,WAAA/yB,IAAA2lB,UAAAwN,EAAA9zB,OACAA,KAAA4pB,QAAA9mB,KAAA9C,KAAAumB,MAAAnJ,YAAA7T,MACAvJ,SCtGAW,IAAAuJ,UAAA,kBAAA,CAEAmQ,QAAA,SAEAE,YAAA,CACArZ,MAAA,IAGAsZ,WAAA,CACAtZ,MAAA,CACAO,KAAAf,MACAmpB,QAAA,OAIApP,QAAA,CACAmZ,iBAAA,SAAA9xB,GACA9B,KAAAumB,MAAAgN,cAAAzxB,EACA9B,KAAAyxB,eAIAzJ,OAAA,SAAA1iB,EAAA0sB,GACAA,EAAAzvB,IAAA,aACAvC,KAAA6zB,gBACA7zB,KAAAgzB,aAAA,GAGAhB,EAAAzvB,IAAA,WACAvC,KAAAgzB,aAAA,GAGA1tB,EAAAuqB,UAAA7vB,KAAAsF,MAAAuqB,WACA7vB,KAAAumB,MAAAsJ,SAAA7vB,KAAAsF,MAAAuqB,UAGA7vB,KAAAyxB,cAGAA,WAAA,SAAApjB,GACA,IAAAnN,EAAAR,MAAAf,UAAA6D,MAAAD,KAAAvD,KAAAumB,MAAAqD,SAAAsJ,QAAA,SAAAY,GACA,OAAAA,EAAAC,YACApyB,KAAA,SAAAmyB,GACA,OAAAA,EAAA5yB,SAGAP,IAAAqF,MAAAhG,KAAAwB,KAAAN,MAAAA,IACAP,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,WACAkF,GAAArO,KAAAmJ,cAAA,aACAnJ,MAGAA,KAAAiC,IAAA,QAAAf,GACAlB,KAAAiC,IAAA,WAAAjC,KAAAumB,MAAAsJ,UACA7vB,KAAAiC,IAAA,WAAAjC,KAAAumB,MAAA6K,SAAAC,OACArxB,KAAAiC,IAAA,UAAAjC,KAAAumB,QAAAtmB,SAAAgyB,eACAjyB,KAAAiC,IAAA,oBAAAjC,KAAAumB,MAAAmL,mBAEA,IAAA6B,EAAAvzB,KAAAumB,MAAAgN,cACAvzB,KAAAiC,IAAA,gBAAAsxB,GACAvzB,KAAAiC,IAAA,gBAAAjC,KAAAumB,MAAAqD,QAAA2J,IAAAvzB,KAAAumB,MAAAqD,QAAA2J,GAAAryB,OAAA,IACAlB,KAAAiC,IAAA,eAAAjC,KAAAumB,MAAAqD,QAAA2J,IAAAvzB,KAAAumB,MAAAqD,QAAA2J,GAAAvG,MAAA,KAGA4E,SAAA,SAAA1wB,EAAAkyB,GACA1yB,MAAA+C,QAAAvC,KAAAA,EAAA,CAAAA,IACAA,EAAAA,EAAAS,KAAA,SAAA6J,GAAA,OAAAA,EAAA5K,cACAD,IAAAU,MAAArB,KAAAumB,MAAAqD,SAAAnpB,SAAA,SAAAqzB,GACAA,EAAAC,SAAA7yB,EAAA0d,QAAAkV,EAAA5yB,QAAA,EACAkyB,IAAAU,EAAAE,gBAAAF,EAAAC,gBCtEApzB,IAAAuJ,UAAA,QAAA,CAEAqQ,YAAA,CACArZ,MAAA,MAGAsZ,WAAA,CACAtZ,MAAA,CACA2oB,QAAA,OAIApP,QAAA,CACAmX,SAAA,SAAA1wB,GACAlB,KAAAwB,KAAAN,QAAAA,IACAlB,KAAAiC,IAAA,QAAAf,GACAP,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,aACAnJ,SAKA0a,OAAA,CACAuN,QAAAhf,OAGA6d,OAAA,WACA9mB,KAAAiC,IAAA,QAAAjC,KAAAsF,MAAApE,QAGA8mB,OAAA,SAAA1iB,EAAA0sB,GACAA,EAAAzvB,IAAA,WACAvC,KAAAiC,IAAA,QAAAjC,KAAAsF,MAAApE,OACAP,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,aACAnJ,UCpCAW,IAAAuJ,UAAA,SAAA,CAEAqQ,YAAA,CACAjN,MAAA,IAGAkN,WAAA,CACAnN,OAAA,CACA5L,KAAA,CAAAf,MAAAG,OAAAye,QACAuK,QAAA,IAGAvoB,IAAA,CACAG,KAAA8E,OACAsjB,QAAA,IAGAqK,SAAA,CACAzyB,KAAA0d,QACA0K,SAAA,IAIAnP,OAAA,CACAsN,OAAA/e,MACAgf,QAAAhf,OAGA6d,OAAA,SAAAvd,GAIA,IAHAvJ,KAAAm0B,UAAA,GACAn0B,KAAAo0B,UAAA,GACAp0B,KAAAq0B,UAAAp0B,SAAAq0B,yBACAt0B,KAAAumB,MAAArI,iBACAle,KAAAq0B,UAAAjX,YAAApd,KAAAumB,MAAAgO,YAGAv0B,KAAAgoB,OAAA,CAAA3a,OAAA,IAAA,IAAAzF,IAAA,CAAA,aAGAogB,OAAA,SAAA1iB,EAAA0sB,GACAA,EAAAzvB,IAAA,YACAyvB,EAAAzvB,IAAA,SAAAvC,KAAAw0B,WAAA,GACAx0B,KAAAy0B,cACAz0B,KAAAy0B,aAAA,EAKA9zB,IAAA+N,SAAA1O,KAAA00B,QAAA10B,SAKA00B,QAAA,WACA10B,KAAAy0B,aAAA,EAEAz0B,KAAAmJ,cAAA,WAEAnJ,KAAAsF,MAAA4uB,UAAAl0B,KAAAw0B,aACAx0B,KAAAw0B,WAAA,EACAx0B,KAAA20B,UAGA,IAAAC,EAAAj0B,IAAAuJ,UAAA,eACAmD,EAAArN,KAAAsF,MAAA+H,OACAC,EAAA3M,IAAAyM,YAAAC,GAEA,GAAAC,EAAAjN,QACA,IAAAL,KAAAsF,MAAA4uB,UAAAl0B,KAAAsF,MAAAhE,KAAAgM,EAAA,GAAAxM,eAAAd,KAAAsF,MAAAhE,MAAAtB,KAAAm0B,UAAA9zB,OAAA,CAEA,IAOA8c,EAAA0X,EAPAvzB,EAAAtB,KAAAsF,MAAAhE,IACA2f,EAAAjhB,KAAAm0B,UACAjT,EAAAlhB,KAAA80B,OAAAxnB,GACAynB,EAAA,EACAC,EAAA,EACAC,EAAAhU,EAAA5gB,OAAA,EACA60B,EAAAhU,EAAA7gB,OAAA,EAGA80B,EAAA,OAAA,CAEA,KAAAlU,EAAA8T,GAAAzzB,KAAA4f,EAAA8T,GAAA1zB,IAIA,GAHAtB,KAAAo0B,UAAAlT,EAAA8T,GAAA1zB,IAAAW,IAAAif,EAAA8T,IAEAA,MADAD,EAEAE,GAAAD,EAAAE,EACA,MAAAC,EAKA,KAAAlU,EAAAgU,GAAA3zB,KAAA4f,EAAAgU,GAAA5zB,IAIA,GAHAtB,KAAAo0B,UAAAlT,EAAAgU,GAAA5zB,IAAAW,IAAAif,EAAAgU,IAEAA,IACAH,IAFAE,GAEAD,EAAAE,EACA,MAAAC,EAKA,GAAAlU,EAAAgU,GAAA3zB,KAAA4f,EAAA8T,GAAA1zB,GAAA,CAYA,GAAA2f,EAAA8T,GAAAzzB,KAAA4f,EAAAgU,GAAA5zB,GAYA,MANA,GALAuzB,EAAAK,EAAA,EACAl1B,KAAAo0B,UAAAlT,EAAAgU,GAAA5zB,IAAAW,IAAAif,EAAAgU,IACAl1B,KAAAo1B,WAAAlU,EAAAgU,GAAA5zB,GAAA4f,EAAA2T,IAAA3T,EAAA2T,GAAAvzB,IAEA4zB,MADAH,EAEAE,GAAAD,EAAAE,EACA,WAdA,GAJAl1B,KAAAo0B,UAAAlT,EAAA8T,GAAA1zB,IAAAW,IAAAif,EAAA8T,IACAh1B,KAAAo1B,WAAAlU,EAAA8T,GAAA1zB,GAAA2f,EAAA8T,GAAAzzB,IAEA0zB,IACAD,IAFAE,GAEAD,EAAAE,EACA,MAqBA,GAAAH,EAAAE,EAGA,IADAJ,EAAAK,EAAA,EACAF,GAAAE,GACAl1B,KAAAq1B,aAAAnU,EAAA8T,KAAA9T,EAAA2T,IAAA3T,EAAA2T,GAAAvzB,SAEA,GAAA0zB,EAAAE,EAEA,KAAAH,GAAAE,GACAj1B,KAAAs1B,aAAArU,EAAA8T,KAAAzzB,QAEA,CACA,IAAAi0B,EAAAN,EAAAF,EAAA,EACAS,EAAAN,EAAAF,EAAA,EACAS,EAAAxU,EACAyU,EAAA,IAAAh1B,MAAA80B,GAAAG,MAAA,GAEAC,GAAA,EACAjX,EAAA,EACAkX,EAAA,EAEA,GAAAL,GAAA,GAAAD,EAAAC,GAAA,IACA,IAAA11B,EAAAi1B,EAAAj1B,GAAAm1B,EAAAn1B,IACA,GAAA+1B,EAAAL,EACA,IAAArY,EAAA6X,EAAA7X,GAAA+X,EAAA/X,IACA,GAAA8D,EAAAnhB,GAAAwB,KAAA4f,EAAA/D,GAAA7b,GAAA,CACAo0B,EAAAvY,EAAA6X,GAAAl1B,EAEA6e,EAAAxB,EACAyY,GAAA,EAEAjX,EAAAxB,EAGAnd,KAAAo0B,UAAAlT,EAAA/D,GAAA7b,IAAAW,IAAAif,EAAA/D,IAEA0Y,IACAJ,EAAA31B,GAAA,KACA,WAKA,CACA,IAAAg2B,EAAA,GAEA,IAAAh2B,EAAAk1B,EAAAl1B,GAAAo1B,EAAAp1B,IACAg2B,EAAA5U,EAAAphB,GAAAwB,IAAAxB,EAGA,IAAAA,EAAAi1B,EAAAj1B,GAAAm1B,EAAAn1B,IACA+1B,EAAAL,QAGA9yB,KAFAya,EAAA2Y,EAAA7U,EAAAnhB,GAAAwB,OAGAo0B,EAAAvY,EAAA6X,GAAAl1B,EAEA6e,EAAAxB,EACAyY,GAAA,EAEAjX,EAAAxB,EAGAnd,KAAAo0B,UAAAlT,EAAA/D,GAAA7b,IAAAW,IAAAif,EAAA/D,IAEA0Y,IACAJ,EAAA31B,GAAA,MAMA,GAAAy1B,IAAAtU,EAAA5gB,QAAA,IAAAw1B,EAEA,IADA71B,KAAA20B,SACAK,EAAAQ,GACAx1B,KAAAq1B,aAAAnU,EAAA8T,KAAA,UAEA,CAEA,IADAl1B,EAAAy1B,EAAAM,EACA/1B,EAAA,GACA,OAAA21B,EAAAV,KACA/0B,KAAAs1B,aAAArU,EAAA8T,GAAAzzB,IACAxB,KAEAi1B,IAGA,GAAAa,EAAA,CACA,IAAAG,EAAA/1B,KAAAg2B,KAAAN,GAEA,IADAvY,EAAA4Y,EAAA11B,OAAA,EACAP,EAAA01B,EAAA,EAAA11B,GAAA,EAAAA,KACA,IAAA41B,EAAA51B,IAEA+0B,GADAlW,EAAA7e,EAAAk1B,GACA,EACAh1B,KAAAq1B,aAAAnU,EAAAvC,GAAAuC,EAAA2T,IAAA3T,EAAA2T,GAAAvzB,KAEA6b,EAAA,GAAArd,IAAAi2B,EAAA5Y,IAEA0X,GADAlW,EAAA7e,EAAAk1B,GACA,EACAh1B,KAAAo1B,WAAAlU,EAAAvC,GAAArd,GAAA4f,EAAA2T,IAAA3T,EAAA2T,GAAAvzB,KAEA6b,SAIA,GAAA0Y,IAAAL,EACA,IAAA11B,EAAA01B,EAAA,EAAA11B,GAAA,EAAAA,KACA,IAAA41B,EAAA51B,KAEA+0B,GADAlW,EAAA7e,EAAAk1B,GACA,EACAh1B,KAAAq1B,aAAAnU,EAAAvC,GAAAuC,EAAA2T,IAAA3T,EAAA2T,GAAAvzB,YAqBA,GAdAtB,KAAAkd,SAAA7c,OAAAiN,EAAAjN,QAEAL,KAAAkd,SAAAra,OAAAyK,EAAAjN,QAAAI,SAAA,SAAAinB,GACAA,EAAAC,cAIA3nB,KAAAkd,SAAA7c,QAEAL,KAAAkd,SAAAzc,SAAA,SAAAinB,EAAA5nB,GACA4nB,EAAAzlB,IAAAqL,EAAAxN,OAIAwN,EAAAjN,OAAAL,KAAAkd,SAAA7c,OAAA,CAIA,IAFA,IAAA41B,EAAAh2B,SAAAq0B,yBAEAx0B,EAAAE,KAAAkd,SAAA7c,OAAAP,EAAAwN,EAAAjN,OAAAP,IAAA,CACA,IAAA4nB,EAAA,IAAAkN,EAAA50B,KAAAq0B,UAAA6B,WAAA,GAAAl2B,KAAAsN,EAAAxN,IACA4nB,EAAAyO,OAAA11B,SAAA,SAAA8I,GACA0sB,EAAA7Y,YAAA7T,GACAme,EAAAL,OAAA9d,MAEAvJ,KAAAkd,SAAApa,KAAA4kB,GAGA1nB,KAAAumB,MAAAnJ,YAAA6Y,SAIAj2B,KAAA20B,SAGA30B,KAAAsF,MAAAhE,MACAtB,KAAAm0B,UAAAn0B,KAAA80B,OAAAxnB,GACAtN,KAAAkd,SAAAzc,SAAA,SAAAinB,GACA1nB,KAAAo0B,UAAA1M,EAAAlmB,KAAAxB,KAAAsF,MAAAhE,MAAAomB,IACA1nB,OAIAA,KAAAiC,IAAA,QAAAjC,KAAAkd,SAAAvb,KAAA+lB,GAAAA,EAAAlmB,QAEAb,IAAA+N,UAAA,IAAA1O,KAAAmJ,cAAA,cAGA6sB,KAAA,SAAA/U,GACA,IAGAmV,EAAA5qB,EAHA4kB,EAAAnP,EAAAzd,MAAA,GACAlB,EAAA,GACAA,EAAAQ,KAAA,GAGA,IAAA,IAAAhD,EAAA,EAAAu2B,EAAApV,EAAA5gB,OAAAP,EAAAu2B,EAAAv2B,IACA,IAAA,IAAAmhB,EAAAnhB,GAAA,CAIA,IAAAqd,EAAA7a,EAAAA,EAAAjC,OAAA,GACA,GAAA4gB,EAAA9D,GAAA8D,EAAAnhB,GACAswB,EAAAtwB,GAAAqd,EACA7a,EAAAQ,KAAAhD,OAFA,CASA,IAHAs2B,EAAA,EACA5qB,EAAAlJ,EAAAjC,OAAA,EAEA+1B,EAAA5qB,GAAA,CACA,IAAA4V,GAAAgV,EAAA5qB,GAAA,EAAA,EACAyV,EAAA3e,EAAA8e,IAAAH,EAAAnhB,GACAs2B,EAAAhV,EAAA,EAEA5V,EAAA4V,EAIAH,EAAAnhB,GAAAmhB,EAAA3e,EAAA8zB,MACAA,EAAA,IACAhG,EAAAtwB,GAAAwC,EAAA8zB,EAAA,IAEA9zB,EAAA8zB,GAAAt2B,IAOA,IAFA0L,EAAAlJ,GADA8zB,EAAA9zB,EAAAjC,QACA,GAEA+1B,KAAA,GACA9zB,EAAA8zB,GAAA5qB,EACAA,EAAA4kB,EAAA5kB,GAGA,OAAAlJ,GAGAqyB,OAAA,WACA30B,KAAAm0B,UAAA,GACAn0B,KAAAo0B,UAAA,GACAp0B,KAAAkd,SAAAra,OAAA,GAAApC,SAAA,SAAAinB,GACAA,EAAAC,cAGA3nB,KAAAumB,MAAA7I,UAAA,IAGA2X,aAAA,SAAA7zB,EAAAyF,GACA,IACAygB,EAAA,IADA/mB,IAAAuJ,UAAA,eACA,CAAAlK,KAAAq0B,UAAA6B,WAAA,GAAAl2B,KAAAwB,GAEAkmB,EAAAyO,OAAA11B,SAAA,SAAA8I,GACAtC,EAGAjH,KAAAo0B,UAAAntB,GACAjH,KAAAumB,MAAA+P,aAAA/sB,EAAAvJ,KAAAo0B,UAAAntB,GAAAkvB,OAAA,IAEAzR,QAAAkB,KAAA,2CAAA3e,EAAA,KALAjH,KAAAumB,MAAAnJ,YAAA7T,GASAme,EAAAL,OAAA9d,KACAvJ,MAEAA,KAAAo0B,UAAA5yB,EAAAxB,KAAAsF,MAAAhE,MAAAomB,EACA1nB,KAAAkd,SAAApa,KAAA4kB,IAGA0N,WAAA,SAAA9zB,EAAA2F,GACA,IAAAygB,EAAA1nB,KAAAo0B,UAAA9yB,GAEAomB,EACA1nB,KAAAo0B,UAAAntB,GACAygB,EAAAyO,OAAA11B,SAAA,SAAA8I,GACAvJ,KAAAumB,MAAA+P,aAAA/sB,EAAAvJ,KAAAo0B,UAAAntB,GAAAkvB,OAAA,MACAn2B,MAEA0nB,EAAAyO,OAAA11B,SAAA,SAAA8I,GACAvJ,KAAAumB,MAAAnJ,YAAA7T,KACAvJ,MAGA0kB,QAAAkB,KAAA,yBAAAtkB,EAAA,gBAIAg0B,aAAA,SAAAh0B,GACA,IAAAomB,EAAA1nB,KAAAo0B,UAAA9yB,GACAomB,GACAA,EAAAC,WACA3nB,KAAAkd,SAAAra,OAAA7C,KAAAkd,SAAA0B,QAAA8I,GAAA,UACA1nB,KAAAo0B,UAAA9yB,IAEAojB,QAAAkB,KAAA,2BAAAtkB,EAAA,gBAIAwzB,OAAA,SAAAnoB,GACA,OAAAhM,IAAAoE,MAAA4H,MCnZAhM,IAAAuJ,UAAA,cAAA,CAEArG,YAAA,SAAAoyB,EAAAtb,EAAAnZ,EAAAqZ,GACA7a,KAAA2a,OAAAA,EACA3a,KAAAwmB,SAAA,GACAxmB,KAAAymB,aAAA,GACAzmB,KAAAkd,SAAA,GACAld,KAAA0mB,UAAA,GACA1mB,KAAAsF,MAAA,GACAtF,KAAAwB,KAAAb,IAAAoE,MAAAvD,GAAA,IACAxB,KAAAmN,KAAAwN,EAAAxN,KACAnN,KAAA6a,KAAAA,GAAA,SACA7a,KAAAm2B,OAAA,GACA,IAAA,IAAAr2B,EAAA,EAAAA,EAAAm2B,EAAA9X,WAAA9d,OAAAP,IACAE,KAAAm2B,OAAArzB,KAAAmzB,EAAA9X,WAAAre,KAIA6nB,SAAA,WACA3nB,KAAAmJ,cAAA,WACA,IAAA,IAAArJ,EAAA,EAAAA,EAAAE,KAAAm2B,OAAA91B,OAAAP,IAAA,CACA,IAAAuO,EAAA,IAAApF,MAAA,SAAA,CAAAwf,YAAA,IACAzoB,KAAAm2B,OAAAr2B,GAAAqJ,cAAAkF,IACA1N,IAAAgd,IAAA1B,OAAAjc,KAAAm2B,OAAAr2B,QCvBAa,IAAAuJ,UAAA,QAAA,CAEArG,YAAA,SAAA0F,EAAAoR,GACA3a,KAAAu2B,MAAA51B,IAAAmO,SAAA9O,KAAAu2B,MAAAvM,KAAAhqB,OACAW,IAAA2Z,cAAA/W,KAAAvD,KAAAuJ,EAAAoR,IAGAJ,YAAA,CACAic,OAAA,EACAh1B,KAAA,KACAi1B,MAAA,GACAC,OAAA,GACAC,QAAA,GACA7sB,MAAA,CACA8sB,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,GAEAC,eAAA,CACAC,SAAA,EACAC,MAAA,EACAC,QAAA,GAEAC,iBAAA,CACAH,SAAA,EACAC,MAAA,EACAC,QAAA,GAEAE,UAAA,CACAb,OAAA,EACAc,QAAA,GACAC,SAAA,OAIA/c,WAAA,CACAxL,QAAA,CACAvN,KAAA6d,OACAuK,QAAA,GAGAO,OAAA,CACA3oB,KAAA8E,OACAsjB,QAAA,OAGA2N,IAAA,CACA/1B,KAAA8E,OACAsjB,QAAA,IAGA4N,OAAA,CACAh2B,KAAAZ,OACAgpB,QAAA,IAGA8M,QAAA,CACAl1B,KAAAZ,OACAgpB,QAAA,IAGAroB,KAAA,CACAC,KAAAZ,OACAgpB,QAAA,IAGA,YAAA,CACApoB,KAAA8E,OACAsjB,QAAA,QAGA6N,OAAA,CACAj2B,KAAA0d,QACA0K,SAAA,GAGA5K,MAAA,CACAxd,KAAA8E,OACAsjB,QAAA,IAGA8N,IAAA,CACAl2B,KAAA6d,OACAuK,QAAA,OAGA+N,YAAA,CACAn2B,KAAA0d,QACA0K,SAAA,IAIApP,QAAA,CACAod,MAAA,WACA73B,KAAA63B,SAGA5H,KAAA,SAAAwH,EAAAK,GACA,IAAAlO,EAAA,GACA6N,IAAA7N,EAAA6N,OAAAA,GACAK,IAAAlO,EAAA+N,IAAA,GACA33B,KAAAu2B,MAAA3M,IAGAkH,MAAA,WACA9wB,KAAA63B,QACA73B,KAAA+3B,SACA/3B,KAAAiC,IAAA,OAAA,QAIAyY,OAAA,CACA4H,MAAArZ,MACA+uB,KAAA/uB,MACA0b,MAAA1b,MACA8nB,QAAA9nB,MACAgvB,aAAAhvB,MACAivB,UAAAjvB,MACA4uB,MAAA5uB,MACAkvB,QAAAlvB,MACAmvB,OAAAC,cACAC,SAAAD,eAGAzR,iBAAA,SAAArd,GACA5I,IAAA2Z,cAAA3a,UAAAinB,iBAAArjB,KAAAvD,KAAAuJ,GACA5I,IAAAgd,IAAAS,cAAA7U,GAAA9I,SAAA,SAAA6b,GACA,SAAAA,EAAAzB,MAAAyB,EAAAkC,UACAxe,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACAlB,KAAAsF,MAAAmyB,OAAAnb,EAAAkC,UAAAtd,KAGA,UAAAob,EAAAzB,MAAAyB,EAAAkC,UACAxe,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACAlB,KAAAsF,MAAAqxB,QAAAra,EAAAkC,UAAAtd,KAGA,QAAAob,EAAAzB,MAAAyB,EAAAkC,UACAxe,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACAlB,KAAAsF,MAAA9D,KAAA8a,EAAAkC,UAAAtd,OAGAlB,OAGA8mB,OAAA,SAAAvd,GACAvJ,KAAAu4B,IAAA,IAAAC,eACAx4B,KAAAu4B,IAAAhuB,iBAAA,OAAAvK,KAAA+vB,OAAA/F,KAAAhqB,OACAA,KAAAu4B,IAAAhuB,iBAAA,QAAAvK,KAAAy4B,QAAAzO,KAAAhqB,OACAA,KAAAu4B,IAAAhuB,iBAAA,QAAAvK,KAAA04B,QAAA1O,KAAAhqB,OACAA,KAAAu4B,IAAAhuB,iBAAA,UAAAvK,KAAA24B,UAAA3O,KAAAhqB,OACAA,KAAAu4B,IAAAhuB,iBAAA,WAAAvK,KAAA44B,WAAA,YAAA5O,KAAAhqB,OACAA,KAAAu4B,IAAAH,QAAAp4B,KAAAu4B,IAAAH,OAAA7tB,iBAAA,WAAAvK,KAAA44B,WAAA,UAAA5O,KAAAhqB,OAEAA,KAAAgoB,OAAA,KAGAA,OAAA,SAAA1iB,IAEAtF,KAAAsF,MAAAoyB,QAAA13B,KAAAsF,MAAAkyB,MAEAlyB,EAAAkyB,KAAAx3B,KAAAsF,MAAAkyB,KAAA72B,IAAAqF,MAAAV,EAAAmyB,OAAAz3B,KAAAsF,MAAAmyB,SAEAtoB,uBAAA,IAAAnP,KAAAu2B,YAKAsB,MAAA,WACA73B,KAAAu4B,KACAv4B,KAAAu4B,IAAAV,SAIAtB,MAAA,SAAA3M,GACA5pB,KAAAu4B,IAAAV,QAEAjO,EAAAjpB,IAAAoK,QAAA,EAAA/K,KAAAsF,MAAAskB,GAAA,IAEA5pB,KAAA+3B,SACA/3B,KAAAmJ,cAAA,SAEA,IAAA0vB,GAAAjP,EAAA4N,IAAA5Y,QAAA,MAAA,EAAA,IAAA,KAAA/d,OAAA0E,KAAAqkB,EAAA6N,QAAAvE,QAAA,SAAA5xB,GACA,OAAA,MAAAsoB,EAAA6N,OAAAn2B,KACAtB,MAAA2B,KAAA,SAAAL,GACA,IAAAJ,EAAA0oB,EAAA6N,OAAAn2B,GAIA,MAHA,iBAAAJ,GAAAA,EAAAkhB,WAAA,QACAlhB,EAAAP,IAAAwjB,MAAAjjB,EAAAlB,OAEAgsB,mBAAA1qB,GAAA,IAAA0qB,mBAAA9qB,KACAlB,MAAA8qB,KAAA,KAQA,GANA9qB,KAAA84B,KAAAlP,EAAA4N,IAAAqB,EAEAp5B,OAAAs5B,eACA/4B,KAAA84B,KAAAr5B,OAAAs5B,aAAAC,gBAAAh5B,KAAA84B,OAGA94B,KAAAsF,MAAA2Z,MAAA,CACA,IAAAA,EAAAte,IAAAwjB,MAAAnkB,KAAAsF,MAAA2Z,MAAA,UAAAjf,KAAA84B,KAAA,KAAA94B,MACA,GAAAif,EAAA,CACA,KAAApT,KAAAotB,MAAAha,EAAAia,SAAA,IAAAtP,EAAA+N,KASA,OANA33B,KAAAiC,IAAA,UAAAgd,EAAA0X,SAAA,IACA32B,KAAAiC,IAAA,SAAAgd,EAAAyX,QAAA,IACA12B,KAAAiC,IAAA,QAAAgd,EAAAwX,OAAA,IACAz2B,KAAAiC,IAAA,OAAAgd,EAAAzd,MACAxB,KAAAmJ,cAAA,gBACAnJ,KAAAmJ,cAAA,QAPAxI,IAAAwjB,MAAAnkB,KAAAsF,MAAA2Z,MAAA,YAAAjf,KAAA84B,KAAA,KAAA94B,OAaAA,KAAAiC,IAAA,QAAA,CACA20B,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,IAGA,IAAAv1B,EAAA,KAEA,OAAAxB,KAAAsF,MAAA8kB,OAAA+O,gBACA,QAAAn5B,KAAAsF,MAAA,cACAskB,EAAA+M,QAAA,kBACA/M,EAAA+M,QAAA,gBAAA,oBAEAn1B,EAAAxB,KAAAsF,MAAA9D,KAAAZ,YACA,QAAAZ,KAAAsF,MAAA,cACAskB,EAAA+M,QAAA,kBACA/M,EAAA+M,QAAA,gBAAA,oBAEAn1B,EAAAqL,KAAAC,UAAA9M,KAAAsF,MAAA9D,OAEA,QAAAxB,KAAAsF,MAAA8kB,OAAA+O,eACA33B,EAAA,IAAA43B,SAEAv4B,OAAA0E,KAAAvF,KAAAsF,MAAA9D,MAAAf,SAAA,SAAAa,GACA,IAAAJ,EAAAlB,KAAAsF,MAAA9D,KAAAF,GAEAZ,MAAA+C,QAAAvC,IACA,QAAAkE,KAAA9D,KACAA,GAAA,MAEAJ,EAAAT,SAAA,SAAA8K,GACA/J,EAAAyb,OAAA3b,EAAAiK,KACAvL,OAEAwB,EAAAS,IAAAX,EAAAJ,KAEAlB,QAEA4pB,EAAA+M,QAAA,kBACA/M,EAAA+M,QAAA,gBAAA,oBAEAn1B,EAAAxB,KAAAsF,MAAA9D,KAAAZ,aAKAZ,KAAAu4B,IAAAc,KAAAr5B,KAAAsF,MAAA8kB,OAAA+O,cAAAn5B,KAAA84B,MACA94B,KAAAu4B,IAAAvpB,QAAA,IAAA4a,EAAA5a,QACAnO,OAAA0E,KAAAqkB,EAAA+M,SAAAl2B,SAAA,SAAA64B,GACAt5B,KAAAu4B,IAAAgB,iBAAAD,EAAA1P,EAAA+M,QAAA2C,MACAt5B,MACAA,KAAAu4B,IAAAgB,iBAAA,SAAA,oBACAv5B,KAAAsF,MAAAsyB,cACA53B,KAAAu4B,IAAAiB,iBAAA,GAEA,IAAAx5B,KAAAu4B,IAAAkB,KAAAj4B,GACA,MAAAijB,GAAAzkB,KAAA05B,MAAAjV,KAGAsT,OAAA,WACA/3B,KAAAiC,IAAA,CACAu0B,OAAA,EACAC,MAAA,GACAE,QAAA,GACA7sB,MAAA,CACA8sB,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,GAEAC,eAAA,CACAC,SAAA,EACAC,MAAA,EACAC,QAAA,GAEAC,iBAAA,CACAH,SAAA,EACAC,MAAA,EACAC,QAAA,GAEAE,UAAA,CACAb,OAAA,EACAc,QAAA,GACAC,SAAA,SAKAmC,MAAA,SAAAjV,GAGA,GAFAzkB,KAAA+3B,SAEAtT,EACAzkB,KAAAiC,IAAA,YAAA,CACAu0B,OAAA,EACAc,QAAA7S,EAAA6S,QACAC,SAAA,OAGAv3B,KAAAmJ,cAAA,aACA,CACA,IAAAouB,EAAAv3B,KAAAu4B,IAAAoB,aAEA,IACApC,EAAA1qB,KAAAsX,MAAAoT,GACA,MAAA9S,GACA,GAAAzkB,KAAAu4B,IAAA/B,OAAA,IAQA,OAPAx2B,KAAAiC,IAAA,YAAA,CACAu0B,OAAA,EACAc,QAAA,8BACAC,SAAAA,SAGAv3B,KAAAmJ,cAAA,SAKA,IAEA,IACAywB,EADA55B,KAAAu4B,IAAAsB,wBACAxV,OAAA5F,MAAA,WAEAze,KAAAiC,IAAA,UAAA23B,EAAA1X,QAAA,SAAAyU,EAAAtJ,GACA,IAAAT,EAAAS,EAAA5O,MAAA,MACA6a,EAAA1M,EAAAre,QACArN,EAAA0rB,EAAA9B,KAAA,MAIA,OAFA6L,EAAA2C,GAAAp4B,EAEAy1B,IACA,KACA,MAAAlS,GACAC,QAAAkB,KAAA,iCAAAnB,GAGA,IAEA,IAAAqV,EAAAj5B,OAAA0E,KAAAvF,KAAAwB,KAAAm1B,SAAArP,MAAA,SAAAgS,GACA,MAAA,QAAAA,EAAApwB,iBAGA4wB,GACA95B,KAAAiC,IAAA,QAAAjC,KAAAwB,KAAAm1B,QAAAmD,GAAArb,MAAA,SAAA9c,KAAA,SAAAo4B,GACA,IACA,IAAA1O,EAAA0O,EAAAhY,MAAA,kBACAiY,EAAA3O,EAAA,GACAuB,EAAAvB,EAAA,GAAA5M,MAAA,KACAX,EAAAkc,EAAAzb,OAAAyb,EAAApb,QAAA,KAAA,GACAd,EAAAc,QAAA,KAAA,IAAAd,EAAAA,EAAAS,OAAA,EAAAT,EAAAc,QAAA,OACA,IAAAqb,EAAAnc,EAAAW,MAAA,KAAAyD,QAAA,SAAAgY,EAAAxiB,GACA,IAAA0Y,EAAA1Y,EAAA+G,MAAA,KAMA,OAJA2R,EAAA,KACA8J,EAAA7J,mBAAAD,EAAA,KAAAC,mBAAAD,EAAA,IAAA,KAGA8J,IACA,IAEAtN,EAAAre,QAEA,IAAA4rB,EAAAvN,EAAA1K,QAAA,SAAAgY,EAAA9J,GACA,IAAA/E,EAAA+E,EAAArO,MAAA,6BAEA,OADAsJ,IAAA6O,EAAA7O,EAAA,IAAAA,EAAA,IACA6O,IACA,IAKA,OAHAC,EAAAt5B,OAAA2M,OAAA,GAAAysB,EAAAE,IACA3C,IAAAwC,EAEAG,EACA,MAAA1V,GAEA,OADAC,QAAAkB,KAAA,iCAAAnB,GACA,SAEAyO,QAAA,SAAAxb,GACA,OAAAA,GAAAA,EAAA0iB,OACAlY,QAAA,SAAAgY,EAAAxiB,GAKA,OAJAA,EAAA0iB,IAAA3b,MAAA,OAAAhe,SAAA,SAAA25B,GACAF,EAAAE,GAAAv5B,OAAA2M,OAAAkK,EAAA,CAAA0iB,IAAAA,OAGAF,IACA,KAEA,MAAAzV,GACAC,QAAAkB,KAAA,4BAAAnB,GAGA,IACA,IAAAiS,EAAA,CACA2D,KAAA,EACAC,MAAA,EACAhtB,MAAA,EACA/K,IAAA,CACAg4B,OAAA,EACAhP,MAAA,EACAxH,MAAA,EACAyW,MAAA,IAIA,GAAAx6B,KAAAwB,KAAAi1B,MAAAlL,MAAAvrB,KAAAwB,KAAAi1B,MAAA1S,KAAA,CACA/jB,KAAAwB,KAAAi1B,MAAA+D,MAAAx6B,KAAAwB,KAAAi1B,MAAA+D,KAAAH,KACA3D,EAAA4D,OAAAt6B,KAAAwB,KAAAi1B,MAAA+D,KAAAH,KACAr6B,KAAAwB,KAAAi1B,MAAAlL,MAAAvrB,KAAAwB,KAAA+pB,KAAA8O,OACA3D,EAAA4D,OAAAt6B,KAAAwB,KAAAi1B,MAAAlL,KAAA8O,KAAA,GAGA,IAAAI,EAAA55B,OAAA0E,KAAAvF,KAAAwB,KAAAm1B,SAAArP,MAAA,SAAAgS,GAEA,MAAA,YADAA,EAAAA,EAAApwB,gBACA,WAAAowB,GAAA,iBAAAA,KAGAmB,IACA/D,EAAAppB,OAAAtN,KAAAwB,KAAAm1B,QAAA8D,IAGAz6B,KAAAwB,KAAAi1B,MAAAlL,MAAAvrB,KAAAwB,KAAAi1B,MAAAlL,KAAA8O,KACA3D,EAAA2D,MAAAr6B,KAAAwB,KAAAi1B,MAAAlL,KAAA8O,KAAA,EACAr6B,KAAAwB,KAAAi1B,MAAA1S,MAAA/jB,KAAAwB,KAAAi1B,MAAA1S,KAAAsW,OACA3D,EAAA2D,MAAAr6B,KAAAwB,KAAAi1B,MAAA1S,KAAAsW,KAAA,GAGA3D,EAAAn0B,IAAA,CACAg4B,QAAAv6B,KAAAwB,KAAAi1B,MAAA8D,MACAhP,OAAAvrB,KAAAwB,KAAAi1B,MAAAlL,KACAxH,OAAA/jB,KAAAwB,KAAAi1B,MAAA1S,KACAyW,OAAAx6B,KAAAwB,KAAAi1B,MAAA+D,MAIAx6B,KAAAiC,IAAA,SAAAy0B,GACA,MAAAjS,GACAC,QAAAkB,KAAA,uBAAAnB,GAGAzkB,KAAAiC,IAAA,SAAAjC,KAAAu4B,IAAA/B,QAEAx2B,KAAAu4B,IAAA/B,OAAA,KACAx2B,KAAAiC,IAAA,OAAAs1B,GACAv3B,KAAAmJ,cAAA,WAEAnJ,KAAAsF,MAAA2Z,OACAte,IAAAwjB,MAAAnkB,KAAAsF,MAAA2Z,MAAA,SAAAjf,KAAA84B,KAAA,6EAAAjtB,KAAAotB,MAAA,MAAAj5B,QAGAA,KAAAiC,IAAA,YAAA,CACAu0B,OAAAx2B,KAAAu4B,IAAA/B,OACAc,QAAAt3B,KAAAu4B,IAAAmC,WACAnD,SAAAA,IAGA,KAAAv3B,KAAAu4B,IAAA/B,OACAx2B,KAAAmJ,cAAA,WACA,KAAAnJ,KAAAu4B,IAAA/B,OACAx2B,KAAAmJ,cAAA,gBACA,KAAAnJ,KAAAu4B,IAAA/B,OACAx2B,KAAAmJ,cAAA,aAEAnJ,KAAAmJ,cAAA,UAKAnJ,KAAAmJ,cAAA,SAGA4mB,OAAA,SAAA1hB,GACArO,KAAA05B,SAGAjB,QAAA,SAAApqB,GACArO,KAAA+3B,SACA/3B,KAAAmJ,cAAA,SACAnJ,KAAAmJ,cAAA,SAGAuvB,QAAA,SAAArqB,GACArO,KAAA05B,MAAA,CAAApC,QAAA,uBAGAqB,UAAA,SAAAtqB,GACArO,KAAA05B,MAAA,CAAApC,QAAA,uBAGAsB,WAAA,SAAAn3B,GACA,OAAA,SAAA4M,GACAA,EAAAssB,OAAAtsB,EAAAssB,QAAAtsB,EAAA4oB,SAEA,IAAAE,EAAA9oB,EAAAusB,iBAAA5tB,KAAA6tB,KAAAxsB,EAAAssB,OAAAtsB,EAAA6oB,MAAA,KAAA,EAEAl3B,KAAAiC,IAAA,QAAA,CACA20B,WAAA,EACAC,UAAA,UAAAp1B,GAAA01B,EAAA,IACAL,WAAA,UAAAr1B,GAAA,KAAA01B,EACAJ,YAAA,YAAAt1B,IAGAzB,KAAAiC,IAAAR,EAAA,WAAA,CACAw1B,SAAA5oB,EAAAssB,OACAzD,MAAA7oB,EAAA6oB,MACAC,QAAAA,IAGAn3B,KAAAmJ,cAAA1H,EAAA,CACAm5B,iBAAAvsB,EAAAusB,iBACAD,OAAAtsB,EAAAssB,OACAzD,MAAA7oB,EAAA6oB,YC7gBAv2B,IAAAuJ,UAAA,gBAAA,CAEAmQ,QAAA,QAEAG,WAAA,CACAsgB,QAAA,CACAr5B,KAAA0d,QACA0K,SAAA,IAIA/C,OAAA,SAAAvd,GACAvJ,KAAAsF,MAAAw1B,SACA96B,KAAA+6B,UAAA/6B,KAAAsF,MAAAkyB,IAAA3pB,QAAA,cAAA,IACA7N,KAAAg7B,OAAAr6B,IAAAs6B,OAAA,QACAj7B,KAAAg7B,OAAAE,GAAAl7B,KAAA+6B,UAAA/6B,KAAAm7B,QAAAnR,KAAAhqB,OACAA,KAAAgoB,OAAA,KAEArnB,IAAAuJ,UAAA,SAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,IAIAgtB,MAAA,SAAA3M,GACA5pB,KAAAsF,MAAAw1B,QACA96B,KAAAm7B,QAAAvR,GAAAA,EAAA6N,QAEA92B,IAAAuJ,UAAA,SAAAvK,UAAA42B,MAAAhzB,KAAAvD,KAAA4pB,IAIAuR,QAAA,SAAA1D,GACAA,EAAA92B,IAAAoK,QAAA,EAAA,GAAA/K,KAAAsF,MAAAmyB,OAAAA,GAAA,IAEAz3B,KAAAmJ,cAAA,SAEAnJ,KAAAiC,IAAA,QAAA,CACA20B,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,IAGA/2B,KAAAg7B,OAAAI,KAAAp7B,KAAA+6B,UAAAtD,EAAA,SAAA1M,GACA/qB,KAAAiC,IAAA,SAAA8oB,EAAAyL,QACAx2B,KAAAiC,IAAA,OAAA8oB,EAAAvpB,MACAxB,KAAAiC,IAAA,QAAA,CACA20B,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,IAGAhM,EAAAyL,OAAA,IACAx2B,KAAAmJ,cAAA,WACA,KAAA4hB,EAAAyL,OACAx2B,KAAAmJ,cAAA,WACA,KAAA4hB,EAAAyL,OACAx2B,KAAAmJ,cAAA,gBACA,KAAA4hB,EAAAyL,OACAx2B,KAAAmJ,cAAA,aAEAnJ,KAAAmJ,cAAA,SAGAnJ,KAAAmJ,cAAA,SACA6gB,KAAAhqB,UCjEAW,IAAAuJ,UAAA,qBAAA,CACAmQ,QAAA,OAEAE,YAAA,CACAic,OAAA,EACAh1B,KAAA,KACAm1B,QAAA,GACA7sB,MAAA,CACA8sB,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,GAEAC,eAAA,CACAC,SAAA,EACAC,MAAA,EACAC,QAAA,GAEAC,iBAAA,CACAH,SAAA,EACAC,MAAA,EACAC,QAAA,GAEAE,UAAA,CACAb,OAAA,EACAc,QAAA,GACAC,SAAA,OAIA/c,WAAA,CACAxL,QAAA,CACAvN,KAAA6d,OACAuK,QAAA,GAGAwR,WAAA,CACA55B,KAAA0d,QACA0K,SAAA,GAGA4N,OAAA,CACAh2B,KAAAZ,OACAgpB,QAAA,IAGA8M,QAAA,CACAl1B,KAAAZ,OACAgpB,QAAA,IAGA,YAAA,CAEApoB,KAAA8E,OACAsjB,QAAA,QAGA+N,YAAA,CACAn2B,KAAA0d,QACA0K,SAAA,IAIApP,QAAA,CACAod,MAAA,WACA73B,KAAA63B,SAGA/G,MAAA,SAAAwK,GACAt7B,KAAA8wB,QACAwK,IACAt7B,KAAA63B,QACA73B,KAAA+3B,SACA/3B,KAAAiC,IAAA,OAAA,SAKAyY,OAAA,CACA4H,MAAArZ,MACA+uB,KAAA/uB,MACA0b,MAAA1b,MACAgvB,aAAAhvB,MACAivB,UAAAjvB,MACA4uB,MAAA5uB,MACAkvB,QAAAlvB,MACAmvB,OAAAC,cACAC,SAAAD,eAGAzR,iBAAA,SAAArd,GACA5I,IAAA2Z,cAAA3a,UAAAinB,iBAAArjB,KAAAvD,KAAAuJ,GACA5I,IAAAgd,IAAAS,cAAA7U,GAAA9I,SAAA,SAAA6b,GACA,SAAAA,EAAAzB,MAAAyB,EAAAkC,UACAxe,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACAlB,KAAAsF,MAAAmyB,OAAAnb,EAAAkC,UAAAtd,KAGA,UAAAob,EAAAzB,MAAAyB,EAAAkC,UACAxe,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACAlB,KAAAsF,MAAAqxB,QAAAra,EAAAkC,UAAAtd,OAGAlB,OAGA8mB,OAAA,SAAAvd,GACAvJ,KAAAu4B,IAAA,IAAAC,eACAx4B,KAAAu4B,IAAAhuB,iBAAA,OAAAvK,KAAA+vB,OAAA/F,KAAAhqB,OACAA,KAAAu4B,IAAAhuB,iBAAA,QAAAvK,KAAAy4B,QAAAzO,KAAAhqB,OACAA,KAAAu4B,IAAAhuB,iBAAA,QAAAvK,KAAA04B,QAAA1O,KAAAhqB,OACAA,KAAAu4B,IAAAhuB,iBAAA,UAAAvK,KAAA24B,UAAA3O,KAAAhqB,OACAA,KAAAu4B,IAAAhuB,iBACA,WACAvK,KAAA44B,WAAA,YAAA5O,KAAAhqB,OAEAA,KAAAu4B,IAAAH,QACAp4B,KAAAu4B,IAAAH,OAAA7tB,iBACA,WACAvK,KAAA44B,WAAA,UAAA5O,KAAAhqB,OAGA,IAAAkO,EAAA3E,EAAA2E,cAEA3E,EAAAgyB,aAAA,GACAhyB,EAAAiyB,iBAAA,GACAjyB,EAAA2E,cAAA,WACA,IAAA,IAAApO,EAAA,EAAAA,EAAAyJ,EAAAiyB,iBAAAn7B,OAAAP,IACAyJ,EAAAiyB,iBAAA17B,GAAAgO,UACAvE,EAAAiyB,iBAAA17B,GAAAgO,WAIA,OAAAI,EAAA3K,KAAAgG,IAGA5I,IAAAuJ,UAAA,QAAAvK,UAAAmnB,OAAAvjB,KAAAvD,KAAAuJ,GAEAvJ,KAAAsF,MAAA+1B,YACA16B,IAAA+N,UAAA,WACA1O,KAAA2wB,WACA3wB,OAIA63B,MAAA,WACA73B,KAAAu4B,IAAAV,SAGAhH,QAAA,SAAA4K,GACAz7B,KAAAu4B,IAAAV,QAEA,IAAAzN,EAAApqB,KAAAumB,MAAA6D,OAAA+O,cACA9d,EAAArb,KAAAumB,MAAAlL,OACA7Z,EAAA,KAEAq3B,EAAAh4B,OAAA0E,KAAAvF,KAAAsF,MAAAmyB,QACAvE,QAAA,SAAA5xB,GACA,OAAA,MAAAtB,KAAAsF,MAAAmyB,OAAAn2B,KACAtB,MACA2B,KAAA,SAAAL,GACA,IAAAJ,EAAAlB,KAAAsF,MAAAmyB,OAAAn2B,GAIA,MAHA,iBAAAJ,GAAAA,EAAAkhB,WAAA,QACAlhB,EAAAP,IAAAwjB,MAAAjjB,EAAAlB,OAEAgsB,mBAAA1qB,GAAA,IAAA0qB,mBAAA9qB,KACAlB,MACA8qB,KAAA,KAEA,OAAAV,GACAyO,EAAAx4B,SAAAw4B,GAAA,KAEAA,GAAAl4B,IACAU,MAAArB,KAAAumB,MAAAvY,UACAklB,QAAA,SAAAwI,GACA,QACAD,GAAAA,EAAAC,EAAA7gB,SACA6gB,EAAA7L,WACA,UAAA6L,EAAAj6B,MAAA,aAAAi6B,EAAAj6B,MACAi6B,EAAA7I,YAGAlxB,KAAA,SAAA+5B,GACA,OACA1P,mBAAA0P,EAAA7gB,MACA,IACAmR,mBAAA0P,EAAAx6B,UAGA4pB,KAAA,KAEA2Q,GACA56B,OAAA0E,KAAAk2B,GAAAh7B,SAAA,SAAAa,GACAZ,MAAA+C,QAAAg4B,EAAAn6B,IACAm6B,EAAAn6B,GAAAb,SAAA,SAAAS,GACA23B,GACA,IAAA7M,mBAAA1qB,GAAA,IAAA0qB,mBAAA9qB,MAGA23B,GACA,IACA7M,mBAAA1qB,GACA,IACA0qB,mBAAAyP,EAAAn6B,QAKA,QAAAtB,KAAAsF,MAAA,cACA9D,EAAAxB,KAAA27B,eAAA37B,KAAAumB,OAEAkV,GACA56B,OAAA2M,OAAAhM,EAAAi6B,GAGAz7B,KAAAumB,MAAAgV,cACA16B,OAAA2M,OAAAhM,EAAAxB,KAAAumB,MAAAgV,cAGAv7B,KAAAsF,MAAAqxB,QAAA,gBAAA,mBACAn1B,EAAAqL,KAAAC,UAAAtL,KAEAA,EAAA,IAAA43B,SAAAp5B,KAAAumB,OAEAkV,GACA56B,OAAA0E,KAAAk2B,GAAAh7B,SAAA,SAAAa,GACAZ,MAAA+C,QAAAg4B,EAAAn6B,KACA,QAAA8D,KAAA9D,KACAA,GAAA,MAEAJ,MAAAT,SAAA,SAAA8K,GACA/J,EAAAyb,OAAA3b,EAAAiK,KACAvL,OAEAwB,EAAAS,IAAAX,EAAAm6B,EAAAn6B,MAEAtB,MAGAA,KAAAumB,MAAAgV,cACA16B,OAAA0E,KAAAvF,KAAAumB,MAAAgV,cAAA96B,SAAA,SAAAa,GACA,IAAAJ,EAAAlB,KAAAumB,MAAAgV,aAAAj6B,GAEAZ,MAAA+C,QAAAvC,IACA,QAAAkE,KAAA9D,KACAA,GAAA,MAEAJ,EAAAT,SAAA,SAAA8K,GACA/J,EAAAyb,OAAA3b,EAAAiK,KACAvL,OAEAwB,EAAAS,IAAAX,EAAAJ,KAEAlB,OAKAA,KAAA+3B,SACA/3B,KAAAmJ,cAAA,SAEAnJ,KAAAiC,IAAA,QAAA,CACA20B,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,IAGA,IAAAS,EAAAnc,EAEAwd,IACArB,IAAAA,EAAA5Y,QAAA,MAAA,EAAA,IAAA,KAAAia,GAGAp5B,OAAAs5B,eAEAvB,EAAA/3B,OAAAs5B,aAAAC,gBAAAxB,IAGAx3B,KAAAu4B,IAAAc,KAAAjP,EAAAoN,GACAx3B,KAAAu4B,IAAAvpB,QAAA,IAAAhP,KAAAsF,MAAA0J,QACAnO,OAAA0E,KAAAvF,KAAAsF,MAAAqxB,SAAAl2B,SAAA,SAAA64B,GACAt5B,KAAAu4B,IAAAgB,iBAAAD,EAAAt5B,KAAAsF,MAAAqxB,QAAA2C,MACAt5B,MACAA,KAAAu4B,IAAAgB,iBAAA,SAAA,oBACAv5B,KAAAsF,MAAAsyB,cACA53B,KAAAu4B,IAAAiB,iBAAA,GAEA,IACAx5B,KAAAu4B,IAAAkB,KAAAj4B,GACA,MAAAijB,GACAzkB,KAAA05B,MAAAjV,KAIAsT,OAAA,WACA/3B,KAAAiC,IAAA,CACAu0B,OAAA,EACAG,QAAA,GACA7sB,MAAA,CACA8sB,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,GAEAC,eAAA,CACAC,SAAA,EACAC,MAAA,EACAC,QAAA,GAEAC,iBAAA,CACAH,SAAA,EACAC,MAAA,EACAC,QAAA,GAEAE,UAAA,CACAb,OAAA,EACAc,QAAA,GACAC,SAAA,SAKAmC,MAAA,SAAAjV,GAGA,GAFAzkB,KAAA+3B,SAEAtT,EACAzkB,KAAAiC,IAAA,YAAA,CACAu0B,OAAA,EACAc,QAAA7S,EAAA6S,QACAC,SAAA,OAGAv3B,KAAAmJ,cAAA,aACA,CACA,IAAAouB,EAAAv3B,KAAAu4B,IAAAoB,aAEA,IACApC,EAAA1qB,KAAAsX,MAAAoT,GACA,MAAA9S,GACA,GAAAzkB,KAAAu4B,IAAA/B,OAAA,IAQA,OAPAx2B,KAAAiC,IAAA,YAAA,CACAu0B,OAAA,EACAc,QAAA,8BACAC,SAAAA,SAGAv3B,KAAAmJ,cAAA,SAKA,IAEA,IACAywB,EADA55B,KAAAu4B,IAAAsB,wBACAxV,OAAA5F,MAAA,WAEAze,KAAAiC,IACA,UACA23B,EAAA1X,QAAA,SAAAyU,EAAAtJ,GACA,IAAAT,EAAAS,EAAA5O,MAAA,MACA6a,EAAA1M,EAAAre,QACArN,EAAA0rB,EAAA9B,KAAA,MAIA,OAFA6L,EAAA2C,GAAAp4B,EAEAy1B,IACA,KAEA,MAAAlS,GACAC,QAAAkB,KAAA,iCAAAnB,GAaA,GAVAzkB,KAAAiC,IAAA,SAAAjC,KAAAu4B,IAAA/B,QAEA71B,IAAAwN,eACAxN,IAAAwN,cAAAnO,KAAAumB,OAGA9mB,OAAA+xB,YAAAxxB,KAAAumB,MAAA3b,cAAA,iBACA4mB,WAAAV,QAGA9wB,KAAAu4B,IAAA/B,OAAA,IACAx2B,KAAAiC,IAAA,OAAAs1B,GACAv3B,KAAAmJ,cAAA,gBASA,GANAnJ,KAAAiC,IAAA,YAAA,CACAu0B,OAAAx2B,KAAAu4B,IAAA/B,OACAc,QAAAt3B,KAAAu4B,IAAAmC,WACAnD,SAAAA,IAGA,KAAAv3B,KAAAu4B,IAAA/B,OAIA,GAFAx2B,KAAAmJ,cAAA,WAEAouB,EAAAxvB,MACA,IAAA,IAAA8S,KAAA0c,EAAAxvB,KACA,GAAAwvB,EAAAxvB,KAAAjH,eAAA+Z,GAAA,CACA,IAAA6gB,EAAA17B,KAAAumB,MAAA3b,cAAA,UAAAiQ,EAAA,MACA6gB,IACAA,EAAAE,kBAAArE,EAAAxvB,KAAA8S,IAEAla,IAAAoJ,gBAEApJ,IAAAk7B,gBACAl7B,IAAAmN,SAAAguB,qBACAJ,EACAnE,EAAAxvB,KAAA8S,IAEAla,IAAAo7B,gBACAp7B,IAAAmN,SAAAkuB,qBACAN,EACAnE,EAAAxvB,KAAA8S,IAEAla,IAAAs7B,gBACAt7B,IAAAmN,SAAAouB,oBACAR,EACAnE,EAAAxvB,KAAA8S,IAGAla,IAAAmN,SAAAquB,gBAAAT,EAAAnE,EAAAxvB,KAAA8S,WAMA6J,QAAAkB,KAAA,yCAAA2R,QAEA,KAAAv3B,KAAAu4B,IAAA/B,OACAx2B,KAAAmJ,cAAA,gBACA,KAAAnJ,KAAAu4B,IAAA/B,OACAx2B,KAAAmJ,cAAA,aAEAnJ,KAAAmJ,cAAA,SAKAnJ,KAAAmJ,cAAA,SAGA4mB,OAAA,SAAA1hB,GACArO,KAAA05B,SAGAjB,QAAA,SAAApqB,GACArO,KAAA+3B,SACA/3B,KAAAmJ,cAAA,SACAnJ,KAAAmJ,cAAA,SAGAuvB,QAAA,SAAArqB,GACArO,KAAA05B,MAAA,CAAApC,QAAA,uBAGAqB,UAAA,SAAAtqB,GACArO,KAAA05B,MAAA,CAAApC,QAAA,uBAGAsB,WAAA,SAAAn3B,GACA,OAAA,SAAA4M,GACAA,EAAAssB,OAAAtsB,EAAAssB,QAAAtsB,EAAA4oB,SAEA,IAAAE,EAAA9oB,EAAAusB,iBACA5tB,KAAA6tB,KAAAxsB,EAAAssB,OAAAtsB,EAAA6oB,MAAA,KACA,EAEAl3B,KAAAiC,IAAA,QAAA,CACA20B,WAAA,EACAC,UAAA,UAAAp1B,GAAA01B,EAAA,IACAL,WAAA,UAAAr1B,GAAA,KAAA01B,EACAJ,YAAA,YAAAt1B,IAGAzB,KAAAiC,IAAAR,EAAA,WAAA,CACAw1B,SAAA5oB,EAAAssB,OACAzD,MAAA7oB,EAAA6oB,MACAC,QAAAA,IAGAn3B,KAAAmJ,cAAA1H,EAAA,CACAm5B,iBAAAvsB,EAAAusB,iBACAD,OAAAtsB,EAAAssB,OACAzD,MAAA7oB,EAAA6oB,UAKAyE,eAAA,SAAA5zB,GACA,MAAAzF,EAAA,GAEA,IAAA,MAAAo5B,KAAA3zB,EAAAiG,SACA,GAAA0tB,EAAA7gB,OAAA6gB,EAAA7L,SAAA,CACA,MAAAH,EAAA0M,EAAAV,EAAA7gB,KAAAhN,QAAA,QAAA,KACA,IAAAY,EAAAnM,EAEA,IAAA,MAAAstB,KAAAF,EAAA,CACA,MAAAjuB,EAAAi6B,EAAAj6B,KAEA,UAAAA,EACAi6B,EAAAx6B,QACAuN,EAAAmjB,EACAnjB,EACAmhB,EACAnhB,EAAAmhB,EAAAtuB,MACAo6B,EAAAx6B,QAGA,SAAAO,GAAA,YAAAA,EACAi6B,EAAAlf,aAAA,SACAkf,EAAA7I,UACApkB,EAAAmjB,EACAnjB,EACAmhB,EACAnhB,EAAAmhB,EAAAtuB,KACAo6B,EAAAx6B,QAIAuN,EAAAmjB,EACAnjB,EACAmhB,EACAnhB,EAAAmhB,EAAAtuB,KACAo6B,EAAA7I,SAIApkB,EAAAmjB,EACAnjB,EACAmhB,EACAnhB,EAAAmhB,EAAAtuB,KAJA,mBAAAG,EAKAf,MAAA8F,KAAAk1B,EAAAW,iBAAA16B,KAAA26B,GAAAA,EAAAp7B,QAGAw6B,EAAAx6B,QAMA,OAAAoB,EAEA,SAAA85B,EAAAvhB,GACA,MAAA6U,EAAA,GACA6M,EAAA1hB,EACA2hB,EAAA,gBACAC,EAAA,QAOA,KALA5hB,EAAAA,EAAAhN,QAAA,aAAA,CAAAwd,EAAAqR,KACAhN,EAAA5sB,KAAA,CAAArB,KAAA,SAAAH,IAAAo7B,IACA,OAKA,OADAhN,EAAA,GAAA8K,MAAA,EACA9K,EAGA,KAAA7U,GAAA,CACA,IAAA2hB,EAAAp3B,KAAAyV,GAgBA,MAAA,CAAApZ,KAAA,SAAAH,IAAAi7B,EAAA/B,MAAA,GAfA3f,EAAAA,EAAAhN,QAAA2uB,GAAA,CAAAnR,EAAAqR,KACAA,EAEAD,EAAAr3B,KAAAs3B,GACAhN,EAAA5sB,KAAA,CAAArB,KAAA,QAAAH,KAAAo7B,IAEAhN,EAAA5sB,KAAA,CAAArB,KAAA,SAAAH,IAAAo7B,IAJAhN,EAAAA,EAAArvB,OAAA,GAAA4c,QAAA,EAOA,MASA,IAAA,IAAAnd,EAAA,EAAA8L,EAAA8jB,EAAArvB,OAAAP,EAAA8L,EAAA9L,IAAA,CACA,MAAA8vB,EAAAF,EAAA5vB,GAEAA,EAAA,EAAA8L,EAAAgkB,EAAA+M,SAAAjN,EAAA5vB,EAAA,GAAA2B,KACAmuB,EAAA4K,MAAA,EAGA,OAAA9K,EAGA,SAAAkC,EAAAnjB,EAAAmhB,EAAAgN,EAAA17B,GACA,GAAA0uB,EAAA4K,KAAA,CACA,QAAA93B,IAAAk6B,EACAnuB,EAAAmhB,EAAAtuB,KAAAsuB,EAAA3S,OAAA,CAAA/b,GAAAA,OACA,GAAAR,MAAA+C,QAAAm5B,GACAnuB,EAAAmhB,EAAAtuB,KAAAwB,KAAA5B,OACA,CAAA,GAAA,iBAAA07B,EACA,OAAAhL,EACAgL,EACA,CAAAn7B,KAAA,SAAAH,IAAA,GAAAk5B,MAAA,GACAoC,EAAA,IACA17B,GAGAuN,EAAAmhB,EAAAtuB,KAAA,CAAAs7B,EAAA17B,GAGA,OAAAuN,EAGA,QAAA/L,IAAAk6B,EACA,OAAAnuB,EAAAmhB,EAAAtuB,KAAA,SAAAsuB,EAAA+M,SAAA,GAAA,GACA,GAAAj8B,MAAA+C,QAAAm5B,GAAA,CACA,GAAA,SAAAhN,EAAA+M,SAAA,OAAAC,EACA,MAAAzxB,EAAA,GACA,IAAA,IAAArL,EAAA,EAAA8L,EAAAgxB,EAAAv8B,OAAAP,EAAA8L,EAAA9L,SACA4C,IAAAk6B,EAAA98B,KAAAqL,EAAArL,GAAA88B,EAAA98B,IAEA,OAAA2O,EAAAmhB,EAAAtuB,KAAA6J,EACA,MAAA,iBAAAyxB,EACAnuB,EAAAmhB,EAAAtuB,KAGAmN,EAAAmhB,EAAAtuB,KAAA,CAAA,GAAAs7B,OChnBAj8B,IAAAuJ,UAAA,KAAA,CAEAsQ,WAAA,CACAqiB,UAAA,CACAp7B,KAAA0d,QACA0K,SAAA,IAIAnP,OAAA,CACAoiB,KAAA7zB,MACA8zB,KAAA9zB,OAGA6d,OAAA,SAAAvd,GAGA,IAFAvJ,KAAAg9B,MAAA,GACAh9B,KAAAi9B,SAAAh9B,SAAAq0B,yBACAt0B,KAAAumB,MAAAgO,YACAv0B,KAAAi9B,SAAA7f,YAAApd,KAAAumB,MAAAgO,YAEAv0B,KAAAgoB,OAAA,KAGAA,OAAA,SAAA1iB,GACAtF,KAAAsF,MAAAu3B,WAAAv3B,EAAAu3B,YACA78B,KAAAsF,MAAAu3B,UACA78B,KAAAk9B,UAEAl9B,KAAAm9B,aAKAD,QAAA,WACA,IAAAD,EAAAj9B,KAAAi9B,SAAA/G,WAAA,GACAl2B,KAAAg9B,MAAAt8B,MAAAf,UAAA6D,MAAAD,KAAA05B,EAAA9e,YACAne,KAAAumB,MAAAnJ,YAAA6f,GACAj9B,KAAAqnB,SACA1mB,IAAAoJ,gBACApJ,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,UACAnJ,OAGAm9B,SAAA,WACAn9B,KAAAwmB,SAAA,GACAxmB,KAAAg9B,MAAAn6B,OAAA,GAAApC,SAAA,SAAA8I,GACA,IAAA8E,EAAA,IAAApF,MAAA,SAAA,CAAAwf,YAAA,IACAlf,EAAAJ,cAAAkF,IACA1N,IAAAgd,IAAA1B,OAAA1S,MAGAvJ,KAAAkd,SAAAra,OAAA,GAAApC,SAAA,SAAAinB,GACAA,EAAAC,cAEAhnB,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,UACAnJ,SCzDAW,IAAAuJ,UAAA,WAAA,CAEAqQ,YAAA,WACA,MAAA,CACA6iB,SAAAp9B,KAAAo9B,aAIA5iB,WAAA,CACA6iB,SAAA,CACA57B,KAAA8E,OACAsjB,QAAA,WAGAyT,IAAA,CACA77B,KAAA0d,QACA0K,SAAA,IAIA/C,OAAA,WACA9mB,KAAAu9B,SAGAA,MAAA,WACAv9B,KAAAiC,IAAA,WAAAjC,KAAAo9B,YACAjuB,sBAAAnP,KAAAu9B,MAAAvT,KAAAhqB,QAGAo9B,SAAA,WACA,IAAAI,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAxL,EAAA,IAAAxmB,KACAiyB,EAAA,SAAAlyB,EAAAI,GAAA,OAAA,OAAAJ,GAAA2S,QAAAvS,IAEAhM,KAAAsF,MAAAg4B,KACAE,EAAAnL,EAAA0L,iBACAN,EAAApL,EAAA2L,cAAA,EACAN,EAAArL,EAAA4L,aACAN,EAAAtL,EAAA6L,cACAN,EAAAvL,EAAA8L,gBACAN,EAAAxL,EAAA+L,kBAEAZ,EAAAnL,EAAAgM,cACAZ,EAAApL,EAAAiM,WAAA,EACAZ,EAAArL,EAAAkM,UACAZ,EAAAtL,EAAAmM,WACAZ,EAAAvL,EAAAoM,aACAZ,EAAAxL,EAAAqM,cAGA,IAAAC,EAAAb,EAAAN,EAAA,GAAA,IAAAM,EAAAL,EAAA,GAAA,IAAAK,EAAAJ,EAAA,GACAkB,EAAA5+B,KAAAsF,MAAAg4B,IAAA,IAAA,GAEA,OAAAt9B,KAAAsF,MAAA+3B,UACA,IAAA,OAAA,OAAAsB,EAAA,YAAAC,EACA,IAAA,QAAA,OAAAD,EAAA,IAAAb,EAAAH,EAAA,GAAA,SAAAiB,EACA,IAAA,UAAA,OAAAD,EAAA,IAAAb,EAAAH,EAAA,GAAA,IAAAG,EAAAF,EAAA,GAAA,MAAAgB,EAGA,OAAAD,EAAA,IAAAb,EAAAH,EAAA,GAAA,IAAAG,EAAAF,EAAA,GAAA,IAAAE,EAAAD,EAAA,GAAAe,KC1DAj+B,IAAAuJ,UAAA,aAAA,CACAmQ,QAAA,UCDA1Z,IAAAuJ,UAAA,WAAA,CACAmQ,QAAA,uBCDA1Z,IAAAuJ,UAAA,QAAA,CAEAqQ,YAAA,CACAjN,MAAA,GACAuxB,MAAA,GAGArkB,WAAA,CACAlN,MAAA,CACA7L,KAAAf,MACAmpB,QAAA,KAIAnP,OAAA,CACAuN,QAAAhf,OAGAwR,QAAA,CACAtV,IAAA,SAAA25B,GACA9+B,KAAA6C,OAAA7C,KAAA6+B,QAAA,EAAAC,IAGAC,QAAA,SAAAD,IAEA,GAAA9+B,KAAA4e,QAAAkgB,IACA9+B,KAAA6C,OAAA7C,KAAA6+B,QAAA,EAAAC,IAIAluB,OAAA,SAAA9O,EAAAg9B,GACA9+B,KAAA6C,OAAAf,EAAA,EAAAg9B,IAGAxI,aAAA,SAAAh2B,EAAAw+B,GACA,IAAAh9B,EAAA9B,KAAA4e,QAAAte,IACA,GAAAwB,GACA9B,KAAA6C,OAAAf,EAAA,EAAAg9B,IAIAE,YAAA,SAAA1+B,EAAAw+B,GACA,IAAAh9B,EAAA9B,KAAA4e,QAAAte,IACA,GAAAwB,GACA9B,KAAA6C,OAAAf,EAAA,EAAA,EAAAg9B,IAIAjxB,QAAA,SAAAvN,EAAAw+B,GACA,IAAAh9B,EAAA9B,KAAA4e,QAAAte,IACA,GAAAwB,GACA9B,KAAA6C,OAAAf,EAAA,EAAAg9B,IAIAG,UAAA,SAAAn9B,EAAAg9B,GACA9+B,KAAA6C,OAAAf,EAAA,EAAAg9B,IAGA7iB,OAAA,SAAA3b,GACA,IAAAwB,EAAA9B,KAAA4e,QAAAte,IACA,GAAAwB,GACA9B,KAAA6C,OAAAf,EAAA,IAIAo9B,SAAA,SAAAp9B,GACA9B,KAAA6C,OAAAf,EAAA,IAGAq9B,QAAA,WACAn/B,KAAAm/B,WAGAC,KAAA,WACAp/B,KAAAo/B,QAGA3hB,MAAA,WACAzd,KAAAyxB,WAAA,MAIA3K,OAAA,WACA,IAAAra,EAAA9L,IAAAU,MAAArB,KAAAsF,MAAAgI,OACAtN,KAAAiC,IAAA,QAAAwK,GACAzM,KAAAiC,IAAA,QAAAwK,EAAApM,SAGA2nB,OAAA,SAAA1iB,EAAA0sB,GACAA,EAAAzvB,IAAA,UACAvC,KAAAyxB,WAAA9wB,IAAAU,MAAArB,KAAAsF,MAAAgI,SAIAuxB,MAAA,WACA,OAAA7+B,KAAAwB,KAAA8L,MAAAjN,QAGAue,QAAA,SAAAte,GACA,OAAAN,KAAAwB,KAAA8L,MAAAsR,QAAAte,IAGAuC,OAAA,SAAAf,EAAAma,EAAA3b,GACA,IAAAmM,EAAA9L,IAAAoE,MAAA/E,KAAAwB,KAAA8L,YAEA5K,IAAApC,EACAmM,EAAA5J,OAAAf,EAAAma,EAAA3b,GAEAmM,EAAA5J,OAAAf,EAAAma,GAGAjc,KAAAyxB,WAAAhlB,IAGA0yB,QAAA,WACA,IAAA1yB,EAAA9L,IAAAoE,MAAA/E,KAAAwB,KAAA8L,OACAb,EAAA0yB,UACAn/B,KAAAyxB,WAAAhlB,IAGA2yB,KAAA,WACA,IAAA3yB,EAAA9L,IAAAoE,MAAA/E,KAAAwB,KAAA8L,OACAb,EAAA2yB,OACAp/B,KAAAyxB,WAAAhlB,IAGAglB,WAAA,SAAAhlB,GACA9L,IAAAqF,MAAAhG,KAAAwB,KAAA8L,MAAAb,KAEAzM,KAAAiC,IAAA,QAAAwK,GACAzM,KAAAiC,IAAA,QAAAwK,EAAApM,QACAM,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,aACAnJ,UCtIAW,IAAAuJ,UAAA,QAAA,CAAA4c,OAAA,SAAAvd,GAAAvJ,KAAAqnB,YCAA1mB,IAAAuJ,UAAA,OAAA,CAEAqQ,YAAA,CACA8kB,OAAA,KACA79B,KAAA,KACA89B,SAAA,EACAjI,UAAA,MAGA7c,WAAA,CACA+kB,IAAA,CACA99B,KAAA8E,OACAsjB,QAAA,MAGA2V,QAAA,CACA/9B,KAAA0d,QACA0K,SAAA,GAGA4V,QAAA,CACAh+B,KAAA0d,QACA0K,SAAA,GAGA4N,OAAA,CACAh2B,KAAAZ,OACAgpB,QAAA,KAIApP,QAAA,CACA4U,IAAA,SAAAqQ,EAAAC,GACA,OAAA3/B,KAAAqvB,IAAAqQ,EAAAC,IAGAC,OAAA,SAAAF,GACA,OAAA1/B,KAAA4/B,OAAAF,KAIAhlB,OAAA,CACA4H,MAAArZ,MACA+uB,KAAA/uB,MACA0b,MAAA1b,OAGA2d,iBAAA,SAAArd,GACA5I,IAAA2Z,cAAA3a,UAAAinB,iBAAArjB,KAAAvD,KAAAuJ,GACA5I,IAAAgd,IAAAS,cAAA7U,GAAA9I,SAAA,SAAA6b,GACA,SAAAA,EAAAzB,MAAAyB,EAAAkC,UACAxe,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACAlB,KAAAsF,MAAAmyB,OAAAnb,EAAAkC,UAAAtd,OAGAlB,OAGA8mB,OAAA,SAAAvd,GACA,GAAAvJ,KAAAsF,MAAAi6B,KACAv/B,KAAAsF,MAAAk6B,SAAAx/B,KAAAsF,MAAAm6B,UACAz/B,KAAAiwB,KAAAjwB,KAAAsF,MAAAi6B,UAGA,IACAv/B,KAAAsvB,MAAA7vB,OAAAstB,MAAAA,MAAAlgB,MAAAsX,MAAA5a,EAAAs2B,aACA7/B,KAAAsF,MAAAm6B,SACAz/B,KAAAqvB,MAEA,MAAArmB,GACA0b,QAAAC,MAAA3b,GACArI,IAAAkoB,OACAnE,QAAAmE,MAAAtf,EAAAs2B,eAMA5P,KAAA,SAAA6P,GACA,IAAAlqB,EAAA5V,KAEA,OAAA,IAAAwK,SAAA,SAAAiR,EAAAskB,GACA,IAAAxH,EAAA,IAAAC,eACAD,EAAAxI,OAAA,WACA,IACAna,EAAA0Z,MAAA7vB,OAAAstB,MAAAA,MAAAlgB,MAAAsX,MAAAoU,EAAAoB,cACA/jB,EAAAtQ,MAAAm6B,SACA7pB,EAAAyZ,MAEA5T,IACA,MAAAzS,GACA0b,QAAAC,MAAA3b,GACArI,IAAAkoB,OACAnE,QAAAmE,MAAA0P,EAAAoB,cAEAoG,EAAA/2B,KAGAuvB,EAAAE,QAAAsH,EACAxH,EAAAG,QAAAqH,EACAxH,EAAAI,UAAAoH,EACAxH,EAAAc,KAAA,MAAAyG,GACAvH,EAAAkB,WAIAmG,OAAA,SAAAF,GACA,IAAA9pB,EAAA5V,KAEA,IAAAA,KAAAsvB,KAAA,CACA,GAAAtvB,KAAAsF,MAAAi6B,IACA,OAAAv/B,KAAAiwB,KAAAjwB,KAAAsF,MAAAi6B,KAAA70B,MAAA,WACA,OAAA/J,IAAAuuB,KAAAG,IAAAzZ,EAAA0Z,KAAA1Z,MAIA,MAAA,IAAA2N,MAAA,WAGA,OAAA5iB,IAAAuuB,KAAAG,IAAArvB,KAAAsvB,KAAAtvB,OAGAqvB,IAAA,SAAAqQ,EAAAC,GACA,IAAA/pB,EAAA5V,KAEA,OAAAA,KAAAsvB,KACAtvB,KAAAwB,KAAA89B,aACA5a,QAAAyV,KAAA,QAAAn6B,KAAA6a,KAAA,yBAIA7a,KAAAiC,IAAA,WAAA,GACAjC,KAAAiC,IAAA,MAAA,IACAjC,KAAAiC,IAAA,SAAApB,OAAA2M,OAAA,GAAAxN,KAAAsF,MAAAmyB,OAAAiI,IACA1/B,KAAAiC,IAAA,YAAA,MAEAjC,KAAAmJ,cAAA,SAEAxI,IAAAuuB,KAAAG,IAAArvB,KAAAsvB,KAAAtvB,MAAA0K,MAAA,SAAAlJ,GAOA,OANAoU,EAAA3T,IAAA,WAAA,GACA2T,EAAA3T,IAAA,OAAAT,GACAoU,EAAAzM,cAAA,QACAxI,IAAAkoB,OACAnE,QAAAmE,MAAA,OAAArnB,GAEAA,KACAmuB,OAAA,SAAAlL,GAQA,GAPA7O,EAAA3T,IAAA,WAAA,GACA2T,EAAA3T,IAAA,YAAAwiB,GAAAA,EAAA6S,SACA1hB,EAAAzM,cAAA,SAGAub,QAAAC,MAAAF,GAEAkb,EACA,MAAAlb,MAGAzkB,KAAAsF,MAAAi6B,IACAv/B,KAAAiwB,KAAAjwB,KAAAsF,MAAAi6B,KAAA70B,MAAA,WACA,OAAAkL,EAAAyZ,IAAAqQ,EAAAC,WAFA,KC9JAh/B,IAAAuJ,UAAA,SAAA,CAEAqQ,YAAA,CACAsY,SAAA,GAGArY,WAAA,CACAqY,QAAA,CACApxB,KAAA0d,QACA0K,SAAA,IAIApP,QAAA,CACAqY,MAAA,WACA9yB,KAAAwB,KAAAqxB,UACA7yB,KAAAiC,IAAA,WAAA,GACAjC,KAAAggC,cAIAC,QAAA,WACAjgC,KAAAwB,KAAAqxB,UACA7yB,KAAAiC,IAAA,WAAA,GACAjC,KAAAggC,cAIA7jB,OAAA,WACAnc,KAAAiC,IAAA,WAAAjC,KAAAwB,KAAAqxB,SACA7yB,KAAAggC,cAIAtlB,OAAA,CACAuN,QAAAhf,OAGA6d,OAAA,WACA9mB,KAAAiC,IAAA,UAAAjC,KAAAsF,MAAAutB,UAGA7K,OAAA,SAAA1iB,GACAA,EAAAutB,SAAA7yB,KAAAsF,MAAAutB,UACA7yB,KAAAiC,IAAA,UAAAjC,KAAAsF,MAAAutB,SACA7yB,KAAAggC,cAIAA,UAAA,WACAr/B,IAAA+N,UAAA,WACA1O,KAAAmJ,cAAA,aACAnJ,SCpDAW,IAAAia,UAAA,OAAA,WAAA,SAAArR,EAAA+S,GACA,IAAAzB,EAAAyB,EAAAkC,SACArC,EAAAxb,IAAA4H,kBAAAnD,KAAAyV,GAEA7a,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACA,GAAAib,EAEAjb,EACAqI,EAAAkT,aAAA5B,EAAA,IAEAtR,EAAAsB,gBAAAgQ,OAEA,CACA,GAAA,UAAAA,GAAA,iBAAA3Z,EAAA,CACA,IAAA,IAAAkK,KAAAlK,EACAA,EAAAJ,eAAAsK,KACA7B,EAAAc,MAAAe,GAAAlK,EAAAkK,IAGA,OAGA,MAAAlK,EACAqI,EAAAkT,aAAA5B,EAAA3Z,GAEAqI,EAAAsB,gBAAAgQ,GAGA,QAAAA,IACA,UAAAtR,EAAA22B,UAAA,UAAA32B,EAAA22B,SACA32B,EAAA0mB,OACA,WAAA1mB,EAAA22B,UAAA32B,EAAAgU,YACAhU,EAAAgU,WAAA0S,eChCAtvB,IAAAia,UAAA,KAAA,WAAA,SAAArR,EAAA+S,GACA,IAAA1G,EAAA5V,KAEAW,IAAA2U,cAAA/L,EAAA+S,EAAAkC,UAAA,SAAAnQ,GACAA,EAAAgI,gBACAhI,EAAAA,EAAAgI,eAGA,IAAA8pB,EAAAx/B,IAAAwjB,MAAA7H,EAAApb,MAAAP,IAAA2lB,UAAA,CACA4D,OAAA7b,EAAAkJ,MACA4S,eAAA9b,GACAuH,IAEA,GAAA,iBAAAuqB,EACA,IACAA,EAAA,IAAAlW,SAAA,QAAAkW,GAAA58B,KAAAvD,KAAAqO,GACA,MAAArF,GACA0b,QAAAkB,KAAA,oBAAAua,EAAA,IAAAn3B,GAIA,OAAAm3B,IACA7jB,EAAA5G,cCtBA/U,IAAAia,UAAA,SAAA,UAAA,SAAArR,EAAA+S,GACA,GAAAtc,KAAAuJ,MAAAA,EAAA,CACA,IAAAse,EAAA7nB,KAEAkd,EAAA,GACA+f,EAAAh9B,SAAAq0B,yBACA8L,EAAAngC,SAAAogC,cAAA,UAAA/jB,EAAApb,OAEA2Z,GADAla,IAAAuJ,UAAA,eACAoS,EAAAkC,UAAA,UAEAjV,EAAAgU,WAAAyB,aAAAohB,EAAA72B,GACAA,EAAAsB,gBAAA,cAEAoyB,EAAA7f,YAAA7T,GAEAse,EAAA5lB,IAAA4Y,EAAA,IAEA7a,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAmM,GACA,IAAAunB,EAAAj0B,IAAAuJ,UAAA,eACAoD,EAAA3M,IAAAyM,YAAAC,GAEA,GAAAiP,EAAA5G,UAAA4qB,MAqCA,GAfApjB,EAAA7c,OAAAiN,EAAAjN,QAEA6c,EAAAra,OAAAyK,EAAAjN,QAAAI,SAAA,SAAAinB,GACAG,EAAA3K,SAAAra,OAAAglB,EAAA3K,SAAA0B,QAAA8I,GAAA,GACAA,EAAAC,cAIAzK,EAAA7c,QAEA6c,EAAAzc,SAAA,SAAAinB,EAAA5nB,GACA4nB,EAAAzlB,IAAAqL,EAAAxN,OAIAwN,EAAAjN,OAAA6c,EAAA7c,OAAA,CAIA,IAFA41B,EAAAh2B,SAAAq0B,yBAEAx0B,EAAAod,EAAA7c,OAAAP,EAAAwN,EAAAjN,OAAAP,IAAA,EACA4nB,EAAA,IAAAkN,EAAAqI,EAAA/G,WAAA,GAAArO,EAAAva,EAAAxN,KACAq2B,OAAA11B,SAAA,SAAA8I,GACA0sB,EAAA7Y,YAAA7T,GACAme,EAAAL,OAAA9d,MAEA2T,EAAApa,KAAA4kB,GACAG,EAAA3K,SAAApa,KAAA4kB,GAGA0Y,EAAA7iB,WAAA+Y,aAAAL,EAAAmK,QAnDA,CACA,IAAAnK,EAAAh2B,SAAAq0B,yBAEApX,EAAAzc,SAAA,SAAAinB,GACAG,EAAA3K,SAAAra,OAAAglB,EAAA3K,SAAA0B,QAAA8I,GAAA,GACAA,EAAAC,cAGAzK,EAAA,GAEA,IAAA,IAAApd,EAAA,EAAAA,EAAAwN,EAAAjN,OAAAP,IAAA,CACA,IAAA4nB,GAAAA,EAAA,IAAAkN,EAAAqI,EAAA/G,WAAA,GAAArO,EAAAva,EAAAxN,KACAq2B,OAAA11B,SAAA,SAAA8I,GACA0sB,EAAA7Y,YAAA7T,GACAme,EAAAL,OAAA9d,MAEA2T,EAAApa,KAAA4kB,GACAG,EAAA3K,SAAApa,KAAA4kB,GAGA0Y,EAAA7iB,WAAA+Y,aAAAL,EAAAmK,GAmCAvY,EAAA5lB,IAAA4Y,EAAAqC,EAAAvb,KAAA,SAAA+lB,GAAA,OAAAA,EAAAlmB,gBC5EAb,IAAAia,UAAA,QAAA,WAAA,SAAArR,EAAA+S,GACA,IAAAR,EAAAQ,EAAAkC,SAEAxe,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,EAAAkoB,GACAloB,GAAAkoB,GACA7f,EAAAwS,UAAA7a,EAAA,MAAA,UAAA4a,SCLAnb,IAAAia,UAAA,OAAA,WAAA,SAAArR,EAAA+S,GACA,IAAAikB,EAAAh3B,EAAAc,MAAAwS,iBAAA,WACA2jB,EAAAj3B,EAAAc,MAAAo2B,oBAAA,WAEAzgC,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACAA,EACAqI,EAAAc,MAAAyS,YAAA,UAAA,OAAA,aAEAvT,EAAAc,MAAAyS,YAAA,UAAAyjB,EAAAC,SCRA7/B,IAAAia,UAAA,OAAA,WAAA,SAAArR,EAAA+S,GACA,IAAAikB,EAAAh3B,EAAAc,MAAAwS,iBAAA,WACA2jB,EAAAj3B,EAAAc,MAAAo2B,oBAAA,WAEAzgC,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACAA,EAGAqI,EAAAc,MAAAyS,YAAA,UAAAyjB,EAAAC,GAFAj3B,EAAAc,MAAAyS,YAAA,UAAA,OAAA,mBCNAnc,IAAAia,UAAA,OAAA,WAAA,SAAArR,EAAA+S,GACAtc,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GAEAqI,EAAAmU,UADA,MAAAxc,EACAA,EAEA,SCLAP,IAAAia,UAAA,OAAA,WAAA,SAAArR,EAAA+S,GACAtc,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GAEAqI,EAAA0qB,UADA,MAAA/yB,EACAA,EAEA,SCLAP,IAAAia,UAAA,QAAA,WAAA,SAAArR,EAAA+S,GACA,IAAAokB,EAAApkB,EAAAkC,SACAmiB,EAAArkB,EAAA5G,UAAAirB,UAAA,YAAA,GAEA3gC,KAAAmpB,YAAA7M,EAAApb,OAAA,SAAAA,GACA,MAAAA,GACAqI,EAAAc,MAAAyS,YAAA4jB,EAAAx/B,EAAAy/B,SCNAhgC,IAAAoa,WAAA,SAAA,CAGA6lB,KAAA,SAAAz1B,GACA,OAAA0B,KAAAC,UAAA3B,IAIAgb,IAAA,SAAAhb,GAEA,OADAuZ,QAAAyB,IAAAhb,GACAA,GAIAkkB,IAAA,SAAAC,EAAAoQ,GACA,IAAApe,EAAA3gB,IAAA2lB,UAAA,CACA+Y,OAAAK,GACA1/B,MAEAW,IAAAuuB,KAAAG,IAAAC,EAAAhO,MCnBA3gB,IAAAua,QAAA,CAEA2lB,QAAA,SAAAjX,GACA,IAAAiX,EAAA7gC,KAAAmkB,MAAAyF,EAAA0F,MACAoQ,EAAA1/B,KAAAmkB,MAAAyF,EAAA8V,OAEA,OAAA1/B,KAAAmkB,MAAA0c,EAAA,WAAAh0B,KAAAC,UAAA4yB,GAAA,MAGAoB,QAAA,SAAAlX,GACAjpB,IAAAkoB,OACAnE,QAAAmE,MAAAe,EAAA0N,UAIAyJ,KAAA,SAAAnX,GACA,IAAA7a,EAAA/O,KAAAmkB,MAAAyF,EAAA7a,OAEA,GAAA,iBAAAA,EACA,MAAA,IAAAwU,MAAA,uBAGA,OAAA,IAAA/Y,SAAA,SAAAiR,GACA5R,WAAA4R,EAAA1M,OAIAkqB,IAAA,SAAArP,GACA,OAAA,IAAA/d,MAAA2mB,eAGApM,OAAA,SAAAwD,GACA,IAAAoX,EAAAhhC,KAAAmkB,MAAAyF,EAAAoX,OACAC,EAAAjhC,KAAAmkB,MAAAyF,EAAAqX,OACAC,IAAAlhC,KAAAmkB,MAAAyF,EAAAsX,UAEA,iBAAAF,GAAA1S,SAAA0S,KACAA,EAAA,GAGA,iBAAAC,GAAA3S,SAAA2S,KACAA,EAAA,GAGA,IAAAE,EAAAH,EAAAh0B,KAAAoZ,UAAA6a,EAAAD,GAMA,OAJAE,GAAAl0B,KAAAo0B,MAAAJ,IAAAA,GAAAh0B,KAAAo0B,MAAAH,IAAAA,IACAE,EAAAn0B,KAAAq0B,MAAAF,IAGAA,GAGAG,QAAA,SAAA1X,GACA,IAAA0N,EAAAt3B,KAAAmkB,MAAAyF,EAAA0N,SAEA,GAAA,iBAAAA,EACA,MAAA,IAAA/T,MAAA,4BAGA,IAAAjhB,EAAAg/B,QAAAhK,GAEA,GAAAh1B,GACA,GAAAsnB,EAAAlf,KACA,OAAA1K,KAAAuvB,MAAA3F,EAAAlf,MAAAA,MAAA,WACA,OAAApI,UAGA,GAAAsnB,EAAA2X,KACA,OAAAvhC,KAAAuvB,MAAA3F,EAAA2X,MAAA72B,MAAA,WACA,OAAApI,KAIA,OAAAA,GAGAk/B,OAAA,SAAA5X,GACA,IAAA0N,EAAAt3B,KAAAmkB,MAAAyF,EAAA0N,SAEA,GAAA,iBAAAA,EACA,MAAA,IAAA/T,MAAA,2BAGA,OAAAie,OAAAlK,IAGA5tB,MAAA,SAAAkgB,GACA,IAAA0N,EAAAt3B,KAAAmkB,MAAAyF,EAAA0N,SAEA,GAAA,iBAAAA,EACA,MAAA,IAAA/T,MAAA,0BAGA,OAAA7Z,MAAA4tB,IAGAjqB,OAAA,SAAAuc,GACA,IAAAtc,EAAA3M,IAAAoE,MAAA/E,KAAAmkB,MAAAyF,EAAAvc,SAEA,GAAAC,EAAA,CAEA,GAAA,kBAAAA,EACAA,EAAAA,EAAA,CAAA,GAAA,QACA,GAAA,iBAAAA,EACAA,EAAAA,EAAAmR,MAAA,gBACA,GAAA,iBAAAnR,EAAA,CAEA,IADA,IAAAb,EAAA,GACA3M,EAAA,EAAAA,EAAAwN,EAAAxN,IACA2M,EAAA3J,KAAAhD,EAAA,GAEAwN,EAAAb,EAGA,GAAA,iBAAAa,EACA,MAAA,IAAAiW,MAAA,kCAGA,IAAA3N,EAAA5V,KACAyhC,EAAAzhC,KAAAshB,MACAogB,EAAA1hC,KAAAovB,OACA,OAAApvB,KAAAwvB,MAAAliB,GAAA,SAAApM,EAAAY,GAkBA,OAjBA8T,EAAA0L,MAAA,IAAA3gB,IAAA2lB,UAAAzlB,OAAA2M,OAAA,CACAG,OAAAzM,EACAwM,OAAA5L,EACA6/B,MAAA7/B,EACA2L,KAAA3L,EACA8/B,QAAA9/B,EAAA,EACA+/B,SAAA//B,EAAA,GACAZ,GAAAugC,GAEA7rB,EAAAwZ,OAAA,GAEA1uB,MAAA+C,QAAAmmB,EAAAkY,eAAA5gC,aAAAL,QACA+oB,EAAAkY,aAAArhC,SAAA,SAAAshC,GACAnsB,EAAAwZ,OAAA2S,GAAA7gC,EAAA6gC,MAIAnsB,EAAA2Z,MAAA3F,EAAAjlB,MAAA+F,MAAA,WACA,IAAA0kB,EAAAxZ,EAAAwZ,OAGA,OAFAxZ,EAAA0L,MAAAmgB,EACA7rB,EAAAwZ,OAAAsS,EACAtS,UAKAyN,UAAA,SAAAjT,GACA,IAAAtnB,IAAAtC,KAAAmkB,MAAAyF,EAAAoY,IAEA,GAAA1/B,GACA,GAAAsnB,EAAAlf,KACA,OAAA1K,KAAAuvB,MAAA3F,EAAAlf,MAAAA,MAAA,WACA,OAAApI,UAGA,GAAAsnB,EAAA2X,KACA,OAAAvhC,KAAAuvB,MAAA3F,EAAA2X,MAAA72B,MAAA,WACA,OAAApI,KAIA,OAAAA,GAGA2/B,WAAA,SAAArY,GACA,GAAAlpB,MAAA+C,QAAAmmB,EAAAqY,YACA,IAAA,IAAAniC,EAAA,EAAAA,EAAA8pB,EAAAqY,WAAA5hC,OAAAP,IAAA,CACA,IAAA+8B,EAAAjT,EAAAqY,WAAAniC,GAEA,GAAAE,KAAAmkB,MAAA0Y,EAAAqF,MACA,OAAAliC,KAAAuvB,MAAAsN,EAAAnyB,QAMAxC,OAAA,SAAA0hB,GACA,IAAAtF,EAAAtkB,KAAAmkB,MAAAyF,EAAAtF,YAEA,GAAA5jB,MAAA+C,QAAAmmB,EAAAuY,OACA,IAAA,IAAAriC,EAAA,EAAAA,EAAA8pB,EAAAuY,MAAA9hC,OAAAP,IAAA,CACA,IAAAQ,EAAAspB,EAAAuY,MAAAriC,GAEA,GAAAE,KAAAmkB,MAAA7jB,EAAAY,QAAAojB,EACA,OAAAtkB,KAAAuvB,MAAAjvB,EAAAqE,QAMA6mB,MAAA,SAAA5B,GACA,GAAAA,EAAA/O,KAAA,CACA,IAAAjF,EAAA5V,KACA0hC,EAAA1hC,KAAAovB,OAGA,OAFApvB,KAAAovB,OAAA,GAEApvB,KAAAuvB,MAAA3F,EAAAjlB,MAAA+F,MAAA,WACA,IAAA0kB,EAAAxZ,EAAAwZ,OAEA,OADAxZ,EAAAwZ,OAAAsS,EACAtS,KAIA,OAAApvB,KAAAuvB,MAAA3F,EAAAjlB,OAGAy9B,MAAA,SAAAxY,GACA,IAAAhU,EAAA5V,KACAqiC,EAAA,WACA,OAAA,IAAA73B,SAAA,SAAAiR,GACA,IAAA7F,EAAAuO,MAAAyF,EAAAiT,WAAA,OAAAphB,IACA7F,EAAA2Z,MAAA3F,EAAAjlB,MAAA+F,KAAA23B,GAAA33B,KAAA+Q,OAIA,OAAA4mB,KAGAC,OAAA,SAAA1Y,GAeA,IADA,IAAAtF,EAAAtkB,KAAAmkB,MAAAyF,EAAAtF,YACAxkB,EAAA,EAAAA,EAAA8pB,EAAAuY,MAAA9hC,OAAAP,IACA,GAAAE,KAAAmkB,MAAAyF,EAAAuY,MAAAriC,GAAAyiC,QAAAje,EACA,OAAAtkB,KAAAuvB,MAAA3F,EAAAuY,MAAAriC,GAAA6E,MAGA,GAAAilB,EAAAC,QACA,OAAA7pB,KAAAuvB,MAAA3F,EAAAC,UAIA2Y,SAAA,SAAA5Y,GACA,IAAAhU,EAAA5V,KACA,OAAAwK,QAAAiR,QAAA7F,EAAA2Z,MAAA3F,EAAA6Y,MAAA9S,OAAA,WACA,OAAA/Z,EAAA2Z,MAAA3F,EAAA+F,WAIAN,IAAA,SAAAzF,GACA,IAAAA,EAAAvO,OACA,MAAA,IAAAkI,MAAA,uBAGA,OAAAvjB,KAAAmkB,MAAAyF,EAAAvO,SAGAqnB,MAAA,SAAA9Y,GACA,IAAAA,EAAA+Y,SACA,MAAA,IAAApf,MAAA,2BAGA,IAAAwC,EAAA/lB,KAAAmkB,MAAAyF,EAAA+Y,UACAtzB,EAAArP,KAAAmkB,MAAAyF,EAAAva,MAEA,OAAA5P,OAAAsmB,GAAAjd,MAAA,KAAAuG,IAGA7B,OAAA,SAAAoc,GACA,OAAA5pB,KAAAmkB,MAAAyF,EAAA1oB,QAGA0hC,UAAA,SAAAhZ,GACA,IAAAtoB,EAAAtB,KAAAmkB,MAAAyF,EAAAtoB,KACAJ,EAAAlB,KAAAmkB,MAAAyF,EAAA1oB,OAEA,GAAA,iBAAAI,EACA,MAAA,IAAAiiB,MAAA,mCAKA,OAFA5iB,IAAA2G,OAAArF,IAAAX,EAAAJ,GAEAA,GAGA2hC,WAAA,SAAAjZ,GACA,IAAAtoB,EAAAtB,KAAAmkB,MAAAyF,EAAAtoB,KACAJ,EAAAlB,KAAAmkB,MAAAyF,EAAA1oB,OAEA,GAAA,iBAAAI,EACA,MAAA,IAAAiiB,MAAA,oCAKA,OAFAuf,eAAAC,QAAAzhC,EAAAuL,KAAAC,UAAA5L,IAEAA,GAGA8hC,WAAA,SAAApZ,GACA,IAAAtoB,EAAAtB,KAAAmkB,MAAAyF,EAAAtoB,KAEA,GAAA,iBAAAA,EACA,MAAA,IAAAiiB,MAAA,oCAGA,OAAA1W,KAAAsX,MAAA2e,eAAAG,QAAA3hC,KAGA4hC,cAAA,SAAAtZ,GACA,IAAAtoB,EAAAtB,KAAAmkB,MAAAyF,EAAAtoB,KAEA,GAAA,iBAAAA,EACA,MAAA,IAAAiiB,MAAA,uCAKA,OAFAuf,eAAAK,WAAA7hC,IAEA,GAGA8hC,WAAA,SAAAxZ,GACA,IAAAtoB,EAAAtB,KAAAmkB,MAAAyF,EAAAtoB,KACAJ,EAAAlB,KAAAmkB,MAAAyF,EAAA1oB,OAEA,GAAA,iBAAAI,EACA,MAAA,IAAAiiB,MAAA,oCAKA,OAFA8f,aAAAN,QAAAzhC,EAAAuL,KAAAC,UAAA5L,IAEAA,GAGAoiC,WAAA,SAAA1Z,GACA,IAAAtoB,EAAAtB,KAAAmkB,MAAAyF,EAAAtoB,KAEA,GAAA,iBAAAA,EACA,MAAA,IAAAiiB,MAAA,oCAGA,OAAA1W,KAAAsX,MAAAkf,aAAAJ,QAAA3hC,KAGAiiC,cAAA,SAAA3Z,GACA,IAAAtoB,EAAAtB,KAAAmkB,MAAAyF,EAAAtoB,KAEA,GAAA,iBAAAA,EACA,MAAA,IAAAiiB,MAAA,uCAKA,OAFA8f,aAAAF,WAAA7hC,IAEA,GAGAi1B,MAAA,SAAA3M,GACA,IAAA4N,EAAAx3B,KAAAmkB,MAAAyF,EAAA4N,KACApN,EAAApqB,KAAAmkB,MAAAyF,EAAAQ,QACApb,EAAAhP,KAAAmkB,MAAAyF,EAAA5a,SACAw0B,EAAAxjC,KAAAmkB,MAAAyF,EAAA4Z,UACAhiC,EAAAxB,KAAAmkB,MAAAyF,EAAApoB,MACAi2B,EAAAz3B,KAAAmkB,MAAAyF,EAAA6N,QACAd,EAAA32B,KAAAmkB,MAAAyF,EAAA+M,SACA8M,EAAA,KAEA,GAAA,iBAAAjM,EACA,MAAA,IAAAjU,MAAA,sBAAAiU,GAgBA,GAbA,CAAA,MAAA,OAAA,MAAA,UAAAjhB,SAAA6T,KAEAA,EAAA,OAGA,CAAA,OAAA,OAAA,QAAA7T,SAAAitB,KACAA,EAAA,QAGA,iBAAAx0B,IACAA,EAAA,GAGA,iBAAAyoB,EACA,IAAA,IAAAiI,KAAAjI,EACAA,EAAA32B,eAAA4+B,IAAA,MAAAjI,EAAAiI,KACAlI,KAAA,GAAAA,EAAA5Y,QAAA,KAAA,IAAA,KACAyR,mBAAAqP,GAAA,IAAArP,mBAAAoH,EAAAiI,KAKA,GAAA,OAAAtV,EACA,GAAA,QAAAoZ,EACA7M,EAAA,kBACAA,EAAA,gBAAA,oBAEA8M,EAAAjiC,EAAAZ,gBACA,GAAA,QAAA4iC,EACA7M,EAAA,kBACAA,EAAA,gBAAA,oBAEAn1B,EAAAqL,KAAAC,UAAAtL,QAEA,GAAA,QAAA4oB,GAGA,GAFAqZ,EAAA,IAAArK,SAEA,iBAAA53B,IAAAd,MAAA+C,QAAAjC,GACA,IAAA,IAAAF,KAAAE,EACA,GAAAA,EAAAV,eAAAQ,GAAA,CACA,IAAAJ,EAAAM,EAAAF,GAEA,GAAAZ,MAAA+C,QAAAvC,GAIA,IAAA,IAAApB,IAHA,QAAAsF,KAAA9D,KACAA,GAAA,MAEAJ,EACAA,EAAAJ,eAAAhB,IACA2jC,EAAAxmB,OAAA3b,EAAAJ,EAAApB,SAIA2jC,EAAAxhC,IAAAX,EAAAJ,SAMAy1B,EAAA,kBACAA,EAAA,gBAAA,oBAEAn1B,EAAAA,EAAAZ,WAKA,OAAA,IAAA4J,SAAA,SAAAiR,EAAAskB,GACA,IAAAxH,EAAA,IAAAC,eAoCA,IAAA,IAAAc,KAlCAf,EAAAG,QAAAqH,EACAxH,EAAAE,QAAAsH,EACAxH,EAAAI,UAAAoH,EACAxH,EAAAxI,OAAA,WACA,IAAAwH,EAAAgB,EAAAoB,aACAhD,EAYA4B,EAAAsB,wBAXAxV,OAAA5F,MAAA,WAEAyD,QAAA,SAAAyU,EAAAtJ,GACA,IAAAT,EAAAS,EAAA5O,MAAA,MACA6a,EAAA1M,EAAAre,QACArN,EAAA0rB,EAAA9B,KAAA,MAIA,OAFA6L,EAAA2C,EAAApwB,eAAAhI,EAEAy1B,IACA,IAGA,qBAAAvxB,KAAAuxB,EAAA,mBACAY,EAAA1qB,KAAAsX,MAAAoT,IAGA9b,EAAA,CACA+a,OAAA+B,EAAA/B,OACAG,QAAAA,EACAn1B,KAAA+1B,KAIAgB,EAAAc,KAAAjP,EAAAoN,GAEAe,EAAAvpB,QAAA,IAAAA,EAEA2nB,EACAA,EAAA71B,eAAAw4B,IACAf,EAAAgB,iBAAAD,EAAA3C,EAAA2C,IAIAf,EAAAkB,KAAAgK,SAOA9iC,IAAA+G,UAAA,SAAA/G,IAAA+G,UAAA,OACA/G,IAAA+G,UAAA,IAAA/G,IAAA+G,UAAA,MACA/G,IAAA+G,UAAA,YAAA/G,IAAA+G,UAAA,MACA/G,IAAA+G,UAAA,cAAA/G,IAAA+G,UAAA,MC3eA/G,IAAAua,QAAA,CASA,yBAAA,SAAA0O,GACA,IAAA8Z,EAAA1jC,KAAAmkB,MAAAyF,EAAA8Z,YACAv+B,EAAAykB,EAAAzkB,IACAw+B,IAAA3jC,KAAAmkB,MAAAyF,EAAA+Z,WAEA,IAAAD,EAAArjC,OAAA,MAAA,GAIA,IAFA,IAAA+uB,EAAA,GAEAtvB,EAAA,EAAAyN,EAAAm2B,EAAArjC,OAAAP,EAAAyN,EAAAzN,IAAA,CACA,IAAA8jC,EAAAjjC,IAAAoE,MAAA2+B,EAAA5jC,IAEA,IAAA,IAAA+jC,KAAA1+B,EACA,GAAAA,EAAArE,eAAA+iC,GAAA,CACA,IAAAviB,EAAA,IAAA3gB,IAAA2lB,UAAAsd,EAAA5jC,KAAAshB,QAEAqiB,GAAA,MAAAC,EAAAC,MACAD,EAAAC,GAAAljC,IAAAwjB,MAAAhf,EAAA0+B,GAAAviB,IAKA8N,EAAAtsB,KAAA8gC,GAGA,OAAAxU,GAWA,4BAAA,SAAAxF,GACA,IAAA8Z,EAAA1jC,KAAAmkB,MAAAyF,EAAA8Z,YACAI,EAAA9jC,KAAAmkB,MAAAyF,EAAAka,SACAC,IAAA/jC,KAAAmkB,MAAAyF,EAAAma,MAEA,IAAAL,EAAArjC,OAAA,MAAA,GAIA,IAFA,IAAA+uB,EAAA,GAEAtvB,EAAA,EAAAyN,EAAAm2B,EAAArjC,OAAAP,EAAAyN,EAAAzN,IAAA,CACA,IAAA8jC,EAAAF,EAAA5jC,GACAkkC,EAAA,GAEA,IAAA,IAAAH,KAAAD,EACAA,EAAA9iC,eAAA+iC,KACAC,EAAAvtB,SAAAstB,GACAE,IACAC,EAAAH,GAAAljC,IAAAoE,MAAA6+B,EAAAC,KAEAE,IACAC,EAAAH,GAAAljC,IAAAoE,MAAA6+B,EAAAC,MAKAzU,EAAAtsB,KAAAkhC,GAGA,OAAA5U,GAUA,4BAAA,SAAAxF,GACA,IAAA8Z,EAAA1jC,KAAAmkB,MAAAyF,EAAA8Z,YACAO,EAAAjkC,KAAAmkB,MAAAyF,EAAAqa,QAEA,IAAAP,EAAArjC,OAAA,MAAA,GAIA,IAFA,IAAA+uB,EAAA,GAEAtvB,EAAA,EAAAyN,EAAAm2B,EAAArjC,OAAAP,EAAAyN,EAAAzN,IAAA,CACA,IAAA8jC,EAAAF,EAAA5jC,GACAkkC,EAAA,GAEA,IAAA,IAAAH,KAAAD,EACAA,EAAA9iC,eAAA+iC,KACAG,EAAAC,EAAAJ,IAAAA,GAAAljC,IAAAoE,MAAA6+B,EAAAC,KAIAzU,EAAAtsB,KAAAkhC,GAGA,OAAA5U,GAUA,uBAAA,SAAAxF,GACA,IAAA8Z,EAAA1jC,KAAAmkB,MAAAyF,EAAA8Z,YACAI,EAAA9jC,KAAAmkB,MAAAyF,EAAAka,SAEA,IAAAJ,EAAArjC,OAAA,MAAA,GAKA,IAHA,IAAA+uB,EAAA,GACA8U,EAAA,GAEApkC,EAAA,EAAAyN,EAAAu2B,EAAAzjC,OAAAP,EAAAyN,EAAAzN,IACAokC,EAAAJ,EAAAhkC,IAAA,KAGA,IAAAA,EAAA,EAAAyN,EAAAm2B,EAAArjC,OAAAP,EAAAyN,EAAAzN,IAAA,CACA,IAAA8jC,EAAAjjC,IAAAoE,MAAA2+B,EAAA5jC,IAEA,IAAA,IAAA+jC,KAAAK,EACAA,EAAApjC,eAAA+iC,KACA,MAAAD,EAAAC,GACAD,EAAAC,GAAAK,EAAAL,GAEAK,EAAAL,GAAAD,EAAAC,IAKAzU,EAAAtsB,KAAA8gC,GAGA,OAAAxU,GAUA,sBAAA,SAAAxF,GACA,IAAA8Z,EAAA1jC,KAAAmkB,MAAAyF,EAAA8Z,YACAS,EAAAnkC,KAAAmkB,MAAAyF,EAAAua,MAEA,OAAAxjC,IAAAoE,MAAA2+B,GAAA1hB,OAAArhB,IAAAoE,MAAAo/B,KAYA,4BAAA,SAAAva,GAQA,IAPA,IAAA8Z,EAAA1jC,KAAAmkB,MAAAyF,EAAA8Z,YACAG,EAAA7jC,KAAAmkB,MAAAyF,EAAAia,QACAO,EAAApkC,KAAAmkB,MAAAyF,EAAAwa,SACAC,IAAArkC,KAAAmkB,MAAAyF,EAAAya,MAEAjV,EAAA,GAEAtvB,EAAA,EAAAyN,EAAAm2B,EAAArjC,OAAAP,EAAAyN,EAAAzN,IAAA,CACA,IAAA8jC,EAAAjjC,IAAAoE,MAAA2+B,EAAA5jC,IACA8jC,EAAAC,GAAAQ,EAAA92B,EAAA62B,EAAAtkC,EAAAskC,EAAAtkC,EACAsvB,EAAAtsB,KAAA8gC,GAGA,OAAAxU,GAYA,kBAAA,SAAAxF,GAQA,IAPA,IAAA0a,EAAAtkC,KAAAmkB,MAAAyF,EAAA0a,aACAC,EAAAvkC,KAAAmkB,MAAAyF,EAAA2a,aACAxkC,EAAAC,KAAAmkB,MAAAyF,EAAA7pB,SACAykC,IAAAxkC,KAAAmkB,MAAAyF,EAAA4a,UAEApV,EAAA,GAEAtvB,EAAA,EAAAyN,EAAA+2B,EAAAjkC,OAAAP,EAAAyN,EAAAzN,IAAA,CAGA,IAFA,IAAA8jC,EAAAjjC,IAAAoE,MAAAu/B,EAAAxkC,IAEAqd,EAAA,EAAAsnB,EAAAF,EAAAlkC,OAAA8c,EAAAsnB,EAAAtnB,IAAA,CACA,IAAAunB,EAAAH,EAAApnB,GACAwnB,GAAA,EAEA,IAAA,IAAA5iB,KAAAhiB,EACA,GAAAA,EAAAe,eAAAihB,GACA,GAAA6hB,EAAA7hB,IAAA2iB,EAAA3kC,EAAAgiB,KAEA,GADA4iB,GAAA,GACAH,EAAA,WACA,GAAAA,EAAA,CACAG,GAAA,EACA,MAKA,GAAAA,EAAA,CACA,IAAA,IAAAd,KAAAa,EACAA,EAAA5jC,eAAA+iC,KAGAD,EAAAC,GAAAljC,IAAAoE,MAAA2/B,EAAAb,KAGA,OAIAzU,EAAAtsB,KAAA8gC,GAGA,OAAAxU,GASA,wBAAA,SAAAxF,GAOA,IANA,IAAA8Z,EAAA1jC,KAAAmkB,MAAAyF,EAAA8Z,YAEAI,EAAA,GACA1U,EAAA,GAGAtvB,EAAA,EAAAyN,EAAAm2B,EAAArjC,OAAAP,EAAAyN,EAAAzN,IACA,IAAA,IAAA+jC,KAAAH,EAAA5jC,GACA4jC,EAAA5jC,GAAAgB,eAAA+iC,KACA,GAAAC,EAAAllB,QAAAilB,IACAC,EAAAhhC,KAAA+gC,GAMA,IAAA/jC,EAAA,EAAAyN,EAAAm2B,EAAArjC,OAAAP,EAAAyN,EAAAzN,IAAA,CAGA,IAFA,IAAA8jC,EAAA,GAEAzmB,EAAA,EAAAsnB,EAAAX,EAAAzjC,OAAA8c,EAAAsnB,EAAAtnB,IAAA,CACA0mB,EAAAC,EAAA3mB,GAAA,IACAjc,EAAAP,IAAAoE,MAAA2+B,EAAAG,IACAD,EAAAC,GAAA,MAAA3iC,EAAAA,EAAA,KAGAkuB,EAAAtsB,KAAA8gC,GAGA,OAAAxU,KCnRAzuB,IAAAua,QAAA,CAEA,cAAA,SAAA0O,GACAlF,QAAAyB,IAAAnmB,KAAAmkB,MAAAyF,EAAA0N,WAGA,eAAA,SAAA1N,GACAlF,QAAAyV,KAAAn6B,KAAAmkB,MAAAyF,EAAA0N,WAGA,eAAA,SAAA1N,GACAlF,QAAAkB,KAAA5lB,KAAAmkB,MAAAyF,EAAA0N,WAGA,gBAAA,SAAA1N,GACAlF,QAAAC,MAAA3kB,KAAAmkB,MAAAyF,EAAA0N,WAGA,gBAAA,SAAA1N,GACAlF,QAAAma,MAAA7+B,KAAAmkB,MAAAyF,EAAAgb,SAGA,eAAA,SAAAhb,GACAlF,QAAAmgB,KAAA7kC,KAAAmkB,MAAAyF,EAAAgb,SAGA,kBAAA,SAAAhb,GACAlF,QAAAogB,QAAA9kC,KAAAmkB,MAAAyF,EAAAgb,SAGA,gBAAA,SAAAhb,GACAlF,QAAA8G,SAGA,mBAAA,SAAA5B,GACAlF,QAAAqgB,YAGA,gBAAA,SAAAnb,GACAlF,QAAA3iB","file":"../dmxAppConnect.js","sourcesContent":["// https://caniuse.com/element-closest\r\nif (window.Element && !Element.prototype.closest) {\r\n Element.prototype.closest =\r\n function(s) {\r\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\r\n i,\r\n el = this;\r\n do {\r\n i = matches.length;\r\n while (--i >= 0 && matches.item(i) !== el) {};\r\n } while ((i < 0) && (el = el.parentElement));\r\n return el;\r\n };\r\n}\r\n\r\n// https://caniuse.com/mdn-api_nodelist_foreach\r\nif (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n}","(function() {\r\n\r\n window.dmx = window.dmx || {};\r\n\r\n // unsupported types: ImageBitmap\r\n\r\n var LARGE_ARRAY_SIZE = 200;\r\n\r\n var toString = Object.prototype.toString;\r\n var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\n var reFlags = /\\w*$/;\r\n var reTypedType = /^(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)Array$/;\r\n\r\n var eq = function(value, other) {\r\n return value === other || (value !== value && other !== other);\r\n }\r\n\r\n var assocIndexOf = function(array, key) {\r\n var length = array.length;\r\n while (length--) {\r\n if (eq(array[length][0], key)) {\r\n return length;\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n var isKeyable = function(value) {\r\n var type = typeof value;\r\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\r\n ? (value !== '__proto__')\r\n : (value === null);\r\n };\r\n\r\n var getMapData = function(data, key) {\r\n return isKeyable(key)\r\n ? data[typeof key == 'string' ? 'string' : 'hash']\r\n : data.map;\r\n };\r\n\r\n var Hash = function(entries) {\r\n var index = -1,\r\n length = entries == null ? 0 : entries.length;\r\n\r\n this.clear();\r\n while (++index < length) {\r\n var entry = entries[index];\r\n this.set(entry[0], entry[1]);\r\n }\r\n }\r\n\r\n Hash.prototype = {\r\n clear: function() {\r\n this.__data__ = Object.create(null);\r\n this.size = 0;\r\n },\r\n\r\n delete: function(key) {\r\n var result = this.has(key) && delete this.__data__[key];\r\n this.size -= result ? 1 : 0;\r\n return result;\r\n },\r\n\r\n get: function(key) {\r\n var result = this.__data__[key];\r\n return result === HASH_UNDEFINED ? undefined : result;\r\n },\r\n\r\n has: function(key) {\r\n return this.__data__[key] !== undefined;\r\n },\r\n\r\n set: function(key, value) {\r\n this.size += this.has(key) ? 0 : 1;\r\n this.__data__[key] = value === undefined ? HASH_UNDEFINED : value;\r\n return this;\r\n }\r\n }\r\n\r\n var ListCache = function(entries) {\r\n var index = -1;\r\n var length = entries == null ? 0 : entries.length;\r\n this.clear();\r\n while (++index < length) {\r\n var entry = entries[index];\r\n this.set(entry[0], entry[1]);\r\n }\r\n };\r\n\r\n ListCache.prototype = {\r\n clear: function() {\r\n this.__data__ = [];\r\n this.size = 0;\r\n },\r\n\r\n delete: function(key) {\r\n var data = this.__data__;\r\n var index = assocIndexOf(data, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n var lastIndex = data.length - 1;\r\n if (index == lastIndex) {\r\n data.pop();\r\n } else {\r\n data.splice(index, 1);\r\n }\r\n --this.size;\r\n return true;\r\n },\r\n\r\n get: function(key) {\r\n var data = this.__data__;\r\n var index = assocIndexOf(data, key);\r\n return index < 0 ? undefined : data[index][1];\r\n },\r\n\r\n has: function(key) {\r\n return assocIndexOf(this.__data__, key) > -1;\r\n },\r\n\r\n set: function(key, value) {\r\n var data = this.__data__;\r\n var index = assocIndexOf(data, key);\r\n if (index < 0) {\r\n ++this.size;\r\n data.push([key, value]);\r\n } else {\r\n data[index][1] = value;\r\n }\r\n return this;\r\n }\r\n };\r\n\r\n var MapCache = function(entries) {\r\n var index = -1;\r\n var length = entries == null ? 0 : entries.length;\r\n this.clear();\r\n while (++index < length) {\r\n var entry = entries[index];\r\n this.set(entry[0], entry[1]);\r\n }\r\n };\r\n\r\n MapCache.prototype = {\r\n clear: function() {\r\n this.size = 0;\r\n this.__data__ = {\r\n 'hash': new Hash(),\r\n 'map': new Map(),\r\n 'string': new Hash()\r\n };\r\n },\r\n\r\n delete: function(key) {\r\n var result = getMapData(this.__data__, key)['delete'](key);\r\n this.size -= result ? 1 : 0;\r\n return result;\r\n },\r\n\r\n get: function(key) {\r\n return getMapData(this.__data__, key).get(key);\r\n },\r\n\r\n has: function(key) {\r\n return getMapData(this.__data__, key).has(key);\r\n },\r\n\r\n set: function(key, value) {\r\n var data = getMapData(this.__data__, key);\r\n var size = data.size;\r\n data.set(key, value);\r\n this.size += data.size == size ? 0 : 1;\r\n return this;\r\n }\r\n };\r\n\r\n var Stack = function(entries) {\r\n var data = this.__data__ = new ListCache(entries);\r\n this.size = data.size;\r\n };\r\n\r\n Stack.prototype = {\r\n clear: function() {\r\n this.__data__ = new ListCache();\r\n this.size = 0;\r\n },\r\n\r\n delete: function(key) {\r\n var data = this.__data__;\r\n var result = data['delete'](key);\r\n this.size = data.size;\r\n return result;\r\n },\r\n\r\n get: function(key) {\r\n return this.__data__.get(key);\r\n },\r\n\r\n has: function(key) {\r\n return this.__data__.has(key);\r\n },\r\n\r\n set: function(key, value) {\r\n var data = this.__data__;\r\n if (data instanceof ListCache) {\r\n var pairs = data.__data__;\r\n if (pairs.length < LARGE_ARRAY_SIZE - 1) {\r\n pairs.push([key, value]);\r\n this.size = ++data.size;\r\n return this;\r\n }\r\n data = this.__data__ = new MapCache(pairs);\r\n }\r\n data.set(key, value);\r\n this.size = data.size;\r\n return this;\r\n }\r\n };\r\n\r\n var arrayEach = function(array, iteratee) {\r\n var index = -1;\r\n var length = array.length;\r\n while (++index < length) {\r\n if (iteratee(array[index], index, array) === false) {\r\n break;\r\n }\r\n }\r\n return array;\r\n };\r\n\r\n var getType = function(value) {\r\n return toString.call(value).slice(8, -1);\r\n };\r\n\r\n var isArray = function(value) {\r\n return Array.isArray(value);\r\n };\r\n\r\n var isObject = function(value) {\r\n return value != null && typeof value == 'object'\r\n };\r\n\r\n var isTypedArray = function(value) {\r\n return isObject(value) && reTypedType.test(getType(value));\r\n };\r\n\r\n var assignValue = function(object, key, value) {\r\n // Prototype polution protection\r\n if (key == '__proto__') return;\r\n\r\n var objValue = object[key];\r\n\r\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value))) {\r\n //if (value !== 0 || (1 / value) === (1 / objValue)) {\r\n object[key] = value;\r\n //}\r\n } else if (value === undefined && !(key in object)) {\r\n object[key] = value;\r\n }\r\n };\r\n\r\n var cloneArrayBuffer = function(arrayBuffer) {\r\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\r\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\r\n return result;\r\n };\r\n\r\n var cloneDataView = function(dataView) {\r\n var buffer = cloneArrayBuffer(dataView.buffer);\r\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\r\n };\r\n\r\n var cloneTypedArray = function(typedArray) {\r\n var buffer = cloneArrayBuffer(typedArray.buffer);\r\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\r\n };\r\n\r\n var cloneRegExp = function(regexp) {\r\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\r\n result.lastIndex = regexp.lastIndex;\r\n return result;\r\n };\r\n\r\n var cloneImageData = function(imageData) {\r\n var data = cloneTypedArray(imageData.data);\r\n return new imageData.constructor(data, imageData.width, imageData.height);\r\n }\r\n\r\n var initArray = function(array) {\r\n return new array.constructor(array.length);\r\n };\r\n\r\n var initType = function(object, type) {\r\n var Ctor = object.constructor;\r\n\r\n switch (type) {\r\n case 'ArrayBuffer':\r\n return cloneArrayBuffer();\r\n \r\n case 'Boolean':\r\n case 'Date':\r\n return new Ctor(+object);\r\n\r\n case 'DataView':\r\n return cloneDataView(object);\r\n\r\n case 'Float32Array':\r\n case 'Float64Array':\r\n case 'Int8Array':\r\n case 'Int16Array':\r\n case 'Int32Array':\r\n case 'Uint8Array':\r\n case 'Uint8ClampedArray':\r\n case 'Uint16Array':\r\n case 'Uint32Array':\r\n return cloneTypedArray(object);\r\n\r\n case 'Map':\r\n case 'Set':\r\n return new Ctor();\r\n\r\n case 'Number':\r\n case 'String':\r\n return new Ctor(object);\r\n\r\n case 'RegExp':\r\n return cloneRegExp(object);\r\n\r\n case 'ImageData':\r\n return cloneImageData(object);\r\n }\r\n };\r\n\r\n var clone = function(value, key, object, stack) {\r\n var result;\r\n\r\n if (!isObject(value)) {\r\n return value;\r\n }\r\n \r\n var type = getType(value);\r\n\r\n if (isArray(value)) {\r\n result = initArray(value);\r\n } else {\r\n if (type == 'Object') {\r\n result = {};\r\n } else {\r\n result = initType(value, type);\r\n }\r\n } \r\n \r\n stack = stack || new Stack();\r\n\r\n var stacked = stack.get(value);\r\n if (stacked) {\r\n return stacked;\r\n }\r\n stack.set(value, result);\r\n\r\n if (type == 'Map') {\r\n value.forEach(function(subValue, key) {\r\n result.set(key, clone(subValue, key, value, stack));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n if (type == 'Set') {\r\n value.forEach(function(subValue) {\r\n result.add(clone(subValue, subValue, value, stack));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n if (isTypedArray(value)) {\r\n return result;\r\n }\r\n\r\n var props = isArray(value) ? undefined : Object.keys(Object(value));\r\n arrayEach(props || value, function(subValue, key) {\r\n if (props) {\r\n key = subValue;\r\n subValue = value[key];\r\n }\r\n assignValue(result, key, clone(subValue, key, value, stack));\r\n });\r\n\r\n return result;\r\n };\r\n\r\n dmx.clone = clone;\r\n\r\n})();","(function() {\r\n\r\n window.dmx = window.dmx || {};\r\n\r\n // TODO: ImageData compare\r\n\r\n var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\n var reTypedType = /^(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)Array$/;\r\n\r\n var eq = function(value, other) {\r\n return value === other || (value !== value && other !== other);\r\n }\r\n\r\n var getType = function(value) {\r\n return toString.call(value).slice(8, -1);\r\n };\r\n\r\n var isObject = function(value) {\r\n return typeof value === 'object' && value !== null;\r\n };\r\n\r\n var isTypedArray = function(value) {\r\n return isObject(value) && reTypedType.test(getType(value));\r\n };\r\n\r\n var mapToArray = function(map) {\r\n var index = -1;\r\n var result = new Array(map.size);\r\n map.forEach(function(value, key) {\r\n result[++index] = [key, value];\r\n });\r\n return result;\r\n };\r\n\r\n var setToArray = function(set) {\r\n var index = -1;\r\n var result = new Array(set.size);\r\n set.forEach(function(value) {\r\n result[++index] = value;\r\n });\r\n return result;\r\n }\r\n\r\n var equalByType = function(object, other, type) {\r\n switch (type) {\r\n case 'DataView':\r\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\r\n return false;\r\n }\r\n object = object.buffer;\r\n other = other.buffer;\r\n\r\n case 'ArrayBuffer':\r\n if (object.byteLength != other.byteLength || !equal(new Uint8Array(object), new Uint8Array(other))) {\r\n return false;\r\n }\r\n return true;\r\n\r\n case 'Boolean':\r\n case 'Date':\r\n case 'Number':\r\n return eq(+object, +other);\r\n\r\n case 'RegExp':\r\n case 'String':\r\n return object == String(other);\r\n\r\n case 'Map':\r\n case 'Set':\r\n if (object.size != other.size) return false;\r\n return equalArrays(Array.from(object), Array.from(other));\r\n }\r\n };\r\n\r\n var equalArrays = function(array, other) {\r\n var arrLength = array.length;\r\n var othLength = other.length;\r\n\r\n if (arrLength != othLength) {\r\n return false;\r\n }\r\n\r\n var index = -1;\r\n\r\n while (++index < arrLength) {\r\n var arrValue = array[index];\r\n var othValue = other[index];\r\n\r\n if (!(arrValue === othValue || equal(arrValue, othValue))) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n var equalObjects = function(object, other) {\r\n var objProps = Object.keys(object);\r\n var objLength = objProps.length;\r\n var othProps = Object.keys(other);\r\n var othLength = othProps.length;\r\n\r\n if (objLength != othLength) {\r\n return false;\r\n }\r\n\r\n var key, index = objLength;\r\n \r\n while (index--) {\r\n key = objProps[index];\r\n if (!hasOwnProperty.call(other, key)) {\r\n return false;\r\n }\r\n }\r\n\r\n var result = true;\r\n\r\n while (++index < objLength) {\r\n key = objProps[index];\r\n var objValue = object[key];\r\n var othValue = other[key];\r\n\r\n if (!(objValue === othValue || equal(objValue, othValue))) {\r\n result = false;\r\n break;\r\n }\r\n }\r\n\r\n if (result) {\r\n var objCtor = object.constructor;\r\n var othCtor = other.constructor;\r\n\r\n if (objCtor != othCtor &&\r\n ('constructor' in object && 'constructor' in other) &&\r\n !(typeof objCtor === 'function' && objCtor instanceof objCtor &&\r\n typeof othCtor === 'function' && othCtor instanceof othCtor)) {\r\n result = false;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n var equalDeep = function(object, other) {\r\n var objIsArr = Array.isArray(object);\r\n var othIsArr = Array.isArray(other);\r\n var objType = objIsArr ? 'Array' : getType(object);\r\n var othType = othIsArr ? 'Array' : getType(other);\r\n var objIsObj = objType == 'Object';\r\n var othIsObj = othType == 'Object';\r\n var isSameType = objType == othType;\r\n\r\n if (isSameType && !objIsObj) {\r\n return (objIsArr || isTypedArray(object))\r\n ? equalArrays(object, other)\r\n : equalByType(object, other, objType);\r\n }\r\n\r\n if (!isSameType) {\r\n return false;\r\n }\r\n\r\n return equalObjects(object, other);\r\n };\r\n\r\n var equal = function(value, other) {\r\n if (value === other) {\r\n return true;\r\n }\r\n if (value == null || other == null || (!isObject(value) && !isObject(other))) {\r\n return value !== value && other !== other;\r\n }\r\n return equalDeep(value, other);\r\n };\r\n\r\n dmx.equal = equal;\r\n\r\n})();","window.dmx = window.dmx || Object.create(null);\r\n\r\ndmx.__components = Object.create(null);\r\ndmx.__attributes = {\r\n before: Object.create(null),\r\n mount: Object.create(null),\r\n mounted: Object.create(null)\r\n};\r\ndmx.__formatters = {\r\n boolean: Object.create(null),\r\n global: Object.create(null),\r\n string: Object.create(null),\r\n number: Object.create(null),\r\n object: Object.create(null),\r\n array: Object.create(null),\r\n any: Object.create(null)\r\n};\r\ndmx.__adapters = Object.create(null);\r\ndmx.__actions = Object.create(null);\r\ndmx.__startup = new Set();\r\n\r\n// default options\r\ndmx.config = {\r\n mapping: {\r\n 'form': 'form',\r\n 'button, input[type=button], input[type=submit], input[type=reset]': 'button',\r\n 'input[type=radio]': 'radio',\r\n 'input[type=checkbox]': 'checkbox',\r\n 'input[type=file][multiple]': 'input-file-multiple',\r\n 'input[type=file]': 'input-file',\r\n //'input[type=number]': 'input-number',\r\n 'input': 'input',\r\n 'textarea': 'textarea',\r\n 'select[multiple]': 'select-multiple',\r\n 'select': 'select',\r\n '.checkbox-group': 'checkbox-group',\r\n '.radio-group': 'radio-group'\r\n }\r\n};\r\n\r\ndmx.reIgnoreElement = /^(script|style)$/i;\r\ndmx.rePrefixed = /^dmx-/i;\r\ndmx.reExpression = /\\{\\{(.+?)\\}\\}/;\r\ndmx.reExpressionReplace = /\\{\\{(.+?)\\}\\}/g;\r\ndmx.reToggleAttribute = /^(checked|selected|disabled|required|hidden|async|autofocus|autoplay|default|defer|multiple|muted|novalidate|open|readonly|reversed|scoped)$/i;\r\ndmx.reDashAlpha = /-([a-z])/g;\r\ndmx.reUppercase = /[A-Z]/g;\r\n\r\n// Trigger event on pushState and replaceState\r\n// https://stackoverflow.com/questions/5129386/how-to-detect-when-history-pushstate-and-history-replacestate-are-used/25673911#25673911\r\n(function() {\r\n const _wr = function(type) {\r\n const orig = history[type];\r\n\r\n return function() {\r\n const rv = orig.apply(this, arguments);\r\n const e = new Event(type.toLowerCase());\r\n e.arguments = arguments;\r\n window.dispatchEvent(e);\r\n return rv;\r\n };\r\n };\r\n\r\n history.pushState = _wr('pushState');\r\n history.replaceState = _wr('replaceState');\r\n})();\r\n\r\ndmx.appConnect = function(node, cb) {\r\n if (dmx.app) {\r\n return alert('App already running!');\r\n }\r\n\r\n if (!node) {\r\n if (cb) cb();\r\n return;\r\n }\r\n\r\n history.replaceState({ title: document.title }, '');\r\n\r\n window.onpopstate = function(e) {\r\n setTimeout(() => {\r\n if (e.state && e.state.title) {\r\n document.title = e.state.title;\r\n }\r\n dmx.requestUpdate();\r\n }, 0);\r\n };\r\n\r\n window.onhashchange = function() {\r\n dmx.requestUpdate();\r\n };\r\n\r\n var App = dmx.Component('app');\r\n\r\n dmx.app = new App(node, dmx.global);\r\n dmx.app.$update();\r\n if (cb) cb();\r\n};\r\n\r\ndocument.documentElement.style.visibility = 'hidden';\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n Promise.all(dmx.__startup).then(() => {\r\n var appNode = document.querySelector(':root[dmx-app], [dmx-app], :root[is=\"dmx-app\"], [is=\"dmx-app\"]');\r\n\r\n dmx.appConnect(appNode, function() {\r\n document.documentElement.style.visibility = '';\r\n appNode && appNode.removeAttribute('dmx-app');\r\n });\r\n });\r\n});\r\n\r\ndmx.useHistory = window.history && window.history.pushState;\r\n\r\ndmx.extend = function () {\r\n // Variables\r\n var extended = {};\r\n var deep = false;\r\n var i = 0;\r\n var length = arguments.length;\r\n\r\n // Check if a deep merge\r\n if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {\r\n deep = arguments[0];\r\n i++;\r\n }\r\n\r\n // Merge the object into the extended object\r\n var merge = function (obj) {\r\n for ( var prop in obj ) {\r\n // Prototype polution protection\r\n if (prop == '__proto__') continue;\r\n\r\n if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {\r\n // If deep merge and property is an object, merge properties\r\n if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {\r\n extended[prop] = dmx.extend( true, extended[prop], obj[prop] );\r\n } else {\r\n if (obj[prop] != null) {\r\n extended[prop] = obj[prop];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Loop through each object and conduct a merge\r\n for ( ; i < length; i++ ) {\r\n var obj = arguments[i];\r\n merge(obj);\r\n }\r\n\r\n return extended;\r\n};\r\n\r\ndmx.noop = function() {};\r\n\r\ndmx.isset = function(val) {\r\n return v !== undefined;\r\n};\r\n\r\ndmx.parseDate = function(obj) {\r\n if (typeof obj == 'string') {\r\n var d, struct, offset = 0, n = [1,4,5,6,7,10,11];\r\n\r\n if (obj.toLowerCase() == 'now') {\r\n return new Date();\r\n }\r\n\r\n if ((struct = /^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:[T ](\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/.exec(obj))) {\r\n for (var i = 0, k; (k = n[i]); ++i) {\r\n struct[k] = +struct[k] || 0;\r\n }\r\n\r\n struct[2] = (+struct[2] || 1) - 1;\r\n struct[3] = +struct[3] || 1;\r\n\r\n if (struct[8] === undefined) {\r\n return new Date(struct[1], struct[2], struct[3], struct[4], struct[5], struct[6], struct[7]);\r\n } else {\r\n if (struct[8] !== 'Z' && struct[9] !== undefined) {\r\n offset = struct[10] * 60 + struct[11];\r\n if (struct[9] === '+') offset = 0 - offset;\r\n }\r\n\r\n return new Date(Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + offset, struct[6], struct[7]));\r\n }\r\n } else if ((struct = /^(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?$/.exec(obj))) {\r\n var d = new Date();\r\n if (struct[5] === 'Z') {\r\n d.setUTCHours(+struct[1] || 0);\r\n d.setUTCMinutes(+struct[2] || 0);\r\n d.setUTCSeconds(+struct[3] || 0);\r\n d.setUTCMilliseconds(+struct[4] || 0);\r\n } else {\r\n d.setHours(+struct[1] || 0);\r\n d.setMinutes(+struct[2] || 0);\r\n d.setSeconds(+struct[3] || 0);\r\n d.setMilliseconds(+struct[4] || 0);\r\n }\r\n return d;\r\n }\r\n\r\n return new Date(obj);\r\n } else if (typeof obj == 'number') {\r\n return new Date(obj * 1000);\r\n } else {\r\n return new Date('');\r\n }\r\n};\r\n\r\ndmx.array = function(arr) {\r\n if (arr == null) return [];\r\n return Array.prototype.slice.call(arr);\r\n};\r\n\r\ndmx.hashCode = function(o) {\r\n if (o == null) return 0;\r\n var str = JSON.stringify(o);\r\n var i, hash = 0;\r\n for (i = 0; i < str.length; i++) {\r\n hash = ((hash << 5) - hash) + str.charCodeAt(i);\r\n hash = hash & hash;\r\n }\r\n return Math.abs(hash);\r\n};\r\n\r\ndmx.randomizer = function(seed) {\r\n seed = +seed || 0;\r\n return function() {\r\n seed = (seed * 9301 + 49297) % 233280;\r\n return seed / 233280;\r\n };\r\n};\r\n\r\ndmx.repeatItems = function(repeat) {\r\n const items = [];\r\n\r\n if (repeat) {\r\n if (typeof repeat == 'object') {\r\n if (Array.isArray(repeat)) {\r\n for (let i = 0, l = repeat.length; i < l; i++) {\r\n const item = dmx.clone(repeat[i]);\r\n items.push(Object.assign({}, item, {\r\n $key: i,\r\n $index: i,\r\n $value: item\r\n }));\r\n }\r\n } else {\r\n let i = 0;\r\n for (const key in repeat) {\r\n if (repeat.hasOwnProperty(key)) {\r\n const item = dmx.clone(repeat[key]);\r\n items.push(Object.assign({}, item, {\r\n $key: key,\r\n $index: i,\r\n $value: item\r\n }));\r\n i++;\r\n }\r\n }\r\n }\r\n } else if (typeof repeat == 'number') {\r\n for (let n = 0; n < repeat; n++) {\r\n items.push({\r\n $key: String(n),\r\n $index: n,\r\n $value: n + 1\r\n });\r\n }\r\n }\r\n }\r\n\r\n return items;\r\n};\r\n\r\ndmx.escapeRegExp = function(val) {\r\n // https://github.com/benjamingr/RegExp.escape\r\n return val.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n};\r\n\r\ndmx.validate = function(node) {\r\n if (node.tagName == 'FORM') {\r\n Array.from(node.elements).forEach(node => node.dirty = true);\r\n }\r\n\r\n return node.checkValidity();\r\n};\r\n\r\ndmx.validateReset = function(node) {\r\n // reset validation?\r\n};\r\n\r\n(() => {\r\n const queue = [];\r\n\r\n window.addEventListener('message', event => {\r\n if (event.source === window && event.data === 'dmxNextTick' && queue.length) {\r\n const task = queue.shift();\r\n task.fn.call(task.context);\r\n }\r\n });\r\n\r\n dmx.nextTick = (fn, context) => {\r\n queue.push({ fn, context });\r\n window.postMessage('dmxNextTick', '*');\r\n }\r\n})();\r\n\r\n/*\r\n// promises are to fast, need more time before executing\r\ndmx.nextTick = function(fn, context) {\r\n return Promise.resolve().then(fn.bind(context));\r\n}\r\n*/\r\n\r\ndmx.requestUpdate = function() {\r\n var updateRequested = false;\r\n var props = new Set();\r\n\r\n return function(prop) {\r\n props.add(prop || '*');\r\n\r\n if (!updateRequested) {\r\n updateRequested = true;\r\n\r\n dmx.nextTick(function() {\r\n updateRequested = false;\r\n if (dmx.app) {\r\n // clone props\r\n var idents = new Set(props);\r\n // we need to clear props before updated because new requestUpdate can be called inside the $update\r\n props.clear();\r\n // run update\r\n dmx.app.$update(idents);\r\n }\r\n });\r\n }\r\n };\r\n}();\r\n\r\ndmx.debounce = function(fn, delay) {\r\n let timeout;\r\n\r\n return function() {\r\n const cb = () => {\r\n fn.apply(this, arguments);\r\n };\r\n\r\n if (delay) {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(cb, delay);\r\n } else {\r\n cancelAnimationFrame(timeout);\r\n timeout = requestAnimationFrame(cb);\r\n }\r\n };\r\n};\r\n\r\ndmx.throttle = function(fn, delay) {\r\n let throttle = false;\r\n let args;\r\n\r\n return function() {\r\n args = Array.from(arguments);\r\n\r\n if (!throttle) {\r\n const cb = () => {\r\n throttle = false;\r\n if (args) fn.apply(this, args);\r\n };\r\n\r\n fn.apply(this, args);\r\n\r\n args = undefined;\r\n throttle = true;\r\n\r\n if (delay) {\r\n setTimeout(cb, delay);\r\n } else {\r\n requestAnimationFrame(cb);\r\n }\r\n }\r\n }\r\n};\r\n\r\ndmx.keyCodes = {\r\n 'bs': 8,\r\n 'tab': 9,\r\n 'enter': 13,\r\n 'esc': 27,\r\n 'space': 32,\r\n 'left': 37,\r\n 'up': 38,\r\n 'right': 39,\r\n 'down': 40,\r\n 'delete': 46,\r\n\r\n 'backspace': 8,\r\n 'pause': 19,\r\n 'capslock': 20,\r\n 'escape': 27,\r\n 'pageup': 33,\r\n 'pagedown': 34,\r\n 'end': 35,\r\n 'home': 36,\r\n 'arrowleft': 37,\r\n 'arrowup': 38,\r\n 'arrowright': 39,\r\n 'arrowdown': 40,\r\n 'insert': 45,\r\n 'numlock': 144,\r\n 'scrolllock': 145,\r\n 'semicolon': 186,\r\n 'equal': 187,\r\n 'comma': 188,\r\n 'minus': 189,\r\n 'period': 190,\r\n 'slash': 191,\r\n 'backquote': 192,\r\n 'bracketleft': 219,\r\n 'backslash': 220,\r\n 'bracketright': 221,\r\n 'quote': 222,\r\n\r\n 'numpad0': 96,\r\n 'numpad1': 97,\r\n 'numpad2': 98,\r\n 'numpad3': 99,\r\n 'numpad4': 100,\r\n 'numpad5': 101,\r\n 'numpad6': 102,\r\n 'numpad7': 103,\r\n 'numpad8': 104,\r\n 'numpad9': 105,\r\n 'numpadmultiply': 106,\r\n 'numpadadd': 107,\r\n 'numpadsubstract': 109,\r\n 'numpaddivide': 111,\r\n\r\n 'f1': 112,\r\n 'f2': 113,\r\n 'f3': 114,\r\n 'f4': 115,\r\n 'f5': 116,\r\n 'f6': 117,\r\n 'f7': 118,\r\n 'f8': 119,\r\n 'f9': 120,\r\n 'f10': 121,\r\n 'f11': 122,\r\n 'f12': 123,\r\n\r\n 'digit0': 48,\r\n 'digit1': 49,\r\n 'digit2': 50,\r\n 'digit3': 51,\r\n 'digit4': 52,\r\n 'digit5': 53,\r\n 'digit6': 54,\r\n 'digit7': 55,\r\n 'digit8': 56,\r\n 'digit9': 57,\r\n\r\n 'keya': [65, 97],\r\n 'keyb': [66, 98],\r\n 'keyc': [67, 99],\r\n 'keyd': [68, 100],\r\n 'keye': [69, 101],\r\n 'keyf': [70, 102],\r\n 'keyg': [71, 103],\r\n 'keyh': [72, 104],\r\n 'keyi': [73, 105],\r\n 'keyj': [74, 106],\r\n 'keyk': [75, 107],\r\n 'keyl': [76, 108],\r\n 'keym': [77, 109],\r\n 'keyn': [78, 110],\r\n 'keyo': [79, 111],\r\n 'keyp': [80, 112],\r\n 'keyq': [81, 113],\r\n 'keyr': [82, 114],\r\n 'keys': [83, 115],\r\n 'keyt': [84, 116],\r\n 'keyu': [85, 117],\r\n 'keyv': [86, 118],\r\n 'keyw': [87, 119],\r\n 'keyx': [88, 120],\r\n 'keyy': [89, 121],\r\n 'keyz': [90, 122]\r\n};\r\n\r\ndmx.eventListener = function(target, eventType, handler, modifiers) {\r\n let timeout, throttle;\r\n \r\n const listener = function(event) {\r\n if (modifiers.self && event.target !== event.currentTarget) return;\r\n if (modifiers.ctrl && !event.ctrlKey) return;\r\n if (modifiers.alt && !event.altKey) return;\r\n if (modifiers.shift && !event.shiftKey) return;\r\n if (modifiers.meta && !event.metaKey) return;\r\n\r\n if ((event.originalEvent || event).nsp && !Object.keys(modifiers).includes((event.originalEvent || event).nsp)) {\r\n return;\r\n }\r\n\r\n if ((event.originalEvent || event) instanceof MouseEvent) {\r\n if (modifiers.button != null && event.button != (parseInt(modifiers.button, 10) || 0)) return;\r\n if (modifiers.button0 && event.button != 0) return;\r\n if (modifiers.button1 && event.button != 1) return;\r\n if (modifiers.button2 && event.button != 2) return;\r\n if (modifiers.button3 && event.button != 3) return;\r\n if (modifiers.button4 && event.button != 4) return;\r\n }\r\n\r\n if ((event.originalEvent || event) instanceof KeyboardEvent) {\r\n var keys = [];\r\n\r\n Object.keys(modifiers).forEach(function(key) {\r\n var keyVal = parseInt(key, 10);\r\n\r\n if (keyVal) {\r\n keys.push(keyVal);\r\n } else if (dmx.keyCodes[key]) {\r\n keys.push(dmx.keyCodes[key]);\r\n }\r\n });\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n if (Array.isArray(keys[i])) {\r\n if (!keys[i].includes(event.which)) return;\r\n } else if (event.which !== keys[i]) return;\r\n }\r\n }\r\n\r\n if (modifiers.stop) event.stopPropagation();\r\n if (modifiers.prevent) event.preventDefault();\r\n \r\n if (event.originalEvent) event = event.originalEvent;\r\n\r\n if (!event.$data) event.$data = {};\r\n\r\n if (event instanceof MouseEvent) {\r\n event.$data.altKey = event.altKey;\r\n event.$data.ctrlKey = event.ctrlKey;\r\n event.$data.metaKey = event.metaKey;\r\n event.$data.shiftKey = event.shiftKey;\r\n event.$data.pageX = event.pageX;\r\n event.$data.pageY = event.pageY;\r\n event.$data.x = event.x || event.clientX;\r\n event.$data.y = event.y || event.clientY;\r\n event.$data.button = event.button;\r\n }\r\n\r\n if (event instanceof WheelEvent) {\r\n event.$data.deltaX = event.deltaX;\r\n event.$data.deltaY = event.deltaY;\r\n event.$data.deltaZ = event.deltaZ;\r\n event.$data.deltaMode = event.deltaMode;\r\n }\r\n\r\n if (window.PointerEvent && event instanceof PointerEvent) {\r\n event.$data.pointerId = event.pointerId;\r\n event.$data.width = event.width;\r\n event.$data.height = event.height;\r\n event.$data.pressure = event.pressure;\r\n event.$data.tangentialPressure = event.tangentialPressure;\r\n event.$data.tiltX = event.tiltX;\r\n event.$data.tiltY = event.tiltY;\r\n event.$data.twist = event.twist;\r\n event.$data.pointerType = event.pointerType;\r\n event.$data.isPrimary = event.isPrimary;\r\n }\r\n\r\n if (window.TouchEvent && event instanceof TouchEvent) {\r\n const touchMap = touch => ({\r\n identifier: touch.identifier,\r\n screenX: touch.screenX,\r\n screenY: touch.screenY,\r\n clientX: touch.clientX,\r\n clientY: touch.clientY,\r\n pageX: touch.pageX,\r\n pageY: touch.pageY\r\n });\r\n\r\n event.$data.altKey = event.altKey;\r\n event.$data.ctrlKey = event.ctrlKey;\r\n event.$data.metaKey = event.metaKey;\r\n event.$data.shiftKey = event.shiftKey;\r\n event.$data.touches = Array.from(event.touches).map(touchMap);\r\n event.$data.changedTouches = Array.from(event.changedTouches).map(touchMap);\r\n event.$data.targetTouches = Array.from(event.targetTouches).map(touchMap);\r\n event.$data.rotation = event.rotation;\r\n event.$data.scale = event.scale;\r\n }\r\n\r\n if (event instanceof KeyboardEvent) {\r\n event.$data.altKey = event.altKey;\r\n event.$data.ctrlKey = event.ctrlKey;\r\n event.$data.metaKey = event.metaKey;\r\n event.$data.shiftKey = event.shiftKey;\r\n event.$data.location = event.location;\r\n event.$data.repeat = event.repeat;\r\n event.$data.code = event.code;\r\n event.$data.key = event.key;\r\n }\r\n\r\n if (modifiers.debounce) {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n handler.apply(this, arguments);\r\n }, parseInt(modifiers.debounce, 10) || 0);\r\n } else if (modifiers.throttle) {\r\n if (!throttle) {\r\n throttle = true;\r\n handler.apply(this, arguments);\r\n setTimeout(() => {\r\n throttle = false\r\n }, parseInt(modifiers.throttle, 10) || 0);\r\n }\r\n } else {\r\n return handler.apply(this, arguments);\r\n }\r\n };\r\n\r\n modifiers = modifiers || {};\r\n\r\n if (window.Dom7 && target.nodeType === 1) {\r\n Dom7(target)[modifiers.once ? 'once' : 'on'](eventType.replace(/-/g, '.'), listener, !!modifiers.capture);\r\n } else if (window.jQuery && !modifiers.capture) {\r\n jQuery(target)[modifiers.once ? 'one' : 'on'](eventType.replace(/-/g, '.'), listener);\r\n } else {\r\n target.addEventListener(eventType.replace(/-/g, '.'), listener, {\r\n capture: !!modifiers.capture,\r\n once: !!modifiers.once,\r\n passive: !!modifiers.passive\r\n });\r\n }\r\n};\r\n\r\ndmx.createClass = function(proto, parentClass) {\r\n var Cls = function() {\r\n if (proto.constructor) {\r\n proto.constructor.apply(this, arguments);\r\n }\r\n };\r\n\r\n if (parentClass && parentClass.prototype) {\r\n Cls.prototype = Object.create(parentClass.prototype);\r\n }\r\n\r\n Object.assign(Cls.prototype, proto);\r\n\r\n Cls.prototype.constructor = Cls;\r\n\r\n return Cls;\r\n};\r\n\r\ndmx.Config = function(config) {\r\n Object.assign(dmx.config, config);\r\n};\r\n\r\ndmx.Component = function(tag, proto) {\r\n if (proto) {\r\n var parentClass = dmx.Component(proto.extends) || dmx.BaseComponent;\r\n\r\n proto.initialData = Object.assign({}, parentClass.prototype.initialData, proto.initialData);\r\n proto.attributes = Object.assign({}, parentClass.prototype.attributes, proto.attributes);\r\n proto.methods = Object.assign({}, parentClass.prototype.methods, proto.methods);\r\n proto.events = Object.assign({}, parentClass.prototype.events, proto.events);\r\n\r\n if (!proto.hasOwnProperty('constructor')) {\r\n proto.constructor = function(node, parent) {\r\n parentClass.call(this, node, parent);\r\n };\r\n }\r\n\r\n proto.type = tag;\r\n\r\n var Component = dmx.createClass(proto, parentClass);\r\n Component.extends = proto.extends;\r\n\r\n dmx.__components[tag] = Component;\r\n }\r\n\r\n return dmx.__components[tag];\r\n};\r\n\r\ndmx.Attribute = function(name, hook, fn) {\r\n if (!dmx.__attributes[hook]) {\r\n dmx.__attributes[hook] = {};\r\n }\r\n dmx.__attributes[hook][name] = fn;\r\n};\r\n\r\ndmx.Formatters = function(type, o) {\r\n if (!dmx.__formatters[type]) {\r\n dmx.__formatters[type] = {};\r\n }\r\n for (var name in o) {\r\n if (o.hasOwnProperty(name)) {\r\n dmx.__formatters[type][name] = o[name];\r\n }\r\n }\r\n};\r\n\r\ndmx.Formatter = function(type, name, fn) {\r\n if (!dmx.__formatters[type]) {\r\n dmx.__formatters[type] = {};\r\n }\r\n dmx.__formatters[type][name] = fn;\r\n};\r\n\r\ndmx.Adapter = function(type, name, fn) {\r\n if (!dmx.__adapters[type]) {\r\n dmx.__adapters[type] = {};\r\n }\r\n\r\n if (fn) {\r\n dmx.__adapters[type][name] = fn;\r\n }\r\n\r\n return dmx.__adapters[type][name];\r\n};\r\n\r\ndmx.Actions = function(actions) {\r\n for (var name in actions) {\r\n if (actions.hasOwnProperty(name)) {\r\n dmx.__actions[name] = actions[name];\r\n }\r\n }\r\n}\r\n\r\ndmx.Action = function(name, action) {\r\n dmx.__actions[name] = action;\r\n};\r\n\r\ndmx.Startup = function(promise) {\r\n dmx.__startup.add(promise);\r\n}\r\n","// cordova init\r\n\r\nif (document.location.protocol == 'app:') { // cordova detection by checking protocol\r\n dmx.Startup(new Promise(resolve => document.addEventListener('deviceready', resolve)));\r\n}","(function() {\r\n\r\n var $ = function(selector) {\r\n if (!(this instanceof $)) {\r\n return new $(selector);\r\n }\r\n if (selector instanceof $) {\r\n return selector;\r\n }\r\n if (!selector) return this;\r\n var len = selector.length;\r\n if (selector.nodeType) {\r\n this[0] = selector;\r\n this.length = 1;\r\n } else if (typeof selector == 'string') {\r\n return $(document.querySelectorAll(selector));\r\n } else if (len) {\r\n for (var i = 0; i < len; i++) {\r\n if (selector[i] && selector[i].nodeType) {\r\n this[this.length] = selector[i];\r\n this.length++;\r\n }\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n $.prototype = {\r\n constructor: $,\r\n length: 0,\r\n\r\n addClass: function(className) {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].classList.add(className);\r\n }\r\n return this;\r\n },\r\n\r\n removeClass: function(className) {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].classList.remove(className);\r\n }\r\n return this;\r\n },\r\n\r\n toggleClass: function(className) {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].classList.toggle(className);\r\n }\r\n return this;\r\n },\r\n\r\n hasClass: function(className) {\r\n if (!this[0]) return false;\r\n return this[0].classList.contains(className);\r\n },\r\n\r\n attr: function(attrs, value) {\r\n if (arguments.length === 1 && typeof attrs === 'string') {\r\n return this[0] && this[0].getAttribute(attrs);\r\n } else {\r\n for (var i = 0; i < this.length; i++) {\r\n if (arguments.length === 2) {\r\n this[i].setAttribute(attrs, value);\r\n } else {\r\n for (var attr in attrs) {\r\n if (attrs.hasOwnProperty(attr)) {\r\n this[i].setAttribute(attr, attrs[attr]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n removeAttr: function(attr) {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].removeAttribute(attr);\r\n }\r\n return this;\r\n },\r\n\r\n prop: function(props, value) {\r\n if (arguments.length === 1 && typeof props === 'string') {\r\n return this[0] && this[0][props];\r\n } else {\r\n for (var i = 0; i < this.length; i++) {\r\n if (arguments.length === 2) {\r\n this[i][props] = value;\r\n } else {\r\n for (var prop in props) {\r\n if (props.hasOwnProperty(prop)) {\r\n this[i][prop] = props[prop];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n css: function(props, value) {\r\n if (arguments.length === 1 && typeof props === 'string') {\r\n return this[0] && window.getComputedStyle(this[0], null).getPropertyValue(props);\r\n } else {\r\n for (var i = 0; i < this.length; i++) {\r\n if (arguments.length === 2) {\r\n this[i].style.setProperty(props, value);\r\n } else {\r\n for (var prop in props) {\r\n if (props.hasOwnProperty(prop)) {\r\n this[i].style.setProperty(prop, props[prop]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n each: function(callback, context) {\r\n if (!callback) return this;\r\n for (var i = 0; i < this.length; i++) {\r\n if (callback.call(context || this[i], i, this[i]) === false) {\r\n return this;\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n append: function() {\r\n for (var i = 0; i < arguments.length; i++) {\r\n var children = $(arguments[i]);\r\n\r\n for (var j = 0; j < children.length; j++) {\r\n this[0].appendChild(children[j]);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n appendTo: function(parent) {\r\n $(parent).append(this);\r\n return this;\r\n },\r\n\r\n detach: function() {\r\n for (var i = 0; i < this.length; i++) {\r\n if (this[i].parentNode) {\r\n this[i].parentNode.removeChild(this[i]);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n empty: function() {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].innerHTML = '';\r\n }\r\n return this;\r\n }\r\n };\r\n\r\n dmx.dom = {\r\n\r\n get: function(id) {\r\n return $(document.getElementById(id));\r\n },\r\n\r\n select: function(query) {\r\n return $(query);\r\n },\r\n\r\n create: function(tagName) {\r\n var elem = document.createElement(tagName);\r\n return $(elem);\r\n },\r\n\r\n contains: function(node) {\r\n return document.documentElement.contains(node);\r\n },\r\n\r\n walk: function(node, fn, context) {\r\n if (node) {\r\n if (fn.call(context, node) === false) {\r\n // stop going deeper when callback returns false\r\n return;\r\n } else if (node.hasChildNodes()) {\r\n Array.prototype.slice.call(node.childNodes, 0).forEach(function(node) {\r\n dmx.dom.walk(node, fn, context);\r\n });\r\n }\r\n }\r\n },\r\n\r\n getAttributes: function(node) {\r\n var attributes = [];\r\n\r\n if (node.nodeType == 1) {\r\n for (var i = 0; i < node.attributes.length; i++) {\r\n var attribute = node.attributes[i];\r\n\r\n if (attribute && attribute.specified && dmx.rePrefixed.test(attribute.name)) {\r\n var name = attribute.name.substr(4);\r\n var argument = null;\r\n var modifiers = {};\r\n\r\n name.split('.').forEach(function(part, i) {\r\n if (i === 0) {\r\n name = part;\r\n } else {\r\n var pos = part.indexOf(':');\r\n if (pos > 0) {\r\n modifiers[part.substr(0, pos)] = part.substr(pos + 1);\r\n } else {\r\n modifiers[part] = true;\r\n }\r\n }\r\n });\r\n\r\n var pos = name.indexOf(':');\r\n if (pos > 0) {\r\n argument = name.substr(pos + 1);\r\n name = name.substr(0, pos);\r\n }\r\n\r\n attributes.push({\r\n name: name,\r\n fullName: attribute.name,\r\n value: attribute.value,\r\n argument: argument,\r\n modifiers: modifiers\r\n });\r\n }\r\n }\r\n }\r\n\r\n return attributes;\r\n },\r\n\r\n remove: function(node) {\r\n if (Array.isArray(node)) {\r\n node.forEach(function(node) {\r\n dmx.dom.remove(node);\r\n });\r\n } else {\r\n node.remove()\r\n }\r\n },\r\n\r\n replace: function(oldNode, newNode) {\r\n if (oldNode.parentNode) {\r\n oldNode.parentNode.replaceChild(newNode, oldNode);\r\n }\r\n }\r\n\r\n };\r\n\r\n})();\r\n","(function() {\r\n\r\n var cache = {};\r\n\r\n\t// support all types that is supported with structured clone\r\n\tvar SUPPORTED_TYPES = {\r\n\t\t'Boolean': 'boolean',\r\n\t\t'Null': 'null',\r\n\t\t'Undefinec': 'undefined',\r\n\t\t'Number': 'number',\r\n\t\t'BigInt': 'number',\r\n\t\t'String': 'string',\r\n\t\t'Date': 'date',\r\n\t\t'RegExp': 'regexp',\r\n\t\t'Blob': 'blob',\r\n\t\t'File': 'file',\r\n\t\t'FileList': 'filelist',\r\n\t\t'ArrayBuffer': 'arraybuffer',\r\n\t\t'ImageBitmap': 'imagebitmap',\r\n\t\t'ImageData': 'imagedata',\r\n\t\t'Array': 'array',\r\n\t\t'Object': 'object',\r\n\t\t'Map': 'map',\r\n\t\t'Set': 'set',\r\n\t\t'DataView': 'array',\r\n\t\t'Int8Array': 'array',\r\n\t\t'Uint8Array': 'array',\r\n\t\t'Uint8ClampedArray': 'array',\r\n\t\t'Int16Array': 'array',\r\n\t\t'Uint16Array': 'array',\r\n\t\t'Int32Array': 'array',\r\n\t\t'Uint32Array': 'array',\r\n\t\t'Float32Array': 'array',\r\n\t\t'Float64Array': 'array',\r\n\t\t'BigInt64Array': 'array',\r\n\t\t'BigUint64Array': 'array'\r\n\t};\r\n\r\n var OPERATORS = {\r\n '{': 'L_CURLY',\r\n '}': 'R_CURLY',\r\n '(': 'L_PAREN',\r\n ')': 'R_PAREN',\r\n '[': 'L_BRACKET',\r\n ']': 'R_BRACKET',\r\n '.': 'PERIOD',\r\n ',': 'COMMA',\r\n ';': 'SEMI', // Multiple statements are not supported\r\n ':': 'COLON',\r\n '?': 'QUESTION',\r\n // Arithmetic operators\r\n '+': 'ADDICTIVE',\r\n '-': 'ADDICTIVE',\r\n '*': 'MULTIPLICATIVE',\r\n '/': 'MULTIPLICATIVE',\r\n '%': 'MULTIPLICATIVE',\r\n // Comparison operators\r\n '===': 'EQUALITY',\r\n '!==': 'EQUALITY',\r\n '==': 'EQUALITY',\r\n '!=': 'EQUALITY',\r\n '<': 'RELATIONAL',\r\n '>': 'RELATIONAL',\r\n '<=': 'RELATIONAL',\r\n '>=': 'RELATIONAL',\r\n 'in': 'RELATIONAL',\r\n // Logical operators\r\n '&&': 'LOGICAL_AND',\r\n '||': 'LOGICAL_OR',\r\n '!': 'LOGICAL_NOT',\r\n // Bitwise operators\r\n '&': 'BITWISE_AND',\r\n '|': 'BITWISE_OR',\r\n '^': 'BITWISE_XOR',\r\n '~': 'BITWISE_NOT',\r\n '<<': 'BITWISE_SHIFT',\r\n '>>': 'BITWISE_SHIFT',\r\n '>>>': 'BITWISE_SHIFT'\r\n };\r\n\r\n var ESCAPE = {\r\n 'n': '\\n',\r\n 'f': '\\f',\r\n 'r': '\\r',\r\n 't': '\\t',\r\n 'v': '\\v',\r\n \"'\": \"'\",\r\n '\"': '\"',\r\n '`': '`'\r\n };\r\n\r\n var EXPRESSIONS = {\r\n\t\t'**': function(a, b) { return Math.pow(a(), b()) }, // Use Math.pow for older browsers\r\n\t\t'??': function(a, b) { a = a(); return a == null ? b() : a }, // nullish-coalescing\r\n 'in': function(a, b) { return a() in b(); },\r\n '?': function(a, b, c) { return a() ? b() : c(); },\r\n '+': function(a, b) { a = a(); b = b(); return a == null ? b : b == null ? a : a + b; },\r\n '-': function(a, b) { return a() - b(); },\r\n '*': function(a, b) { return a() * b(); },\r\n '/': function(a, b) { return a() / b(); },\r\n '%': function(a, b) { return a() % b(); },\r\n '===': function(a, b) { return a() === b(); },\r\n '!==': function(a, b) { return a() !== b(); },\r\n '==': function(a, b) { return a() == b(); },\r\n '!=': function(a, b) { return a() != b(); },\r\n '<': function(a, b) { return a() < b(); },\r\n '>': function(a, b) { return a() > b(); },\r\n '<=': function(a, b) { return a() <= b(); },\r\n '>=': function(a, b) { return a() >= b(); },\r\n '&&': function(a, b) { return a() && b(); },\r\n '||': function(a, b) { return a() || b(); },\r\n '&': function(a, b) { return a() & b(); },\r\n '|': function(a, b) { return a() | b(); },\r\n '^': function(a, b) { return a() ^ b(); },\r\n '<<': function(a, b) { return a() << b(); },\r\n '>>': function(a, b) { return a() >> b(); },\r\n '>>>': function(a, b) { return a() >>> b(); },\r\n '~': function(a) { return ~a(); },\r\n '!': function(a) { return !a(); }\r\n };\r\n\r\n var RESERVED = {\r\n 'this': function(scope) { return function() { return scope.data; }; },\r\n 'undefined': function() { return function() { return undefined; }; },\r\n 'null': function() { return function() { return null; }; },\r\n 'true': function() { return function() { return true; }; },\r\n\t\t'false': function() { return function() { return false; }; },\r\n\t\t'_': function() { return function() { return { __dmxScope__: true }; }; }\r\n };\r\n\r\n var ZERO = function() { return 0; };\r\n\r\n\tdmx.getType = function(obj) {\r\n\t\treturn SUPPORTED_TYPES[Object.prototype.toString.call(obj).slice(8, -1)];\r\n\t};\r\n\r\n\tdmx.getIdents = function(str) {\r\n\t\tif (typeof str != 'string') return [];\r\n\t\t\r\n\t\tlet tokens = [];\r\n\r\n\t\tif (str.includes('{{')) {\r\n\t\t\tlet match;\r\n\r\n\t\t\twhile ((match = dmx.reExpressionReplace.exec(str)) != null) {\r\n\t\t\t\ttokens = tokens.concat(dmx.lexer(match[1]));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\ttokens = dmx.lexer(str);\r\n\t\t}\r\n\r\n\t\treturn tokens.reduce((idents, token) => {\r\n\t\t\tif (token.name == 'IDENT') {\r\n\t\t\t\tidents.push(token.value);\r\n\t\t\t} else if (token.name == 'STRING') {\r\n\t\t\t\tif (token.value.startsWith('{{')) {\r\n\t\t\t\t\tidents = idents.concat(dmx.getIdents(token.value))\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn idents;\r\n\t\t}, []);\r\n\t};\r\n\r\n dmx.lexer = function(exp) {\r\n if (cache[exp]) {\r\n return cache[exp];\r\n }\r\n\r\n var tokens = [], token, name, start, index = 0, op = true, ch, ch2, ch3;\r\n\r\n while (index < exp.length) {\r\n start = index;\r\n\r\n ch = read();\r\n\r\n \t\tif (isQuote(ch) && op) {\r\n \t\t\tname = 'STRING';\r\n \t\t\ttoken = readString(ch);\r\n \t\t\top = false;\r\n \t\t}\r\n \t\telse if ((isDigid(ch) || (is('.') && peek() && isDigid(peek()))) && op) {\r\n \t\t\tname = 'NUMBER';\r\n \t\t\ttoken = readNumber();\r\n \t\t\top = false;\r\n \t\t}\r\n \t\telse if (isAlpha(ch) && op) {\r\n \t\t\tname = 'IDENT';\r\n \t\t\ttoken = readIdent();\r\n \t\t\tif (is('(')) {\r\n \t\t\t\tname = 'METHOD';\r\n \t\t\t}\r\n \t\t\top = false;\r\n \t\t}\r\n \t\telse if (is('/') && op && (token == '(' || token == ',' || token == '?' || token == ':') && testRegexp()) {\r\n \t\t\tname = 'REGEXP';\r\n \t\t\ttoken = readRegexp();\r\n \t\t\top = false;\r\n \t\t}\r\n \t\telse if ( isWhitespace(ch) ) {\r\n \t\t\t// WHITESPACE (SKIP)\r\n \t\t\tindex++;\r\n \t\t\tcontinue;\r\n \t\t}\r\n \t\telse if ((ch3 = read(3)) && OPERATORS[ch3]) {\r\n \t\t\tname = OPERATORS[ch3];\r\n \t\t\ttoken = ch3;\r\n \t\t\top = true;\r\n \t\t\tindex += 3;\r\n \t\t}\r\n \t\telse if ((ch2 = read(2)) && OPERATORS[ch2]) {\r\n \t\t\tname = OPERATORS[ch2];\r\n \t\t\ttoken = ch2;\r\n \t\t\top = true;\r\n \t\t\tindex += 2;\r\n \t\t}\r\n \t\telse if (OPERATORS[ch]) {\r\n \t\t\tname = OPERATORS[ch];\r\n \t\t\ttoken = ch;\r\n \t\t\top = true;\r\n \t\t\tindex++;\r\n \t\t}\r\n \t\telse {\r\n \t\t\t// ERROR\r\n \t\t\tthrow Error(\"Lexer Error: Unexpected token '\" + ch + \"' at column \" + index + \" in expression [\" + exp + \"]\");\r\n \t\t}\r\n\r\n \t\ttokens.push({\r\n \t\t\tname : name,\r\n \t\t\tindex: start,\r\n \t\t\tvalue: token\r\n \t\t});\r\n }\r\n\r\n cache[exp] = tokens;\r\n\r\n return tokens;\r\n\r\n function read(n) {\r\n \t\treturn (n > 1) ? exp.substr(index, n) : exp[index];\r\n \t}\r\n\r\n \tfunction peek(n) {\r\n \t\tn = n || 1;\r\n \t\treturn index + n < exp.length ? exp[index + n] : false;\r\n \t}\r\n\r\n \tfunction is(chars) {\r\n \t\treturn chars.indexOf(ch) != -1;\r\n \t}\r\n\r\n \tfunction isQuote(ch) {\r\n \t\treturn ch == '\"' || ch == \"'\" || ch == '`';\r\n \t}\r\n\r\n \tfunction isDigid(ch) {\r\n \t\treturn ch >= '0' && ch <= '9';\r\n \t}\r\n\r\n \tfunction isAlpha(ch) {\r\n \t\treturn (ch >= 'a' && ch <= 'z') ||\r\n \t\t (ch >= 'A' && ch <= 'Z') ||\r\n \t\t ch == '_' || ch == '$';\r\n \t}\r\n\r\n \tfunction isAlphaNum(ch) {\r\n \t\treturn isAlpha(ch) || isDigid(ch);\r\n \t}\r\n\r\n \tfunction isWhitespace(ch) {\r\n \t\treturn ch == ' ' || ch == '\\r' || ch == '\\t' || ch == '\\n' || ch == '\\v' || ch == '\\u00A0';\r\n \t}\r\n\r\n \tfunction isExpOperator(ch) {\r\n \t\treturn ch == '-' || ch == '+' || isDigid(ch);\r\n \t}\r\n\r\n \tfunction readString(quote) {\r\n \t\tvar string = '', escape = false;\r\n\r\n \t\tindex++;\r\n\r\n \t\twhile (index < exp.length) {\r\n \t\t\tch = read();\r\n\r\n \t\t\t// was previous an escape character\r\n \t\t\tif ( escape ) {\r\n \t\t\t\t// unicode escape\r\n \t\t\t\tif (ch == 'u') {\r\n \t\t\t\t\tindex++;\r\n \t\t\t\t\tvar hex = read(4);\r\n \t\t\t\t\tif (hex.match(/[\\da-f]{4}/i)) {\r\n \t\t\t\t\t\tthrow Error('Invalid unicode escape at column ' + index + ' in expression [' + exp + ']');\r\n \t\t\t\t\t}\r\n \t\t\t\t\tstring += String.fromCharCode(parseInt(hex, 16));\r\n \t\t\t\t\tindex += 3;\r\n \t\t\t\t}\r\n \t\t\t\telse {\r\n \t\t\t\t\tvar rep = ESCAPE[ch];\r\n \t\t\t\t\tstring += rep ? rep : ch;\r\n \t\t\t\t}\r\n\r\n \t\t\t\tescape = false;\r\n \t\t\t}\r\n \t\t\telse if (ch == '\\\\') {\r\n \t\t\t\t// escape character\r\n \t\t\t\tescape = true;\r\n \t\t\t}\r\n \t\t\telse if (ch == quote) {\r\n \t\t\t\t// end of string\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\tif (quote == '`') {\r\n\t\t\t\t\t\tstring = '{{' + string + '}}';\r\n\t\t\t\t\t}\r\n \t\t\t\treturn string;\r\n \t\t\t}\r\n \t\t\telse {\r\n \t\t\t\tstring += ch;\r\n \t\t\t}\r\n\r\n \t\t\tindex++;\r\n \t\t}\r\n\r\n \t\tthrow Error('Unterminated quote in expression [' + exp + ']');\r\n \t}\r\n\r\n \tfunction readNumber() {\r\n \t\tvar number = '', exponent = false;\r\n\r\n \t\twhile (index < exp.length) {\r\n \t\t\tch = read();\r\n\r\n \t\t\tif (is('.') && peek() && isDigid(peek()) || isDigid(ch)) {\r\n \t\t\t\tnumber += ch;\r\n \t\t\t}\r\n \t\t\telse {\r\n \t\t\t\tvar next = peek();\r\n\r\n \t\t\t\tif (is('eE') && isExpOperator(next)) {\r\n \t\t\t\t\tnumber += 'e';\r\n \t\t\t\t\texponent = true;\r\n \t\t\t\t}\r\n \t\t\t\telse if (isExpOperator(ch) && next && isDigid(next) && exponent) {\r\n \t\t\t\t\tnumber += ch;\r\n \t\t\t\t\texponent = false;\r\n \t\t\t\t}\r\n \t\t\t\telse if (isExpOperator(ch) && (!next || !isDigid(next)) && exponent) {\r\n \t\t\t\t\tthrow Error('Invalid exponent \"' + ch + '\" in expression [' + exp + ']');\r\n \t\t\t\t}\r\n \t\t\t\telse {\r\n \t\t\t\t\tbreak;\r\n \t\t\t\t}\r\n \t\t\t}\r\n\r\n \t\t\tindex++;\r\n \t\t}\r\n\r\n\t\t\t// TODO: Support BigInt type\r\n\r\n \t\treturn +number;\r\n \t}\r\n\r\n \tfunction readIdent() {\r\n \t\tvar ident = '';\r\n\r\n \t\twhile (index < exp.length) {\r\n \t\t\tch = read();\r\n\r\n \t\t\tif (isAlphaNum(ch)) {\r\n \t\t\t\tident += ch;\r\n \t\t\t}\r\n \t\t\telse {\r\n \t\t\t\tbreak;\r\n \t\t\t}\r\n\r\n \t\t\tindex++;\r\n \t\t}\r\n\r\n \t\treturn ident;\r\n \t}\r\n\r\n \tfunction readRegexp() {\r\n \t\tvar regexp = '', modifiers = '', escape = false;\r\n\r\n \t\tindex++;\r\n\r\n \t\twhile (index < exp.length) {\r\n \t\t\tch = read();\r\n\r\n \t\t\t// was previous an escape character\r\n \t\t\tif (escape) {\r\n \t\t\t\tescape = false;\r\n \t\t\t}\r\n \t\t\telse if (ch == '\\\\') {\r\n \t\t\t\t// escape character\r\n \t\t\t\tescape = true;\r\n \t\t\t}\r\n \t\t\telse if (ch == '/') {\r\n \t\t\t\t// end of regexp\r\n \t\t\t\tindex++;\r\n\r\n \t\t\t\twhile ('ign'.indexOf(ch = read()) != -1) {\r\n \t\t\t\t\tmodifiers += ch;\r\n \t\t\t\t\tindex++;\r\n \t\t\t\t}\r\n\r\n\t\t\t\t\t// return the actual regexp object (new structured data support)\r\n \t\t\t\treturn new RegExp(regexp, modifiers);\r\n \t\t\t}\r\n\r\n \t\t\tregexp += ch;\r\n \t\t\tindex++;\r\n \t\t}\r\n\r\n \t\tthrow Error('Unterminated regexp in expression [' + exp + ']');\r\n \t}\r\n\r\n \tfunction testRegexp() {\r\n \t\tvar idx = index, ok = true;\r\n\r\n \t\ttry {\r\n \t\t\treadRegexp();\r\n \t\t} catch (e) {\r\n \t\t\tok = false;\r\n \t\t}\r\n\r\n \t\t// reset our index and ch\r\n \t\tindex = idx;\r\n \t\tch = '/';\r\n\r\n \t\treturn ok;\r\n \t}\r\n };\r\n\r\n dmx.parse = function(exp, scope) {\r\n scope = scope || dmx.app;\r\n\r\n // check templates\r\n if (dmx.reExpression.test(exp)) {\r\n if (exp.substr(0, 2) == '{{' && exp.substr(-2) == '}}' && exp.indexOf('{{', 2) == -1) {\r\n return dmx.parse(exp.substring(2, exp.length - 2), scope);\r\n }\r\n\r\n return exp.replace(dmx.reExpressionReplace, function(token, exp) {\r\n var value = dmx.parse(exp, scope);\r\n return value == null ? '' : value;\r\n });\r\n\t\t}\r\n\t\t\r\n\t\tif (!exp.trim()) return undefined;\r\n\r\n var value;\r\n\r\n try {\r\n var tokens = dmx.lexer(exp).slice(0), context;\r\n value = doParse();\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n\r\n return value;\r\n\r\n //return doParse();\r\n\r\n function read() {\r\n \t\tif (tokens.length === 0) {\r\n \t\t\tthrow Error('Unexpected end in expression [' + exp + ']');\r\n \t\t}\r\n\r\n \t\treturn tokens[0];\r\n \t}\r\n\r\n \tfunction peek(e) {\r\n \t\tif (tokens.length > 0) {\r\n \t\t\tvar token = tokens[0];\r\n\r\n \t\t\tif (!e || token.name == e) {\r\n \t\t\t\treturn token;\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\treturn false;\r\n \t}\r\n\r\n \tfunction expect(e) {\r\n \t\tvar token = peek(e);\r\n\r\n \t\tif (token) {\r\n \t\t\ttokens.shift();\r\n \t\t\treturn token;\r\n \t\t}\r\n\r\n \t\treturn false;\r\n \t}\r\n\r\n \tfunction consume(e) {\r\n \t\tif (!expect(e)) {\r\n \t\t\tthrow Error('Unexpected token, expecting [' + e + '] in expression [' + exp + ']');\r\n \t\t}\r\n \t}\r\n\r\n \tfunction fn(exp) {\r\n \t\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n \t\treturn function() {\r\n \t\t\tif (EXPRESSIONS.hasOwnProperty(exp)) {\r\n \t\t\t\treturn EXPRESSIONS[exp].apply(scope, args);\r\n \t\t\t} else {\r\n \t\t\t\treturn exp;\r\n \t\t\t}\r\n \t\t};\r\n \t}\r\n\r\n \tfunction doParse() {\r\n \t\tvar a = [];\r\n\r\n \t\twhile (true) {\r\n \t\t\tif (tokens.length > 0 && !(peek('R_PAREN') || peek('R_BRACKET') || peek('R_CURLY') || peek('COMMA') || peek('SEMI'))) {\r\n \t\t\t\ta.push(expression());\r\n \t\t\t}\r\n\r\n if (!(expect('COMMA') || expect('SEMI'))) {\r\n \t\t\t return (a.length == 1 ? a[0] : b)();\r\n }\r\n \t\t}\r\n\r\n \t\tfunction b() {\r\n \t\t\tvar value;\r\n\r\n \t\t\tfor (var i = 0; i < a.length; i++) {\r\n \t\t\t\tvar e = a[i];\r\n \t\t\t\tif (e) { value = e(); }\r\n \t\t\t}\r\n\r\n \t\t\treturn value;\r\n \t\t}\r\n \t}\r\n\r\n \tfunction expression() {\r\n \t\treturn conditional();\r\n \t}\r\n\r\n \tfunction conditional() {\r\n \t\tvar left = logicalOr(), middle, token;\r\n\r\n \t\tif ((token = expect('QUESTION'))) {\r\n \t\t\tmiddle = conditional();\r\n\r\n \t\t\tif ((token = expect('COLON'))) {\r\n \t\t\t\treturn fn('?', left, middle, conditional());\r\n \t\t\t} else {\r\n \t\t\t\tthrow Error('Expecting a \":\" in expression [' + exp + ']');\r\n \t\t\t}\r\n \t\t} else {\r\n \t\t\treturn left;\r\n \t\t}\r\n \t}\r\n\r\n \tfunction logicalOr() {\r\n \t\tvar left = logicalAnd(), token;\r\n\r\n \t\twhile (true) {\r\n \t\t\tif ((token = expect('LOGICAL_OR'))) {\r\n \t\t\t\tleft = fn(token.value, left, logicalAnd());\r\n \t\t\t} else {\r\n \t\t\t\treturn left;\r\n \t\t\t}\r\n \t\t}\r\n \t}\r\n\r\n \tfunction logicalAnd() {\r\n \t\tvar left = bitwiseOr(), token;\r\n\r\n \t\tif ((token = expect('LOGICAL_AND'))) {\r\n \t\t\tleft = fn(token.value, left, logicalAnd());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \tfunction bitwiseOr() {\r\n \t\tvar left = bitwiseXor(), token;\r\n\r\n \t\tif ((token = expect('BITWISE_OR'))) {\r\n \t\t\tleft = fn(token.value, left, bitwiseXor());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \tfunction bitwiseXor() {\r\n \t\tvar left = bitwiseAnd(), token;\r\n\r\n \t\tif ((token = expect('BITWISE_XOR'))) {\r\n \t\t\tleft = fn(token.value, left, bitwiseAnd());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \tfunction bitwiseAnd() {\r\n \t\tvar left = equality(), token;\r\n\r\n \t\tif ((token = expect('BITWISE_AND'))) {\r\n \t\t\tleft = fn(token.value, left, bitwiseAnd());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \tfunction equality() {\r\n \t\tvar left = relational(), token;\r\n\r\n \t\tif ((token = expect('EQUALITY'))) {\r\n \t\t\tleft = fn(token.value, left, equality());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \tfunction relational() {\r\n \t\tvar left = bitwiseShift(), token;\r\n\r\n \t\tif ((token = expect('RELATIONAL'))) {\r\n \t\t\tleft = fn(token.value, left, relational());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \t// bitwise shift here\r\n\r\n \tfunction bitwiseShift() {\r\n \t\tvar left = addictive(), token;\r\n\r\n \t\twhile ((token = expect('BITWISE_SHIFT'))) {\r\n \t\t\tleft = fn(token.value, left, addictive());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \tfunction addictive() {\r\n \t\tvar left = multiplicative(), token;\r\n\r\n \t\twhile ((token = expect('ADDICTIVE'))) {\r\n \t\t\tleft = fn(token.value, left, multiplicative());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \tfunction multiplicative() {\r\n \t\tvar left = unary(), token;\r\n\r\n \t\twhile ((token = expect('MULTIPLICATIVE'))) {\r\n \t\t\tleft = fn(token.value, left, unary());\r\n \t\t}\r\n\r\n \t\treturn left;\r\n \t}\r\n\r\n \tfunction unary() {\r\n \t\tvar token;\r\n\r\n \t\tif ((token = expect('ADDICTIVE'))) {\r\n \t\t\tif (token.value == '+') {\r\n \t\t\t\treturn primary();\r\n \t\t\t} else {\r\n \t\t\t\treturn fn(token.value, ZERO, unary());\r\n \t\t\t}\r\n \t\t} else if ((token = expect('LOGICAL_NOT'))) {\r\n \t\t\treturn fn(token.value, unary());\r\n \t\t} else {\r\n \t\t\treturn primary();\r\n \t\t}\r\n \t}\r\n\r\n \tfunction primary() {\r\n \t\tvar value, next;\r\n\r\n \t\tif (expect('L_PAREN')) {\r\n \t\t\tvalue = expression();\r\n \t\t\tconsume('R_PAREN');\r\n } else if (expect('L_CURLY')) {\r\n var obj = {};\r\n\r\n if (read().name != 'R_CURLY') {\r\n do {\r\n var key = expect().value;\r\n consume('COLON');\r\n obj[key] = expression()();\r\n } while (expect('COMMA'))\r\n }\r\n\r\n value = fn(obj);\r\n\r\n \t\t\tconsume('R_CURLY');\r\n \t\t} else if (expect('L_BRACKET')) {\r\n var arr = [];\r\n\r\n \t\tif (read().name != 'R_BRACKET') {\r\n \t\t\tdo {\r\n \t\t\t\tarr.push(expression()());\r\n \t\t\t} while (expect('COMMA'));\r\n \t\t}\r\n\r\n value = fn(arr);\r\n\r\n \t\tconsume('R_BRACKET');\r\n \t\t} else if (expect('PERIOD')) {\r\n \t\t\tvalue = peek() ? objectMember(fn(scope.data)) : fn(scope.data);\r\n \t\t} else {\r\n \t\t\tvar token = expect();\r\n\r\n \t\t\tif (token === false) {\r\n \t\t\t\tthrow Error('Not a primary expression [' + exp + ']');\r\n \t\t\t}\r\n\r\n \t\t\tif (token.name == 'IDENT') {\r\n \t\t\t\tvalue = RESERVED.hasOwnProperty(token.value) ?\r\n \t\t\t\t\tRESERVED[token.value](scope) :\r\n \t\t\t\t\tfunction() { return scope.get(token.value); };\r\n \t\t\t} else if (token.name == 'METHOD') {\r\n value = fn(dmx.__formatters.global[token.value] || function() {\r\n \t\t\t\t\tif (window.warn) console.warn('Formatter ' + token.value + ' in expression [' + exp + '] doesn\\'t exist');\r\n \t\t\t\t\treturn undefined;\r\n });\r\n \t\t\t} else {\r\n \t\t\t\tvalue = function() { return token.value; };\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\twhile ((next = expect('L_PAREN') || expect('L_BRACKET') || expect('PERIOD'))) {\r\n \t\t\tif (next.value == '(') {\r\n \t\t\t\tvalue = functionCall(value, context);\r\n \t\t\t} else if (next.value == '[') {\r\n \t\t\t\tcontext = value;\r\n \t\t\t\tvalue = objectIndex(value);\r\n \t\t\t} else if (next.value == '.') {\r\n \t\t\t\tcontext = value;\r\n \t\t\t\tvalue = objectMember(value);\r\n \t\t\t} else {\r\n \t\t\t\tthrow Error('Parse Error in expression [' + exp + ']');\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\tcontext = null;\r\n\r\n \t\treturn value;\r\n \t}\r\n\r\n \tfunction functionCall(func, ctx) {\r\n \t\tvar argsFn = [];\r\n\r\n \t\tif (read().name != 'R_PAREN') {\r\n \t\t\tdo {\r\n \t\t\t\targsFn.push(expression());\r\n \t\t\t} while (expect('COMMA'));\r\n \t\t}\r\n\r\n \t\tconsume('R_PAREN');\r\n\r\n \t\treturn function() {\r\n \t\t\tvar args = []; //[ctx()];\r\n\r\n if (ctx) {\r\n args.push(ctx());\r\n }\r\n\r\n \t\t\tfor (var i = 0; i < argsFn.length; i++) {\r\n \t\t\t\targs.push(argsFn[i]());\r\n \t\t\t}\r\n\r\n \t\t\tvar fnPtr = func() || dmx.noop;\r\n\r\n \t\t\treturn fnPtr.apply(scope, args);\r\n \t\t};\r\n \t}\r\n\r\n \tfunction objectIndex(object) {\r\n \t\tvar indexFn = expression();\r\n\r\n \t\tconsume('R_BRACKET');\r\n\r\n \t\treturn function() {\r\n \t\t\tvar o = object(),\r\n \t\t\t\ti = indexFn();\r\n\r\n\t\t\t\tif (typeof o != 'object' || o == null) return undefined;\r\n\t\t\t\t\r\n\t\t\t\tif (o.__dmxScope__) {\r\n\t\t\t\t\treturn scope.get(i);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (dmx.getType(o) == 'map') {\r\n\t\t\t\t\treturn o.get(i);\r\n\t\t\t\t}\r\n\r\n \t\t\treturn o[i];\r\n \t\t};\r\n \t}\r\n\r\n \tfunction objectMember(object) {\r\n \t\tvar token = expect();\r\n\r\n \t\treturn function() {\r\n \t\t\tvar o = object();\r\n\t\t\t\tvar type = dmx.getType(o);\r\n\r\n \t\t\tif (token.name == 'METHOD') {\r\n\t\t\t\t\tif (type == 'map' && typeof o.get('__' + token.value) == 'function') {\r\n\t\t\t\t\t\tconsole.log('function', token.value, o.get('__' + token.value));\r\n\t\t\t\t\t\treturn o.get('__' + token.value);\r\n\t\t\t\t\t}\r\n\r\n if (type == 'object' && typeof o['__' + token.value] == 'function') {\r\n return o['__' + token.value];\r\n }\r\n\r\n if (dmx.__formatters[type] && dmx.__formatters[type][token.value]) {\r\n return dmx.__formatters[type][token.value];\r\n }\r\n\r\n\t\t\t\t\tif (dmx.__formatters['any'] && dmx.__formatters['any'][token.value]) {\r\n\t\t\t\t\t\treturn dmx.__formatters['any'][token.value];\r\n\t\t\t\t\t}\r\n\r\n \t\t\t\treturn function() {\r\n \t\t\t\t\tif (o != null && console.warn) console.warn('Formatter ' + token.value + ' in expression [' + exp + '] doesn\\'t exist for type ' + type);\r\n \t\t\t\t\treturn undefined;\r\n \t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (o && o.__dmxScope__) {\r\n\t\t\t\t\treturn scope.get(token.value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (type == 'map') {\r\n\t\t\t\t\treturn o.get(token.value);\r\n\t\t\t\t}\r\n\r\n \t\t\treturn o && o.hasOwnProperty(token.value) ? o[token.value] : undefined;\r\n \t\t};\r\n \t}\r\n };\r\n\r\n})();\r\n","dmx.global = {\r\n data: {},\r\n seed: Math.random(),\r\n get: function(name) {\r\n if (this.data.hasOwnProperty(name)) {\r\n return this.data[name];\r\n }\r\n\r\n return undefined;\r\n },\r\n set: function(name, value) {\r\n if (typeof name == 'object') {\r\n for (var prop in name) {\r\n if (name.hasOwnProperty(prop)) {\r\n this.set(prop, name[prop]);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!dmx.equal(this.data[name], value)) {\r\n this.data[name] = value;\r\n dmx.requestUpdate(name);\r\n }\r\n },\r\n del: function(name) {\r\n delete this.data[name];\r\n dmx.requestUpdate(name);\r\n }\r\n}\r\n\r\ndmx.DataScope = function(data, parent) {\r\n if (typeof data != 'object') {\r\n data = { $value: data };\r\n }\r\n\r\n return {\r\n parent: parent || dmx.global,\r\n data: data,\r\n seed: Math.random(),\r\n get: function(name) {\r\n if (this.data.hasOwnProperty(name)) {\r\n return this.data[name];\r\n }\r\n\r\n if (this.parent) {\r\n if (name == 'parent') {\r\n return this.parent.data;\r\n }\r\n\r\n return this.parent.get(name);\r\n }\r\n\r\n return undefined;\r\n },\r\n set: function(name, value) {\r\n if (typeof name == 'object') {\r\n for (var prop in name) {\r\n if (name.hasOwnProperty(prop)) {\r\n this.set(prop, name[prop]);\r\n }\r\n }\r\n return;\r\n }\r\n \r\n if (!dmx.equal(this.data[name], value)) {\r\n this.data[name] = value;\r\n }\r\n },\r\n del: function(name) {\r\n delete this.data[name];\r\n }\r\n };\r\n};","dmx.BaseComponent = dmx.createClass({\r\n\r\n constructor: function(node, parent) {\r\n this.$node = node;\r\n this.parent = parent;\r\n this.bindings = {};\r\n this.propBindings = {};\r\n this.children = [];\r\n this.listeners = {};\r\n this.props = {};\r\n this.data = {};\r\n this.seed = Math.random();\r\n\r\n this.name = node.getAttribute('id') || node.getAttribute('name') || this.type.toLowerCase().replace(/^dmx-/, '');\r\n this.name = this.name.replace(/[^\\w]/g, '');\r\n this.dmxDomId = node.getAttribute('dmxDomId');\r\n\r\n try {\r\n this.$parseAttributes(node);\r\n this.$initialData();\r\n this.render(node);\r\n if (this.beforeMount(node) !== false) {\r\n this.$mount(node);\r\n if (this.$node) {\r\n //this.$customAttributes('mount', this.$node);\r\n this.$customAttributes('mounted', this.$node);\r\n if (this.dmxDomId) {\r\n // Restore dmxDomId for Wappler\r\n this.$node.setAttribute('dmxDomId', this.dmxDomId);\r\n }\r\n this.$node.dmxComponent = this;\r\n this.$node.dmxRendered = true;\r\n }\r\n this.dispatchEvent('mount');\r\n this.mounted();\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n tag: null,\r\n initialData: {},\r\n attributes: {},\r\n methods: {},\r\n events: {\r\n mount: Event,\r\n destroy: Event\r\n },\r\n\r\n render: function(node) {\r\n if (this.$node) {\r\n this.$parse();\r\n }\r\n },\r\n\r\n // find component based on name inside children\r\n find: function(name) {\r\n if (this.name == name) return this;\r\n\r\n for (var i = 0; i < this.children.length; i++) {\r\n var found = this.children[i].find(name);\r\n if (found) return found;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n // internal method for Wappler\r\n __find: function(dmxDomId) {\r\n if (this.dmxDomId == dmxDomId) return this;\r\n\r\n for (var i = 0; i < this.children.length; i++) {\r\n var found = this.children[i].__find(dmxDomId);\r\n if (found) return found;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n // internal method for Wappler\r\n __replace: function(dmxDomId) {\r\n var child = this.__find(dmxDomId);\r\n\r\n if (child) {\r\n child.$destroy();\r\n\r\n var node = document.querySelector('[dmxDomId=\"' + dmxDomId + '\"]');\r\n if (node) {\r\n var index = child.parent.children.indexOf(child);\r\n var Component = dmx.__components[child.data.$type];\r\n\r\n if (index > -1 && Component) {\r\n var component = new Component(node, child.parent);\r\n child.parent.children.splice(index, 1, component);\r\n if (component.name) {\r\n child.parent.add(component.name, component.data);\r\n }\r\n }\r\n }\r\n\r\n dmx.requestUpdate();\r\n }\r\n },\r\n\r\n // internal method for Wappler\r\n __remove: function(dmxDomId) {\r\n var child = this.__find(dmxDomId);\r\n\r\n if (child) {\r\n child.$destroy();\r\n\r\n var index = child.parent.children.indexOf(this);\r\n if (index > -1) {\r\n child.parent.children.splice(index, 1);\r\n }\r\n\r\n dmx.requestUpdate();\r\n }\r\n },\r\n\r\n beforeMount: dmx.noop,\r\n mounted: dmx.noop,\r\n\r\n beforeUpdate: dmx.noop,\r\n update: dmx.noop,\r\n updated: dmx.noop,\r\n\r\n beforeDestroy: dmx.noop,\r\n destroyed: dmx.noop,\r\n\r\n addEventListener: function(type, callback) {\r\n if (!(type in this.listeners)) {\r\n this.listeners[type] = new Set();\r\n }\r\n this.listeners[type].add(callback);\r\n },\r\n\r\n removeEventListener: function(type, callback) {\r\n if (!(type in this.listeners)) return;\r\n this.listeners[type].delete(callback);\r\n },\r\n\r\n dispatchEvent: function(event, props, data, nsp) {\r\n if (typeof event == 'string') {\r\n try {\r\n var ComponentEvent = this.events[event];\r\n event = new ComponentEvent(event, props);\r\n } catch (err) {\r\n var eventType = event;\r\n event = document.createEvent('CustomEvent');\r\n event.initEvent(eventType, props && props.bubbles, props && props.cancelable);\r\n if (!(event instanceof Event)) {\r\n console.warn('Unknown event ' + event, this.events);\r\n return false;\r\n }\r\n var preventDefault = event.preventDefault;\r\n event.preventDefault = function() {\r\n preventDefault.call(this);\r\n try {\r\n Object.defineProperty(this, 'defaultPrevented', {\r\n get: function () {\r\n return true;\r\n }\r\n });\r\n } catch(e) {\r\n this.defaultPrevented = true;\r\n }\r\n return event;\r\n }\r\n }\r\n }\r\n\r\n if (!(event.type in this.listeners)) return true;\r\n\r\n event.nsp = nsp;\r\n event.target = this;\r\n event.$data = data || {};\r\n for (let listener of this.listeners[event.type]) {\r\n if (listener.call(this, event) === false) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n return !event.defaultPrevented;\r\n },\r\n\r\n $addChild: function(name, node) {\r\n var Component = dmx.__components[name];\r\n var component = new Component(node, this);\r\n this.children.push(component);\r\n if (component.name) {\r\n if (this.data[component.name] && dmx.debug) {\r\n console.warn('Duplicate name \"' + component.name + '\" found, component not added to scope.');\r\n //return;\r\n }\r\n this.set(component.name, component.data);\r\n }\r\n },\r\n\r\n $customAttributes: function(hook, node) {\r\n dmx.dom.getAttributes(node).forEach(function(attr) {\r\n if (dmx.__attributes[hook][attr.name]) {\r\n node.removeAttribute(attr.fullName);\r\n dmx.__attributes[hook][attr.name].call(this, node, attr);\r\n }\r\n }, this);\r\n },\r\n\r\n $parse: function(node) {\r\n node = node || this.$node;\r\n\r\n if (!node) return;\r\n\r\n if (node.nodeType === 3) {\r\n if (dmx.reExpression.test(node.nodeValue)) {\r\n var nodeValue = node.nodeValue;\r\n\r\n if (nodeValue.substr(0, 2) == '{{' && nodeValue.substr(-2) == '}}' && nodeValue.indexOf('{{', 2) == -1) {\r\n nodeValue = nodeValue.substring(2, nodeValue.length - 2);\r\n }\r\n\r\n /*if (nodeValue.substr(0, 2) == '{{' && nodeValue.substr(-2) == '}}' && nodeValue.indexOf('{{', 2) == -1) {\r\n nodeValue = nodeValue.substring(2, nodeValue.length - 2);\r\n } else {\r\n var fragment = new DocumentFragment();\r\n var parts = nodeValue.split(/\\{\\{|\\}\\}/);\r\n\r\n parts.forEach(function(part, i) {\r\n var textNode = document.createTextNode('');\r\n fragment.appendChild(textNode);\r\n\r\n if (i % 2 == 0) {\r\n textNode.nodeValue = part;\r\n } else {\r\n this.$addBinding(part, function(value, oldValue) {\r\n textNode.nodeValue = value;\r\n });\r\n }\r\n }, this);\r\n\r\n node.parentNode.replaceChild(fragment, node);\r\n\r\n return;\r\n }*/\r\n\r\n this.$addBinding(nodeValue, function(value, oldValue) {\r\n node.nodeValue = value;\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (node.nodeType !== 1) return;\r\n\r\n if (dmx.config.mapping) {\r\n Object.keys(dmx.config.mapping).forEach(function(map) {\r\n dmx.array(node.querySelectorAll(map)).forEach(function(node) {\r\n if (!node.hasAttribute('is')) {\r\n node.setAttribute('is', 'dmx-' + dmx.config.mapping[map]);\r\n }\r\n });\r\n });\r\n }\r\n\r\n dmx.dom.walk(node, function(node) {\r\n if (node == this.$node) {\r\n // skip current node\r\n return;\r\n }\r\n\r\n // Element Node\r\n if (node.nodeType === 1) {\r\n var tagName = node.tagName.toLowerCase();\r\n var attributes = dmx.dom.getAttributes(node);\r\n\r\n if (node.hasAttribute('is')) {\r\n tagName = node.getAttribute('is');\r\n }\r\n\r\n if (dmx.reIgnoreElement.test(tagName)) {\r\n // ignore element\r\n return false;\r\n }\r\n\r\n this.$customAttributes('before', node);\r\n var idx = attributes.findIndex(function(attr) { return attr.name === 'repeat'; });\r\n if (idx !== -1) return false;\r\n\r\n if (dmx.rePrefixed.test(tagName)) {\r\n tagName = tagName.replace(/^dmx-/i, '');\r\n\r\n if (tagName in dmx.__components) {\r\n node.isComponent = true;\r\n if (!node.dmxRendered) {\r\n this.$addChild(tagName, node);\r\n } else if (window.__WAPPLER__) {\r\n // This breaks some components in design view\r\n // causes flows to trigger constantly\r\n // components ofter have there own parsing and this breaks it\r\n if (node.dmxComponent && node.dmxComponent.$parse) {\r\n // for now ignode specific for flows with script tag\r\n if (!dmx.reIgnoreElement.test(node.tagName)) {\r\n node.dmxComponent.$parse();\r\n }\r\n }\r\n }\r\n return false;\r\n } else {\r\n console.warn('Unknown component found! ' + tagName);\r\n return;\r\n }\r\n }\r\n\r\n //this.$customAttributes('mount', node);\r\n this.$customAttributes('mounted', node);\r\n }\r\n\r\n // Text Node\r\n if (node.nodeType === 3) {\r\n if (dmx.reExpression.test(node.nodeValue)) {\r\n var nodeValue = node.nodeValue;\r\n\r\n if (nodeValue.substr(0, 2) == '{{' && nodeValue.substr(-2) == '}}' && nodeValue.indexOf('{{', 2) == -1) {\r\n nodeValue = nodeValue.substring(2, nodeValue.length - 2);\r\n }\r\n \r\n /*if (nodeValue.substr(0, 2) == '{{' && nodeValue.substr(-2) == '}}' && nodeValue.indexOf('{{', 2) == -1) {\r\n nodeValue = nodeValue.substring(2, nodeValue.length - 2);\r\n } else {\r\n var fragment = new DocumentFragment();\r\n var parts = nodeValue.split(/\\{\\{|\\}\\}/);\r\n\r\n parts.forEach(function(part, i) {\r\n var textNode = document.createTextNode('');\r\n fragment.appendChild(textNode);\r\n\r\n if (i % 2 == 0) {\r\n textNode.nodeValue = part;\r\n } else {\r\n this.$addBinding(part, function(value, oldValue) {\r\n textNode.nodeValue = value;\r\n });\r\n }\r\n }, this);\r\n\r\n node.parentNode.replaceChild(fragment, node);\r\n\r\n return;\r\n }*/\r\n this.$addBinding(nodeValue, function(value, oldValue) {\r\n node.nodeValue = value;\r\n });\r\n }\r\n }\r\n }, this);\r\n },\r\n\r\n $update: function(idents) {\r\n try {\r\n if (this.beforeUpdate(idents) !== false) {\r\n const props = dmx.clone(this.props);\r\n const didUpdate = this.$updateBindings(this.bindings, idents);\r\n const updatedProps = this.$updatePropBindings(idents);\r\n\r\n // TODO: until all components are update call update always\r\n //if (didUpdate || updatedProps.size || (idents && idents.has('*'))) {\r\n try {\r\n this.update(props, updatedProps);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n //}\r\n\r\n this.children.forEach(function(child) {\r\n child.$update(idents);\r\n });\r\n\r\n this.updated();\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n $canSkip: function(binding, idents) {\r\n if (idents && !idents.has('*')) {\r\n for (const ident of binding.idents) {\r\n if (idents.has(ident)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n $updateBindings: function(bindings, idents) {\r\n let didUpdate = false;\r\n\r\n for (const expression in bindings) {\r\n if (bindings.hasOwnProperty(expression)) {\r\n const binding = bindings[expression];\r\n\r\n if (this.$canSkip(binding, idents)) continue;\r\n\r\n const value = dmx.parse(expression, this);\r\n\r\n if (!dmx.equal(value, binding.value)) {\r\n for (const callback of binding.callbacks) {\r\n callback.call(this, value, binding.value);\r\n }\r\n\r\n didUpdate = true;\r\n binding.value = dmx.clone(value);\r\n }\r\n }\r\n }\r\n\r\n return didUpdate;\r\n },\r\n\r\n $updatePropBindings: function(idents) {\r\n const updated = new Set();\r\n\r\n for (const prop in this.propBindings) {\r\n if (this.propBindings.hasOwnProperty(prop)) {\r\n const binding = this.propBindings[prop];\r\n\r\n if (this.$canSkip(binding, idents)) continue;\r\n\r\n const value = dmx.parse(binding.expression, this);\r\n\r\n if (!dmx.equal(value, binding.value)) {\r\n binding.callback.call(this, value);\r\n binding.value = dmx.clone(value);\r\n updated.add(prop);\r\n }\r\n }\r\n }\r\n\r\n return updated;\r\n },\r\n\r\n $parseAttributes: function(node) {\r\n var self = this;\r\n\r\n if (this.attributes) {\r\n Object.keys(this.attributes).forEach(function(prop) {\r\n var options = self.attributes[prop];\r\n var value = options.default;\r\n\r\n if (node.hasAttribute(prop)) {\r\n if (options.type == Boolean) {\r\n value = true;\r\n } else {\r\n value = node.getAttribute(prop);\r\n\r\n if (options.type == Number) {\r\n // Only set number is a valid number is given\r\n if (value && !isNaN(Number(value))) {\r\n value = Number(value);\r\n }\r\n }\r\n\r\n if (options.type == String) {\r\n value = String(value);\r\n }\r\n\r\n if (options.validate && !options.validate(value)) {\r\n value = options.default;\r\n }\r\n }\r\n\r\n node.removeAttribute(prop);\r\n }\r\n\r\n if (node.hasAttribute('dmx-bind:' + prop)) {\r\n const expression = node.getAttribute('dmx-bind:' + prop);\r\n const callback = this.$propBinding(prop).bind(this);\r\n\r\n this.propBindings[prop] = {\r\n expression: expression,\r\n callback: callback,\r\n idents: dmx.getIdents(expression),\r\n value: null\r\n };\r\n\r\n node.removeAttribute('dmx-bind:' + prop);\r\n }\r\n\r\n self.props[prop] = dmx.clone(value);\r\n }, this);\r\n\r\n this.$updatePropBindings();\r\n }\r\n\r\n if (this.events) {\r\n Object.keys(this.events).forEach(function(event) {\r\n if (node.hasAttribute('on' + event)) {\r\n //self.addEventListener(event, Function('event', node.getAttribute('on' + event)));\r\n dmx.eventListener(self, event, Function('event', node.getAttribute('on' + event)), {});\r\n node.removeAttribute('on' + event);\r\n }\r\n });\r\n }\r\n\r\n dmx.dom.getAttributes(node).forEach(function(attr) {\r\n if (attr.name == 'on' && this.events[attr.argument]) {\r\n dmx.eventListener(self, attr.argument, function(event) {\r\n if (event.originalEvent) {\r\n event = event.originalEvent;\r\n }\r\n\r\n var returnValue = dmx.parse(attr.value, dmx.DataScope({\r\n $event: event.$data,\r\n $originalEvent: event\r\n }, self));\r\n\r\n return returnValue;\r\n }, attr.modifiers);\r\n\r\n node.removeAttribute(attr.fullName);\r\n }\r\n }, this);\r\n },\r\n\r\n $propBinding: function(prop) {\r\n var options = this.attributes[prop];\r\n var self = this;\r\n\r\n return function(value) {\r\n if (value === undefined) {\r\n value = options.default;\r\n }\r\n\r\n if (options.type == Boolean) {\r\n value = !!value;\r\n }\r\n\r\n if (value != null) {\r\n if (options.type == Number) {\r\n if (value !== '' && !isNaN(Number(value))) {\r\n value = Number(value);\r\n } else {\r\n value = options.default;\r\n }\r\n }\r\n\r\n if (options.type == String) {\r\n value = String(value);\r\n }\r\n }\r\n\r\n if (options.validate && !options.validate(value)) {\r\n value = options.default;\r\n }\r\n\r\n self.props[prop] = dmx.clone(value);\r\n };\r\n },\r\n\r\n $initialData: function() {\r\n Object.assign(\r\n this.data,\r\n { $type: this.type },\r\n typeof this.initialData == 'function' ? this.initialData() : this.initialData\r\n );\r\n\r\n Object.keys(this.methods).forEach(function(method) {\r\n var self = this;\r\n this.data['__' + method] = function() {\r\n return self.methods[method].apply(self, Array.prototype.slice.call(arguments, 1));\r\n };\r\n }, this);\r\n },\r\n\r\n $mount: function(node) {\r\n if (this.$placeholder && this.$node) {\r\n dmx.dom.replace(this.$placeholder, this.$node);\r\n }\r\n },\r\n\r\n $addBinding: function(expression, cb) {\r\n this.bindings[expression] = this.bindings[expression] || {\r\n expression: expression,\r\n value: dmx.parse(expression, this),\r\n callbacks: [],\r\n idents: dmx.getIdents(expression)\r\n };\r\n this.bindings[expression].callbacks.push(cb);\r\n cb.call(this, this.bindings[expression].value);\r\n },\r\n\r\n $destroy: function() {\r\n this.dispatchEvent('destroy');\r\n this.beforeDestroy();\r\n this.$destroyChildren();\r\n if (this.parent) {\r\n this.parent.del(this.name);\r\n }\r\n if (this.$node) {\r\n dmx.dom.remove(this.$node);\r\n }\r\n this.destroyed();\r\n },\r\n\r\n $destroyChildren: function() {\r\n this.children.forEach(function(child) {\r\n child.$destroy();\r\n });\r\n\r\n this.children = [];\r\n },\r\n\r\n // some parent components can reference this component and expressions\r\n // referencing them should also be evaluated (repeat.items for example)\r\n updateRelated: function() {\r\n if (this.parent) {\r\n let parent = this.parent;\r\n while (parent) {\r\n if (parent.data && (parent.data.$type == 'repeat' || parent.data.$type == 'form-repeat')) {\r\n dmx.requestUpdate(parent.name);\r\n }\r\n parent = parent.parent;\r\n }\r\n }\r\n },\r\n\r\n get: function(name, ignoreParents) {\r\n if (this.data.hasOwnProperty(name)) {\r\n return this.data[name];\r\n }\r\n\r\n if (this.parent && ignoreParents !== true) {\r\n if (name == 'parent') {\r\n return this.parent.data;\r\n }\r\n\r\n return this.parent.get(name);\r\n }\r\n\r\n return null;\r\n },\r\n\r\n add: function(name, value) {\r\n if (this.data[name]) {\r\n if (Array.isArray(this.data[name])) {\r\n this.data[name].push(value);\r\n } else {\r\n this.data[name] = [this.data[name], value];\r\n }\r\n } else {\r\n this.set(name, value);\r\n }\r\n dmx.requestUpdate(name);\r\n dmx.requestUpdate(this.name);\r\n this.updateRelated();\r\n },\r\n\r\n set: function(name, value) {\r\n if (typeof name == 'object') {\r\n for (var prop in name) {\r\n if (name.hasOwnProperty(prop)) {\r\n this.set(prop, name[prop]);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!dmx.equal(this.data[name], value)) {\r\n this.data[name] = value;\r\n dmx.requestUpdate(name);\r\n dmx.requestUpdate(this.name);\r\n this.updateRelated();\r\n }\r\n },\r\n\r\n del: function(name) {\r\n delete this.data[name];\r\n dmx.requestUpdate(name);\r\n dmx.requestUpdate(this.name);\r\n this.updateRelated();\r\n }\r\n});\r\n","(function() {\r\n\r\n/**\r\n * Expose `pathToRegexp`.\r\n */\r\ndmx.pathToRegexp = pathToRegexp\r\ndmx.pathToRegexp.parse = parse\r\ndmx.pathToRegexp.compile = compile\r\ndmx.pathToRegexp.tokensToFunction = tokensToFunction\r\ndmx.pathToRegexp.tokensToRegExp = tokensToRegExp\r\n\r\n/**\r\n * Default configs.\r\n */\r\nvar DEFAULT_DELIMITER = '/'\r\n\r\n/**\r\n * The main path matching regexp utility.\r\n *\r\n * @type {RegExp}\r\n */\r\nvar PATH_REGEXP = new RegExp([\r\n // Match escaped characters that would otherwise appear in future matches.\r\n // This allows the user to escape special characters that won't transform.\r\n '(\\\\\\\\.)',\r\n // Match Express-style parameters and un-named parameters with a prefix\r\n // and optional suffixes. Matches appear as:\r\n //\r\n // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\r\n // \"(\\\\d+)\" => [undefined, undefined, \"\\d+\", undefined]\r\n '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\r\n].join('|'), 'g')\r\n\r\n/**\r\n * Parse a string for the raw tokens.\r\n *\r\n * @param {string} str\r\n * @param {Object=} options\r\n * @return {!Array}\r\n */\r\nfunction parse (str, options) {\r\n var tokens = []\r\n var key = 0\r\n var index = 0\r\n var path = ''\r\n var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\r\n var whitelist = (options && options.whitelist) || undefined\r\n var pathEscaped = false\r\n var res\r\n\r\n while ((res = PATH_REGEXP.exec(str)) !== null) {\r\n var m = res[0]\r\n var escaped = res[1]\r\n var offset = res.index\r\n path += str.slice(index, offset)\r\n index = offset + m.length\r\n\r\n // Ignore already escaped sequences.\r\n if (escaped) {\r\n path += escaped[1]\r\n pathEscaped = true\r\n continue\r\n }\r\n\r\n var prev = ''\r\n var name = res[2]\r\n var capture = res[3]\r\n var group = res[4]\r\n var modifier = res[5]\r\n\r\n if (!pathEscaped && path.length) {\r\n var k = path.length - 1\r\n var c = path[k]\r\n var matches = whitelist ? whitelist.indexOf(c) > -1 : true\r\n\r\n if (matches) {\r\n prev = c\r\n path = path.slice(0, k)\r\n }\r\n }\r\n\r\n // Push the current path onto the tokens.\r\n if (path) {\r\n tokens.push(path)\r\n path = ''\r\n pathEscaped = false\r\n }\r\n\r\n var repeat = modifier === '+' || modifier === '*'\r\n var optional = modifier === '?' || modifier === '*'\r\n var pattern = capture || group\r\n var delimiter = prev || defaultDelimiter\r\n\r\n tokens.push({\r\n name: name || key++,\r\n prefix: prev,\r\n delimiter: delimiter,\r\n optional: optional,\r\n repeat: repeat,\r\n pattern: pattern\r\n ? escapeGroup(pattern)\r\n : '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']+?'\r\n })\r\n }\r\n\r\n // Push any remaining characters.\r\n if (path || index < str.length) {\r\n tokens.push(path + str.substr(index))\r\n }\r\n\r\n return tokens\r\n}\r\n\r\n/**\r\n * Compile a string to a template function for the path.\r\n *\r\n * @param {string} str\r\n * @param {Object=} options\r\n * @return {!function(Object=, Object=)}\r\n */\r\nfunction compile (str, options) {\r\n return tokensToFunction(parse(str, options))\r\n}\r\n\r\n/**\r\n * Expose a method for transforming tokens into the path function.\r\n */\r\nfunction tokensToFunction (tokens) {\r\n // Compile all the tokens into regexps.\r\n var matches = new Array(tokens.length)\r\n\r\n // Compile all the patterns before compilation.\r\n for (var i = 0; i < tokens.length; i++) {\r\n if (typeof tokens[i] === 'object') {\r\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\r\n }\r\n }\r\n\r\n return function (data, options) {\r\n var path = ''\r\n var encode = (options && options.encode) || encodeURIComponent\r\n\r\n for (var i = 0; i < tokens.length; i++) {\r\n var token = tokens[i]\r\n\r\n if (typeof token === 'string') {\r\n path += token\r\n continue\r\n }\r\n\r\n var value = data ? data[token.name] : undefined\r\n var segment\r\n\r\n if (Array.isArray(value)) {\r\n if (!token.repeat) {\r\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\r\n }\r\n\r\n if (value.length === 0) {\r\n if (token.optional) continue\r\n\r\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\r\n }\r\n\r\n for (var j = 0; j < value.length; j++) {\r\n segment = encode(value[j], token)\r\n\r\n if (!matches[i].test(segment)) {\r\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\r\n }\r\n\r\n path += (j === 0 ? token.prefix : token.delimiter) + segment\r\n }\r\n\r\n continue\r\n }\r\n\r\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\r\n segment = encode(String(value), token)\r\n\r\n if (!matches[i].test(segment)) {\r\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\r\n }\r\n\r\n path += token.prefix + segment\r\n continue\r\n }\r\n\r\n if (token.optional) continue\r\n\r\n throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\r\n }\r\n\r\n return path\r\n }\r\n}\r\n\r\n/**\r\n * Escape a regular expression string.\r\n *\r\n * @param {string} str\r\n * @return {string}\r\n */\r\nfunction escapeString (str) {\r\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\r\n}\r\n\r\n/**\r\n * Escape the capturing group by escaping special characters and meaning.\r\n *\r\n * @param {string} group\r\n * @return {string}\r\n */\r\nfunction escapeGroup (group) {\r\n return group.replace(/([=!:$/()])/g, '\\\\$1')\r\n}\r\n\r\n/**\r\n * Get the flags for a regexp from the options.\r\n *\r\n * @param {Object} options\r\n * @return {string}\r\n */\r\nfunction flags (options) {\r\n return options && options.sensitive ? '' : 'i'\r\n}\r\n\r\n/**\r\n * Pull out keys from a regexp.\r\n *\r\n * @param {!RegExp} path\r\n * @param {Array=} keys\r\n * @return {!RegExp}\r\n */\r\nfunction regexpToRegexp (path, keys) {\r\n if (!keys) return path\r\n\r\n // Use a negative lookahead to match only capturing groups.\r\n var groups = path.source.match(/\\((?!\\?)/g)\r\n\r\n if (groups) {\r\n for (var i = 0; i < groups.length; i++) {\r\n keys.push({\r\n name: i,\r\n prefix: null,\r\n delimiter: null,\r\n optional: false,\r\n repeat: false,\r\n pattern: null\r\n })\r\n }\r\n }\r\n\r\n return path\r\n}\r\n\r\n/**\r\n * Transform an array into a regexp.\r\n *\r\n * @param {!Array} path\r\n * @param {Array=} keys\r\n * @param {Object=} options\r\n * @return {!RegExp}\r\n */\r\nfunction arrayToRegexp (path, keys, options) {\r\n var parts = []\r\n\r\n for (var i = 0; i < path.length; i++) {\r\n parts.push(pathToRegexp(path[i], keys, options).source)\r\n }\r\n\r\n return new RegExp('(?:' + parts.join('|') + ')', flags(options))\r\n}\r\n\r\n/**\r\n * Create a path regexp from string input.\r\n *\r\n * @param {string} path\r\n * @param {Array=} keys\r\n * @param {Object=} options\r\n * @return {!RegExp}\r\n */\r\nfunction stringToRegexp (path, keys, options) {\r\n return tokensToRegExp(parse(path, options), keys, options)\r\n}\r\n\r\n/**\r\n * Expose a function for taking tokens and returning a RegExp.\r\n *\r\n * @param {!Array} tokens\r\n * @param {Array=} keys\r\n * @param {Object=} options\r\n * @return {!RegExp}\r\n */\r\nfunction tokensToRegExp (tokens, keys, options) {\r\n options = options || {}\r\n\r\n var strict = options.strict\r\n var start = options.start !== false\r\n var end = options.end !== false\r\n var delimiter = options.delimiter || DEFAULT_DELIMITER\r\n var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\r\n var route = start ? '^' : ''\r\n\r\n // Iterate over the tokens and create our regexp string.\r\n for (var i = 0; i < tokens.length; i++) {\r\n var token = tokens[i]\r\n\r\n if (typeof token === 'string') {\r\n route += escapeString(token)\r\n } else {\r\n var capture = token.repeat\r\n ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\r\n : token.pattern\r\n\r\n if (keys) keys.push(token)\r\n\r\n if (token.optional) {\r\n if (!token.prefix) {\r\n route += '(' + capture + ')?'\r\n } else {\r\n route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\r\n }\r\n } else {\r\n route += escapeString(token.prefix) + '(' + capture + ')'\r\n }\r\n }\r\n }\r\n\r\n if (end) {\r\n if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\r\n\r\n route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\r\n } else {\r\n var endToken = tokens[tokens.length - 1]\r\n var isEndDelimited = typeof endToken === 'string'\r\n ? endToken[endToken.length - 1] === delimiter\r\n : endToken === undefined\r\n\r\n if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\r\n if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\r\n }\r\n\r\n return new RegExp(route, flags(options))\r\n}\r\n\r\n/**\r\n * Normalize the given path string, returning a regular expression.\r\n *\r\n * An empty array can be passed in for the keys, which will hold the\r\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\r\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\r\n *\r\n * @param {(string|RegExp|Array)} path\r\n * @param {Array=} keys\r\n * @param {Object=} options\r\n * @return {!RegExp}\r\n */\r\nfunction pathToRegexp (path, keys, options) {\r\n if (path instanceof RegExp) {\r\n return regexpToRegexp(path, keys)\r\n }\r\n\r\n if (Array.isArray(path)) {\r\n return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\r\n }\r\n\r\n return stringToRegexp(/** @type {string} */ (path), keys, options)\r\n}\r\n\r\n})();\r\n","if (!window.Hjson) {\r\n window.Hjson = {};\r\n\r\n Hjson.parse = function(source) {\r\n // only parse, stripped dsf and comment support\r\n\r\n var text;\r\n var at; // The index of the current character\r\n var ch; // The current character\r\n var escapee = {\r\n '\"': '\"',\r\n \"'\": \"'\",\r\n '\\\\': '\\\\',\r\n '/': '/',\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t'\r\n };\r\n\r\n function resetAt() {\r\n at = 0;\r\n ch = ' ';\r\n }\r\n\r\n function isPunctuatorChar(c) {\r\n return c === '{' || c === '}' || c === '[' || c === ']' || c === ',' || c === ':';\r\n }\r\n\r\n // Call error when something is wrong.\r\n function error(m) {\r\n var i, col=0, line=1;\r\n for (i = at-1; i > 0 && text[i] !== '\\n'; i--, col++) {}\r\n for (; i > 0; i--) if (text[i] === '\\n') line++;\r\n throw new Error(m + \" at line \" + line + \",\" + col + \" >>>\" + text.substr(at-col, 20) + \" ...\");\r\n }\r\n\r\n function next() {\r\n // get the next character.\r\n ch = text.charAt(at);\r\n at++;\r\n return ch;\r\n }\r\n\r\n function peek(offs) {\r\n // range check is not required\r\n return text.charAt(at + offs);\r\n }\r\n\r\n function string(allowML) {\r\n // Parse a string value.\r\n // callers make sure that (ch === '\"' || ch === \"'\")\r\n var string = '';\r\n\r\n // When parsing for string values, we must look for \"/' and \\ characters.\r\n var exitCh = ch;\r\n while (next()) {\r\n if (ch === exitCh) {\r\n next();\r\n if (allowML && exitCh === \"'\" && ch === \"'\" && string.length === 0) {\r\n // ''' indicates a multiline string\r\n next();\r\n return mlString();\r\n } else return string;\r\n }\r\n if (ch === '\\\\') {\r\n next();\r\n if (ch === 'u') {\r\n var uffff = 0;\r\n for (var i = 0; i < 4; i++) {\r\n next();\r\n var c = ch.charCodeAt(0), hex;\r\n if (ch >= '0' && ch <= '9') hex = c - 48;\r\n else if (ch >= 'a' && ch <= 'f') hex = c - 97 + 0xa;\r\n else if (ch >= 'A' && ch <= 'F') hex = c - 65 + 0xa;\r\n else error(\"Bad \\\\u char \" + ch);\r\n uffff = uffff * 16 + hex;\r\n }\r\n string += String.fromCharCode(uffff);\r\n } else if (typeof escapee[ch] === 'string') {\r\n string += escapee[ch];\r\n } else break;\r\n } else if (ch === '\\n' || ch === '\\r') {\r\n error(\"Bad string containing newline\");\r\n } else {\r\n string += ch;\r\n }\r\n }\r\n error(\"Bad string\");\r\n }\r\n\r\n function mlString() {\r\n // Parse a multiline string value.\r\n var string = '', triple = 0;\r\n\r\n // we are at ''' +1 - get indent\r\n var indent = 0;\r\n for (;;) {\r\n var c=peek(-indent-5);\r\n if (!c || c === '\\n') break;\r\n indent++;\r\n }\r\n\r\n function skipIndent() {\r\n var skip = indent;\r\n while (ch && ch <= ' ' && ch !== '\\n' && skip-- > 0) next();\r\n }\r\n\r\n // skip white/to (newline)\r\n while (ch && ch <= ' ' && ch !== '\\n') next();\r\n if (ch === '\\n') { next(); skipIndent(); }\r\n\r\n // When parsing multiline string values, we must look for ' characters.\r\n for (;;) {\r\n if (!ch) {\r\n error(\"Bad multiline string\");\r\n } else if (ch === '\\'') {\r\n triple++;\r\n next();\r\n if (triple === 3) {\r\n if (string.slice(-1) === '\\n') string=string.slice(0, -1); // remove last EOL\r\n return string;\r\n } else continue;\r\n } else {\r\n while (triple > 0) {\r\n string += '\\'';\r\n triple--;\r\n }\r\n }\r\n if (ch === '\\n') {\r\n string += '\\n';\r\n next();\r\n skipIndent();\r\n } else {\r\n if (ch !== '\\r') string += ch;\r\n next();\r\n }\r\n }\r\n }\r\n\r\n function keyname() {\r\n // quotes for keys are optional in Hjson\r\n // unless they include {}[],: or whitespace.\r\n\r\n if (ch === '\"' || ch === \"'\") return string(false);\r\n\r\n var name = \"\", start = at, space = -1;\r\n for (;;) {\r\n if (ch === ':') {\r\n if (!name) error(\"Found ':' but no key name (for an empty key name use quotes)\");\r\n else if (space >=0 && space !== name.length) { at = start + space; error(\"Found whitespace in your key name (use quotes to include)\"); }\r\n return name;\r\n } else if (ch <= ' ') {\r\n if (!ch) error(\"Found EOF while looking for a key name (check your syntax)\");\r\n else if (space < 0) space = name.length;\r\n } else if (isPunctuatorChar(ch)) {\r\n error(\"Found '\" + ch + \"' where a key name was expected (check your syntax or use quotes if the key name includes {}[],: or whitespace)\");\r\n } else {\r\n name += ch;\r\n }\r\n next();\r\n }\r\n }\r\n\r\n function white() {\r\n while (ch) {\r\n // Skip whitespace.\r\n while (ch && ch <= ' ') next();\r\n // Hjson allows comments\r\n if (ch === '#' || ch === '/' && peek(0) === '/') {\r\n while (ch && ch !== '\\n') next();\r\n } else if (ch === '/' && peek(0) === '*') {\r\n next(); next();\r\n while (ch && !(ch === '*' && peek(0) === '/')) next();\r\n if (ch) { next(); next(); }\r\n } else break;\r\n }\r\n }\r\n\r\n function tfnns() {\r\n // Hjson strings can be quoteless\r\n // returns string, true, false, or null.\r\n var value = ch;\r\n if (isPunctuatorChar(ch))\r\n error(\"Found a punctuator character '\" + ch + \"' when expecting a quoteless string (check your syntax)\");\r\n\r\n for(;;) {\r\n next();\r\n // (detection of ml strings was moved to string())\r\n var isEol = ch === '\\r' || ch === '\\n' || ch === '';\r\n if (isEol ||\r\n ch === ',' || ch === '}' || ch === ']' ||\r\n ch === '#' ||\r\n ch === '/' && (peek(0) === '/' || peek(0) === '*')\r\n ) {\r\n // this tests for the case of {true|false|null|num}\r\n // followed by { ',' | '}' | ']' | '#' | '//' | '/*' }\r\n // which needs to be parsed as the specified value\r\n var chf = value[0];\r\n switch (chf) {\r\n case 'f': if (value.trim() === \"false\") return false; break;\r\n case 'n': if (value.trim() === \"null\") return null; break;\r\n case 't': if (value.trim() === \"true\") return true; break;\r\n default:\r\n if (chf === '-' || chf >= '0' && chf <= '9') {\r\n var n = tryParseNumber(value);\r\n if (n !== undefined) return n;\r\n }\r\n }\r\n if (isEol) {\r\n // remove any whitespace at the end (ignored in quoteless strings)\r\n return value.trim();\r\n }\r\n }\r\n value += ch;\r\n }\r\n }\r\n\r\n function tryParseNumber(text, stopAtNext) {\r\n // try to parse a number\r\n \r\n var number, string = '', leadingZeros = 0, testLeading = true;\r\n var at = 0;\r\n var ch;\r\n function next() {\r\n ch = text.charAt(at);\r\n at++;\r\n return ch;\r\n }\r\n \r\n next();\r\n if (ch === '-') {\r\n string = '-';\r\n next();\r\n }\r\n while (ch >= '0' && ch <= '9') {\r\n if (testLeading) {\r\n if (ch == '0') leadingZeros++;\r\n else testLeading = false;\r\n }\r\n string += ch;\r\n next();\r\n }\r\n if (testLeading) leadingZeros--; // single 0 is allowed\r\n if (ch === '.') {\r\n string += '.';\r\n while (next() && ch >= '0' && ch <= '9')\r\n string += ch;\r\n }\r\n if (ch === 'e' || ch === 'E') {\r\n string += ch;\r\n next();\r\n if (ch === '-' || ch === '+') {\r\n string += ch;\r\n next();\r\n }\r\n while (ch >= '0' && ch <= '9') {\r\n string += ch;\r\n next();\r\n }\r\n }\r\n \r\n // skip white/to (newline)\r\n while (ch && ch <= ' ') next();\r\n \r\n if (stopAtNext) {\r\n // end scan if we find a punctuator character like ,}] or a comment\r\n if (ch === ',' || ch === '}' || ch === ']' ||\r\n ch === '#' || ch === '/' && (text[at] === '/' || text[at] === '*')) ch = 0;\r\n }\r\n \r\n number = +string;\r\n if (ch || leadingZeros || !isFinite(number)) return undefined;\r\n else return number;\r\n }\r\n \r\n function errorClosingHint(value) {\r\n function search(value, ch) {\r\n var i, k, length, res;\r\n switch (typeof value) {\r\n case 'string':\r\n if (value.indexOf(ch) >= 0) res = value;\r\n break;\r\n case 'object':\r\n if (Object.prototype.toString.apply(value) === '[object Array]') {\r\n for (i = 0, length = value.length; i < length; i++) {\r\n res=search(value[i], ch) || res;\r\n }\r\n } else {\r\n for (k in value) {\r\n if (!Object.prototype.hasOwnProperty.call(value, k)) continue;\r\n res=search(value[k], ch) || res;\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n \r\n function report(ch) {\r\n var possibleErr=search(value, ch);\r\n if (possibleErr) {\r\n return \"found '\"+ch+\"' in a string value, your mistake could be with:\\n\"+\r\n \" > \"+possibleErr+\"\\n\"+\r\n \" (unquoted strings contain everything up to the next line!)\";\r\n } else return \"\";\r\n }\r\n \r\n return report('}') || report(']');\r\n }\r\n\r\n function array() {\r\n // Parse an array value.\r\n // assuming ch === '['\r\n \r\n var array = [];\r\n try {\r\n next();\r\n white();\r\n if (ch === ']') {\r\n next();\r\n return array; // empty array\r\n }\r\n \r\n while (ch) {\r\n array.push(value());\r\n white();\r\n // in Hjson the comma is optional and trailing commas are allowed\r\n // note that we do not keep comments before the , if there are any\r\n if (ch === ',') { next(); white(); }\r\n if (ch === ']') {\r\n next();\r\n return array;\r\n }\r\n white();\r\n }\r\n \r\n error(\"End of input while parsing an array (missing ']')\");\r\n } catch (e) {\r\n e.hint=e.hint||errorClosingHint(array);\r\n throw e;\r\n }\r\n }\r\n\r\n function object(withoutBraces) {\r\n // Parse an object value.\r\n \r\n var key = \"\", object = {};\r\n \r\n try {\r\n if (!withoutBraces) {\r\n // assuming ch === '{'\r\n next();\r\n }\r\n\r\n white();\r\n if (ch === '}' && !withoutBraces) {\r\n next();\r\n return object; // empty object\r\n }\r\n while (ch) {\r\n key = keyname();\r\n white();\r\n if (ch !== ':') error(\"Expected ':' instead of '\" + ch + \"'\");\r\n next();\r\n // duplicate keys overwrite the previous value\r\n object[key] = value();\r\n white();\r\n // in Hjson the comma is optional and trailing commas are allowed\r\n // note that we do not keep comments before the , if there are any\r\n if (ch === ',') { next(); white(); }\r\n if (ch === '}' && !withoutBraces) {\r\n next();\r\n return object;\r\n }\r\n white();\r\n }\r\n \r\n if (withoutBraces) return object;\r\n else error(\"End of input while parsing an object (missing '}')\");\r\n } catch (e) {\r\n e.hint=e.hint||errorClosingHint(object);\r\n throw e;\r\n }\r\n }\r\n\r\n function value() {\r\n // Parse a Hjson value. It could be an object, an array, a string, a number or a word.\r\n \r\n white();\r\n switch (ch) {\r\n case '{': return object();\r\n case '[': return array();\r\n case \"'\":\r\n case '\"': return string(true);\r\n default: return tfnns();\r\n }\r\n }\r\n\r\n function checkTrailing(v) {\r\n white();\r\n if (ch) error(\"Syntax error, found trailing characters\");\r\n return v;\r\n }\r\n\r\n function rootValue() {\r\n white();\r\n switch (ch) {\r\n case '{': return checkTrailing(object());\r\n case '[': return checkTrailing(array());\r\n default: return checkTrailing(value());\r\n }\r\n }\r\n\r\n if (typeof source!==\"string\") throw new Error(\"source is not a string\");\r\n text = source;\r\n resetAt();\r\n return rootValue();\r\n };\r\n}","dmx.Flow = dmx.createClass({\r\n\r\n constructor: function(parent) {\r\n if (!(this instanceof dmx.Flow)) {\r\n return new dmx.Flow(parent);\r\n }\r\n\r\n if (!window.Promise) {\r\n console.warn('Promises are not supported, flows can not be used');\r\n }\r\n\r\n this._execStep = this._execStep.bind(this);\r\n\r\n this.scope = new dmx.DataScope({}, parent);\r\n this.output = {};\r\n },\r\n\r\n run: function(flow) {\r\n var self = this;\r\n\r\n this.output = {};\r\n\r\n return this._exec(flow.exec || flow).then(function() {\r\n if (dmx.debug) {\r\n console.debug('finished', self.output);\r\n }\r\n return self.output;\r\n });\r\n },\r\n\r\n _each: function(arr, fn) {\r\n return Promise.resolve(arr).then(function(arr) {\r\n arr = Array.isArray(arr) ? arr : [arr];\r\n\r\n return arr.reduce(function(prev, curr, i) {\r\n return prev.then(function() {\r\n return fn(curr, i, arr.length).then(function(result) {\r\n if (result) {\r\n arr[i] = result;\r\n }\r\n });\r\n });\r\n }, Promise.resolve()).then(function() {\r\n return arr;\r\n });\r\n });\r\n },\r\n\r\n _exec: function(flow) {\r\n var self = this;\r\n\r\n if (flow.steps) {\r\n var promise = this._each(flow.steps, this._execStep);\r\n \r\n if (flow.catch) {\r\n promise.catch(function(err) {\r\n return self._each(flow.catch, self._execStep);\r\n });\r\n }\r\n \r\n return promise;\r\n }\r\n\r\n return this._each(flow, this._execStep);\r\n },\r\n\r\n _execStep: function(step) {\r\n var self = this;\r\n\r\n if (dmx.debug) {\r\n console.debug('exec step', step);\r\n }\r\n\r\n for (var name in step) {\r\n if (step.hasOwnProperty(name) && dmx.__actions[name]) {\r\n var action = dmx.__actions[name].bind(this);\r\n var options = step[name];\r\n\r\n if (dmx.debug) {\r\n console.debug('exec action', name, options);\r\n }\r\n\r\n if (options.disabled) {\r\n return Promise.resolve();\r\n }\r\n \r\n return Promise.resolve(action(options)).then(function(output) {\r\n if (options.name) {\r\n //self.data[options.name] = output\r\n if (dmx.debug) {\r\n console.debug('set data', options.name, output);\r\n }\r\n \r\n self.scope.set(options.name, output);\r\n\r\n if (options.output) {\r\n if (dmx.debug) {\r\n console.debug('set output', options.name, output);\r\n }\r\n self.output[options.name] = output;\r\n }\r\n }\r\n });\r\n } else {\r\n throw new Error('Action ' + name + ' was not found.');\r\n }\r\n }\r\n },\r\n\r\n parse: function(value) {\r\n if (value == null) return value;\r\n\r\n value = value.valueOf();\r\n\r\n if (typeof value == 'object') {\r\n var obj = value.slice ? [] : {};\r\n\r\n for (var key in value) {\r\n if (value.hasOwnProperty(key)) {\r\n obj[key] = this.parse(value[key], this.scope);\r\n }\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n if (typeof value == 'string' && value.indexOf('{{') != -1) {\r\n return dmx.parse(value, this.scope);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n});\r\n\r\ndmx.Flow.run = function(flow, data) {\r\n var instance = new dmx.Flow(data);\r\n return instance.run(flow);\r\n};\r\n","dmx.Component('app', {\r\n\r\n constructor: function(node, parent) {\r\n this.onload = this.onload.bind(this);\r\n dmx.BaseComponent.call(this, node, parent);\r\n },\r\n\r\n initialData: {\r\n query: {}\r\n },\r\n\r\n attributes: {},\r\n\r\n methods: {},\r\n\r\n events: {\r\n ready: Event,\r\n load: Event\r\n },\r\n\r\n render: function(node) {\r\n this.parseQuery();\r\n this.$parse();\r\n window.removeEventListener('load', this.onload);\r\n window.addEventListener('load', this.onload);\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('ready');\r\n }, this);\r\n },\r\n\r\n update: function() {\r\n this.parseQuery();\r\n },\r\n\r\n onload: function() {\r\n this.dispatchEvent('load');\r\n },\r\n\r\n parseQuery: function() {\r\n var querystring = '';\r\n\r\n if (window.location.search) {\r\n querystring = window.location.search.substr(1);\r\n } else if (window.location.hash.indexOf('?')) {\r\n querystring = window.location.hash.substr(window.location.hash.indexOf('?') + 1);\r\n if (querystring.indexOf('#') > 0) {\r\n querystring = querystring.substr(0, querystring.indexOf('#'));\r\n }\r\n }\r\n\r\n var query = querystring.split('&').reduce(function(query, part) {\r\n var p = part.replace(/\\+/g, ' ').split('=');\r\n if (p[0]) {\r\n query[decodeURIComponent(p[0])] = decodeURIComponent(p[1] || '');\r\n }\r\n return query;\r\n }, {});\r\n\r\n var base = document.querySelector('meta[name=\"ac:base\"]');\r\n var route = document.querySelector('meta[name=\"ac:route\"]');\r\n if (route && route.content) {\r\n var keys = [];\r\n var path = route.content;\r\n\r\n if (base && base.content) {\r\n path = base.content.replace(/\\/$/, '') + path;\r\n }\r\n\r\n var re = dmx.pathToRegexp(path, keys, { end: false });\r\n var match = re.exec(decodeURI(window.location.pathname));\r\n\r\n if (match) {\r\n keys.forEach(function(key, index) {\r\n query[key.name] = match[index + 1];\r\n });\r\n }\r\n }\r\n\r\n this.set('query', query);\r\n }\r\n\r\n});\r\n","dmx.Component('form', {\r\n\r\n tag: 'form',\r\n\r\n attributes: {\r\n novalidate: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n methods: {\r\n submit: function(direct) {\r\n if (direct) {\r\n this._submit();\r\n } else {\r\n this.submit();\r\n }\r\n },\r\n\r\n reset: function() {\r\n this.reset();\r\n },\r\n\r\n validate: function() {\r\n this.validate();\r\n }\r\n },\r\n\r\n events: {\r\n invalid: Event, // when form validation failed\r\n submit: Event // on form submit (can cancel submit)\r\n },\r\n\r\n render: function(node) {\r\n dmx.BaseComponent.prototype.render.call(this, node);\r\n this.$node.noValidate = true;\r\n this.$node.addEventListener('submit', this.onsubmit.bind(this));\r\n this.$node.addEventListener('reset', this.onreset.bind(this));\r\n },\r\n\r\n submit: function(data) {\r\n if (this.props.novalidate || this.validate()) {\r\n if (this.dispatchEvent('submit', { cancelable: true })) {\r\n this._submit();\r\n }\r\n } else {\r\n dmx.requestUpdate();\r\n this.dispatchEvent('invalid');\r\n var elm = dmx.array(this.$node.elements).find(function(elm) {\r\n if (!elm.validity.valid) return true;\r\n });\r\n if (elm) {\r\n elm.focus();\r\n }\r\n }\r\n },\r\n\r\n _submit: function() {\r\n //this.$node.submit();\r\n HTMLFormElement.prototype.submit.call(this.$node);\r\n },\r\n\r\n reset: function() {\r\n //this.$node.reset();\r\n HTMLFormElement.prototype.reset.call(this.$node);\r\n },\r\n\r\n validate: function() {\r\n return dmx.validate(this.$node);\r\n },\r\n\r\n onsubmit: function(event) {\r\n event.preventDefault();\r\n this.submit();\r\n },\r\n\r\n onreset: function(event) {\r\n dmx.validateReset(this.$node);\r\n if (window.grecaptcha && this.$node.querySelector('.g-recaptcha')) {\r\n grecaptcha.reset();\r\n }\r\n dmx.requestUpdate();\r\n }\r\n\r\n});\r\n","dmx.Component('form-element', {\r\n\r\n constructor: function(node, parent) {\r\n this.updateData = dmx.debounce(this.updateData.bind(this));\r\n dmx.BaseComponent.call(this, node, parent);\r\n },\r\n\r\n initialData: {\r\n value: '',\r\n disabled: false,\r\n validationMessage: '',\r\n invalid: false,\r\n focused: false\r\n },\r\n\r\n attributes: {\r\n value: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n methods: {\r\n setValue: function(value) {\r\n this.setValue(value);\r\n },\r\n\r\n focus: function() {\r\n this.focus();\r\n },\r\n\r\n disable: function(disable) {\r\n this.disable(disable);\r\n },\r\n\r\n validate: function() {\r\n this.validate();\r\n }\r\n },\r\n\r\n events: {\r\n updated: Event,\r\n changed: Event\r\n },\r\n\r\n render: function(node) {\r\n dmx.BaseComponent.prototype.render.call(this, node);\r\n this.$node.value = this.props.value || '';\r\n this.$node.disabled = this.props.disabled;\r\n this.$node.defaultValue = this.props.value || '';\r\n this.$node.addEventListener('input', this.updateData.bind(this));\r\n this.$node.addEventListener('change', this.updateData.bind(this));\r\n this.$node.addEventListener('invalid', this.updateData.bind(this));\r\n this.$node.addEventListener('focus', this.updateData.bind(this));\r\n this.$node.addEventListener('blur', this.updateData.bind(this));\r\n //this.set('value', this.props.value || '');\r\n //this.set('disabled', this.props.disabled);\r\n this.updateData();\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('value')) {\r\n this.$node.defaultValue = this.props.value || '';\r\n this.setValue(this.props.value);\r\n }\r\n\r\n if (props.disabled != this.props.disabled) {\r\n this.$node.disabled = this.props.disabled;\r\n }\r\n\r\n this.updateData();\r\n },\r\n\r\n updateData: function(event) {\r\n if (event && this.$node.dirty) {\r\n dmx.validate(this.$node);\r\n }\r\n\r\n if (this.$node.value !== this.data.value) {\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n if (event) this.dispatchEvent('changed');\r\n }, this);\r\n }\r\n\r\n this.set('value', this.$node.value);\r\n this.set('disabled', this.$node.disabled);\r\n this.set('focused', this.$node === document.activeElement);\r\n\r\n if (this.$node.dirty) {\r\n this.set('invalid', !this.$node.validity.valid);\r\n this.set('validationMessage', this.$node.validationMessage);\r\n }\r\n },\r\n\r\n setValue: function(value) {\r\n this.$node.value = value || '';\r\n this.updateData();\r\n },\r\n\r\n focus: function() {\r\n this.$node.focus();\r\n },\r\n\r\n disable: function(disable) {\r\n this.$node.disabled = (disable === true);\r\n this.updateData();\r\n },\r\n\r\n validate: function() {\r\n dmx.validate(this.$node);\r\n this.updateData();\r\n }\r\n\r\n});\r\n","dmx.Component('textarea', {\r\n\r\n extends: 'form-element',\r\n\r\n tag: 'textarea',\r\n\r\n render: function(node) {\r\n if (!this.props.value) {\r\n var value = this.$node.value;\r\n if (value.indexOf('{{') !== -1) {\r\n this.props.value = dmx.parse(value, this);\r\n } else {\r\n this.props.value = value;\r\n }\r\n }\n dmx.Component('form-element').prototype.render.call(this, node);\r\n }\r\n\r\n});\r\n","dmx.Component('input', {\r\n extends: 'form-element',\r\n tag: 'input'\r\n});\r\n","dmx.Component('input-file', {\r\n\r\n extends: 'input',\r\n\r\n initialData:{\r\n file: null\r\n },\r\n\r\n render: function(node) {\r\n dmx.Component('form-element').prototype.render.call(this, node);\r\n this.$node.addEventListener('change', this.onchange.bind(this));\r\n if (this.$node.form) {\r\n this.$node.form.addEventListener('reset', this.onchange.bind(this));\r\n }\r\n },\r\n\r\n onchange: function() {\r\n var data = null;\r\n\r\n if (this.$node.files.length) {\r\n var file = this.$node.files[0];\r\n\r\n data = {\r\n date: (file.lastModified ? new Date(file.lastModified) : file.lastModifiedDate).toISOString(),\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n dataUrl: null\r\n };\r\n\r\n if (file.type.indexOf('image/') !== -1 && !file.reader) {\r\n file.reader = new FileReader();\r\n\r\n file.reader.onload = function(event) {\r\n data.dataUrl = event.target.result;\r\n dmx.requestUpdate();\r\n };\r\n\r\n file.reader.readAsDataURL(file);\r\n }\r\n }\r\n\r\n this.set('file', data);\r\n },\r\n\r\n setValue: function() {\r\n console.warn('Can not set value of a file input!');\r\n }\r\n\r\n});\r\n","dmx.Component('input-file-multiple', {\r\n\r\n extends: 'input',\r\n\r\n initialData: {\r\n files: []\r\n },\r\n\r\n render: function(node) {\r\n dmx.Component('form-element').prototype.render.call(this, node);\r\n this.$node.addEventListener('change', this.onchange.bind(this));\r\n if (this.$node.form) {\r\n this.$node.form.addEventListener('reset', this.onchange.bind(this));\r\n }\r\n },\r\n\r\n onchange: function() {\r\n var self = this;\r\n var files = Array.prototype.slice.call(this.$node.files).map(function(file) {\r\n var data = {\r\n date: (file.lastModified ? new Date(file.lastModified) : file.lastModifiedDate).toISOString(),\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n dataUrl: null\r\n };\r\n\r\n if (file.type.indexOf('image/') !== -1 && !file.reader) {\r\n file.reader = new FileReader();\r\n\r\n file.reader.onload = function(event) {\r\n data.dataUrl = event.target.result;\r\n dmx.requestUpdate();\r\n };\r\n\r\n file.reader.readAsDataURL(file);\r\n }\r\n\r\n return data;\r\n });\r\n\r\n this.set('files', files);\r\n },\r\n\r\n setValue: function() {\r\n console.warn('Can not set value of a file input!');\r\n }\r\n\r\n});\r\n","dmx.Component('input-number', {\r\n\r\n extends: 'input',\r\n\r\n render: function(node) {\r\n dmx.Component('form-element').prototype.render.call(this, node);\r\n this.set('value', +this.props.value);\r\n },\r\n\r\n updateData: function(event) {\r\n if (event && this.$node.dirty) {\r\n dmx.validate(this.$node);\r\n }\r\n\r\n if (this.$node.value !== this.data.value) {\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n if (event) this.dispatchEvent('changed');\r\n }, this);\r\n }\r\n this.set('value', this.$node.value ? +this.$node.value : null);\r\n this.set('disabled', this.$node.disabled);\r\n\r\n if (this.$node.dirty) {\r\n this.set('invalid', !this.$node.validity.valid);\r\n this.set('validationMessage', this.$node.validationMessage);\r\n }\r\n }\r\n\r\n});\r\n","dmx.Component('button', {\r\n\r\n extends: 'form-element',\r\n\r\n tag: 'button',\r\n\r\n attributes: {\r\n type: {\r\n type: String,\r\n default: 'button', // button, reset, submit\r\n validate: function(val) {\r\n return /^(button|submit|reset)$/i.test(val);\r\n }\r\n }\r\n },\r\n\r\n render: function(node) {\r\n dmx.Component('form-element').prototype.render.call(this, node);\r\n this.$node.type = this.props.type;\r\n }\r\n\r\n});\r\n","dmx.Component('radio', {\r\n\r\n extends: 'form-element',\r\n\r\n initialData: {\r\n checked: false\r\n },\r\n\r\n tag: 'input',\r\n\r\n attributes: {\r\n checked: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n methods: {\r\n select: function(check) {\r\n this.select(check);\r\n }\r\n },\r\n\r\n render: function(node) {\r\n dmx.Component('form-element').prototype.render.call(this, node);\r\n this.$node.addEventListener('click', this.updateData.bind(this));\r\n this.$node.type = 'radio';\r\n this.$node.checked = this.props.checked;\r\n this.$node.defaultChecked = this.props.checked;\r\n this.set('checked', this.props.checked);\r\n },\r\n\r\n update: function(props, fields) {\r\n dmx.Component('form-element').prototype.update.call(this, props, fields);\r\n\r\n if (props.checked !== this.props.checked) {\r\n this.$node.checked = this.props.checked;\r\n this.$node.defaultChecked = this.props.checked;\r\n }\r\n\r\n this.updateData();\r\n },\r\n\r\n updateData: function(event) {\r\n dmx.Component('form-element').prototype.updateData.call(this, event);\r\n if (this.data.checked != this.$node.checked) {\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n if (event) this.dispatchEvent('changed');\r\n }, this);\r\n }\r\n this.set('checked', this.$node.checked);\r\n },\r\n\r\n select: function(check) {\r\n this.$node.checked = (check !== false);\r\n }\r\n\r\n});\r\n","dmx.Component('radio-group', {\r\n\r\n initialData: {\r\n value: ''\r\n },\r\n\r\n tag: 'div',\r\n\r\n attributes: {\r\n value: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n\r\n methods: {\r\n setValue: function(value) {\r\n this.setValue(value);\r\n }\r\n },\r\n\r\n events: {\r\n updated: Event\r\n },\r\n\r\n render: function(node) {\r\n dmx.BaseComponent.prototype.render.call(this, node);\r\n this.setValue(this.props.value);\r\n },\r\n\r\n update: function(props) {\r\n dmx.BaseComponent.prototype.update.call(this, props);\r\n\r\n if (props.value != this.props.value) {\r\n this.updateValue = true;\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n }, this);\r\n }\r\n },\r\n\r\n updated: function() {\r\n if (this.updateValue) {\r\n this.updateValue = false;\r\n this.setValue(this.props.value, true);\r\n }\r\n\r\n var values = Array.prototype.slice.call(this.$node.querySelectorAll('input[type=radio]')).filter(function(radio) {\r\n return !radio.disabled && radio.checked;\r\n }).map(function(radio) {\r\n return radio.value;\r\n });\r\n\r\n if (!dmx.equal(this.data.value, values[0])) {\r\n //if (JSON.stringify(this.data.value) != JSON.stringify(values[0])) {\r\n this.set('value', values[0]);\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n }, this);\r\n }\r\n },\r\n\r\n setValue: function(value, isDefault) {\r\n Array.prototype.slice.call(this.$node.querySelectorAll('input[type=radio]')).forEach(function(radio) {\r\n radio.checked = radio.value == value;\r\n if (isDefault) radio.defaultChecked = radio.checked;\r\n });\r\n this.updated();\r\n }\r\n\r\n});\r\n","dmx.Component('checkbox', {\r\n\r\n extends: 'form-element',\r\n\r\n initialData: {\r\n checked: false\r\n },\r\n\r\n tag: 'input',\r\n\r\n attributes: {\r\n checked: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n methods: {\r\n select: function(check) {\r\n this.select(check);\r\n }\r\n },\r\n\r\n events: {\r\n checked: Event,\r\n unchecked: Event\r\n },\r\n\r\n render: function(node) {\r\n dmx.Component('form-element').prototype.render.call(this, node);\r\n this.$node.addEventListener('click', this.updateData.bind(this));\r\n this.$node.type = 'checkbox';\r\n this.$node.checked = this.props.checked;\r\n this.$node.defaultChecked = this.props.checked;\r\n this.set('checked', this.props.checked);\r\n },\r\n\r\n update: function(props, fields) {\r\n dmx.Component('form-element').prototype.update.call(this, props, fields);\r\n\r\n if (props.checked !== this.props.checked) {\r\n this.$node.checked = this.props.checked;\r\n this.$node.defaultChecked = this.props.checked;\r\n }\r\n\r\n this.updateData();\r\n },\r\n\r\n updateData: function(event) {\r\n dmx.Component('form-element').prototype.updateData.call(this, event);\r\n if (this.data.checked != this.$node.checked) {\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n if (event) {\r\n this.dispatchEvent('changed');\r\n this.dispatchEvent(this.$node.checked ? 'checked' : 'unchecked')\r\n }\r\n }, this);\r\n }\r\n this.set('checked', this.$node.checked);\r\n },\r\n\r\n select: function(check) {\r\n this.$node.checked = (check !== false);\r\n }\r\n\r\n});\r\n","dmx.Component('checkbox-group', {\r\n\r\n initialData: {\r\n value: []\r\n },\r\n\r\n tag: 'div',\r\n\r\n attributes: {\r\n value: {\r\n type: Array,\r\n default: []\r\n }\r\n },\r\n\r\n methods: {\r\n setValue: function(value) {\r\n this.setValue(value);\r\n }\r\n },\r\n\r\n events: {\r\n updated: Event\r\n },\r\n\r\n render: function(node) {\r\n dmx.BaseComponent.prototype.render.call(this, node);\r\n this.setValue(this.props.value);\r\n },\r\n\r\n update: function(props, fields) {\r\n dmx.BaseComponent.prototype.update.call(this, props, fields);\r\n\r\n if (fields.has('value')) {\r\n this.updateValue = true;\r\n }\r\n },\r\n\r\n updated: function() {\r\n if (this.updateValue) {\r\n this.updateValue = false;\r\n this.setValue(this.props.value);\r\n }\r\n\r\n var value = Array.prototype.slice.call(this.$node.querySelectorAll('input[type=checkbox]')).filter(function(checkbox) {\r\n return !checkbox.disabled && checkbox.checked;\r\n }).map(function(checkbox) {\r\n return checkbox.value;\r\n });\r\n\r\n if (!dmx.equal(this.data.value, value)) {\r\n //if (JSON.stringify(this.data.value) != JSON.stringify(value)) {\r\n this.set('value', value);\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n }, this);\r\n }\r\n },\r\n\r\n setValue: function(value, isDefault) {\r\n if (!Array.isArray(value)) value = [value];\r\n Array.prototype.slice.call(this.$node.querySelectorAll('input[type=checkbox]')).forEach(function(checkbox) {\r\n checkbox.checked = value.indexOf(checkbox.value) > -1;\r\n if (isDefault) checkbox.defaultChecked = checkbox.checked;\r\n });\r\n this.updated();\r\n }\r\n\r\n});\r\n","dmx.Component('select', {\r\n\r\n extends: 'form-element',\r\n\r\n initialData: {\r\n selectedIndex: -1,\r\n selectedValue: '',\r\n selectedText: ''\r\n },\r\n\r\n tag: 'select',\r\n\r\n attributes: {\r\n options: {\r\n type: Array,\r\n default: []\r\n },\r\n optionText: {\r\n type: String,\r\n default: '$value'\r\n },\r\n optionValue: {\r\n type: String,\r\n default: '$value'\r\n }\r\n },\r\n\r\n methods: {\r\n setSelectedIndex: function(index) {\r\n this.$node.selectedIndex = index;\r\n this.updateData();\r\n }\r\n },\r\n\r\n render: function(node) {\r\n this.options = [];\r\n if (!this.props.value) {\r\n this.props.value = this.$node.value;\r\n } else {\r\n this.updateValue = true;\r\n }\r\n dmx.BaseComponent.prototype.render.call(this, node);\r\n this.$node.disabled = this.props.disabled;\r\n this.$node.addEventListener('change', this.updateData.bind(this));\r\n this.$node.addEventListener('invalid', this.updateData.bind(this));\r\n this.$node.addEventListener('focus', this.updateData.bind(this));\r\n this.$node.addEventListener('blur', this.updateData.bind(this));\r\n this.renderOptions();\r\n this.updateData();\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('options')) {\r\n this.renderOptions();\r\n this.updateValue = true;\r\n }\r\n\r\n if (fields.has('value')) {\r\n this.updateValue = true;\r\n }\r\n\r\n if (props.disabled != this.props.disabled) {\r\n this.$node.disabled = this.props.disabled;\r\n }\r\n\r\n this.updateData();\r\n },\r\n\r\n updated: function() {\r\n if (this.updateValue) {\r\n this.updateValue = false;\r\n this.setValue(this.props.value, true);\r\n this.updateData();\r\n }\r\n },\r\n\r\n updateData: function(event) {\r\n dmx.Component('form-element').prototype.updateData.call(this, event);\r\n var selectedIndex = this.$node.selectedIndex;\r\n this.set('selectedIndex', selectedIndex);\r\n this.set('selectedValue', this.$node.options[selectedIndex] && this.$node.options[selectedIndex].value || '');\r\n this.set('selectedText', this.$node.options[selectedIndex] && this.$node.options[selectedIndex].text || '');\r\n },\r\n\r\n setValue: function(value, isDefault) {\r\n dmx.array(this.$node.options).forEach(function(option) {\r\n option.selected = (option.value == value);\r\n if (isDefault) option.defaultSelected = option.selected;\r\n });\r\n },\r\n\r\n renderOptions: function() {\r\n this.options.splice(0).forEach(function(node) {\r\n dmx.dom.remove(node);\r\n });\r\n \r\n dmx.repeatItems(this.props.options).forEach(function(option) {\r\n if (typeof option != 'object') option = { $value: option };\r\n var node = document.createElement('option');\r\n node.value = dmx.parse(this.props.optionValue, dmx.DataScope(option, this));\r\n node.innerText = dmx.parse(this.props.optionText, dmx.DataScope(option, this));\r\n this.options.push(this.$node.appendChild(node));\r\n }, this);\r\n }\r\n\r\n});\r\n","dmx.Component('select-multiple', {\r\n\r\n extends: 'select',\r\n\r\n initialData: {\r\n value: []\r\n },\r\n\r\n attributes: {\r\n value: {\r\n type: Array,\r\n default: null\r\n }\r\n },\r\n\r\n methods: {\r\n setSelectedIndex: function(index) {\r\n this.$node.selectedIndex = index;\r\n this.updateData();\r\n }\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('options')) {\r\n this.renderOptions();\r\n this.updateValue = true;\r\n }\r\n\r\n if (fields.has('value')) {\r\n this.updateValue = true;\r\n }\r\n\r\n if (props.disabled != this.props.disabled) {\r\n this.$node.disabled = this.props.disabled;\r\n }\r\n\r\n this.updateData();\r\n },\r\n\r\n updateData: function(event) {\r\n var value = Array.prototype.slice.call(this.$node.options).filter(function(option) {\r\n return option.selected;\r\n }).map(function(option) {\r\n return option.value;\r\n });\r\n\r\n if (!dmx.equal(this.data.value, value)) {\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n if (event) this.dispatchEvent('changed');\r\n }, this);\r\n }\r\n\r\n this.set('value', value);\r\n this.set('disabled', this.$node.disabled);\r\n this.set('invalid', !this.$node.validity.valid);\r\n this.set('focused', this.$node === document.activeElement);\r\n this.set('validationMessage', this.$node.validationMessage);\r\n \r\n var selectedIndex = this.$node.selectedIndex;\r\n this.set('selectedIndex', selectedIndex);\r\n this.set('selectedValue', this.$node.options[selectedIndex] && this.$node.options[selectedIndex].value || '');\r\n this.set('selectedText', this.$node.options[selectedIndex] && this.$node.options[selectedIndex].text || '');\r\n },\r\n\r\n setValue: function(value, isDefault) {\r\n if (!Array.isArray(value)) value = [value];\r\n value = value.map(function(v) { return v.toString(); });\r\n dmx.array(this.$node.options).forEach(function(option) {\r\n option.selected = value.indexOf(option.value) > -1;\r\n if (isDefault) option.defaultSelected = option.selected;\r\n });\r\n }\r\n\r\n});\r\n","dmx.Component('value', {\r\n\r\n initialData: {\r\n value: null\r\n },\r\n\r\n attributes: {\r\n value: {\r\n default: null\r\n }\r\n },\r\n\r\n methods: {\r\n setValue: function(value) {\r\n if (this.data.value !== value) {\r\n this.set('value', value);\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n }, this);\r\n }\r\n }\r\n },\r\n\r\n events: {\r\n updated: Event\r\n },\r\n\r\n render: function() {\r\n this.set('value', this.props.value);\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('value')) {\r\n this.set('value', this.props.value);\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n }, this);\r\n }\r\n }\r\n\r\n});\r\n","dmx.Component('repeat', {\r\n\r\n initialData: {\r\n items: []\r\n },\r\n\r\n attributes: {\r\n repeat: {\r\n type: [Array, Object, Number],\r\n default: []\r\n },\r\n\r\n key: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n rerender: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n events: {\r\n update: Event,\r\n updated: Event\r\n },\r\n\r\n render: function(node) {\r\n this.prevItems = [];\r\n this.childKeys = {};\r\n this.$template = document.createDocumentFragment();\r\n while (this.$node.hasChildNodes()) {\r\n this.$template.appendChild(this.$node.firstChild);\r\n }\r\n // call update for first inital data\r\n this.update({ repeat: [] }, new Set(['repeat']));\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('repeat')) {\r\n if (fields.has('key')) this._rerender = true;\r\n if (!this._willUpdate) {\r\n this._willUpdate = true;\r\n //requestAnimationFrame(() => this._update());\r\n // Want to do DOM updates on animation frame for less DOM updates\r\n // but then components and data from repeat children comes very late\r\n // for now on nextTick to do it as fast as posible\r\n dmx.nextTick(this._update, this);\r\n }\r\n }\r\n },\r\n\r\n _update: function() {\r\n this._willUpdate = false;\r\n\r\n this.dispatchEvent('update');\r\n\r\n if (this.props.rerender || this._rerender) {\r\n this._rerender = false;\r\n this._clear();\r\n }\r\n\r\n var RepeatItem = dmx.Component('repeat-item');\r\n var repeat = this.props.repeat;\r\n var items = dmx.repeatItems(repeat);\r\n\r\n if (items.length) {\r\n if (!this.props.rerender && this.props.key && items[0].hasOwnProperty(this.props.key) && this.prevItems.length) {\r\n // keyed repeater (https://github.com/localvoid/kivi/blob/master/lib/vnode.ts#L1320-L1513)\r\n var key = this.props.key;\r\n var a = this.prevItems;\r\n var b = this._clone(items);\r\n var aStart = 0;\r\n var bStart = 0;\r\n var aEnd = a.length - 1;\r\n var bEnd = b.length - 1;\r\n var i, j, nextPos;\r\n\r\n outer: while (true) {\r\n // remove same keys from start\r\n while (a[aStart][key] === b[bStart][key]) {\r\n this.childKeys[b[bStart][key]].set(b[bStart]);\r\n aStart++;\r\n bStart++;\r\n if (aStart > aEnd || bStart > bEnd) {\r\n break outer;\r\n }\r\n }\r\n\r\n // remove same keys at end\r\n while (a[aEnd][key] === b[bEnd][key]) {\r\n this.childKeys[b[bEnd][key]].set(b[bEnd]);\r\n aEnd--;\r\n bEnd--;\r\n if (aStart > aEnd || bStart > bEnd) {\r\n break outer;\r\n }\r\n }\r\n\r\n // move from right to left\r\n if (a[aEnd][key] === b[bStart][key]) {\r\n this.childKeys[b[bStart][key]].set(b[bStart]);\r\n this._moveChild(b[bStart][key], a[aStart][key]);\r\n aEnd--;\r\n bStart++;\r\n if (aStart > aEnd || bStart > bEnd) {\r\n break;\r\n }\r\n continue;\r\n }\r\n\r\n // move from left to right\r\n if (a[aStart][key] === b[bEnd][key]) {\r\n nextPos = bEnd + 1;\r\n this.childKeys[b[bEnd][key]].set(b[bEnd]);\r\n this._moveChild(b[bEnd][key], b[nextPos] && b[nextPos][key]);\r\n aStart++;\r\n bEnd--;\r\n if (aStart > aEnd || bStart > bEnd) {\r\n break;\r\n }\r\n continue;\r\n }\r\n\r\n break;\r\n }\r\n\r\n if (aStart > aEnd) {\r\n // insert rest from b\r\n nextPos = bEnd + 1;\r\n while (bStart <= bEnd) {\r\n this._insertChild(b[bStart++], b[nextPos] && b[nextPos][key]);\r\n }\r\n } else if (bStart > bEnd) {\r\n // remove rest from a\r\n while (aStart <= aEnd) {\r\n this._removeChild(a[aStart++][key]);\r\n }\r\n } else {\r\n var aLength = aEnd - aStart + 1;\r\n var bLength = bEnd - bStart + 1;\r\n var aNullable = a;\r\n var sources = new Array(bLength).fill(-1);\r\n\r\n var moved = false;\r\n var pos = 0;\r\n var synced = 0;\r\n\r\n if ((bLength <= 4) || ((aLength * bLength) <= 16)) {\r\n for (i = aStart; i <= aEnd; i++) {\r\n if (synced < bLength) {\r\n for (j = bStart; j <= bEnd; j++) {\r\n if (a[i][key] === b[j][key]) {\r\n sources[j - bStart] = i;\r\n\r\n if (pos > j) {\r\n moved = true;\r\n } else {\r\n pos = j;\r\n }\r\n\r\n this.childKeys[b[j][key]].set(b[j]);\r\n\r\n synced++;\r\n aNullable[i] = null;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n var keyIndex = {};\r\n\r\n for (i = bStart; i <= bEnd; i++) {\r\n keyIndex[b[i][key]] = i;\r\n }\r\n\r\n for (i = aStart; i <= aEnd; i++) {\r\n if (synced < bLength) {\r\n j = keyIndex[a[i][key]];\r\n\r\n if (j !== undefined) {\r\n sources[j - bStart] = i;\r\n\r\n if (pos > j) {\r\n moved = true;\r\n } else {\r\n pos = j;\r\n }\r\n\r\n this.childKeys[b[j][key]].set(b[j]);\r\n\r\n synced++;\r\n aNullable[i] = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (aLength === a.length && synced === 0) {\r\n this._clear();\r\n while (bStart < bLength) {\r\n this._insertChild(b[bStart++], null);\r\n }\r\n } else {\r\n i = aLength - synced;\r\n while (i > 0) {\r\n if (aNullable[aStart] !== null) {\r\n this._removeChild(a[aStart][key]);\r\n i--;\r\n }\r\n aStart++;\r\n }\r\n\r\n if (moved) {\r\n var seq = this._lis(sources);\r\n j = seq.length - 1;\r\n for (i = bLength - 1; i >= 0; i--) {\r\n if (sources[i] === -1) {\r\n pos = i + bStart;\r\n nextPos = pos + 1;\r\n this._insertChild(b[pos], b[nextPos] && b[nextPos][key]);\r\n } else {\r\n if (j < 0 || i !== seq[j]) {\r\n pos = i + bStart;\r\n nextPos = pos + 1;\r\n this._moveChild(b[pos][key], b[nextPos] && b[nextPos][key]);\r\n } else {\r\n j--;\r\n }\r\n }\r\n }\r\n } else if (synced !== bLength) {\r\n for (i = bLength - 1; i >= 0; i--) {\r\n if (sources[i] === -1) {\r\n pos = i + bStart;\r\n nextPos = pos + 1;\r\n this._insertChild(b[pos], b[nextPos] && b[nextPos][key]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (this.children.length > items.length) {\r\n // remove some children\r\n this.children.splice(items.length).forEach(function(child) {\r\n child.$destroy();\r\n });\r\n }\r\n\r\n if (this.children.length) {\r\n // update existing children\r\n this.children.forEach(function(child, i) {\r\n child.set(items[i]);\r\n });\r\n }\r\n\r\n if (items.length > this.children.length) {\r\n // add new children\r\n var fragment = document.createDocumentFragment();\r\n\r\n for (var i = this.children.length; i < items.length; i++) {\r\n var child = new RepeatItem(this.$template.cloneNode(true), this, items[i]);\r\n child.$nodes.forEach(function(node) {\r\n fragment.appendChild(node);\r\n child.$parse(node);\r\n });\r\n this.children.push(child);\r\n }\r\n\r\n this.$node.appendChild(fragment);\r\n }\r\n }\r\n } else {\r\n this._clear();\r\n }\r\n\r\n if (this.props.key) {\r\n this.prevItems = this._clone(items);\r\n this.children.forEach(function(child) {\r\n this.childKeys[child.data[this.props.key]] = child;\r\n }, this);\r\n }\r\n\r\n //this.set('items', items);\r\n this.set('items', this.children.map(child => child.data));\r\n\r\n dmx.nextTick(() => this.dispatchEvent('updated'));\r\n },\r\n\r\n _lis: function(a) {\r\n var p = a.slice(0);\r\n var result = [];\r\n result.push(0);\r\n var u, v;\r\n\r\n for (var i = 0, il = a.length; i < il; i++) {\r\n if (a[i] === -1) {\r\n continue;\r\n }\r\n\r\n var j = result[result.length - 1];\r\n if (a[j] < a[i]) {\r\n p[i] = j;\r\n result.push(i);\r\n continue;\r\n }\r\n\r\n u = 0;\r\n v = result.length - 1;\r\n\r\n while (u < v) {\r\n var c = ((u + v) / 2) | 0;\r\n if (a[result[c]] < a[i]) {\r\n u = c + 1;\r\n } else {\r\n v = c;\r\n }\r\n }\r\n\r\n if (a[i] < a[result[u]]) {\r\n if (u > 0) {\r\n p[i] = result[u - 1];\r\n }\r\n result[u] = i;\r\n }\r\n }\r\n\r\n u = result.length;\r\n v = result[u - 1];\r\n\r\n while (u-- > 0) {\r\n result[u] = v;\r\n v = p[v];\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _clear: function() {\r\n this.prevItems = [];\r\n this.childKeys = {};\r\n this.children.splice(0).forEach(function(child) {\r\n child.$destroy();\r\n });\r\n // remove any other html that was in the repeater\r\n this.$node.innerHTML = '';\r\n },\r\n\r\n _insertChild: function(data, before) {\r\n var RepeatItem = dmx.Component('repeat-item');\r\n var child = new RepeatItem(this.$template.cloneNode(true), this, data);\r\n\r\n child.$nodes.forEach(function(node) {\r\n if (!before) {\r\n this.$node.appendChild(node);\r\n } else {\r\n if (this.childKeys[before]) {\r\n this.$node.insertBefore(node, this.childKeys[before].$nodes[0]);\r\n } else {\r\n console.warn('(insert) can not insert node before key ' + before + '!');\r\n }\r\n }\r\n\r\n child.$parse(node);\r\n }, this);\r\n\r\n this.childKeys[data[this.props.key]] = child;\r\n this.children.push(child);\r\n },\r\n\r\n _moveChild: function(key, before) {\r\n var child = this.childKeys[key];\r\n\r\n if (child) {\r\n if (this.childKeys[before]) {\r\n child.$nodes.forEach(function(node) {\r\n this.$node.insertBefore(node, this.childKeys[before].$nodes[0]);\r\n }, this);\r\n } else {\r\n child.$nodes.forEach(function(node) {\r\n this.$node.appendChild(node);\r\n }, this);\r\n }\r\n } else {\r\n console.warn('(move) child with key ' + key + ' not found!');\r\n }\r\n },\r\n\r\n _removeChild: function(key) {\r\n var child = this.childKeys[key];\r\n if (child) {\r\n child.$destroy();\r\n this.children.splice(this.children.indexOf(child), 1);\r\n delete this.childKeys[key];\r\n } else {\r\n console.warn('(remove) child with key ' + key + ' not found!');\r\n }\r\n },\r\n\r\n _clone: function(o) {\r\n return dmx.clone(o);\r\n //return JSON.parse(JSON.stringify(o));\r\n }\r\n\r\n});\r\n","dmx.Component('repeat-item', {\r\n\r\n constructor: function(fragment, parent, data, name) {\r\n this.parent = parent;\r\n this.bindings = {};\r\n this.propBindings = {};\r\n this.children = [];\r\n this.listeners = [];\r\n this.props = {};\r\n this.data = dmx.clone(data || {});\r\n this.seed = parent.seed;\r\n this.name = name || 'repeat';\r\n this.$nodes = [];\r\n for (var i = 0; i < fragment.childNodes.length; i++) {\r\n this.$nodes.push(fragment.childNodes[i]);\r\n }\r\n },\r\n\r\n $destroy: function() {\r\n this.dispatchEvent('destroy');\r\n for (var i = 0; i < this.$nodes.length; i++) {\r\n var event = new Event('remove', { cancelable: true });\r\n if (this.$nodes[i].dispatchEvent(event)) {\r\n dmx.dom.remove(this.$nodes[i]);\r\n }\r\n }\r\n }\r\n\r\n});\r\n","dmx.Component('fetch', {\r\n\r\n constructor: function(node, parent) {\r\n this.fetch = dmx.debounce(this.fetch.bind(this));\r\n dmx.BaseComponent.call(this, node, parent);\r\n },\r\n\r\n initialData: {\r\n status: 0,\r\n data: null,\r\n links: {},\r\n paging: {},\r\n headers: {},\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false\r\n },\r\n uploadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0\r\n },\r\n downloadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0\r\n },\r\n lastError: {\r\n status: 0,\r\n message: '',\r\n response: null\r\n }\r\n },\r\n\r\n attributes: {\r\n timeout: {\r\n type: Number,\r\n default: 0 // timeout in seconds\r\n },\r\n\r\n method: {\r\n type: String,\r\n default: 'GET' // HTTP request method to use, such as \"GET\", \"POST\", \"PUT\", \"DELETE\"\r\n },\r\n\r\n url: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n params: {\r\n type: Object,\r\n default: {}\r\n },\r\n\r\n headers: {\r\n type: Object,\r\n default: {}\r\n },\r\n\r\n data: {\r\n type: Object,\r\n default: {}\r\n },\r\n\r\n 'data-type': {\r\n type: String,\r\n default: 'auto' // auto, json, text\r\n },\r\n\r\n noload: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n cache: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n ttl: {\r\n type: Number,\r\n default: 86400 // cache ttl in seconds (default 1 day)\r\n },\r\n\r\n credentials: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n methods: {\r\n abort: function() {\r\n this.abort();\r\n },\r\n\r\n load: function(params, reload) {\r\n var options = {};\r\n if (params) options.params = params;\r\n if (reload) options.ttl = 0;\r\n this.fetch(options);\r\n },\r\n\r\n reset: function() {\r\n this.abort();\r\n this._reset();\r\n this.set('data', null);\r\n }\r\n },\r\n\r\n events: {\r\n start: Event, // when starting an ajax call\r\n done: Event, // when ajax call completed (success and error)\r\n error: Event, // server error or javascript error (json parse or network transport) or timeout error\r\n invalid: Event, // 400 status from server\r\n unauthorized: Event, // 401 status from server\r\n forbidden: Event, // 403 status from server\r\n abort: Event, // ajax call was aborted\r\n success: Event, // successful ajax call,\r\n upload: ProgressEvent, // on upload progress\r\n download: ProgressEvent // on download progress\r\n },\r\n\r\n $parseAttributes: function(node) {\r\n dmx.BaseComponent.prototype.$parseAttributes.call(this, node);\r\n dmx.dom.getAttributes(node).forEach(function(attr) {\r\n if (attr.name == 'param' && attr.argument) {\r\n this.$addBinding(attr.value, function(value) {\r\n this.props.params[attr.argument] = value;\r\n });\r\n }\r\n if (attr.name == 'header' && attr.argument) {\r\n this.$addBinding(attr.value, function(value) {\r\n this.props.headers[attr.argument] = value;\r\n });\r\n }\r\n if (attr.name == 'data' && attr.argument) {\r\n this.$addBinding(attr.value, function(value) {\r\n this.props.data[attr.argument] = value;\r\n });\r\n }\r\n }, this);\r\n },\r\n\r\n render: function(node) {\r\n this.xhr = new XMLHttpRequest();\r\n this.xhr.addEventListener('load', this.onload.bind(this));\r\n this.xhr.addEventListener('abort', this.onabort.bind(this));\r\n this.xhr.addEventListener('error', this.onerror.bind(this));\r\n this.xhr.addEventListener('timeout', this.ontimeout.bind(this));\r\n this.xhr.addEventListener('progress', this.onprogress('download').bind(this));\r\n if (this.xhr.upload) this.xhr.upload.addEventListener('progress', this.onprogress('upload').bind(this));\r\n\r\n this.update({});\r\n },\r\n\r\n update: function(props) {\r\n // if auto load and url is set\r\n if (!this.props.noload && this.props.url) {\r\n // if url or params are changed\r\n if (props.url != this.props.url || !dmx.equal(props.params, this.props.params)) {\r\n // delay it a bit so that all update cycles finished first\r\n requestAnimationFrame(() => this.fetch());\r\n }\r\n }\r\n },\r\n\r\n abort: function() {\r\n if (this.xhr) {\r\n this.xhr.abort();\r\n }\r\n },\r\n\r\n fetch: function(options) {\r\n this.xhr.abort();\r\n\r\n options = dmx.extend(true, this.props, options || {});\r\n\r\n this._reset();\r\n this.dispatchEvent('start');\r\n\r\n var qs = (options.url.indexOf('?') > -1 ? '&' : '?') + Object.keys(options.params).filter(function(key) {\r\n return options.params[key] != null;\r\n }, this).map(function(key) {\r\n var value = options.params[key];\r\n if (typeof value == 'string' && value.startsWith('{{')) {\r\n value = dmx.parse(value, this);\r\n }\r\n return encodeURIComponent(key) + '=' + encodeURIComponent(value);\r\n }, this).join('&');\r\n\r\n this._url = options.url + qs;\r\n\r\n if (window.WebviewProxy) { // Cordova webview proxy plugin\r\n this._url = window.WebviewProxy.convertProxyUrl(this._url);\r\n }\r\n\r\n if (this.props.cache) {\r\n var cache = dmx.parse(this.props.cache + '.data[\"' + this._url + '\"]', this);\r\n if (cache) {\r\n if (Date.now() - cache.created >= options.ttl * 1000) {\r\n dmx.parse(this.props.cache + '.remove(\"' + this._url + '\")', this);\r\n } else {\r\n this.set('headers', cache.headers || {});\r\n this.set('paging', cache.paging || {});\r\n this.set('links', cache.links || {});\r\n this.set('data', cache.data);\r\n this.dispatchEvent('success');\r\n this.dispatchEvent('done');\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.set('state', {\r\n executing: true,\r\n uploading: false,\r\n processing: false,\r\n downloading: false\r\n });\r\n\r\n var data = null;\r\n\r\n if (this.props.method.toUpperCase() != 'GET') {\r\n if (this.props['data-type'] == 'text') {\r\n if (!options.headers['Content-Type']) {\r\n options.headers['Content-Type'] = 'application/text';\r\n }\r\n data = this.props.data.toString();\r\n } else if (this.props['data-type'] == 'json') {\r\n if (!options.headers['Content-Type']) {\r\n options.headers['Content-Type'] = 'application/json';\r\n }\r\n data = JSON.stringify(this.props.data);\r\n } else {\r\n if (this.props.method.toUpperCase() == 'POST') {\r\n data = new FormData();\r\n\r\n Object.keys(this.props.data).forEach(function(key) {\r\n var value = this.props.data[key];\r\n\r\n if (Array.isArray(value)) {\r\n if (!/\\[\\]$/.test(key)) {\r\n key += '[]';\r\n }\r\n value.forEach(function(val) {\r\n data.append(key, val);\r\n }, this);\r\n } else {\r\n data.set(key, value);\r\n }\r\n }, this);\r\n } else {\r\n if (!options.headers['Content-Type']) {\r\n options.headers['Content-Type'] = 'application/text';\r\n }\r\n data = this.props.data.toString();\r\n }\r\n }\r\n }\r\n\r\n this.xhr.open(this.props.method.toUpperCase(), this._url);\r\n this.xhr.timeout = options.timeout * 1000;\r\n Object.keys(options.headers).forEach(function(header) {\r\n this.xhr.setRequestHeader(header, options.headers[header]);\r\n }, this);\r\n this.xhr.setRequestHeader('accept', 'application/json');\r\n if (this.props.credentials) {\r\n this.xhr.withCredentials = true;\r\n }\r\n try { this.xhr.send(data); }\r\n catch (err) { this._done(err); }\r\n },\r\n\r\n _reset: function() {\r\n this.set({\r\n status: 0,\r\n links: {},\r\n headers: {},\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false\r\n },\r\n uploadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0\r\n },\r\n downloadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0\r\n },\r\n lastError: {\r\n status: 0,\r\n message: '',\r\n response: null\r\n }\r\n });\r\n },\r\n\r\n _done: function(err) {\r\n this._reset();\r\n\r\n if (err) {\r\n this.set('lastError', {\r\n status: 0,\r\n message: err.message,\r\n response: null\r\n });\r\n\r\n this.dispatchEvent('error');\r\n } else {\r\n var response = this.xhr.responseText;\r\n\r\n try {\r\n response = JSON.parse(response);\r\n } catch(err) {\r\n if (this.xhr.status < 400) {\r\n this.set('lastError', {\r\n status: 0,\r\n message: 'Response was not valid JSON',\r\n response: response\r\n });\r\n\r\n this.dispatchEvent('error');\r\n return;\r\n }\r\n }\r\n\r\n try {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders#Example\r\n var strHeaders = this.xhr.getAllResponseHeaders();\r\n var arrHeaders = strHeaders.trim().split(/[\\r\\n]+/);\r\n\r\n this.set('headers', arrHeaders.reduce(function(headers, line) {\r\n var parts = line.split(': ');\r\n var header = parts.shift();\r\n var value = parts.join(': ');\r\n\r\n headers[header] = value;\r\n\r\n return headers;\r\n }, {}));\r\n } catch(err) {\r\n console.warn('Error parsing response headers', err);\r\n }\r\n\r\n try {\r\n //var linkHeader = this.xhr.getResponseHeader('Link');\r\n var linkHeader = Object.keys(this.data.headers).find(function(header) {\r\n return header.toLowerCase() == 'link';\r\n });\r\n\r\n if (linkHeader) {\r\n this.set('links', this.data.headers[linkHeader].split(/,\\s*]*)>(.*)/);\r\n var linkUrl = m[1];\r\n var parts = m[2].split(';');\r\n var query = linkUrl.substr(linkUrl.indexOf('?') + 1);\r\n if (query.indexOf('#') > 0) query = query.substr(0, query.indexOf('#'));\r\n var qry = query.split('&').reduce(function(acc, x) {\r\n var p = x.split('=');\r\n\r\n if (p[0]) {\r\n acc[decodeURIComponent(p[0])] = decodeURIComponent(p[1] || '');\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n parts.shift();\r\n\r\n var info = parts.reduce(function(acc, p) {\r\n var m = p.match(/\\s*(.+)\\s*=\\s*\"?([^\"]+)\"?/);\r\n if (m) acc[m[1]] = m[2];\r\n return acc;\r\n }, {});\r\n\r\n info = Object.assign({}, qry, info);\r\n info.url = linkUrl;\r\n\r\n return info;\r\n } catch (err) {\r\n console.warn('Error parsing link header part', err);\r\n return null;\r\n }\r\n }).filter(function(x) {\r\n return x && x.rel;\r\n }).reduce(function(acc, x) {\r\n x.rel.split(/\\s+/).forEach(function(rel) {\r\n acc[rel] = Object.assign(x, { rel: rel });\r\n });\r\n\r\n return acc;\r\n }, {}));\r\n }\r\n } catch (err) {\r\n console.warn('Error parsing link header', err);\r\n }\r\n\r\n try {\r\n var paging = {\r\n page: 1,\r\n pages: 1,\r\n items: 0,\r\n has: {\r\n first: false,\r\n prev: false,\r\n next: false,\r\n last: false\r\n }\r\n };\r\n\r\n if (this.data.links.prev || this.data.links.next) {\r\n if (this.data.links.last && this.data.links.last.page) {\r\n paging.pages = +this.data.links.last.page;\r\n } else if (this.data.links.prev && this.data.prev.page) {\r\n paging.pages = +this.data.links.prev.page + 1;\r\n }\r\n\r\n var countHeader = Object.keys(this.data.headers).find(function(header) {\r\n header = header.toLowerCase();\r\n return header == 'x-total' || header == 'x-count' || header == 'x-total-count';\r\n });\r\n\r\n if (countHeader) {\r\n paging.items = +this.data.headers[countHeader];\r\n }\r\n\r\n if (this.data.links.prev && this.data.links.prev.page) {\r\n paging.page = +this.data.links.prev.page + 1;\r\n } else if (this.data.links.next && this.data.links.next.page) {\r\n paging.page = +this.data.links.next.page - 1;\r\n }\r\n\r\n paging.has = {\r\n first: !!this.data.links.first,\r\n prev: !!this.data.links.prev,\r\n next: !!this.data.links.next,\r\n last: !!this.data.links.last\r\n }\r\n }\r\n\r\n this.set('paging', paging);\r\n } catch (err) {\r\n console.warn('Error parsing paging', err);\r\n }\r\n\r\n this.set('status', this.xhr.status);\r\n\r\n if (this.xhr.status < 400) {\r\n this.set('data', response);\r\n this.dispatchEvent('success');\r\n\r\n if (this.props.cache) {\r\n dmx.parse(this.props.cache + '.set(\"' + this._url + '\", { headers: headers, paging: paging, links: links, data: data, created: ' + Date.now() + ' })', this);\r\n }\r\n } else {\r\n this.set('lastError', {\r\n status: this.xhr.status,\r\n message: this.xhr.statusText,\r\n response: response\r\n });\r\n\r\n if (this.xhr.status == 400) {\r\n this.dispatchEvent('invalid');\r\n } else if (this.xhr.status == 401) {\r\n this.dispatchEvent('unauthorized');\r\n } else if (this.xhr.status == 403) {\r\n this.dispatchEvent('forbidden');\r\n } else {\r\n this.dispatchEvent('error');\r\n }\r\n }\r\n }\r\n\r\n this.dispatchEvent('done');\r\n },\r\n\r\n onload: function(event) {\r\n this._done();\r\n },\r\n\r\n onabort: function(event) {\r\n this._reset();\r\n this.dispatchEvent('abort');\r\n this.dispatchEvent('done');\r\n },\r\n\r\n onerror: function(event) {\r\n this._done({ message: 'Failed to execute' });\r\n },\r\n\r\n ontimeout: function(event) {\r\n this._done({ message: 'Execution timeout' });\r\n },\r\n\r\n onprogress: function(type) {\r\n return function(event) {\r\n event.loaded = event.loaded || event.position;\r\n\r\n var percent = event.lengthComputable ? Math.ceil(event.loaded / event.total * 100) : 0;\r\n\r\n this.set('state', {\r\n executing: true,\r\n uploading: type == 'upload' && percent < 100,\r\n processing: type == 'upload' && percent == 100,\r\n downloading: type == 'download'\r\n });\r\n\r\n this.set(type + 'Progress', {\r\n position: event.loaded,\r\n total: event.total,\r\n percent: percent\r\n });\r\n\r\n this.dispatchEvent(type, {\r\n lengthComputable: event.lengthComputable,\r\n loaded: event.loaded,\r\n total: event.total\r\n });\r\n };\r\n }\r\n\r\n});\r\n","dmx.Component('serverconnect', {\r\n\r\n extends: 'fetch',\r\n\r\n attributes: {\r\n sockets: {\r\n type: Boolean,\r\n default: false\r\n } \r\n },\r\n\r\n render: function(node) {\r\n if (this.props.sockets) {\r\n this.eventName = this.props.url.replace(/^(.*?)api\\//, '');\r\n this.socket = dmx.Socket('/api');\r\n this.socket.on(this.eventName, this.refresh.bind(this));\r\n this.update({});\r\n } else {\r\n dmx.Component('fetch').prototype.render.call(this, node);\r\n }\r\n },\r\n\r\n fetch: function(options) {\r\n if (this.props.sockets) {\r\n this.refresh(options && options.params);\r\n } else {\r\n dmx.Component('fetch').prototype.fetch.call(this, options);\r\n }\r\n },\r\n\r\n refresh: function(params) {\r\n params = dmx.extend(true, {}, this.props.params, params || {});\r\n\r\n this.dispatchEvent('start');\r\n\r\n this.set('state', {\r\n executing: true,\r\n uploading: false,\r\n processing: true,\r\n downloading: false\r\n });\r\n \r\n this.socket.emit(this.eventName, params, function(res) {\r\n this.set('status', res.status);\r\n this.set('data', res.data);\r\n this.set('state', {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false\r\n });\r\n\r\n if (res.status < 400) {\r\n this.dispatchEvent('success');\r\n } else if (res.status == 400) {\r\n this.dispatchEvent('invalid');\r\n } else if (res.status == 401) {\r\n this.dispatchEvent('unauthorized');\r\n } else if (res.status == 403) {\r\n this.dispatchEvent('forbidden');\r\n } else {\r\n this.dispatchEvent('error');\r\n }\r\n\r\n this.dispatchEvent('done');\r\n }.bind(this));\r\n }\r\n\r\n});\r\n","dmx.Component(\"serverconnect-form\", {\r\n extends: \"form\",\r\n\r\n initialData: {\r\n status: 0,\r\n data: null,\r\n headers: {},\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n },\r\n uploadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n downloadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n lastError: {\r\n status: 0,\r\n message: \"\",\r\n response: null,\r\n },\r\n },\r\n\r\n attributes: {\r\n timeout: {\r\n type: Number,\r\n default: 0, // timeout in seconds\r\n },\r\n\r\n autosubmit: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n params: {\r\n type: Object,\r\n default: {},\r\n },\r\n\r\n headers: {\r\n type: Object,\r\n default: {},\r\n },\r\n\r\n \"post-data\": {\r\n // only for method post, not for get\r\n type: String,\r\n default: \"form\", // form, json (default uses form data)\r\n },\r\n\r\n credentials: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n\r\n methods: {\r\n abort: function () {\r\n this.abort();\r\n },\r\n\r\n reset: function (clearData) {\r\n this.reset();\r\n if (clearData) {\r\n this.abort();\r\n this._reset();\r\n this.set(\"data\", null);\r\n }\r\n },\r\n },\r\n\r\n events: {\r\n start: Event, // when starting an ajax call\r\n done: Event, // when ajax call completed (success and error)\r\n error: Event, // server error or javascript error (json parse or network transport) or timeout error\r\n unauthorized: Event, // 401 status from server\r\n forbidden: Event, // 403 status from server\r\n abort: Event, // ajax call was aborted\r\n success: Event, // successful ajax call,\r\n upload: ProgressEvent, // on upload progress\r\n download: ProgressEvent, // on download progress\r\n },\r\n\r\n $parseAttributes: function (node) {\r\n dmx.BaseComponent.prototype.$parseAttributes.call(this, node);\r\n dmx.dom.getAttributes(node).forEach(function (attr) {\r\n if (attr.name == \"param\" && attr.argument) {\r\n this.$addBinding(attr.value, function (value) {\r\n this.props.params[attr.argument] = value;\r\n });\r\n }\r\n if (attr.name == \"header\" && attr.argument) {\r\n this.$addBinding(attr.value, function (value) {\r\n this.props.headers[attr.argument] = value;\r\n });\r\n }\r\n }, this);\r\n },\r\n\r\n render: function (node) {\r\n this.xhr = new XMLHttpRequest();\r\n this.xhr.addEventListener(\"load\", this.onload.bind(this));\r\n this.xhr.addEventListener(\"abort\", this.onabort.bind(this));\r\n this.xhr.addEventListener(\"error\", this.onerror.bind(this));\r\n this.xhr.addEventListener(\"timeout\", this.ontimeout.bind(this));\r\n this.xhr.addEventListener(\r\n \"progress\",\r\n this.onprogress(\"download\").bind(this)\r\n );\r\n if (this.xhr.upload)\r\n this.xhr.upload.addEventListener(\r\n \"progress\",\r\n this.onprogress(\"upload\").bind(this)\r\n );\r\n\r\n var checkValidity = node.checkValidity;\r\n\r\n node.dmxExtraData = {};\r\n node.dmxExtraElements = [];\r\n node.checkValidity = function () {\r\n for (var i = 0; i < node.dmxExtraElements.length; i++) {\r\n if (node.dmxExtraElements[i].validate) {\r\n node.dmxExtraElements[i].validate();\r\n }\r\n }\r\n\r\n return checkValidity.call(node);\r\n };\r\n\r\n dmx.Component(\"form\").prototype.render.call(this, node);\r\n\r\n if (this.props.autosubmit) {\r\n dmx.nextTick(function () {\r\n this.submit();\r\n }, this);\r\n }\r\n },\r\n\r\n abort: function () {\r\n this.xhr.abort();\r\n },\r\n\r\n _submit: function (extra) {\r\n this.xhr.abort();\r\n\r\n var method = this.$node.method.toUpperCase();\r\n var action = this.$node.action;\r\n var data = null;\r\n\r\n var qs = Object.keys(this.props.params)\r\n .filter(function (key) {\r\n return this.props.params[key] != null;\r\n }, this)\r\n .map(function (key) {\r\n var value = this.props.params[key];\r\n if (typeof value == \"string\" && value.startsWith(\"{{\")) {\r\n value = dmx.parse(value, this);\r\n }\r\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(value);\r\n }, this)\r\n .join(\"&\");\r\n\r\n if (method == \"GET\") {\r\n if (qs.length) qs += \"&\";\r\n\r\n qs += dmx\r\n .array(this.$node.elements)\r\n .filter(function (element) {\r\n return (\r\n !(extra && extra[element.name]) &&\r\n !element.disabled &&\r\n ((element.type !== \"radio\" && element.type !== \"checkbox\") ||\r\n element.checked)\r\n );\r\n })\r\n .map(function (element) {\r\n return (\r\n encodeURIComponent(element.name) +\r\n \"=\" +\r\n encodeURIComponent(element.value)\r\n );\r\n })\r\n .join(\"&\");\r\n\r\n if (extra) {\r\n Object.keys(extra).forEach(function (key) {\r\n if (Array.isArray(extra[key])) {\r\n extra[key].forEach(function (value) {\r\n qs +=\r\n \"&\" + encodeURIComponent(key) + \"=\" + encodeURIComponent(value);\r\n });\r\n } else {\r\n qs +=\r\n \"&\" +\r\n encodeURIComponent(key) +\r\n \"=\" +\r\n encodeURIComponent(extra[key]);\r\n }\r\n });\r\n }\r\n } else {\r\n if (this.props[\"post-data\"] == \"json\") {\r\n data = this._parseJsonForm(this.$node);\r\n\r\n if (extra) {\r\n Object.assign(data, extra);\r\n }\r\n\r\n if (this.$node.dmxExtraData) {\r\n Object.assign(data, this.$node.dmxExtraData);\r\n }\r\n\r\n this.props.headers[\"Content-Type\"] = \"application/json\";\r\n data = JSON.stringify(data);\r\n } else {\r\n data = new FormData(this.$node);\r\n\r\n if (extra) {\r\n Object.keys(extra).forEach(function (key) {\r\n if (Array.isArray(extra[key])) {\r\n if (!/\\[\\]$/.test(key)) {\r\n key += \"[]\";\r\n }\r\n value.forEach(function (val) {\r\n data.append(key, val);\r\n }, this);\r\n } else {\r\n data.set(key, extra[key]);\r\n }\r\n }, this);\r\n }\r\n\r\n if (this.$node.dmxExtraData) {\r\n Object.keys(this.$node.dmxExtraData).forEach(function (key) {\r\n var value = this.$node.dmxExtraData[key];\r\n\r\n if (Array.isArray(value)) {\r\n if (!/\\[\\]$/.test(key)) {\r\n key += \"[]\";\r\n }\r\n value.forEach(function (val) {\r\n data.append(key, val);\r\n }, this);\r\n } else {\r\n data.set(key, value);\r\n }\r\n }, this);\r\n }\r\n }\r\n }\r\n\r\n this._reset();\r\n this.dispatchEvent(\"start\");\r\n\r\n this.set(\"state\", {\r\n executing: true,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n });\r\n\r\n var url = action;\r\n\r\n if (qs) {\r\n url += (url.indexOf(\"?\") > -1 ? \"&\" : \"?\") + qs;\r\n }\r\n\r\n if (window.WebviewProxy) {\r\n // Cordova webview proxy plugin\r\n url = window.WebviewProxy.convertProxyUrl(url);\r\n }\r\n\r\n this.xhr.open(method, url);\r\n this.xhr.timeout = this.props.timeout * 1000;\r\n Object.keys(this.props.headers).forEach(function (header) {\r\n this.xhr.setRequestHeader(header, this.props.headers[header]);\r\n }, this);\r\n this.xhr.setRequestHeader(\"accept\", \"application/json\");\r\n if (this.props.credentials) {\r\n this.xhr.withCredentials = true;\r\n }\r\n try {\r\n this.xhr.send(data);\r\n } catch (err) {\r\n this._done(err);\r\n }\r\n },\r\n\r\n _reset: function () {\r\n this.set({\r\n status: 0,\r\n headers: {},\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n },\r\n uploadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n downloadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n lastError: {\r\n status: 0,\r\n message: \"\",\r\n response: null,\r\n },\r\n });\r\n },\r\n\r\n _done: function (err) {\r\n this._reset();\r\n\r\n if (err) {\r\n this.set(\"lastError\", {\r\n status: 0,\r\n message: err.message,\r\n response: null,\r\n });\r\n\r\n this.dispatchEvent(\"error\");\r\n } else {\r\n var response = this.xhr.responseText;\r\n\r\n try {\r\n response = JSON.parse(response);\r\n } catch (err) {\r\n if (this.xhr.status < 400) {\r\n this.set(\"lastError\", {\r\n status: 0,\r\n message: \"Response was not valid JSON\",\r\n response: response,\r\n });\r\n\r\n this.dispatchEvent(\"error\");\r\n return;\r\n }\r\n }\r\n\r\n try {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders#Example\r\n var strHeaders = this.xhr.getAllResponseHeaders();\r\n var arrHeaders = strHeaders.trim().split(/[\\r\\n]+/);\r\n\r\n this.set(\r\n \"headers\",\r\n arrHeaders.reduce(function (headers, line) {\r\n var parts = line.split(\": \");\r\n var header = parts.shift();\r\n var value = parts.join(\": \");\r\n\r\n headers[header] = value;\r\n\r\n return headers;\r\n }, {})\r\n );\r\n } catch (err) {\r\n console.warn(\"Error parsing response headers\", err);\r\n }\r\n\r\n this.set(\"status\", this.xhr.status);\r\n\r\n if (dmx.validateReset) {\r\n dmx.validateReset(this.$node);\r\n }\r\n\r\n if (window.grecaptcha && this.$node.querySelector(\".g-recaptcha\")) {\r\n grecaptcha.reset();\r\n }\r\n\r\n if (this.xhr.status < 400) {\r\n this.set(\"data\", response);\r\n this.dispatchEvent(\"success\");\r\n } else {\r\n // some other server error\r\n this.set(\"lastError\", {\r\n status: this.xhr.status,\r\n message: this.xhr.statusText,\r\n response: response,\r\n });\r\n\r\n if (this.xhr.status == 400) {\r\n // validation error\r\n this.dispatchEvent(\"invalid\");\r\n\r\n if (response.form) {\r\n for (var name in response.form) {\r\n if (response.form.hasOwnProperty(name)) {\r\n var element = this.$node.querySelector('[name=\"' + name + '\"]');\r\n if (element) {\r\n element.setCustomValidity(response.form[name]);\r\n\r\n dmx.requestUpdate();\r\n\r\n if (dmx.bootstrap5forms) {\r\n dmx.validate.setBootstrap5Message(\r\n element,\r\n response.form[name]\r\n );\r\n } else if (dmx.bootstrap4forms) {\r\n dmx.validate.setBootstrap4Message(\r\n element,\r\n response.form[name]\r\n );\r\n } else if (dmx.bootstrap3forms) {\r\n dmx.validate.setBootstrapMessage(\r\n element,\r\n response.form[name]\r\n );\r\n } else {\r\n dmx.validate.setErrorMessage(element, response.form[name]);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n console.warn(\"400 error, no form errors in response.\", response);\r\n }\r\n } else if (this.xhr.status == 401) {\r\n this.dispatchEvent(\"unauthorized\");\r\n } else if (this.xhr.status == 403) {\r\n this.dispatchEvent(\"forbidden\");\r\n } else {\r\n this.dispatchEvent(\"error\");\r\n }\r\n }\r\n }\r\n\r\n this.dispatchEvent(\"done\");\r\n },\r\n\r\n onload: function (event) {\r\n this._done();\r\n },\r\n\r\n onabort: function (event) {\r\n this._reset();\r\n this.dispatchEvent(\"abort\");\r\n this.dispatchEvent(\"done\");\r\n },\r\n\r\n onerror: function (event) {\r\n this._done({ message: \"Failed to execute\" });\r\n },\r\n\r\n ontimeout: function (event) {\r\n this._done({ message: \"Execution timeout\" });\r\n },\r\n\r\n onprogress: function (type) {\r\n return function (event) {\r\n event.loaded = event.loaded || event.position;\r\n\r\n var percent = event.lengthComputable\r\n ? Math.ceil((event.loaded / event.total) * 100)\r\n : 0;\r\n\r\n this.set(\"state\", {\r\n executing: true,\r\n uploading: type == \"upload\" && percent < 100,\r\n processing: type == \"upload\" && percent == 100,\r\n downloading: type == \"download\",\r\n });\r\n\r\n this.set(type + \"Progress\", {\r\n position: event.loaded,\r\n total: event.total,\r\n percent: percent,\r\n });\r\n\r\n this.dispatchEvent(type, {\r\n lengthComputable: event.lengthComputable,\r\n loaded: event.loaded,\r\n total: event.total,\r\n });\r\n };\r\n },\r\n\r\n _parseJsonForm: function (form) {\r\n const result = {};\r\n\r\n for (const element of form.elements) {\r\n if (element.name && !element.disabled) {\r\n const steps = parseSteps(element.name.replace(/\\[\\]$/, \"\"));\r\n let context = result;\r\n\r\n for (const step of steps) {\r\n const type = element.type;\r\n\r\n if (type == \"number\") {\r\n if (element.value) {\r\n context = setValue(\r\n context,\r\n step,\r\n context[step.key],\r\n +element.value\r\n );\r\n }\r\n } else if (type == \"radio\" || type == \"checkbox\") {\r\n if (element.getAttribute(\"value\")) {\r\n if (element.checked) {\r\n context = setValue(\r\n context,\r\n step,\r\n context[step.key],\r\n element.value\r\n );\r\n }\r\n } else {\r\n context = setValue(\r\n context,\r\n step,\r\n context[step.key],\r\n element.checked\r\n );\r\n }\r\n } else if (type == \"select-multiple\") {\r\n context = setValue(\r\n context,\r\n step,\r\n context[step.key],\r\n Array.from(element.selectedOptions).map((opt) => opt.value)\r\n );\r\n } else {\r\n context = setValue(context, step, context[step.key], element.value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n\r\n function parseSteps(name) {\r\n const steps = [],\r\n org = name;\r\n const re = /^\\[([^\\]]*)\\]/;\r\n const reNumeric = /^\\d+$/;\r\n\r\n name = name.replace(/^([^\\[]+)/, (m, p1) => {\r\n steps.push({ type: \"object\", key: p1 });\r\n return \"\";\r\n });\r\n\r\n if (!name) {\r\n steps[0].last = true;\r\n return steps;\r\n }\r\n\r\n while (name) {\r\n if (re.test(name)) {\r\n name = name.replace(re, (m, p1) => {\r\n if (!p1) {\r\n steps[steps.length - 1].append = true;\r\n } else if (reNumeric.test(p1)) {\r\n steps.push({ type: \"array\", key: +p1 });\r\n } else {\r\n steps.push({ type: \"object\", key: p1 });\r\n }\r\n\r\n return \"\";\r\n });\r\n\r\n continue;\r\n }\r\n\r\n return { type: \"object\", key: org, last: true };\r\n }\r\n\r\n for (let i = 0, n = steps.length; i < n; i++) {\r\n const step = steps[i];\r\n\r\n if (i + 1 < n) step.nextType = steps[i + 1].type;\r\n else step.last = true;\r\n }\r\n\r\n return steps;\r\n }\r\n\r\n function setValue(context, step, current, value) {\r\n if (step.last) {\r\n if (current === undefined) {\r\n context[step.key] = step.append ? [value] : value;\r\n } else if (Array.isArray(current)) {\r\n context[step.key].push(value);\r\n } else if (typeof current == \"object\") {\r\n return setValue(\r\n current,\r\n { type: \"object\", key: \"\", last: true },\r\n current[\"\"],\r\n value\r\n );\r\n } else {\r\n context[step.key] = [current, value];\r\n }\r\n\r\n return context;\r\n }\r\n\r\n if (current === undefined) {\r\n return (context[step.key] = step.nextType == \"array\" ? [] : {});\r\n } else if (Array.isArray(current)) {\r\n if (step.nextType == \"array\") return current;\r\n const obj = {};\r\n for (let i = 0, n = current.length; i < n; i++) {\r\n if (current[i] !== undefined) obj[i] = current[i];\r\n }\r\n return (context[step.key] = obj);\r\n } else if (typeof current == \"object\") {\r\n return context[step.key];\r\n }\r\n\r\n return (context[step.key] = { \"\": current });\r\n }\r\n },\r\n});\r\n","dmx.Component('if', {\r\n\r\n attributes: {\r\n condition: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n events: {\r\n show: Event,\r\n hide: Event\r\n },\r\n\r\n render: function(node) {\r\n this.nodes = [];\r\n this.template = document.createDocumentFragment();\r\n while (this.$node.firstChild) {\r\n this.template.appendChild(this.$node.firstChild);\r\n }\r\n this.update({});\r\n },\r\n\r\n update: function(props) {\r\n if (this.props.condition != props.condition) {\r\n if (this.props.condition) {\r\n this._render();\r\n } else {\r\n this._destroy();\r\n }\r\n }\r\n },\r\n\r\n _render: function() {\r\n var template = this.template.cloneNode(true);\r\n this.nodes = Array.prototype.slice.call(template.childNodes);\r\n this.$node.appendChild(template);\r\n this.$parse();\r\n dmx.requestUpdate();\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('show');\r\n }, this);\r\n },\r\n\r\n _destroy: function() {\r\n this.bindings = {};\r\n this.nodes.splice(0).forEach(function(node) {\r\n var event = new Event('remove', { cancelable: true });\r\n if (node.dispatchEvent(event)) {\r\n dmx.dom.remove(node);\r\n }\r\n });\r\n this.children.splice(0).forEach(function(child) {\r\n child.$destroy();\r\n });\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('hide');\r\n }, this);\r\n }\r\n\r\n});\r\n","dmx.Component('datetime', {\r\n\r\n initialData: function() {\r\n return {\r\n datetime: this.datetime()\r\n };\r\n },\r\n\r\n attributes: {\r\n interval: {\r\n type: String,\r\n default: 'seconds' // seconds, minutes, hours, days\r\n },\r\n\r\n utc: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n render: function() {\r\n this.timer();\r\n },\r\n\r\n timer: function() {\r\n this.set('datetime', this.datetime());\r\n requestAnimationFrame(this.timer.bind(this));\r\n },\r\n\r\n datetime: function() {\r\n var date = new Date(), year, month, day, hours, minutes, seconds;\r\n var pad = function(n, d) { return ('0000' + n).substr(-d); };\r\n\r\n if (this.props.utc) {\r\n year = date.getUTCFullYear();\r\n month = date.getUTCMonth() + 1;\r\n day = date.getUTCDate();\r\n hours = date.getUTCHours();\r\n minutes = date.getUTCMinutes();\r\n seconds = date.getUTCSeconds();\r\n } else {\r\n year = date.getFullYear();\r\n month = date.getMonth() + 1;\r\n day = date.getDate();\r\n hours = date.getHours();\r\n minutes = date.getMinutes();\r\n seconds = date.getSeconds();\r\n }\r\n\r\n var dateString = pad(year, 4) + '-' + pad(month, 2) + '-' + pad(day, 2);\r\n var tz = this.props.utc ? 'Z' : '';\r\n\r\n switch (this.props.interval) {\r\n case 'days': return dateString + 'T00:00:00' + tz;\r\n case 'hours': return dateString + 'T' + pad(hours, 2) + ':00:00' + tz;\r\n case 'minutes': return dateString + 'T' + pad(hours, 2) + ':' + pad(minutes, 2) + ':00' + tz;\r\n }\r\n\r\n return dateString + 'T' + pad(hours, 2) + ':' + pad(minutes, 2) + ':' + pad(seconds, 2) + tz;\r\n }\r\n\r\n});\r\n","dmx.Component('api-action', {\r\n extends: 'fetch'\r\n});\r\n","dmx.Component('api-form', {\r\n extends: 'serverconnect-form'\r\n});\r\n","dmx.Component('array', {\r\n\r\n initialData: {\r\n items: [],\r\n count: 0\r\n },\r\n\r\n attributes: {\r\n items: {\r\n type: Array,\r\n default: []\r\n }\r\n },\r\n\r\n events: {\r\n updated: Event\r\n },\r\n\r\n methods: {\r\n add: function(newItem) {\r\n this.splice(this.count(), 0, newItem);\r\n },\r\n\r\n addUniq: function(newItem) {\r\n // Only add when not exists\r\n if (this.indexOf(newItem) == -1) {\r\n this.splice(this.count(), 0, newItem);\r\n }\r\n },\r\n\r\n insert: function(index, newItem) {\r\n this.splice(index, 0, newItem);\r\n },\r\n\r\n insertBefore: function(item, newItem) {\r\n var index = this.indexOf(item);\r\n if (index != -1) {\r\n this.splice(index, 0, newItem);\r\n }\r\n },\r\n\r\n insertAfter: function(item, newItem) {\r\n var index = this.indexOf(item);\r\n if (index != -1) {\r\n this.splice(index + 1, 0, newItem);\r\n }\r\n },\r\n\r\n replace: function(item, newItem) {\r\n var index = this.indexOf(item);\r\n if (index != -1) {\r\n this.splice(index, 1, newItem);\r\n }\r\n },\r\n\r\n replaceAt: function(index, newItem) {\r\n this.splice(index, 1, newItem);\r\n },\r\n\r\n remove: function(item) {\r\n var index = this.indexOf(item);\r\n if (index != -1) {\r\n this.splice(index, 1);\r\n }\r\n },\r\n\r\n removeAt: function(index) {\r\n this.splice(index, 1);\r\n },\r\n\r\n reverse: function() {\r\n this.reverse();\r\n },\r\n\r\n sort: function() {\r\n this.sort();\r\n },\r\n\r\n empty: function() {\r\n this.updateData([]);\r\n }\r\n },\r\n\r\n render: function() {\r\n var arr = dmx.array(this.props.items);\r\n this.set('items', arr);\r\n this.set('count', arr.length);\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('items')) {\r\n this.updateData(dmx.array(this.props.items));\r\n }\r\n },\r\n\r\n count: function() {\r\n return this.data.items.length;\r\n },\r\n\r\n indexOf: function(item) {\r\n return this.data.items.indexOf(item);\r\n },\r\n\r\n splice: function(index, remove, item) {\r\n var arr = dmx.clone(this.data.items);\r\n\r\n if (item !== undefined) {\r\n arr.splice(index, remove, item);\r\n } else {\r\n arr.splice(index, remove);\r\n }\r\n\r\n this.updateData(arr);\r\n },\r\n\r\n reverse: function() {\r\n var arr = dmx.clone(this.data.items);\r\n arr.reverse();\r\n this.updateData(arr);\r\n },\r\n\r\n sort: function() {\r\n var arr = dmx.clone(this.data.items);\r\n arr.sort();\r\n this.updateData(arr);\r\n },\r\n\r\n updateData: function(arr) {\r\n if (!dmx.equal(this.data.items, arr)) {\r\n //if (JSON.stringify(this.data.items) != JSON.stringify(arr)) {\r\n this.set('items', arr);\r\n this.set('count', arr.length);\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n }, this);\r\n }\r\n }\r\n\r\n});\r\n","dmx.Component('group', { render: function(node) { this.$parse(); } });","dmx.Component('flow', {\r\n\r\n initialData: {\r\n $param: null,\r\n data: null,\r\n running: false,\r\n lastError: null\r\n },\r\n\r\n attributes: {\r\n src: {\r\n type: String,\r\n default: null\r\n },\r\n\r\n preload: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n autorun: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n params: {\r\n type: Object,\r\n default: {}\r\n }\r\n },\r\n\r\n methods: {\r\n run: function(param, throwError) {\r\n return this.run(param, throwError);\r\n },\r\n\r\n runSub: function(param) {\r\n return this.runSub(param);\r\n }\r\n },\r\n\r\n events: {\r\n start: Event,\r\n done: Event,\r\n error: Event\r\n },\r\n\r\n $parseAttributes: function(node) {\r\n dmx.BaseComponent.prototype.$parseAttributes.call(this, node);\r\n dmx.dom.getAttributes(node).forEach(function(attr) {\r\n if (attr.name == 'param' && attr.argument) {\r\n this.$addBinding(attr.value, function(value) {\r\n this.props.params[attr.argument] = value;\r\n });\r\n }\r\n }, this);\r\n },\r\n\r\n render: function(node) {\r\n if (this.props.src) {\r\n if (this.props.preload || this.props.autorun) {\r\n this.load(this.props.src);\r\n }\r\n } else {\r\n try {\r\n this.flow = (window.Hjson ? Hjson : JSON).parse(node.textContent);\r\n if (this.props.autorun) {\r\n this.run();\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n if (dmx.debug) {\r\n console.debug(node.textContent);\r\n }\r\n }\r\n }\r\n },\r\n\r\n load: function(uri) {\r\n var self = this;\r\n\r\n return new Promise(function(resolve, reject) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onload = function() {\r\n try {\r\n self.flow = (window.Hjson ? Hjson : JSON).parse(xhr.responseText);\r\n if (self.props.autorun) {\r\n self.run();\r\n }\r\n resolve();\r\n } catch (e) {\r\n console.error(e);\r\n if (dmx.debug) {\r\n console.debug(xhr.responseText);\r\n }\r\n reject(e);\r\n }\r\n }\r\n xhr.onabort = reject;\r\n xhr.onerror = reject;\r\n xhr.ontimeout = reject;\r\n xhr.open('GET', uri);\r\n xhr.send();\r\n });\r\n },\r\n\r\n runSub: function(param) {\r\n var self = this;\r\n\r\n if (!this.flow) {\r\n if (this.props.src) {\r\n return this.load(this.props.src).then(function() {\r\n return dmx.Flow.run(self.flow, self);\r\n });\r\n }\r\n\r\n throw new Error('No flow');\r\n }\r\n\r\n return dmx.Flow.run(this.flow, this);\r\n },\r\n\r\n run: function(param, throwError) {\r\n var self = this;\r\n\r\n if (this.flow) {\r\n if (this.data.running) {\r\n console.info('Flow ' + this.name + ' is already running.');\r\n return;\r\n }\r\n\r\n this.set('running', true);\r\n this.set('log', {});\r\n this.set('$param', Object.assign({}, this.props.params, param));\r\n this.set('lastError', null);\r\n\r\n this.dispatchEvent('start');\r\n\r\n return dmx.Flow.run(this.flow, this).then(function(data) {\r\n self.set('running', false);\r\n self.set('data', data);\r\n self.dispatchEvent('done');\r\n if (dmx.debug) {\r\n console.debug('done', data);\r\n }\r\n return data;\r\n }).catch(function(err) {\r\n self.set('running', false);\r\n self.set('lastError', err && err.message);\r\n self.dispatchEvent('error');\r\n //if (dmx.debug) {\r\n // show error debug by default\r\n console.error(err);\r\n //}\r\n if (throwError) {\r\n throw err;\r\n }\r\n });\r\n } else if (this.props.src) {\r\n return this.load(this.props.src).then(function() {\r\n return self.run(param, throwError);\r\n });\r\n }\r\n }\r\n\r\n});\r\n","dmx.Component('toggle', {\r\n\r\n initialData: {\r\n checked: false\r\n },\r\n\r\n attributes: {\r\n checked: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n methods: {\r\n check: function() {\r\n if (!this.data.checked) {\r\n this.set('checked', true);\r\n this.isUpdated();\r\n }\r\n },\r\n\r\n uncheck: function() {\r\n if (this.data.checked) {\r\n this.set('checked', false);\r\n this.isUpdated();\r\n }\r\n },\r\n\r\n toggle: function() {\r\n this.set('checked', !this.data.checked);\r\n this.isUpdated();\r\n }\r\n },\r\n\r\n events: {\r\n updated: Event\r\n },\r\n\r\n render: function() {\r\n this.set('checked', this.props.checked);\r\n },\r\n\r\n update: function(props) {\r\n if (props.checked != this.props.checked) {\r\n this.set('checked', this.props.checked);\r\n this.isUpdated();\r\n }\r\n },\r\n\r\n isUpdated: function() {\r\n dmx.nextTick(function() {\r\n this.dispatchEvent('updated');\r\n }, this);\r\n }\r\n\r\n});\r\n","dmx.Attribute('bind', 'mounted', function(node, attr) {\r\n var name = attr.argument;\r\n var toggle = dmx.reToggleAttribute.test(name);\r\n\r\n this.$addBinding(attr.value, function(value) {\r\n if (toggle) {\r\n //node[name] = !!value;\r\n if (!!value) {\r\n node.setAttribute(name, '');\r\n } else {\r\n node.removeAttribute(name);\r\n }\r\n } else {\r\n if (name === 'style' && typeof value === 'object') {\r\n for (var prop in value) {\r\n if (value.hasOwnProperty(prop)) {\r\n node.style[prop] = value[prop];\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (value != null) {\r\n node.setAttribute(name, value);\r\n } else {\r\n node.removeAttribute(name);\r\n }\r\n\r\n if (name === 'src') {\r\n if (node.nodeName === 'VIDEO' || node.nodeName === 'AUDIO') {\r\n node.load();\r\n } else if (node.nodeName === 'SOURCE' && node.parentNode) {\r\n node.parentNode.load();\r\n }\r\n }\r\n }\r\n });\r\n});\r\n","dmx.Attribute('on', 'mounted', function(node, attr) {\r\n var self = this;\r\n\r\n dmx.eventListener(node, attr.argument, function(event) {\r\n if (event.originalEvent) {\r\n event = event.originalEvent;\r\n }\r\n\r\n var returnValue = dmx.parse(attr.value, dmx.DataScope({\r\n $event: event.$data,\r\n $originalEvent: event\r\n }, self));\r\n\r\n if (typeof returnValue == 'string') {\r\n try {\r\n returnValue = (new Function('event', returnValue)).call(this, event);\r\n } catch(e) {\r\n console.warn('Error executing \"' + returnValue + '\"', e);\r\n }\r\n }\r\n\r\n return returnValue;\r\n }, attr.modifiers);\r\n});\r\n","dmx.Attribute('repeat', 'before', function(node, attr) {\r\n if (this.node != node) {\r\n var component = this;\r\n var prevCount = 0;\r\n var children = [];\r\n var template = document.createDocumentFragment();\r\n var placeholder = document.createComment('Repeat ' + attr.value);\r\n var RepeatItem = dmx.Component('repeat-item');\r\n var name = attr.argument || 'repeat';\r\n\r\n node.parentNode.replaceChild(placeholder, node);\r\n node.removeAttribute('dmx-repeat');\r\n\r\n template.appendChild(node);\r\n\r\n component.set(name, []);\r\n\r\n this.$addBinding(attr.value, function(repeat) {\r\n var RepeatItem = dmx.Component('repeat-item');\r\n var items = dmx.repeatItems(repeat);\r\n\r\n if (!attr.modifiers.fast) {\r\n var fragment = document.createDocumentFragment();\r\n\r\n children.forEach(function(child) {\r\n component.children.splice(component.children.indexOf(child), 1);\r\n child.$destroy();\r\n });\r\n\r\n children = [];\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n var child = new RepeatItem(template.cloneNode(true), component, items[i]);\r\n child.$nodes.forEach(function(node) {\r\n fragment.appendChild(node);\r\n child.$parse(node);\r\n });\r\n children.push(child);\r\n component.children.push(child);\r\n }\r\n\r\n placeholder.parentNode.insertBefore(fragment, placeholder);\r\n } else {\r\n if (children.length > items.length) {\r\n // remove some children\r\n children.splice(items.length).forEach(function(child) {\r\n component.children.splice(component.children.indexOf(child), 1);\r\n child.$destroy();\r\n });\r\n }\r\n\r\n if (children.length) {\r\n // update existing children\r\n children.forEach(function(child, i) {\r\n child.set(items[i]);\r\n });\r\n }\r\n\r\n if (items.length > children.length) {\r\n // add new children\r\n var fragment = document.createDocumentFragment();\r\n\r\n for (var i = children.length; i < items.length; i++) {\r\n var child = new RepeatItem(template.cloneNode(true), component, items[i]);\r\n child.$nodes.forEach(function(node) {\r\n fragment.appendChild(node);\r\n child.$parse(node);\r\n });\r\n children.push(child);\r\n component.children.push(child);\r\n }\r\n\r\n placeholder.parentNode.insertBefore(fragment, placeholder);\r\n }\r\n }\r\n\r\n component.set(name, children.map(function(child) { return child.data }));\r\n });\r\n }\r\n});\r\n","dmx.Attribute('class', 'mounted', function(node, attr) {\r\n var className = attr.argument;\r\n\r\n this.$addBinding(attr.value, function(value, oldValue) {\r\n if (value != oldValue) {\r\n node.classList[value ? 'add' : 'remove'](className);\r\n }\r\n });\r\n});\r\n","dmx.Attribute('hide', 'mounted', function(node, attr) {\r\n var orgValue = node.style.getPropertyValue('display');\r\n var orgPriority = node.style.getPropertyPriority('display');\r\n\r\n this.$addBinding(attr.value, function(value) {\r\n if (value) {\r\n node.style.setProperty('display', 'none', 'important');\r\n } else {\r\n node.style.setProperty('display', orgValue, orgPriority);\r\n }\r\n });\r\n});\r\n","dmx.Attribute('show', 'mounted', function(node, attr) {\r\n var orgValue = node.style.getPropertyValue('display');\r\n var orgPriority = node.style.getPropertyPriority('display');\r\n\r\n this.$addBinding(attr.value, function(value) {\r\n if (!value) {\r\n node.style.setProperty('display', 'none', 'important');\r\n } else {\r\n node.style.setProperty('display', orgValue, orgPriority);\r\n }\r\n })\r\n});\r\n","dmx.Attribute('html', 'mounted', function(node, attr) {\r\n this.$addBinding(attr.value, function(value) {\r\n if (value != null) {\r\n node.innerHTML = value;\r\n } else {\r\n node.innerHTML = '';\r\n }\r\n });\r\n});\r\n","dmx.Attribute('text', 'mounted', function(node, attr) {\r\n this.$addBinding(attr.value, function(value) {\r\n if (value != null) {\r\n node.innerText = value;\r\n } else {\r\n node.innerText = '';\r\n }\r\n });\r\n});\r\n","dmx.Attribute('style', 'mounted', function(node, attr) {\r\n var property = attr.argument;\r\n var important = attr.modifiers.important ? 'important' : '';\r\n\r\n this.$addBinding(attr.value, function(value) {\r\n if (value != null) {\r\n node.style.setProperty(property, value, important);\r\n }\r\n });\r\n});\r\n","dmx.Formatters('global', {\r\n\r\n // json(obj:Any):String\r\n json: function(obj) {\r\n return JSON.stringify(obj);\r\n },\r\n\r\n // log(obj:Any):Any\r\n log: function(obj) {\r\n console.log(obj);\r\n return obj;\r\n },\r\n\r\n // run(flow:Any, param:Any):Undefined\r\n run: function(flow, param) {\r\n var scope = dmx.DataScope({\r\n $param: param\r\n }, this);\r\n\r\n dmx.Flow.run(flow, scope);\r\n }\r\n\r\n});\r\n","dmx.Actions({\r\n\r\n 'subflow': function(options) {\r\n var subflow = this.parse(options.flow);\r\n var param = this.parse(options.param);\r\n \r\n return this.parse(subflow + '.runSub(' + JSON.stringify(param) + ')');\r\n },\r\n\r\n 'comment': function(options) {\r\n if (dmx.debug) {\r\n console.debug(options.message);\r\n }\r\n },\r\n\r\n 'wait': function(options) {\r\n var delay = this.parse(options.delay);\r\n\r\n if (typeof delay != 'number') {\r\n throw new Error('wait: Invalid delay');\r\n }\r\n\r\n return new Promise(function(resolve) {\r\n setTimeout(resolve, delay);\r\n });\r\n },\r\n\r\n 'now': function(options) {\r\n return (new Date()).toISOString();\r\n },\r\n\r\n 'random': function(options) {\r\n var lower = this.parse(options.lower);\r\n var upper = this.parse(options.upper);\r\n var floating = !!this.parse(options.floating);\r\n\r\n if (typeof lower != 'number' || !isFinite(lower)) {\r\n lower = 0;\r\n }\r\n\r\n if (typeof upper != 'number' || !isFinite(upper)) {\r\n upper = 1;\r\n }\r\n\r\n var rnd = lower + (Math.random() * (upper - lower));\r\n\r\n if (!floating && Math.floor(lower) == lower && Math.floor(upper) == upper) {\r\n rnd = Math.round(rnd);\r\n }\r\n\r\n return rnd;\r\n },\r\n\r\n 'confirm': function(options) {\r\n var message = this.parse(options.message);\r\n\r\n if (typeof message != 'string') {\r\n throw new Error('confirm: Invalid message');\r\n }\r\n\r\n var result = confirm(message);\r\n\r\n if (result) {\r\n if (options.then) {\r\n return this._exec(options.then).then(function() {\r\n return result;\r\n });\r\n }\r\n } else if (options.else) {\r\n return this._exec(options.else).then(function() {\r\n return result;\r\n });\r\n }\r\n\r\n return result;\r\n },\r\n\r\n 'prompt': function(options) {\r\n var message = this.parse(options.message);\r\n\r\n if (typeof message != 'string') {\r\n throw new Error('prompt: Invalid message');\r\n }\r\n\r\n return prompt(message);\r\n },\r\n\r\n 'alert': function(options) {\r\n var message = this.parse(options.message);\r\n\r\n if (typeof message != 'string') {\r\n throw new Error('alert: Invalid message');\r\n }\r\n\r\n return alert(message);\r\n },\r\n\r\n 'repeat': function(options) {\r\n var items = dmx.clone(this.parse(options.repeat));\r\n\r\n if (!items) return;\r\n\r\n if (typeof items == 'boolean') {\r\n items = items ? [0] : [];\r\n } else if (typeof items == 'string') {\r\n items = items.split(/\\s*,\\s*/);\r\n } else if (typeof items == 'number') {\r\n var arr = [];\r\n for (var i = 0; i < items; i++) {\r\n arr.push(i + 1);\r\n }\r\n items = arr;\r\n }\r\n\r\n if (typeof items != 'object') {\r\n throw new Error('repeat: data is not repeatable');\r\n }\r\n\r\n var self = this;\r\n var parentScope = this.scope;\r\n var parentOutput = this.output;\r\n return this._each(items, function(value, index) {\r\n self.scope = new dmx.DataScope(Object.assign({\r\n $value: value,\r\n $index: index,\r\n $name: index,\r\n $key: index,\r\n $number: index + 1,\r\n $oddeven: index % 2\r\n }, value), parentScope);\r\n\r\n self.output = {};\r\n\r\n if (Array.isArray(options.outputFields) && value instanceof Object) {\r\n options.outputFields.forEach(function(field) {\r\n self.output[field] = value[field];\r\n });\r\n }\r\n\r\n return self._exec(options.exec).then(function() {\r\n var output = self.output;\r\n self.scope = parentScope;\r\n self.output = parentOutput;\r\n return output\r\n });\r\n });\r\n },\r\n\r\n 'condition': function(options) {\r\n var result = !!this.parse(options.if);\r\n\r\n if (result) {\r\n if (options.then) {\r\n return this._exec(options.then).then(function() {\r\n return result;\r\n });\r\n }\r\n } else if (options.else) {\r\n return this._exec(options.else).then(function() {\r\n return result;\r\n });\r\n }\r\n\r\n return result;\r\n },\r\n\r\n 'conditions': function(options) {\r\n if (Array.isArray(options.conditions)) {\r\n for (var i = 0; i < options.conditions.length; i++) {\r\n var condition = options.conditions[i];\r\n\r\n if (this.parse(condition.when)) {\r\n return this._exec(condition.then);\r\n }\r\n }\r\n }\r\n },\r\n\r\n 'select': function(options) {\r\n var expression = this.parse(options.expression);\r\n\r\n if (Array.isArray(options.cases)) {\r\n for (var i = 0; i < options.cases.length; i++) {\r\n var item = options.cases[i];\r\n\r\n if (this.parse(item.value) == expression) {\r\n return this._exec(item.exec);\r\n }\r\n }\r\n }\r\n },\r\n\r\n 'group': function(options) {\r\n if (options.name) {\r\n var self = this;\r\n var parentOutput = this.output;\r\n this.output = {};\r\n\r\n return this._exec(options.exec).then(function() {\r\n var output = self.output;\r\n self.output = parentOutput;\r\n return output;\r\n });\r\n }\r\n \r\n return this._exec(options.exec)\r\n },\r\n\r\n 'while': function(options) {\r\n var self = this;\r\n var loop = function() {\r\n return new Promise(function(resolve) {\r\n if (!self.parse(options.condition)) return resolve();\r\n self._exec(options.exec).then(loop).then(resolve);\r\n });\r\n };\r\n\r\n return loop();\r\n },\r\n\r\n 'switch': function(options) {\r\n /*\r\n {\r\n switch: {\r\n expression: \"{{myVar}}\",\r\n cases: [\r\n { case: 1, exec: { console.log: { message: \"Case 1\" }}}\r\n { case: 2, exec: { console.log: { message: \"Case 2\" }}}\r\n { case: 3, exec: { console.log: { message: \"Case 3\" }}}\r\n ],\r\n default: { console.log: { message: \"Default Case\" }}\r\n }\r\n }\r\n */\r\n var expression = this.parse(options.expression);\r\n for (var i = 0; i < options.cases.length; i++) {\r\n if (this.parse(options.cases[i].case) === expression) {\r\n return this._exec(options.cases[i].exec);\r\n }\r\n }\r\n if (options.default) {\r\n return this._exec(options.default);\r\n }\r\n },\r\n\r\n 'tryCatch': function(options) {\r\n var self = this;\r\n return Promise.resolve(self._exec(options.try)).catch(function() {\r\n return self._exec(options.catch);\r\n });\r\n },\r\n\r\n 'run': function(options) {\r\n if (!options.action) {\r\n throw new Error('run: missing action');\r\n }\r\n\r\n return this.parse(options.action);\r\n },\r\n\r\n 'runJS': function(options) {\r\n if (!options.function) {\r\n throw new Error('runJS: missing function');\r\n }\r\n\r\n var func = this.parse(options.function);\r\n var args = this.parse(options.args);\r\n\r\n return window[func].apply(null, args);\r\n },\r\n\r\n 'assign': function(options) {\r\n return this.parse(options.value);\r\n },\r\n\r\n 'setGlobal': function(options) {\r\n var key = this.parse(options.key);\r\n var value = this.parse(options.value);\r\n\r\n if (typeof key != 'string') {\r\n throw new Error('setGlobal: key must be a string');\r\n }\r\n\r\n dmx.global.set(key, value);\r\n\r\n return value;\r\n },\r\n\r\n 'setSession': function(options) {\r\n var key = this.parse(options.key);\r\n var value = this.parse(options.value);\r\n\r\n if (typeof key != 'string') {\r\n throw new Error('setSession: key must be a string');\r\n }\r\n\r\n sessionStorage.setItem(key, JSON.stringify(value));\r\n\r\n return value;\r\n },\r\n\r\n 'getSession': function(options) {\r\n var key = this.parse(options.key);\r\n\r\n if (typeof key != 'string') {\r\n throw new Error('getSession: key must be a string');\r\n }\r\n\r\n return JSON.parse(sessionStorage.getItem(key));\r\n },\r\n\r\n 'removeSession': function(options) {\r\n var key = this.parse(options.key);\r\n\r\n if (typeof key != 'string') {\r\n throw new Error('removeSession: key must be a string');\r\n }\r\n\r\n sessionStorage.removeItem(key);\r\n\r\n return true;\r\n },\r\n\r\n 'setStorage': function(options) {\r\n var key = this.parse(options.key);\r\n var value = this.parse(options.value);\r\n\r\n if (typeof key != 'string') {\r\n throw new Error('setStorage: key must be a string');\r\n }\r\n\r\n localStorage.setItem(key, JSON.stringify(value));\r\n\r\n return value;\r\n },\r\n\r\n 'getStorage': function(options) {\r\n var key = this.parse(options.key);\r\n\r\n if (typeof key != 'string') {\r\n throw new Error('getStorage: key must be a string');\r\n }\r\n\r\n return JSON.parse(localStorage.getItem(key));\r\n },\r\n\r\n 'removeStorage': function(options) {\r\n var key = this.parse(options.key);\r\n\r\n if (typeof key != 'string') {\r\n throw new Error('removeStorage: key must be a string');\r\n }\r\n\r\n localStorage.removeItem(key);\r\n\r\n return true;\r\n },\r\n\r\n 'fetch': function(options) {\r\n var url = this.parse(options.url);\r\n var method = this.parse(options.method);\r\n var timeout = this.parse(options.timeout);\r\n var dataType = this.parse(options.dataType);\r\n var data = this.parse(options.data);\r\n var params = this.parse(options.params);\r\n var headers = this.parse(options.headers);\r\n var body = null;\r\n\r\n if (typeof url != 'string') {\r\n throw new Error('fetch: invalid url ' + url);\r\n }\r\n\r\n if (!['GET', 'POST', 'PUT', 'DELETE'].includes(method)) {\r\n //throw new Error('fetch: invalid method ' + method);\r\n method = 'GET';\r\n }\r\n\r\n if (!['auto', 'json', 'text'].includes(dataType)) {\r\n dataType = 'auto';\r\n }\r\n\r\n if (typeof timeout != 'number') {\r\n timeout = 0;\r\n }\r\n\r\n if (typeof params == 'object') {\r\n for (var param in params) {\r\n if (params.hasOwnProperty(param) && params[param] != null) {\r\n url += (url.indexOf('?') != -1 ? '&' : '?')\r\n + decodeURIComponent(param) + '=' + decodeURIComponent(params[param]);\r\n }\r\n }\r\n }\r\n\r\n if (method != 'GET') {\r\n if (dataType == 'text') {\r\n if (!headers['Content-Type']) {\r\n headers['Content-Type'] = 'application/text';\r\n }\r\n body = data.toString();\r\n } else if (dataType == 'json') {\r\n if (!headers['Content-Type']) {\r\n headers['Content-Type'] = 'application/json';\r\n }\r\n data = JSON.stringify(data);\r\n } else {\r\n if (method == 'POST') {\r\n body = new FormData();\r\n\r\n if (typeof data == 'object' && !Array.isArray(data)) {\r\n for (var key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n var value = data[key];\r\n\r\n if (Array.isArray(value)) {\r\n if (!/\\[\\]$/.test(key)) {\r\n key += '[]';\r\n }\r\n for (var i in value) {\r\n if (value.hasOwnProperty(i)) {\r\n body.append(key, value[i]);\r\n }\r\n }\r\n } else {\r\n body.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (!headers['Content-Type']) {\r\n headers['Content-Type'] = 'application/text';\r\n }\r\n data = data.toString();\r\n }\r\n }\r\n }\r\n\r\n return new Promise(function(resolve, reject) {\r\n var xhr = new XMLHttpRequest();\r\n\r\n xhr.onerror = reject;\r\n xhr.onabort = reject;\r\n xhr.ontimeout = reject;\r\n xhr.onload = function() {\r\n var response = xhr.responseText;\r\n var headers = (function(raw) {\r\n var arr = raw.trim().split(/[\\r\\n]+/);\r\n\r\n return arr.reduce(function(headers, line) {\r\n var parts = line.split(': ');\r\n var header = parts.shift();\r\n var value = parts.join(': ');\r\n\r\n headers[header.toLowerCase()] = value;\r\n\r\n return headers;\r\n }, {});\r\n })(xhr.getAllResponseHeaders());\r\n\r\n if (/^application\\/json/.test(headers['content-type'])) {\r\n response = JSON.parse(response);\r\n }\r\n\r\n resolve({\r\n status: xhr.status,\r\n headers: headers,\r\n data: response\r\n });\r\n }\r\n\r\n xhr.open(method, url);\r\n\r\n xhr.timeout = timeout * 1000;\r\n\r\n for (var header in headers) {\r\n if (headers.hasOwnProperty(header)) {\r\n xhr.setRequestHeader(header, headers[header]);\r\n }\r\n }\r\n\r\n xhr.send(body);\r\n });\r\n }\r\n\r\n});\r\n\r\n// aliasses\r\ndmx.__actions['setValue'] = dmx.__actions['assign'];\r\ndmx.__actions['api'] = dmx.__actions['fetch'];\r\ndmx.__actions['api.send'] = dmx.__actions['fetch'];\r\ndmx.__actions['serverConnect'] = dmx.__actions['fetch'];","dmx.Actions({\r\n /**\r\n * Add new columns to the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {Object.} options.add - Object with column name as key and the value\r\n * @param {boolean} [options.overwrite=false] - Overwrite existing columns\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.addColumns': function(options) {\r\n var collection = this.parse(options.collection);\r\n var add = options.add;\r\n var overwrite = !!this.parse(options.overwrite);\r\n\r\n if (!collection.length) return [];\r\n \r\n var output = [];\r\n \r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = dmx.clone(collection[i]);\r\n\r\n for (var column in add) {\r\n if (add.hasOwnProperty(column)) {\r\n var scope = new dmx.DataScope(row, this.scope);\r\n\r\n if (overwrite || row[column] == null) {\r\n row[column] = dmx.parse(add[column], scope);\r\n }\r\n }\r\n }\r\n\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Remove entire specified columns from the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {string[]} options.columns - The columns\r\n * @param {boolean} [options.keep=false] - Keep or remove the columns\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.filterColumns': function(options) {\r\n var collection = this.parse(options.collection);\r\n var columns = this.parse(options.columns);\r\n var keep = !!this.parse(options.keep);\r\n\r\n if (!collection.length) return [];\r\n\r\n var output = [];\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = collection[i];\r\n var newRow = {};\r\n\r\n for (var column in row) {\r\n if (row.hasOwnProperty(column)) {\r\n if (columns.includes(column)) {\r\n if (keep) {\r\n newRow[column] = dmx.clone(row[column]);\r\n }\r\n } else if (!keep) {\r\n newRow[column] = dmx.clone(row[column]);\r\n }\r\n }\r\n }\r\n\r\n output.push(newRow);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Rename columns in the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {Object.} options.rename - Object with old name as key and new name as value\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.renameColumns': function(options) {\r\n var collection = this.parse(options.collection);\r\n var rename = this.parse(options.rename);\r\n\r\n if (!collection.length) return [];\r\n \r\n var output = [];\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = collection[i];\r\n var newRow = {};\r\n\r\n for (var column in row) {\r\n if (row.hasOwnProperty(column)) {\r\n newRow[rename[column] || column] = dmx.clone(row[column]);\r\n }\r\n }\r\n\r\n output.push(newRow);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Fills empty rows with the row above's value\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {string[]} options.columns - The columns to fill\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.fillDown': function(options) {\r\n var collection = this.parse(options.collection);\r\n var columns = this.parse(options.columns);\r\n\r\n if (!collection.length) return [];\r\n\r\n var output = [];\r\n var toFill = {};\r\n\r\n for (var i = 0, l = columns.length; i < l; i++) {\r\n toFill[columns[i]] = null;\r\n }\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = dmx.clone(collection[i]);\r\n\r\n for (var column in toFill) {\r\n if (toFill.hasOwnProperty(column)) {\r\n if (row[column] == null) {\r\n row[column] = toFill[column];\r\n } else {\r\n toFill[column] = row[column];\r\n }\r\n }\r\n }\r\n\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Add new rows to the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {Object[]} options.rows - The rows to add\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.addRows': function(options) {\r\n var collection = this.parse(options.collection);\r\n var rows = this.parse(options.rows);\r\n\r\n return dmx.clone(collection).concat(dmx.clone(rows));\r\n },\r\n\r\n /**\r\n * Add row numbers to the collection\r\n * @param {Object} options \r\n * @param {Object[]} options.collection - The collection\r\n * @param {string} options.column - The name for the column\r\n * @param {number} options.startAt - The row number to start with\r\n * @param {boolean} [options.desc=false] - Order descending\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.addRowNumbers': function(options) {\r\n var collection = this.parse(options.collection);\r\n var column = this.parse(options.column);\r\n var startAt = this.parse(options.startAt);\r\n var desc = !!this.parse(options.desc);\r\n\r\n var output = [];\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = dmx.clone(collection[i]);\r\n row[column] = desc ? l + startAt - i : startAt + i;\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Join two collections (Left join)\r\n * @param {Object} options\r\n * @param {Object[]} options.collection1 - Left collection\r\n * @param {Object[]} options.collection2 - Right collection\r\n * @param {Object.} options.matches - Columns to match\r\n * @param {boolean} [options.matchAll=false] - Match columns using AND instead of OR\r\n * @returns {Object[]} - New collection\r\n */\r\n 'colections.join': function(options) {\r\n var collection1 = this.parse(options.collection1);\r\n var collection2 = this.parse(options.collection2);\r\n var matches = this.parse(options.matches);\r\n var matchAll = !!this.parse(options.matchAll);\r\n\r\n var output = [];\r\n\r\n for (var i = 0, l = collection1.length; i < l; i++) {\r\n var row = dmx.clone(collection1[i]);\r\n\r\n for (var j = 0, l2 = collection2.length; j < l2; j++) {\r\n var row2 = collection2[j];\r\n var hasMatch = false;\r\n\r\n for (var match in matches) {\r\n if (matches.hasOwnProperty(match)) {\r\n if (row[match] == row2[matches[match]]) {\r\n hasMatch = true;\r\n if (!matchAll) break;\r\n } else if (matchAll) {\r\n hasMatch = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (hasMatch) {\r\n for (var column in row2) {\r\n if (row2.hasOwnProperty(column)) {\r\n // TODO duplicate row from collection1 when multiple matches exist in collection2\r\n // TODO check for duplicate column names\r\n row[column] = dmx.clone(row2[column]);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Normalize all rows, add missing columns with NULL value\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.mormalize': function(options) {\r\n var collection = this.parse(options.collection);\r\n\r\n var columns = [];\r\n var output = [];\r\n\r\n // first collect all columns from collection\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n for (var column in collection[i]) {\r\n if (collection[i].hasOwnProperty(column)) {\r\n if (columns.indexOf(column) == -1) {\r\n columns.push(column);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = {};\r\n\r\n for (var j = 0, l2 = columns.length; j < l2; j++) {\r\n var column = columns[j];\r\n var value = dmx.clone(collection[column]);\r\n row[column] = value != null ? value : null;\r\n }\r\n\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n }\r\n\r\n});","dmx.Actions({\r\n\r\n 'console.log': function(options) {\r\n console.log(this.parse(options.message));\r\n },\r\n\r\n 'console.info': function(options) {\r\n console.info(this.parse(options.message));\r\n },\r\n\r\n 'console.warn': function(options) {\r\n console.warn(this.parse(options.message));\r\n },\r\n\r\n 'console.error': function(options) {\r\n console.error(this.parse(options.message));\r\n },\r\n\r\n 'console.count': function(options) {\r\n console.count(this.parse(options.label));\r\n },\r\n\r\n 'console.time': function(options) {\r\n console.time(this.parse(options.label));\r\n },\r\n\r\n 'console.timeEnd': function(options) {\r\n console.timeEnd(this.parse(options.label));\r\n },\r\n\r\n 'console.group': function(options) {\r\n console.group();\r\n },\r\n\r\n 'console.groupEnd': function(options) {\r\n console.groupEnd();\r\n },\r\n\r\n 'console.clear': function(options) {\r\n console.clear();\r\n }\r\n\r\n});"]}