pleroma/priv/static/adminfe/static/js/chunk-2561.93a05adb.js.map

1 line
1.2 MiB

{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./node_modules/brace/index.js","webpack:///./node_modules/default-passive-events/dist/index.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./node_modules/vue2-ace-editor/index.js","webpack:///./node_modules/brace/mode/elixir.js","webpack:///./node_modules/brace/ext/emmet.js"],"names":["module","exports","source","excluded","key","i","target","sourceKeys","Object","keys","length","indexOf","Error","global","this","window","define","deps","payload","arguments","modules","payloads","original","apply","console","error","trace","_acequire","parentId","callback","lookup","undefined","prototype","toString","call","params","l","dep","acequire","push","packagedModule","normalizeModule","moduleName","chunks","split","charAt","slice","join","previous","replace","mod","id","uri","packaged","ns","root","exportAce","ace","real","exec","RegExp","test","match","String","compliantExecNpcg","compliantLastIndexIncrement","x","lastIndex","str","name","r2","array","item","from","Array","regex","ignoreCase","multiline","extended","sticky","getNativeFlags","index","_xregexp","captureNames","Empty","Function","bind","that","TypeError","args","bound","result","concat","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","_toString","owns","hasOwnProperty","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","splice","makeArray","a","lengthBefore","array_splice","start","deleteCount","pos","removeCount","Math","max","removed","insert","add","remove","min","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","isArray","obj","createEmpty","boxedString","splitString","forEach","fun","object","toObject","self","thisp","map","filter","value","every","some","reduce","reduceRight","sought","toInteger","lastIndexOf","abs","getPrototypeOf","__proto__","constructor","getOwnPropertyDescriptor","property","descriptor","enumerable","configurable","getter","setter","get","set","getOwnPropertyNames","create","empty","propertyIsEnumerable","isPrototypeOf","toLocaleString","valueOf","properties","Type","defineProperties","doesDefinePropertyWork","defineProperty","exception","definePropertyWorksOnObject","definePropertyWorksOnDom","document","createElement","definePropertyFallback","seal","freeze","freezeObject","preventExtensions","isSealed","isFrozen","isExtensible","returnValue","hasDontEnumBug","dontEnums","dontEnumsLength","ii","dontEnum","Date","now","getTime","ws","trim","trimBeginRegexp","trimEndRegexp","n","floor","o","getDocumentHead","doc","head","getElementsByTagName","documentElement","tag","createElementNS","hasCssClass","el","className","addCssClass","removeCssClass","classes","toggleCssClass","setCssClass","node","include","hasCssString","sheets","createStyleSheet","styleSheets","owningElement","importCssString","cssText","style","appendChild","createTextNode","importCssStylsheet","link","rel","href","getInnerWidth","element","parseInt","computedStyle","clientWidth","getInnerHeight","clientHeight","scrollbarWidth","inner","width","minWidth","height","display","outer","position","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","removeChild","pageYOffset","getPageScrollTop","getPageScrollLeft","pageXOffset","scrollTop","scrollLeft","getComputedStyle","currentStyle","setInnerHtml","innerHtml","cloneNode","innerHTML","parentNode","replaceChild","setInnerText","innerText","textContent","getInnerText","getParentWindow","defaultView","parentWindow","inherits","ctor","superCtor","super_","writable","mixin","implement","proto","oop","Keys","ret","MODIFIER_KEYS","16","17","18","224","KEY_MODS","ctrl","alt","option","shift","super","meta","command","cmd","FUNCTION_KEYS","8","9","13","19","27","32","33","34","35","36","37","38","39","40","44","45","46","96","97","98","99","100","101","102","103","104","105","-13","112","113","114","115","116","117","118","119","120","121","122","123","144","145","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","107","109","110","186","187","188","189","190","191","192","219","220","221","222","111","106","toLowerCase","enter","escape","esc","del","mods","pow","keyCodeToString","keyCode","keyString","fromCharCode","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","navigator","os","platform","ua","userAgent","isWin","isIE","appName","parseFloat","isOldIE","isGecko","isMozilla","Controllers","controllers","product","isOldGecko","isOpera","opera","isWebKit","isChrome","isAIR","isIPad","isChromeOS","isIOS","MSStream","useragent","pressedKeys","ts","addListener","elem","type","addEventListener","attachEvent","wrapper","event","_wrapper","removeListener","removeEventListener","detachEvent","stopEvent","e","stopPropagation","preventDefault","cancelBubble","getButton","ctrlKey","altKey","shiftKey","button","1","2","4","capture","eventHandler","releaseCaptureHandler","onMouseUp","addTouchMoveListener","startx","starty","touchObj","touches","clientX","clientY","wheelX","wheelY","addMouseWheelListener","wheelDeltaX","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","timer","clicks","eventNames","3","onMousedown","isNewClick","clearTimeout","setTimeout","_clicks","onDblclick","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","defaultPrevented","resetPressedKeys","getModifierString","addCommandKeyListener","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","nextTick","win","listener","data","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","last","stringReverse","string","reverse","stringRepeat","count","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","deepCopy","arrayToMap","arr","createMap","props","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","deferred","timeout","cancel","schedule","isPending","delayedCall","defaultTimeout","_self","delay","dom","lang","KEYS","MODS","BROKEN_SETDATA","USE_IE_MIME_TYPE","TextInput","host","text","isTouchPad","setAttribute","opacity","insertBefore","firstChild","PLACEHOLDER","copied","cut","pasted","inComposition","tempStyle","isSelectionEmpty","isFocused","activeElement","onBlur","onFocus","resetSelection","focus","blur","syncSelection","syncValue","isEmpty","inputHandler","selectionStart","selectionEnd","setSelectionRange","resetValue","selection","setInputHandler","cb","getInputHandler","afterContextMenu","sendText","onPaste","substr","execCommand","substring","onTextInput","onInput","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","isAllSelected","selectAll","closeTimeout","onCompositionUpdate","$readOnly","val","lastValue","undo","canUndo","r","getRange","session","markUndoGroup","range","setRange","clearSelection","onCompositionEnd","c","syncComposition","onContextMenuClose","renderer","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","$undoManager","on","getElement","setReadOnly","readOnly","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","rect","container","getBoundingClientRect","top","borderTopWidth","borderLeftWidth","maxTop","bottom","move","textInput","scroller","typingResetTimeout","typing","detectArrowKeys","up","home","right","end","down","TextInputIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","onTouchMove","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","cursor","row","cmp","column","anchor","ev","inSelection","getDocumentPosition","mousedownEvent","selectionEmpty","getSelectionRange","$blockScrolling","moveToPosition","time","$focusTimout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","y","getShiftKey","selectToPosition","setCapture","setStyle","comparePoint","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","distance","ax","ay","bx","by","sqrt","calcDistance","getBracketRange","getWordRange","isMultiLine","contains","getLineRange","getAccelKey","$lastScroll","t","vx","vy","allowed","prevScroll","dt","direction","canScroll","isScrollableBy","speed","scrollBy","stop","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","show","hide","getHeight","offsetHeight","getWidth","destroy","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","hideTooltip","_signal","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","isMousePressed","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","selectionRange","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","blankImage","src","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","lineHeight","layerConfig","characterWidth","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","$cursorLayer","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","removeMarker","fromOrientedRange","getReadOnly","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","types","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","eventTarget","unselectable","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","s","onload","_","isAbort","qualifyURL","EventEmitter","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","once","newCallback","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","capturing","off","removeAllListeners","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","getOption","opt","warn","forwardTo","handlesSet","message","reportError","msg","AppConfig","$defaultOptions","defineOptions","options","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","init","__webpack_require__","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","ownerDocument","script","getAttribute","attributes","j","attr","deHyphenate","m","base","m1","toUpperCase","all","moduleUrl","component","parts","sep","re","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","DefaultGutterHandler","config","MouseHandler","focusEditor","hasFocus","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","insideStart","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onCaptureInterval","$onCaptureMouseMove","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","getLine","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","commands","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","h","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","len","_getCharClass","chars","ix","wType","nType","cType","rtlCandidate","_getCharacterType","ch","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","action","condPos","_computeLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","line","wrapIndent","isLastRow","EOF","seenBidi","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","$useWrapMode","splits","$wrapData","indent","size","isFullWidth","getScreenTabSize","endOfLine","markAsDirty","updateCharacterWidths","fontMetrics","$characterSize","bidiCharWidth","$measureCharWidth","getShowInvisibles","setShowInvisibles","setEolChar","eolChar","setTextDir","getPosLeft","col","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","logicalIdx","charWidth","Range","startRow","startColumn","endRow","endColumn","isEqual","compare","compareRange","p","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideEnd","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","clone","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Selection","getDocument","lead","selectionLead","createAnchor","selectionAnchor","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","getCursor","getPosition","getSelectionAnchor","getSelectionLead","shiftSelection","columns","moveCursorTo","isBackwards","$moveSelection","mover","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectWord","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","$bidiHandler","round","docPos","lineWidgets","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","values","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","next","consumeLineEnd","merge","unshift","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","splitChar","keywords","list","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","mode","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","rowCount","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","context","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","\"","'","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","selected","opening","closing","rowDiff","CstyleBehaviour","getCursorPosition","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","iterator","$matchTokenType","iterator2","bracket","packages","pack","codePoint","addUnicodePackage","Ll","Lu","Lt","Lm","Lo","M","Mn","Mc","Me","N","Nd","Nl","No","P","Pd","Ps","Pe","Pi","Pf","Pc","Po","Sm","Sc","Sk","So","Z","Zs","Zl","Zp","C","Cc","Cf","Co","Cs","Cn","unicode","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","removeInLine","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","minEmptyLength","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","input","autoOutdent","createWorker","createModeDelegates","$modes","delegations","scope","functionName","$delegator","method","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","word","score","$id","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","setValue","getValue","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","MAX","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","SearchHighlight","clazz","setRegexp","MAX_RANGES","cache","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","sort","b","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","pointIndex","excludeEdges","startIndex","endIndex","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","consumeRange","afterStart","restoreRange","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","getFoldWidget","getFoldWidgetRange","$foldStyles","manual","markbegin","markbeginend","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","$brackets",")","(","]","[","{","}","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","bgTokenizer","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","ignore","$deltasDoc","$deltasFold","$informUndoManager","$deltas","setUndoManager","getUndoManager","reset","getSelection","undoManager","$syncInformUndoManager","group","execute","mergeUndoDeltas","$defaultUndoManager","redo","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","getOverwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markerId","markers","getMarkers","highlight","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","$scrollTop","setScrollTop","isNaN","getScrollTop","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","w","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","lastUndoRange","$getUndoSelection","foldDelta","redoChanges","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$clipRowToDocument","Number","MAX_VALUE","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","getUseWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","SPACE","TAB","TAB_SPACE","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","displayed","indentation","getWrapIndent","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","wrap","$wrap","firstLineNumber","useSoftTabs","Search","find","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","modifier","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","findKeyCommand","$keyChain","CommandManager","byName","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","prompt","gotoLine","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","textarea","$mouseHandler","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","startOperation","endOperation","$opResetTimer","curOp","docChanged","selectionChanged","prevOp","commadEvent","previousCommand","scrollSelectionIntoView","animateScrolling","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","handler","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","getSession","cursorPos","resize","onResize","setTheme","theme","getTheme","getFontSize","setFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","startOuter","endOuter","lineCols","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","inVirtualSelectionMode","getBehavioursEnabled","transform","$mergeNextCommand","d","lineState","shouldOutdent","lineIndent","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","setDisplayIndentGuides","getDisplayIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","sel","endPoint","moved","totalDiff","rangeIndex","subRows","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","animate","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","found","brackets","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","preventScroll","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$resetCursorStyle","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","keybindingId","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","showLineNumbers","showGutter","displayIndentGuides","fontSize","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","foldStyle","UndoManager","$serializeDelta","$deserializeDelta","cloneDeltaSetsObj","deltaSets_old","fnGetModifiedDelta","deltaSets_new","deltaSet_old","deltaSet_new","delta_old","deltaSets","$doc","hasUndo","dirtyCounter","$undoStack","$redoStack","NaN","undoSelectionRange","redoSelectionRange","$deserializeDeltas","hasRedo","markClean","isClean","$serializeDeltas","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","$cells","rowInfo","annoText","gutterOffset","breakpoints","decorations","$firstLineNumber","lastLineNumber","gutterRenderer","$renderer","cell","textNode","foldWidget","getText","minHeight","$fixedWidth","padding","$padding","$computePadding","ceil","$showLineNumbers","setShowLineNumbers","getShowLineNumbers","paddingLeft","paddingRight","Marker","getBorderClass","tl","tr","br","bl","setPadding","setMarkers","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","drawBidiSingleLineMarker","firstRowScreen","stringBuilder","extraStyle","curr","clazzModified","lineRange","range1","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","tabStr","$indentGuideRe","spaceClass","tabClass","spaceContent","tabContent","scrollLines","lineElements","childNodes","lineElementsIdx","lineElement","$renderLine","$useLineGroups","oldConfig","lastChild","fragment","$renderLinesFragment","createDocumentFragment","$textToken","rparen","lparen","$renderToken","output","tabIdx","idx4","classToUse","space","renderIndentGuide","cols","$renderWrappedLine","onlyContents","splitChars","$renderSimpleLine","$getFoldLineTokens","renderTokens","addTokens","$measureNode","isIE8","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateVisibility","$updateOpacity","visibility","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","getPixelPosition","onScreen","$selectionMarkers","cursorIndex","pixelPos","drawCursor","$setOverwrite","ScrollBar","parent","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","change","CHAR_COUNT","FontMetrics","$setMeasureNodeStyles","$main","$testFractionalRect","isRoot","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","setPolling","GutterLayer","MarkerLayer","TextLayer","CursorLayer","VirtualRenderer","content","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","maxHeight","v","$loop","$renderChanges","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_GUTTER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$updateGutterLineHighlight","$gutterLineHighlight","$printMarginEl","containerEl","posTop","posLeft","$composition","setScrollMargin","sm","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","st","marginTop","marginLeft","$highlightGutterLine","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","steps","x_min","dx","initialScroll","oldSteps","$timer","scrollTo","canvasPos","textToScreenCoordinates","pageX","pageY","keepTextAreaAtCursor","$themeId","cssClass","$theme","isDark","setMouseCursor","maxPixelHeight","workerUrl","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","Worker","WorkerClient","topLevelNamespaces","classname","importScripts","$sendDeltaQueue","changeListener","onMessage","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","callbackId","callbacks","onmessage","err","deltaQueue","emit","ex","attachToDocument","q","UIWorkerClient","messageBuffer","main","emitSync","sender","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","selectionBefore","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","onSelectionInterval","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","selectMoreLines","selectMore","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","yBackwards","docEnd","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","forEachSelection","keepOrder","$byLines","reg","cmdResult","anim","buf","nl","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","hidden","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","comparator","binarySearch","matched","findAnnotations","arrow","onmousedown","Renderer","edit","_id","getElementById","env","tagName","oldNode","createEditSession","version","__esModule","default","Symbol","u","eventListenerOptionsSupported","EventTarget","assign","passive","_original","objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","render","attrs","px","required","contentBackup","methods","watch","newTheme","newLang","newOption","$nextTick","beforeDestroy","mounted","vm","$el","$emit","ElixirHighlightRules","TODO","originalRegex","#escaped_char","#interpolated_elixir","todo","#nest_curly_and_self","#regex_sub","metaData","fileTypes","firstLineMatch","keyEquivalent","scopeName","BaseFoldMode","prevIndent","nextIndent","SnippetManager","snippetMap","snippetNameMap","TabstopToken","inFormatString","tabstopId","expectIf","elseBranch","changeCase","local","snippetVar","choices","fmtString","guard","fmt","code","formatString","tokenizeTmSnippet","$getDefaultValue","variables","__","getVariableValue","varName","tmStrFormat","fmtTokens","formatted","fmtParts","resolveVariables","gChangeCase","snippet","gotoNext","i1","insertSnippetForSelection","snippetText","tabString","tabstops","expanding","copyValue","arg","tabstopManager","TabstopManager","selectionId","addTabstops","insertSnippet","tabNext","$getScope","inlinePhp","getActiveScopes","scopes","includeScopes","expandWithTab","expandSnippetForSelection","snippets","findMatchingSnippet","dryRun","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","snippetList","startRe","endRe","triggerRe","endTriggerRe","register","wrapRegexp","guardedRegexp","addSnippet","unregister","tabTrigger","trigger","endTrigger","endGuard","removeSnippet","nameMap","parseSnippetFile","JSON","parse","guardRe","getSnippetByName","$onChangeSelection","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","$openTabstops","selectedTabstop","removeTabstopMarkers","isRemove","$inChange","removeRange","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","snippetManager","containsLead","containsAnchor","selectTabstop","addTabstopMarkers","moveRelative","dest","movePoint","tabstop","Tab","ed","Shift-Tab","Esc","Return","changeTracker","expandSnippet","emmet","emmetPath","AceEmmetEditor","setupContext","resources","require","setVariable","$syntax","getSyntax","createSelection","getCurrentLineRange","lineLength","getCaretPos","setCaretPos","getCurrentLine","replaceContent","noIndent","getContent","$updateTabstops","syntax","getProfileName","profile","getVariable","emmetConfig","title","getFilePath","zeroBase","lastZero","tabStops","settings","getVocabulary","tabstopOptions","isZero","processText","utils","common","replaceSubstring","keymap","expand_abbreviation","match_pair_outward","match_pair_inward","matching_pair","next_edit_point","prev_edit_point","toggle_comment","split_join_tag","remove_tag","evaluate_math_expression","increment_number_by_1","decrement_number_by_1","increment_number_by_01","decrement_number_by_01","increment_number_by_10","decrement_number_by_10","select_next_item","select_previous_item","reflect_css_value","encode_decode_data_url","expand_abbreviation_with_tab","wrap_with_abbreviation","editorProxy","runEmmetCommand","actions","run","load","updateCommands","isSupportedMode","isSupported","enableEmmet","setCore"],"mappings":"yFAeAA,EAAAC,QAfA,SAAAC,EAAAC,GACA,SAAAD,EAAA,SACA,IAEAE,EAAAC,EAFAC,KACAC,EAAAC,OAAAC,KAAAP,GAGA,IAAAG,EAAA,EAAaA,EAAAE,EAAAG,OAAuBL,IACpCD,EAAAG,EAAAF,GACAF,EAAAQ,QAAAP,IAAA,IACAE,EAAAF,GAAAF,EAAAE,IAGA,OAAAE,uBCZAN,EAAAC,QAAA,WACA,UAAAW,MAAA,0DCmCA,WAEA,IAEAC,EAAA,WAA0B,OAAAC,KAA1B,GACAD,GAAA,oBAAAE,SAAAF,EAAAE,QAOA,IAAAC,EAAA,SAAAhB,EAAAiB,EAAAC,GACA,iBAAAlB,GASA,GAAAmB,UAAAT,SACAQ,EAAAD,GACAD,EAAAI,QAAApB,KACAgB,EAAAK,SAAArB,GAAAkB,EACAF,EAAAI,QAAApB,GAAA,OAZAgB,EAAAM,SACAN,EAAAM,SAAAC,MAAAT,KAAAK,YAEAK,QAAAC,MAAA,mDACAD,QAAAE,UAYAV,EAAAI,WACAJ,EAAAK,YAKA,IAAAM,EAAA,SAAAC,EAAA5B,EAAA6B,GACA,oBAAA7B,EAAA,CACA,IAAAkB,EAAAY,EAAAF,EAAA5B,GACA,QAAA+B,GAAAb,EAEA,OADAW,OACAX,OAEK,sBAAAV,OAAAwB,UAAAC,SAAAC,KAAAlC,GAAA,CAEL,IADA,IAAAmC,KACA9B,EAAA,EAAA+B,EAAApC,EAAAU,OAA0CL,EAAA+B,IAAO/B,EAAA,CACjD,IAAAgC,EAAAP,EAAAF,EAAA5B,EAAAK,IACA,QAAA0B,GAAAM,GAAAC,EAAAhB,SACA,OACAa,EAAAI,KAAAF,GAEA,OAAAR,KAAAN,MAAA,KAAAY,KAAA,IAIAG,EAAA,SAAAtC,EAAA6B,GACA,IAAAW,EAAAb,EAAA,GAAA3B,EAAA6B,GACA,YAAAE,GAAAS,GAAAF,EAAAhB,SACAgB,EAAAhB,SAAAC,MAAAT,KAAAK,WACAqB,GAGAC,EAAA,SAAAb,EAAAc,GAEA,QAAAA,EAAA/B,QAAA,MACA,IAAAgC,EAAAD,EAAAE,MAAA,KACA,OAAAH,EAAAb,EAAAe,EAAA,QAAAF,EAAAb,EAAAe,EAAA,IAGA,QAAAD,EAAAG,OAAA,GAIA,IAFAH,EADAd,EAAAgB,MAAA,KAAAE,MAAA,MAAAC,KAAA,KACA,IAAAL,GAEA,IAAAA,EAAA/B,QAAA,MAAAqC,GAAAN,GAAA,CACA,IAAAM,EAAAN,EACAA,IAAAO,QAAA,cAAAA,QAAA,qBAGA,OAAAP,GAOAZ,EAAA,SAAAF,EAAAc,GACAA,EAAAD,EAAAb,EAAAc,GAEA,IAAA1C,EAAAgB,EAAAI,QAAAsB,GACA,IAAA1C,EAAA,CAEA,sBADAA,EAAAgB,EAAAK,SAAAqB,IACA,CACA,IAAAzC,KACAiD,GACAC,GAAAT,EACAU,IAAA,GACAnD,UACAoD,UAAA,GAQApD,EADAD,EAJA,SAAAA,EAAA6B,GACA,OAAAF,EAAAe,EAAA1C,EAAA6B,IAGA5B,EAAAiD,IACAA,EAAAjD,QACAe,EAAAI,QAAAsB,GAAAzC,SACAe,EAAAK,SAAAqB,GAEA1C,EAAAgB,EAAAI,QAAAsB,GAAAzC,GAAAD,EAEA,OAAAA,IAGA,SAAAsD,GACA,IAAAC,EAAA1C,EACAyC,IACAzC,EAAAyC,KACAzC,EAAAyC,OACAC,EAAA1C,EAAAyC,IAGAC,EAAAvC,QAAAuC,EAAAvC,OAAAqC,WACArC,EAAAM,SAAAiC,EAAAvC,OACAuC,EAAAvC,SACAuC,EAAAvC,OAAAqC,UAAA,GAGAE,EAAAjB,UAAAiB,EAAAjB,SAAAe,WACAf,EAAAhB,SAAAiC,EAAAjB,SACAiB,EAAAjB,WACAiB,EAAAjB,SAAAe,UAAA,GAIAG,CArIA,OAFA,GA2IAC,IAAAzC,OAAA,yDAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA0D,GACAC,KAAAC,OAAA5B,UAAA2B,KACAE,KAAAD,OAAA5B,UAAA6B,KACAC,MAAAC,OAAA/B,UAAA8B,MACAb,QAAAc,OAAA/B,UAAAiB,QACAL,MAAAmB,OAAA/B,UAAAY,OAEAoB,OAAAjC,IAAA2B,EAAAC,KAAAzB,KAAA,cACA+B,EAAA,WACA,IAAAC,EAAA,KAEA,OADAR,EAAAG,KAAA3B,KAAAgC,EAAA,KACAA,EAAAC,UAHA,GAMAF,GAAAD,IAEAJ,OAAA5B,UAAA2B,KAAA,SAAAS,GACA,IACAC,EAAAC,EADAR,EAAAJ,EAAAC,KAAApC,MAAAT,KAAAK,WAEA,uBAAA2C,EAAA,CAUA,IATAE,GAAAF,EAAApD,OAAA,GAsCA,SAAA6D,EAAAC,EAAAC,GACA,GAAAC,MAAA1C,UAAArB,QACA,OAAA4D,EAAA5D,QAAA6D,EAAAC,GACA,QAAApE,EAAAoE,GAAA,EAA+BpE,EAAAkE,EAAA7D,OAAkBL,IACjD,GAAAkE,EAAAlE,KAAAmE,EACA,OAAAnE,EAEA,SA7CAM,CAAAmD,EAAA,SACAQ,EAAAV,OAAA9C,KAAAZ,OAAAwD,EAAAT,QAAAf,KA6BA,SAAAyC,GACA,OAAAA,EAAA9D,OAAA,SACA8D,EAAAC,WAAA,SACAD,EAAAE,UAAA,SACAF,EAAAG,SAAA,SACAH,EAAAI,OAAA,QAlCAC,CAAAlE,MAAA,SACA4C,EAAAT,QAAAf,KAAAkC,EAAAtB,MAAAgB,EAAAmB,OAAAX,EAAA,WACA,QAAAjE,EAAA,EAAmCA,EAAAc,UAAAT,OAAA,EAA0BL,SAC7D0B,IAAAZ,UAAAd,KACAyD,EAAAzD,QAAA0B,MAIAjB,KAAAoE,UAAApE,KAAAoE,SAAAC,aACA,QAAA9E,EAAA,EAA+BA,EAAAyD,EAAApD,OAAkBL,KACjDgE,EAAAvD,KAAAoE,SAAAC,aAAA9E,EAAA,MAEAyD,EAAAO,GAAAP,EAAAzD,KAGA4D,GAAAnD,KAAAD,SAAAiD,EAAA,GAAApD,QAAAI,KAAAqD,UAAAL,EAAAmB,OACAnE,KAAAqD,YAEA,OAAAL,GAEAG,IACAL,OAAA5B,UAAA6B,KAAA,SAAAO,GACA,IAAAN,EAAAJ,EAAAC,KAAAzB,KAAApB,KAAAsD,GAGA,OAFAN,GAAAhD,KAAAD,SAAAiD,EAAA,GAAApD,QAAAI,KAAAqD,UAAAL,EAAAmB,OACAnE,KAAAqD,cACAL,OAwBAL,IAAAzC,OAAA,2DAAAsB,EAAArC,EAAAD,GAEA,SAAAoF,KAEAC,SAAArD,UAAAsD,OACAD,SAAArD,UAAAsD,KAAA,SAAAC,GACA,IAAAjF,EAAAQ,KACA,sBAAAR,EACA,UAAAkF,UAAA,kDAAAlF,GAEA,IAAAmF,EAAA3C,EAAAZ,KAAAf,UAAA,GACAuE,EAAA,WAEA,GAAA5E,gBAAA4E,EAAA,CAEA,IAAAC,EAAArF,EAAAiB,MACAT,KACA2E,EAAAG,OAAA9C,EAAAZ,KAAAf,aAEA,OAAAX,OAAAmF,OACAA,EAEA7E,KAGA,OAAAR,EAAAiB,MACAgE,EACAE,EAAAG,OAAA9C,EAAAZ,KAAAf,cAWA,OALAb,EAAA0B,YACAoD,EAAApD,UAAA1B,EAAA0B,UACA0D,EAAA1D,UAAA,IAAAoD,EACAA,EAAApD,UAAA,MAEA0D,IAGA,IAMAG,EACAC,EACAC,EACAC,EACAC,EAVA/D,EAAAmD,SAAArD,UAAAE,KACAgE,EAAAxB,MAAA1C,UACAmE,EAAA3F,OAAAwB,UACAc,EAAAoD,EAAApD,MACAsD,EAAAlE,EAAAoD,KAAAa,EAAAlE,UACAoE,EAAAnE,EAAAoD,KAAAa,EAAAG,gBAYA,IANAL,EAAAI,EAAAF,EAAA,uBACAN,EAAA3D,EAAAoD,KAAAa,EAAAI,kBACAT,EAAA5D,EAAAoD,KAAAa,EAAAK,kBACAT,EAAA7D,EAAAoD,KAAAa,EAAAM,kBACAT,EAAA9D,EAAAoD,KAAAa,EAAAO,mBAEA,SAAAC,OAAA,GAAAjG,OACA,cACA,SAAAkG,EAAAxE,GACA,IAAAyE,EAAA,IAAAnC,MAAAtC,EAAA,GAEA,OADAyE,EAAA,GAAAA,EAAA,KACAA,EAEA,IAAAC,EAAAvC,KAUA,GARAA,EAAAoC,OAAApF,MAAAgD,EAAAqC,EAAA,KACArC,EAAAoC,OAAApF,MAAAgD,EAAAqC,EAAA,KAEAE,EAAAvC,EAAA7D,OACA6D,EAAAoC,OAAA,WAEApC,EAAA7D,OAEAoG,EAAA,GAAAvC,EAAA7D,OACA,SAjBA,GAmBK,CACL,IAAAqG,EAAArC,MAAA1C,UAAA2E,OACAjC,MAAA1C,UAAA2E,OAAA,SAAAK,EAAAC,GACA,OAAA9F,UAAAT,OAGAqG,EAAAxF,MAAAT,WACA,IAAAkG,EAAA,EAAAA,OACA,IAAAC,EAAAnG,KAAAJ,OAAAsG,EAAAC,GACArB,OAAA9C,EAAAZ,KAAAf,UAAA,cAIAuD,MAAA1C,UAAA2E,OAAA,SAAAO,EAAAC,GACA,IAAAzG,EAAAI,KAAAJ,OACAwG,EAAA,EACAA,EAAAxG,IACAwG,EAAAxG,QACa,GAAAwG,EACbA,EAAA,EACaA,EAAA,IACbA,EAAAE,KAAAC,IAAA3G,EAAAwG,EAAA,IAGAA,EAAAC,EAAAzG,IACAyG,EAAAzG,EAAAwG,GAEA,IAAAI,EAAAxG,KAAAgC,MAAAoE,IAAAC,GACAI,EAAAzE,EAAAZ,KAAAf,UAAA,GACAqG,EAAAD,EAAA7G,OACA,GAAAwG,IAAAxG,EACA8G,GACA1G,KAAAyB,KAAAhB,MAAAT,KAAAyG,OAEa,CACb,IAAAE,EAAAL,KAAAM,IAAAP,EAAAzG,EAAAwG,GACAS,EAAAT,EAAAO,EACAG,EAAAD,EAAAH,EAAAC,EACAI,EAAAnH,EAAAiH,EACAG,EAAApH,EAAA+G,EAEA,GAAAG,EAAAD,EACA,QAAAtH,EAAA,EAAmCA,EAAAwH,IAAexH,EAClDS,KAAA8G,EAAAvH,GAAAS,KAAA6G,EAAAtH,QAEiB,GAAAuH,EAAAD,EACjB,IAAAtH,EAAAwH,EAAuCxH,KACvCS,KAAA8G,EAAAvH,GAAAS,KAAA6G,EAAAtH,GAIA,GAAAmH,GAAAN,IAAAY,EACAhH,KAAAJ,OAAAoH,EACAhH,KAAAyB,KAAAhB,MAAAT,KAAAyG,QAGA,IADAzG,KAAAJ,OAAAoH,EAAAN,EACAnH,EAAA,EAA+BA,EAAAmH,IAASnH,EACxCS,KAAAoG,EAAA7G,GAAAkH,EAAAlH,GAIA,OAAAiH,GAIA5C,MAAAqD,UACArD,MAAAqD,QAAA,SAAAC,GACA,wBAAA5B,EAAA4B,KAGA,IAoRAC,EApRAC,EAAA1H,OAAA,KACA2H,EAAA,KAAAD,EAAA,WAAAA,GAgPA,GA9OAxD,MAAA1C,UAAAoG,UACA1D,MAAA1C,UAAAoG,QAAA,SAAAC,GACA,IAAAC,EAAAC,EAAAzH,MACA0H,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA0F,EACAG,EAAAtH,UAAA,GACAd,GAAA,EACAK,EAAA8H,EAAA9H,SAAA,EACA,wBAAA0F,EAAAiC,GACA,UAAA7C,UAGA,OAAAnF,EAAAK,GACAL,KAAAmI,GACAH,EAAAnG,KAAAuG,EAAAD,EAAAnI,KAAAiI,KAKA5D,MAAA1C,UAAA0G,MACAhE,MAAA1C,UAAA0G,IAAA,SAAAL,GACA,IAAAC,EAAAC,EAAAzH,MACA0H,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA0F,EACA5H,EAAA8H,EAAA9H,SAAA,EACAiF,EAAAjB,MAAAhE,GACA+H,EAAAtH,UAAA,GACA,wBAAAiF,EAAAiC,GACA,UAAA7C,UAAA6C,EAAA,sBAGA,QAAAhI,EAAA,EAAuBA,EAAAK,EAAYL,IACnCA,KAAAmI,IACA7C,EAAAtF,GAAAgI,EAAAnG,KAAAuG,EAAAD,EAAAnI,KAAAiI,IAEA,OAAA3C,IAGAjB,MAAA1C,UAAA2G,SACAjE,MAAA1C,UAAA2G,OAAA,SAAAN,GACA,IAMAO,EANAN,EAAAC,EAAAzH,MACA0H,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA0F,EACA5H,EAAA8H,EAAA9H,SAAA,EACAiF,KAEA8C,EAAAtH,UAAA,GACA,wBAAAiF,EAAAiC,GACA,UAAA7C,UAAA6C,EAAA,sBAGA,QAAAhI,EAAA,EAAuBA,EAAAK,EAAYL,IACnCA,KAAAmI,IACAI,EAAAJ,EAAAnI,GACAgI,EAAAnG,KAAAuG,EAAAG,EAAAvI,EAAAiI,IACA3C,EAAApD,KAAAqG,IAIA,OAAAjD,IAGAjB,MAAA1C,UAAA6G,QACAnE,MAAA1C,UAAA6G,MAAA,SAAAR,GACA,IAAAC,EAAAC,EAAAzH,MACA0H,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA0F,EACA5H,EAAA8H,EAAA9H,SAAA,EACA+H,EAAAtH,UAAA,GACA,wBAAAiF,EAAAiC,GACA,UAAA7C,UAAA6C,EAAA,sBAGA,QAAAhI,EAAA,EAAuBA,EAAAK,EAAYL,IACnC,GAAAA,KAAAmI,IAAAH,EAAAnG,KAAAuG,EAAAD,EAAAnI,KAAAiI,GACA,SAGA,WAGA5D,MAAA1C,UAAA8G,OACApE,MAAA1C,UAAA8G,KAAA,SAAAT,GACA,IAAAC,EAAAC,EAAAzH,MACA0H,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA0F,EACA5H,EAAA8H,EAAA9H,SAAA,EACA+H,EAAAtH,UAAA,GACA,wBAAAiF,EAAAiC,GACA,UAAA7C,UAAA6C,EAAA,sBAGA,QAAAhI,EAAA,EAAuBA,EAAAK,EAAYL,IACnC,GAAAA,KAAAmI,GAAAH,EAAAnG,KAAAuG,EAAAD,EAAAnI,KAAAiI,GACA,SAGA,WAGA5D,MAAA1C,UAAA+G,SACArE,MAAA1C,UAAA+G,OAAA,SAAAV,GACA,IAAAC,EAAAC,EAAAzH,MACA0H,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA0F,EACA5H,EAAA8H,EAAA9H,SAAA,EACA,wBAAA0F,EAAAiC,GACA,UAAA7C,UAAA6C,EAAA,sBAEA,IAAA3H,GAAA,GAAAS,UAAAT,OACA,UAAA8E,UAAA,+CAGA,IACAG,EADAtF,EAAA,EAEA,GAAAc,UAAAT,QAAA,EACAiF,EAAAxE,UAAA,QAEA,QACA,GAAAd,KAAAmI,EAAA,CACA7C,EAAA6C,EAAAnI,KACA,MAEA,KAAAA,GAAAK,EACA,UAAA8E,UAAA,+CAKA,KAAcnF,EAAAK,EAAYL,IAC1BA,KAAAmI,IACA7C,EAAA0C,EAAAnG,UAAA,EAAAyD,EAAA6C,EAAAnI,KAAAiI,IAIA,OAAA3C,IAGAjB,MAAA1C,UAAAgH,cACAtE,MAAA1C,UAAAgH,YAAA,SAAAX,GACA,IAAAC,EAAAC,EAAAzH,MACA0H,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA0F,EACA5H,EAAA8H,EAAA9H,SAAA,EACA,wBAAA0F,EAAAiC,GACA,UAAA7C,UAAA6C,EAAA,sBAEA,IAAA3H,GAAA,GAAAS,UAAAT,OACA,UAAA8E,UAAA,oDAGA,IAAAG,EAAAtF,EAAAK,EAAA,EACA,GAAAS,UAAAT,QAAA,EACAiF,EAAAxE,UAAA,QAEA,QACA,GAAAd,KAAAmI,EAAA,CACA7C,EAAA6C,EAAAnI,KACA,MAEA,KAAAA,EAAA,EACA,UAAAmF,UAAA,oDAKA,GACAnF,KAAAS,OACA6E,EAAA0C,EAAAnG,UAAA,EAAAyD,EAAA6C,EAAAnI,KAAAiI,UAESjI,KAET,OAAAsF,IAGAjB,MAAA1C,UAAArB,UAAA,SAAAA,QAAA,OACA+D,MAAA1C,UAAArB,QAAA,SAAAsI,GACA,IAAAT,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA2F,EAAAzH,MACAJ,EAAA8H,EAAA9H,SAAA,EAEA,IAAAA,EACA,SAGA,IAAAL,EAAA,EAKA,IAJAc,UAAAT,OAAA,IACAL,EAAA6I,EAAA/H,UAAA,KAEAd,KAAA,EAAAA,EAAA+G,KAAAC,IAAA,EAAA3G,EAAAL,GACcA,EAAAK,EAAYL,IAC1B,GAAAA,KAAAmI,KAAAnI,KAAA4I,EACA,OAAA5I,EAGA,WAGAqE,MAAA1C,UAAAmH,cAAA,SAAAA,YAAA,QACAzE,MAAA1C,UAAAmH,YAAA,SAAAF,GACA,IAAAT,EAAAL,GAAA,mBAAA/B,EAAAtF,MACAA,KAAA8B,MAAA,IACA2F,EAAAzH,MACAJ,EAAA8H,EAAA9H,SAAA,EAEA,IAAAA,EACA,SAEA,IAAAL,EAAAK,EAAA,EAKA,IAJAS,UAAAT,OAAA,IACAL,EAAA+G,KAAAM,IAAArH,EAAA6I,EAAA/H,UAAA,MAEAd,KAAA,EAAAA,EAAAK,EAAA0G,KAAAgC,IAAA/I,GACcA,GAAA,EAAQA,IACtB,GAAAA,KAAAmI,GAAAS,IAAAT,EAAAnI,GACA,OAAAA,EAGA,WAGAG,OAAA6I,iBACA7I,OAAA6I,eAAA,SAAAf,GACA,OAAAA,EAAAgB,YACAhB,EAAAiB,YACAjB,EAAAiB,YAAAvH,UACAmE,MAIA3F,OAAAgJ,yBAAA,CAGAhJ,OAAAgJ,yBAAA,SAAAlB,EAAAmB,GACA,oBAAAnB,GAAA,mBAAAA,GAAA,OAAAA,EACA,UAAA9C,UAJA,2DAIA8C,GACA,GAAAjC,EAAAiC,EAAAmB,GAAA,CAGA,IAAAC,EAEA,GADAA,GAAuBC,YAAA,EAAAC,cAAA,GACvB3D,EAAA,CACA,IAAAjE,EAAAsG,EAAAgB,UACAhB,EAAAgB,UAAAnD,EAEA,IAAA0D,EAAA9D,EAAAuC,EAAAmB,GACAK,EAAA9D,EAAAsC,EAAAmB,GAGA,GAFAnB,EAAAgB,UAAAtH,EAEA6H,GAAAC,EAGA,OAFAD,IAAAH,EAAAK,IAAAF,GACAC,IAAAJ,EAAAM,IAAAF,GACAJ,EAIA,OADAA,EAAAd,MAAAN,EAAAmB,GACAC,KAGAlJ,OAAAyJ,sBACAzJ,OAAAyJ,oBAAA,SAAA3B,GACA,OAAA9H,OAAAC,KAAA6H,KAGA9H,OAAA0J,UAGAjC,EADA,OAAAzH,OAAAwB,UAAAsH,UACA,WACA,OAAoBA,UAAA,OAGpB,WACA,IAAAa,KACA,QAAA9J,KAAA8J,EACAA,EAAA9J,GAAA,KASA,OARA8J,EAAAZ,YACAY,EAAA7D,eACA6D,EAAAC,qBACAD,EAAAE,cACAF,EAAAG,eACAH,EAAAlI,SACAkI,EAAAI,QACAJ,EAAAb,UAAA,KACAa,GAIA3J,OAAA0J,OAAA,SAAAlI,EAAAwI,GACA,IAAAlC,EACA,UAAAtG,EACAsG,EAAAL,QACS,CACT,oBAAAjG,EACA,UAAAwD,UAAA,2BAAAxD,EAAA,iBACA,IAAAyI,EAAA,aACAA,EAAAzI,aACAsG,EAAA,IAAAmC,GACAnB,UAAAtH,EAIA,YAFA,IAAAwI,GACAhK,OAAAkK,iBAAApC,EAAAkC,GACAlC,IAIA,SAAAqC,EAAArC,GACA,IAEA,OADA9H,OAAAoK,eAAAtC,EAAA,eACA,aAAAA,EACK,MAAAuC,KAGL,GAAArK,OAAAoK,eAAA,CACA,IAAAE,EAAAH,MACAI,EAAA,oBAAAC,UACAL,EAAAK,SAAAC,cAAA,QACA,IAAAH,IAAAC,EACA,IAAAG,EAAA1K,OAAAoK,eAIA,IAAApK,OAAAoK,gBAAAM,EAAA,CAMA1K,OAAAoK,eAAA,SAAAtC,EAAAmB,EAAAC,GACA,oBAAApB,GAAA,mBAAAA,GAAA,OAAAA,EACA,UAAA9C,UANA,+CAMA8C,GACA,oBAAAoB,GAAA,mBAAAA,GAAA,OAAAA,EACA,UAAAlE,UATA,2CASAkE,GACA,GAAAwB,EACA,IACA,OAAAA,EAAAhJ,KAAA1B,OAAA8H,EAAAmB,EAAAC,GACa,MAAAmB,IAGb,GAAAxE,EAAAqD,EAAA,SAEA,GAAAzD,IAAAF,EAAAuC,EAAAmB,IACAzD,EAAAsC,EAAAmB,IACA,CACA,IAAAzH,EAAAsG,EAAAgB,UACAhB,EAAAgB,UAAAnD,SACAmC,EAAAmB,GACAnB,EAAAmB,GAAAC,EAAAd,MACAN,EAAAgB,UAAAtH,OAEAsG,EAAAmB,GAAAC,EAAAd,UAES,CACT,IAAA3C,EACA,UAAAT,UA7BA,kEA8BAa,EAAAqD,EAAA,QACA7D,EAAAyC,EAAAmB,EAAAC,EAAAK,KACA1D,EAAAqD,EAAA,QACA5D,EAAAwC,EAAAmB,EAAAC,EAAAM,KAGA,OAAA1B,GAGA9H,OAAAkK,mBACAlK,OAAAkK,iBAAA,SAAApC,EAAAkC,GACA,QAAAf,KAAAe,EACAnE,EAAAmE,EAAAf,IACAjJ,OAAAoK,eAAAtC,EAAAmB,EAAAe,EAAAf,IAEA,OAAAnB,IAGA9H,OAAA2K,OACA3K,OAAA2K,KAAA,SAAA7C,GACA,OAAAA,IAGA9H,OAAA4K,SACA5K,OAAA4K,OAAA,SAAA9C,GACA,OAAAA,IAGA,IACA9H,OAAA4K,OAAA,cACC,MAAAP,GACDrK,OAAA4K,OAAA,SAAAC,GACA,gBAAA/C,GACA,yBAAAA,EACAA,EAEA+C,EAAA/C,IALA,CAQK9H,OAAA4K,QAgCL,GA9BA5K,OAAA8K,oBACA9K,OAAA8K,kBAAA,SAAAhD,GACA,OAAAA,IAGA9H,OAAA+K,WACA/K,OAAA+K,SAAA,SAAAjD,GACA,WAGA9H,OAAAgL,WACAhL,OAAAgL,SAAA,SAAAlD,GACA,WAGA9H,OAAAiL,eACAjL,OAAAiL,aAAA,SAAAnD,GACA,GAAA9H,OAAA8H,OACA,UAAA9C,UAGA,IADA,IAAAnB,EAAA,GACAgC,EAAAiC,EAAAjE,IACAA,GAAA,IAEAiE,EAAAjE,IAAA,EACA,IAAAqH,EAAArF,EAAAiC,EAAAjE,GAEA,cADAiE,EAAAjE,GACAqH,KAGAlL,OAAAC,KAAA,CACA,IAAAkL,GAAA,EACAC,GACA,WACA,iBACA,UACA,iBACA,gBACA,uBACA,eAEAC,EAAAD,EAAAlL,OAEA,QAAAN,KAAqB6B,SAAA,MACrB0J,GAAA,EAGAnL,OAAAC,KAAA,SAAA6H,GAEA,GACA,iBAAAA,GAAA,mBAAAA,GACA,OAAAA,EAEA,UAAA9C,UAAA,sCAGA,IAAA/E,KACA,QAAA4D,KAAAiE,EACAjC,EAAAiC,EAAAjE,IACA5D,EAAA8B,KAAA8B,GAIA,GAAAsH,EACA,QAAAtL,EAAA,EAAAyL,EAAAD,EAAiDxL,EAAAyL,EAAQzL,IAAA,CACzD,IAAA0L,EAAAH,EAAAvL,GACAgG,EAAAiC,EAAAyD,IACAtL,EAAA8B,KAAAwJ,GAIA,OAAAtL,GAIAuL,KAAAC,MACAD,KAAAC,IAAA,WACA,WAAAD,MAAAE,YAGA,IAAAC,EAAA,iDAGA,IAAApI,OAAA/B,UAAAoK,MAAAD,EAAAC,OAAA,CACAD,EAAA,IAAAA,EAAA,IACA,IAAAE,EAAA,IAAAzI,OAAA,IAAAuI,IAAA,KACAG,EAAA,IAAA1I,OAAAuI,IAAA,MACApI,OAAA/B,UAAAoK,KAAA,WACA,OAAArI,OAAAjD,MAAAmC,QAAAoJ,EAAA,IAAApJ,QAAAqJ,EAAA,KAIA,SAAApD,EAAAqD,GAOA,OANAA,OACAA,EACAA,EAAA,EACK,IAAAA,OAAA,KAAAA,KAAA,MACLA,KAAA,OAAAnF,KAAAoF,MAAApF,KAAAgC,IAAAmD,KAEAA,EAmCA,IAAAhE,EAAA,SAAAkE,GACA,SAAAA,EACA,UAAAjH,UAAA,iBAAAiH,EAAA,cAEA,OAAAjM,OAAAiM,MAKAhJ,IAAAzC,OAAA,qGAAAsB,EAAArC,EAAAD,GACA,aAEAsC,EAAA,YACAA,EAAA,gBAIAmB,IAAAzC,OAAA,sDAAAsB,EAAArC,EAAAD,GACA,aAIAC,EAAAyM,gBAAA,SAAAC,GAGA,OAFAA,IACAA,EAAA3B,UACA2B,EAAAC,MAAAD,EAAAE,qBAAA,YAAAF,EAAAG,iBAGA7M,EAAAgL,cAAA,SAAA8B,EAAAzJ,GACA,OAAA0H,SAAAgC,gBACAhC,SAAAgC,gBAAA1J,GAVA,+BAUAyJ,GACA/B,SAAAC,cAAA8B,IAGA9M,EAAAgN,YAAA,SAAAC,EAAA7I,GAEA,YADA6I,EAAAC,UAAA,IAAAvK,MAAA,QACAjC,QAAA0D,IAEApE,EAAAmN,YAAA,SAAAF,EAAA7I,GACApE,EAAAgN,YAAAC,EAAA7I,KACA6I,EAAAC,WAAA,IAAA9I,IAGApE,EAAAoN,eAAA,SAAAH,EAAA7I,GAEA,IADA,IAAAiJ,EAAAJ,EAAAC,UAAAvK,MAAA,UACA,CACA,IAAAqC,EAAAqI,EAAA3M,QAAA0D,GACA,OAAAY,EACA,MAEAqI,EAAA3G,OAAA1B,EAAA,GAEAiI,EAAAC,UAAAG,EAAAvK,KAAA,MAGA9C,EAAAsN,eAAA,SAAAL,EAAA7I,GAEA,IADA,IAAAiJ,EAAAJ,EAAAC,UAAAvK,MAAA,QAAA4E,GAAA,IACA,CACA,IAAAvC,EAAAqI,EAAA3M,QAAA0D,GACA,OAAAY,EACA,MAEAuC,GAAA,EACA8F,EAAA3G,OAAA1B,EAAA,GAMA,OAJAuC,GACA8F,EAAA/K,KAAA8B,GAEA6I,EAAAC,UAAAG,EAAAvK,KAAA,KACAyE,GAEAvH,EAAAuN,YAAA,SAAAC,EAAAN,EAAAO,GACAA,EACAzN,EAAAmN,YAAAK,EAAAN,GAEAlN,EAAAoN,eAAAI,EAAAN,IAIAlN,EAAA0N,aAAA,SAAAxK,EAAAwJ,GACA,IAAAiB,EAAA3I,EAAA,EAGA,IAFA0H,KAAA3B,UAEA6C,mBAAAD,EAAAjB,EAAAmB,cACA,KAAA7I,EAAA2I,EAAAlN,QACA,GAAAkN,EAAA3I,KAAA8I,cAAA5K,OAAA,cACK,GAAAyK,EAAAjB,EAAAE,qBAAA,SACL,KAAA5H,EAAA2I,EAAAlN,QACA,GAAAkN,EAAA3I,KAAA9B,OAAA,SAGA,UAGAlD,EAAA+N,gBAAA,SAAAC,EAAA9K,EAAAwJ,GAEA,GADAA,KAAA3B,SACA7H,GAAAlD,EAAA0N,aAAAxK,EAAAwJ,GACA,YAEA,IAAAuB,EAEA/K,IACA8K,GAAA,2BAAA9K,EAAA,OAEAwJ,EAAAkB,mBACAK,EAAAvB,EAAAkB,oBACAI,UACA9K,IACA+K,EAAAH,cAAA5K,SAEA+K,EAAAjO,EAAAgL,cAAA,UACAkD,YAAAxB,EAAAyB,eAAAH,IACA9K,IACA+K,EAAA/K,MAEAlD,EAAAyM,gBAAAC,GAAAwB,YAAAD,KAIAjO,EAAAoO,mBAAA,SAAAjL,EAAAuJ,GACA,GAAAA,EAAAkB,iBACAlB,EAAAkB,iBAAAzK,OACK,CACL,IAAAkL,EAAArO,EAAAgL,cAAA,QACAqD,EAAAC,IAAA,aACAD,EAAAE,KAAApL,EAEAnD,EAAAyM,gBAAAC,GAAAwB,YAAAG,KAIArO,EAAAwO,cAAA,SAAAC,GACA,OACAC,SAAA1O,EAAA2O,cAAAF,EAAA,mBACAC,SAAA1O,EAAA2O,cAAAF,EAAA,oBACAA,EAAAG,aAIA5O,EAAA6O,eAAA,SAAAJ,GACA,OACAC,SAAA1O,EAAA2O,cAAAF,EAAA,kBACAC,SAAA1O,EAAA2O,cAAAF,EAAA,qBACAA,EAAAK,cAIA9O,EAAA+O,eAAA,SAAAhE,GACA,IAAAiE,EAAAhP,EAAAgL,cAAA,aACAgE,EAAAf,MAAAgB,MAAA,OACAD,EAAAf,MAAAiB,SAAA,MACAF,EAAAf,MAAAkB,OAAA,QACAH,EAAAf,MAAAmB,QAAA,QAEA,IAAAC,EAAArP,EAAAgL,cAAA,aACAiD,EAAAoB,EAAApB,MAEAA,EAAAqB,SAAA,WACArB,EAAAsB,KAAA,WACAtB,EAAAuB,SAAA,SACAvB,EAAAgB,MAAA,QACAhB,EAAAiB,SAAA,MACAjB,EAAAkB,OAAA,QACAlB,EAAAmB,QAAA,QAEAC,EAAAnB,YAAAc,GAEA,IAAAS,EAAA1E,EAAA8B,gBACA4C,EAAAvB,YAAAmB,GAEA,IAAAK,EAAAV,EAAAW,YAEA1B,EAAAuB,SAAA,SACA,IAAAI,EAAAZ,EAAAW,YAQA,OANAD,GAAAE,IACAA,EAAAP,EAAAT,aAGAa,EAAAI,YAAAR,GAEAK,EAAAE,GAGA,oBAAA7E,eAKAjJ,IAAAhB,OAAAgP,aACA9P,EAAA+P,iBAAA,WACA,OAAAjP,OAAAgP,aAGA9P,EAAAgQ,kBAAA,WACA,OAAAlP,OAAAmP,eAIAjQ,EAAA+P,iBAAA,WACA,OAAAhF,SAAA0E,KAAAS,WAGAlQ,EAAAgQ,kBAAA,WACA,OAAAjF,SAAA0E,KAAAU,aAIArP,OAAAsP,iBACApQ,EAAA2O,cAAA,SAAAF,EAAAR,GACA,OAAAA,GACAnN,OAAAsP,iBAAA3B,EAAA,SAA8DR,IAAA,GAC9DnN,OAAAsP,iBAAA3B,EAAA,SAGAzO,EAAA2O,cAAA,SAAAF,EAAAR,GACA,OAAAA,EACAQ,EAAA4B,aAAApC,GACAQ,EAAA4B,cAEArQ,EAAAsQ,aAAA,SAAArD,EAAAsD,GACA,IAAA9B,EAAAxB,EAAAuD,WAAA,GAGA,OAFA/B,EAAAgC,UAAAF,EACAtD,EAAAyD,WAAAC,aAAAlC,EAAAxB,GACAwB,GAGA,gBAAA1D,SAAA8B,iBACA7M,EAAA4Q,aAAA,SAAA3D,EAAA4D,GACA5D,EAAA6D,YAAAD,GAGA7Q,EAAA+Q,aAAA,SAAA9D,GACA,OAAAA,EAAA6D,eAIA9Q,EAAA4Q,aAAA,SAAA3D,EAAA4D,GACA5D,EAAA4D,aAGA7Q,EAAA+Q,aAAA,SAAA9D,GACA,OAAAA,EAAA4D,YAIA7Q,EAAAgR,gBAAA,SAAAjG,GACA,OAAAA,EAAAkG,aAAAlG,EAAAmG,eA9DAlR,EAAA+N,gBAAA,eAmEAvK,IAAAzC,OAAA,sDAAAsB,EAAArC,EAAAD,GACA,aAEAC,EAAAmR,SAAA,SAAAC,EAAAC,GACAD,EAAAE,OAAAD,EACAD,EAAArP,UAAAxB,OAAA0J,OAAAoH,EAAAtP,WACAuH,aACAX,MAAAyI,EACA1H,YAAA,EACA6H,UAAA,EACA5H,cAAA,MAKA3J,EAAAwR,MAAA,SAAAzJ,EAAAyJ,GACA,QAAArR,KAAAqR,EACAzJ,EAAA5H,GAAAqR,EAAArR,GAEA,OAAA4H,GAGA/H,EAAAyR,UAAA,SAAAC,EAAAF,GACAxR,EAAAwR,MAAAE,EAAAF,MAKAhO,IAAAzC,OAAA,8FAAAsB,EAAArC,EAAAD,GACA,aAEAsC,EAAA,oBAEA,IAAAsP,EAAAtP,EAAA,SACAuP,EAAA,WACA,IAkEAxN,EAAAhE,EAlEAyR,GACAC,eACAC,GAAA,QAAAC,GAAA,OAAAC,GAAA,MAAAC,IAAA,QAGAC,UACAC,KAAA,EAAAC,IAAA,EAAAC,OAAA,EAAAC,MAAA,EACAC,MAAA,EAAAC,KAAA,EAAAC,QAAA,EAAAC,IAAA,GAGAC,eACAC,EAAA,YACAC,EAAA,MACAC,GAAA,SACAC,GAAA,QACAC,GAAA,MACAC,GAAA,QACAC,GAAA,SACAC,GAAA,WACAC,GAAA,MACAC,GAAA,OACAC,GAAA,OACAC,GAAA,KACAC,GAAA,QACAC,GAAA,OACAC,GAAA,QACAC,GAAA,SACAC,GAAA,SACAC,GAAA,UACAC,GAAA,UACAC,GAAA,UACAC,GAAA,UACAC,IAAA,UACAC,IAAA,UACAC,IAAA,UACAC,IAAA,UACAC,IAAA,UACAC,IAAA,UACAC,MAAA,cACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,MACAC,IAAA,MACAC,IAAA,MACAC,IAAA,UACAC,IAAA,cAGAC,gBACArC,GAAA,IAAAsC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IACAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAyDC,GAAA,IAAAC,GAAA,IACzDC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IACAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IACAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IACAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAiBC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACjBC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,MAIA,IAAAzY,KAAAyR,EAAAe,cACAxO,EAAAyN,EAAAe,cAAAxS,GAAA0Y,cACAjH,EAAAzN,GAAAsK,SAAAtO,EAAA,IAEA,IAAAA,KAAAyR,EAAA0D,eACAnR,EAAAyN,EAAA0D,eAAAnV,GAAA0Y,cACAjH,EAAAzN,GAAAsK,SAAAtO,EAAA,IAsBA,OApBAuR,EAAAH,MAAAK,IAAAC,eACAH,EAAAH,MAAAK,IAAA0D,gBACA5D,EAAAH,MAAAK,IAAAe,eACAf,EAAAkH,MAAAlH,EAAA,OACAA,EAAAmH,OAAAnH,EAAAoH,IACApH,EAAAqH,IAAArH,EAAA,OACAA,EAAA,SAEA,WAEA,IADA,IAAAsH,GAAA,4BACA/Y,EAAA+G,KAAAiS,IAAA,EAAAD,EAAA1Y,QAA8CL,KAC9CyR,EAAAM,SAAA/R,GAAA+Y,EAAAzQ,OAAA,SAAAzE,GACA,OAAA7D,EAAAyR,EAAAM,SAAAlO,KACanB,KAAA,SALb,GASA+O,EAAAM,SAAA,MACAN,EAAAM,UAAA,YAEAN,EAhGA,GAkGAF,EAAAH,MAAAxR,EAAA4R,GAEA5R,EAAAqZ,gBAAA,SAAAC,GACA,IAAAC,EAAA3H,EAAA0H,GAGA,MAFA,iBAAAC,IACAA,EAAAzV,OAAA0V,aAAAF,IACAC,EAAAT,iBAKAtV,IAAAzC,OAAA,4DAAAsB,EAAArC,EAAAD,GACA,aAeA,GAdAC,EAAAyZ,IACAC,MAAA,QACAC,IAAA,MACAC,QAAA,WAEA5Z,EAAA6Z,MAAA,WACA,OAAA7Z,EAAA8Z,MACA9Z,EAAAyZ,GAAAE,IACK3Z,EAAA+Z,QACL/Z,EAAAyZ,GAAAC,MAEA1Z,EAAAyZ,GAAAG,SAGA,iBAAAI,UAAA,CAGA,IAAAC,GAAAD,UAAAE,SAAArW,MAAA,iCAAAiV,cACAqB,EAAAH,UAAAI,UACApa,EAAAqa,MAAA,OAAAJ,EACAja,EAAA8Z,MAAA,OAAAG,EACAja,EAAA+Z,QAAA,SAAAE,EACAja,EAAAsa,KACA,+BAAAN,UAAAO,SAAAP,UAAAO,QAAA7Z,QAAA,gBACA8Z,YAAAL,EAAAtW,MAAA,gEAA6D,IAC7D2W,YAAAL,EAAAtW,MAAA,0DAAuD,IAEvD7D,EAAAya,QAAAza,EAAAsa,MAAAta,EAAAsa,KAAA,EACAta,EAAA0a,QAAA1a,EAAA2a,WAAA7Z,OAAA8Z,aAAA9Z,OAAA+Z,cAAA,UAAA/Z,OAAAkZ,UAAAc,QACA9a,EAAA+a,WAAA/a,EAAA0a,SAAAhM,UAAAyL,EAAAtW,MAAA,0BACA7D,EAAAgb,QAAAla,OAAAma,OAAA,kBAAA1a,OAAAwB,UAAAC,SAAAC,KAAAnB,OAAAma,OACAjb,EAAAkb,SAAAV,WAAAL,EAAAxX,MAAA,qBAAAb,EAEA9B,EAAAmb,SAAAX,WAAAL,EAAAxX,MAAA,sBAAAb,EAEA9B,EAAAob,MAAAjB,EAAAzZ,QAAA,eAEAV,EAAAqb,OAAAlB,EAAAzZ,QAAA,WAEAV,EAAAsb,WAAAnB,EAAAzZ,QAAA,aAEAV,EAAAub,MAAA,mBAAA3X,KAAAuW,KAAArZ,OAAA0a,SAEAxb,EAAAub,QAAAvb,EAAA8Z,OAAA,MAIAtW,IAAAzC,OAAA,2FAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAS,EAAA6B,EAAA,UACAoZ,EAAApZ,EAAA,eAEAqZ,EAAA,KACAC,EAAA,EAEA3b,EAAA4b,YAAA,SAAAC,EAAAC,EAAAla,GACA,GAAAia,EAAAE,iBACA,OAAAF,EAAAE,iBAAAD,EAAAla,GAAA,GAEA,GAAAia,EAAAG,YAAA,CACA,IAAAC,EAAA,WACAra,EAAAK,KAAA4Z,EAAA/a,OAAAob,QAEAta,EAAAua,SAAAF,EACAJ,EAAAG,YAAA,KAAAF,EAAAG,KAIAjc,EAAAoc,eAAA,SAAAP,EAAAC,EAAAla,GACA,GAAAia,EAAAQ,oBACA,OAAAR,EAAAQ,oBAAAP,EAAAla,GAAA,GAEAia,EAAAS,aACAT,EAAAS,YAAA,KAAAR,EAAAla,EAAAua,UAAAva,IAGA5B,EAAAuc,UAAA,SAAAC,GAGA,OAFAxc,EAAAyc,gBAAAD,GACAxc,EAAA0c,eAAAF,IACA,GAGAxc,EAAAyc,gBAAA,SAAAD,GACAA,EAAAC,gBACAD,EAAAC,kBAEAD,EAAAG,cAAA,GAGA3c,EAAA0c,eAAA,SAAAF,GACAA,EAAAE,eACAF,EAAAE,iBAEAF,EAAA/Q,aAAA,GAEAzL,EAAA4c,UAAA,SAAAJ,GACA,kBAAAA,EAAAV,KACA,EACA,eAAAU,EAAAV,MAAAL,EAAA3B,OAAA0C,EAAAK,UAAAL,EAAAM,SAAAN,EAAAO,SACA,EACAP,EAAAE,eACAF,EAAAQ,QAGgBC,EAAA,EAAAC,EAAA,EAAAC,EAAA,GAAcX,EAAAQ,SAI9Bhd,EAAAod,QAAA,SAAAnQ,EAAAoQ,EAAAC,GACA,SAAAC,EAAAf,GACAa,KAAAb,GACAc,KAAAd,GAEAxc,EAAAoc,eAAArR,SAAA,YAAAsS,GAAA,GACArd,EAAAoc,eAAArR,SAAA,UAAAwS,GAAA,GACAvd,EAAAoc,eAAArR,SAAA,YAAAwS,GAAA,GAOA,OAJAvd,EAAA4b,YAAA7Q,SAAA,YAAAsS,GAAA,GACArd,EAAA4b,YAAA7Q,SAAA,UAAAwS,GAAA,GACAvd,EAAA4b,YAAA7Q,SAAA,YAAAwS,GAAA,GAEAA,GAGAvd,EAAAwd,qBAAA,SAAAvQ,EAAArL,GACA,IAAA6b,EAAAC,EACA1d,EAAA4b,YAAA3O,EAAA,sBAAAuP,GACA,IACAmB,EADAnB,EAAAoB,QACA,GACAH,EAAAE,EAAAE,QACAH,EAAAC,EAAAG,UAEA9d,EAAA4b,YAAA3O,EAAA,qBAAAuP,GACA,IAAAoB,EAAApB,EAAAoB,QACA,KAAAA,EAAAnd,OAAA,IAEA,IAAAkd,EAAAC,EAAA,GAEApB,EAAAuB,OAAAN,EAAAE,EAAAE,QACArB,EAAAwB,OAAAN,EAAAC,EAAAG,QAEAL,EAAAE,EAAAE,QACAH,EAAAC,EAAAG,QAEAlc,EAAA4a,OAIAxc,EAAAie,sBAAA,SAAAhR,EAAArL,GACA,iBAAAqL,EACAjN,EAAA4b,YAAA3O,EAAA,sBAAAuP,QAEA1a,IAAA0a,EAAA0B,aACA1B,EAAAuB,QAAAvB,EAAA0B,YAFA,EAGA1B,EAAAwB,QAAAxB,EAAA2B,YAHA,IAKA3B,EAAAuB,OAAA,EACAvB,EAAAwB,QAAAxB,EAAA4B,WANA,GAQAxc,EAAA4a,KAEK,YAAAvP,EACLjN,EAAA4b,YAAA3O,EAAA,iBAAAuP,GAEA,OAAAA,EAAA6B,WACA,KAAA7B,EAAA8B,gBACA9B,EAAAuB,OAHA,IAGAvB,EAAA+B,QAAA,EACA/B,EAAAwB,OAJA,IAIAxB,EAAAgC,QAAA,EACA,MACA,KAAAhC,EAAAiC,eACA,KAAAjC,EAAAkC,eACAlC,EAAAuB,OAAA,GAAAvB,EAAA+B,QAAA,GACA/B,EAAAwB,OAAA,GAAAxB,EAAAgC,QAAA,GAIA5c,EAAA4a,KAGAxc,EAAA4b,YAAA3O,EAAA,0BAAAuP,GACAA,EAAAmC,MAAAnC,EAAAmC,MAAAnC,EAAAoC,iBACApC,EAAAuB,OAAA,GAAAvB,EAAAqC,QAAA,GACArC,EAAAwB,OAAA,IAEAxB,EAAAuB,OAAA,EACAvB,EAAAwB,OAAA,GAAAxB,EAAAqC,QAAA,IAEAjd,EAAA4a,MAKAxc,EAAA8e,0BAAA,SAAAC,EAAAC,EAAA3B,EAAA4B,GACA,IACAC,EAAAC,EAAAC,EADAC,EAAA,EAEAC,GACApC,EAAA,WACAqC,EAAA,cACApC,EAAA,aAGA,SAAAqC,EAAAhD,GAUA,GATA,IAAAxc,EAAA4c,UAAAJ,GACA6C,EAAA,EACS7C,EAAAqC,OAAA,IACTQ,EACA,IACAA,EAAA,GAEAA,EAAA,EAEA5D,EAAAnB,KAAA,CACA,IAAAmF,EAAAtY,KAAAgC,IAAAqT,EAAAqB,QAAAqB,GAAA,GAAA/X,KAAAgC,IAAAqT,EAAAsB,QAAAqB,GAAA,EACAC,IAAAK,IACAJ,EAAA,GACAD,GACAM,aAAAN,GACAA,EAAAO,WAAA,WAA2CP,EAAA,MAAcJ,EAAAK,EAAA,SAEzD,GAAAA,IACAH,EAAA1C,EAAAqB,QACAsB,EAAA3C,EAAAsB,SAQA,GAJAtB,EAAAoD,QAAAP,EAEAhC,EAAA4B,GAAA,YAAAzC,GAEA6C,EAAA,EACAA,EAAA,OACA,GAAAA,EAAA,EACA,OAAAhC,EAAA4B,GAAAK,EAAAD,GAAA7C,GAEA,SAAAqD,EAAArD,GACA6C,EAAA,EACAD,GACAM,aAAAN,GACAA,EAAAO,WAAA,WAAuCP,EAAA,MAAcJ,EAAAK,EAAA,SACrDhC,EAAA4B,GAAA,YAAAzC,GACAa,EAAA4B,GAAAK,EAAAD,GAAA7C,GAEA/X,MAAAqD,QAAAiX,KACAA,OACAA,EAAA5W,QAAA,SAAA8E,GACAjN,EAAA4b,YAAA3O,EAAA,YAAAuS,GACA/D,EAAAhB,SACAza,EAAA4b,YAAA3O,EAAA,WAAA4S,MAIA,IAAAC,GAAArE,EAAA3B,QAAA2B,EAAAT,SAAA,kBAAAla,OAIA,SAAA0b,GACA,UAAAA,EAAAK,QAAA,MAAAL,EAAAM,OAAA,MAAAN,EAAAO,SAAA,MAAAP,EAAAuD,QAAA,MAJA,SAAAvD,GACA,UAAAA,EAAAuD,QAAA,MAAAvD,EAAAM,OAAA,MAAAN,EAAAO,SAAA,MAAAP,EAAAK,QAAA,MAUA,SAAAmD,EAAApe,EAAA4a,EAAAlD,GACA,IAAA2G,EAAAH,EAAAtD,GAEA,IAAAf,EAAA3B,OAAA4B,EAAA,CAGA,GAFAc,EAAA0D,mBAAA1D,EAAA0D,iBAAA,OAAA1D,EAAA0D,iBAAA,UACAD,GAAA,GACAvE,EAAAyE,MAAA,CACA,SAAAF,GAGA,OAFAvE,EAAAyE,MAAA,EAIA,QAAA7G,GAAA,KAAAA,EAAA,CACA,IAAA8G,EAAA,aAAA5D,IAAA4D,SAAA5D,EAAA6D,YACA,QAAA/G,GAAA,IAAA8G,EACA,GAAA1E,EAAApC,KACAqC,EAAAa,EAAA8D,gBACa,QAAAhH,GAAA,IAAA2G,GAAA,IAAAG,EAAA,CACb5D,EAAA8D,UAAA3E,EACA,KACAD,EAAAyE,OAAA,KAYA,IAPA7G,KAAA9Y,EAAAsR,gBACAwH,GAAA,GAEA,EAAA2G,GAAA3G,GAAA,IAAAA,GAAA,KACAA,GAAA,IAGA2G,GAAA,KAAA3G,KAEA,KADA8G,EAAA,aAAA5D,IAAA4D,SAAA5D,EAAA6D,eAEAze,EAAA4a,EAAAyD,GAAA3G,GACAkD,EAAA+D,mBACA,OAIA,GAAA9E,EAAAH,YAAA,EAAA2E,EAAA,CAEA,GADAre,EAAA4a,EAAAyD,EAAA3G,GACAkD,EAAA+D,iBACA,OAEAN,IAAA,EAEA,SAAAA,GAAA3G,KAAA9Y,EAAAoS,eAAA0G,KAAA9Y,EAAA+U,iBAIA3T,EAAA4a,EAAAyD,EAAA3G,GAyCA,SAAAkH,IACA9E,EAAAnb,OAAA0J,OAAA,MAGA,GArGAjK,EAAAygB,kBAAA,SAAAjE,GACA,OAAAhc,EAAA2R,SAAA2N,EAAAtD,KA2DAxc,EAAA0gB,sBAAA,SAAAzT,EAAArL,GACA,IAAAga,EAAA5b,EAAA4b,YACA,GAAAH,EAAAV,YAAAU,EAAAT,WAAA,kBAAAla,QAAA,CACA,IAAA6f,EAAA,KACA/E,EAAA3O,EAAA,mBAAAuP,GACAmE,EAAAnE,EAAAlD,UAEAsC,EAAA3O,EAAA,oBAAAuP,GACA,OAAAwD,EAAApe,EAAA4a,EAAAmE,SAEK,CACL,IAAAC,EAAA,KAEAhF,EAAA3O,EAAA,mBAAAuP,GACAd,EAAAc,EAAAlD,UAAAoC,EAAAc,EAAAlD,UAAA,KACA,IAAA5T,EAAAsa,EAAApe,EAAA4a,IAAAlD,SAEA,OADAsH,EAAApE,EAAA+D,iBACA7a,IAGAkW,EAAA3O,EAAA,oBAAAuP,GACAoE,IAAApE,EAAAK,SAAAL,EAAAM,QAAAN,EAAAO,UAAAP,EAAAuD,WACA/f,EAAAuc,UAAAC,GACAoE,EAAA,QAIAhF,EAAA3O,EAAA,iBAAAuP,GACAd,EAAAc,EAAAlD,SAAA,OAGAoC,IACA8E,IACA5E,EAAA9a,OAAA,QAAA0f,MAQA,iBAAA1f,eAAA+f,cAAApF,EAAAhB,QAAA,CAEAza,EAAA8gB,SAAA,SAAAlf,EAAAmf,GACAA,KAAAjgB,OAEAd,EAAA4b,YAAAmF,EAAA,mBAAAC,EAAAxE,GADA,0BAEAA,EAAAyE,OACAjhB,EAAAyc,gBAAAD,GACAxc,EAAAoc,eAAA2E,EAAA,UAAAC,GACApf,OAGAmf,EAAAF,YARA,yBAQA,MAKA7gB,EAAAkhB,UAAA,iBAAApgB,gBAAAqgB,uBACArgB,OAAAsgB,0BACAtgB,OAAAugB,6BACAvgB,OAAAwgB,yBACAxgB,OAAAygB,wBAEAvhB,EAAAkhB,UACAlhB,EAAAkhB,UAAAlhB,EAAAkhB,UAAA7b,KAAAvE,QAEAd,EAAAkhB,UAAA,SAAAtf,GACA+d,WAAA/d,EAAA,OAIA4B,IAAAzC,OAAA,uDAAAsB,EAAArC,EAAAD,GACA,aAEAC,EAAAwhB,KAAA,SAAA5a,GACA,OAAAA,IAAAnG,OAAA,IAGAT,EAAAyhB,cAAA,SAAAC,GACA,OAAAA,EAAA/e,MAAA,IAAAgf,UAAA7e,KAAA,KAGA9C,EAAA4hB,aAAA,SAAAF,EAAAG,GAEA,IADA,IAAAnc,EAAA,GACAmc,EAAA,GACA,EAAAA,IACAnc,GAAAgc,IAEAG,IAAA,KACAH,MAEA,OAAAhc,GAGA,IAAA0G,EAAA,SACAC,EAAA,SAEArM,EAAA8hB,eAAA,SAAAJ,GACA,OAAAA,EAAA1e,QAAAoJ,EAAA,KAGApM,EAAA+hB,gBAAA,SAAAL,GACA,OAAAA,EAAA1e,QAAAqJ,EAAA,KAGArM,EAAAgiB,WAAA,SAAAja,GACA,IAAAka,KACA,QAAA9hB,KAAA4H,EACAka,EAAA9hB,GAAA4H,EAAA5H,GAEA,OAAA8hB,GAGAjiB,EAAAkiB,UAAA,SAAA5d,GAEA,IADA,IAAA2d,KACA7hB,EAAA,EAAA+B,EAAAmC,EAAA7D,OAAiCL,EAAA+B,EAAK/B,IACtCkE,EAAAlE,IAAA,iBAAAkE,EAAAlE,GACA6hB,EAAA7hB,GAAAS,KAAAmhB,WAAA1d,EAAAlE,IAEA6hB,EAAA7hB,GAAAkE,EAAAlE,GAEA,OAAA6hB,GAGAjiB,EAAAmiB,SAAA,SAAAA,EAAApa,GACA,oBAAAA,MACA,OAAAA,EACA,IAAAka,EACA,GAAAxd,MAAAqD,QAAAC,GAAA,CACAka,KACA,QAAA9hB,EAAA,EAAyBA,EAAA4H,EAAAtH,OAAkBN,IAC3C8hB,EAAA9hB,GAAAgiB,EAAApa,EAAA5H,IAEA,OAAA8hB,EAEA,uBAAA1hB,OAAAwB,UAAAC,SAAAC,KAAA8F,GACA,OAAAA,EAGA,QAAA5H,KADA8hB,KACAla,EACAka,EAAA9hB,GAAAgiB,EAAApa,EAAA5H,IACA,OAAA8hB,GAGAjiB,EAAAoiB,WAAA,SAAAC,GAEA,IADA,IAAA5Z,KACArI,EAAA,EAAiBA,EAAAiiB,EAAA5hB,OAAcL,IAC/BqI,EAAA4Z,EAAAjiB,IAAA,EAEA,OAAAqI,GAIAzI,EAAAsiB,UAAA,SAAAC,GACA,IAAA9Z,EAAAlI,OAAA0J,OAAA,MACA,QAAA7J,KAAAmiB,EACA9Z,EAAArI,GAAAmiB,EAAAniB,GAEA,OAAAqI,GAEAzI,EAAAwiB,YAAA,SAAAle,EAAAqE,GACA,QAAAvI,EAAA,EAAiBA,GAAAkE,EAAA7D,OAAmBL,IACpCuI,IAAArE,EAAAlE,IACAkE,EAAAoC,OAAAtG,EAAA,IAKAJ,EAAAyiB,aAAA,SAAAte,GACA,OAAAA,EAAAnB,QAAA,0BAAkC,SAGlChD,EAAA0iB,WAAA,SAAAve,GACA,OAAAA,EAAAnB,QAAA,cAAmCA,QAAA,cAAuBA,QAAA,cAAuBA,QAAA,eAGjFhD,EAAA2iB,gBAAA,SAAAjB,EAAAkB,GACA,IAAAC,KASA,OAPAnB,EAAA1e,QAAA4f,EAAA,SAAAze,GACA0e,EAAAvgB,MACAwgB,OAAA5hB,oBAAAT,OAAA,GACAA,OAAA0D,EAAA1D,WAIAoiB,GAEA7iB,EAAA+iB,aAAA,SAAAC,GACA,IAAA5D,EAAA,KACAxd,EAAA,WACAwd,EAAA,KACA4D,KAGAC,EAAA,SAAAC,GAGA,OAFAD,EAAAE,SACA/D,EAAAO,WAAA/d,EAAAshB,GAAA,GACAD,GAqBA,OAlBAA,EAAAG,SAAAH,EAEAA,EAAAhhB,KAAA,WAGA,OAFApB,KAAAsiB,SACAH,IACAC,GAGAA,EAAAE,OAAA,WAGA,OAFAzD,aAAAN,GACAA,EAAA,KACA6D,GAGAA,EAAAI,UAAA,WACA,OAAAjE,GAGA6D,GAIAjjB,EAAAsjB,YAAA,SAAAN,EAAAO,GACA,IAAAnE,EAAA,KACAxd,EAAA,WACAwd,EAAA,KACA4D,KAGAQ,EAAA,SAAAN,GACA,MAAA9D,IACAA,EAAAO,WAAA/d,EAAAshB,GAAAK,KAuBA,OApBAC,EAAAC,MAAA,SAAAP,GACA9D,GAAAM,aAAAN,GACAA,EAAAO,WAAA/d,EAAAshB,GAAAK,IAEAC,EAAAJ,SAAAI,EAEAA,EAAAvhB,KAAA,WACApB,KAAAsiB,SACAH,KAGAQ,EAAAL,OAAA,WACA/D,GAAAM,aAAAN,GACAA,EAAA,MAGAoE,EAAAH,UAAA,WACA,OAAAjE,GAGAoE,KAIAhgB,IAAAzC,OAAA,qJAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAmc,EAAA7Z,EAAA,gBACAoZ,EAAApZ,EAAA,oBACAqhB,EAAArhB,EAAA,cACAshB,EAAAthB,EAAA,eACAuhB,EAAAvhB,EAAA,eACAwhB,EAAAD,EAAAzR,SACA2R,EAAArI,EAAAN,SAAA,GACA4I,EAAAtI,EAAAnB,KA4cAta,EAAAgkB,UA1cA,SAAAtT,EAAAuT,GACA,IACAC,EAAAR,EAAA1Y,cAAA,YACAkZ,EAAAhX,UAAAuO,EAAAF,MAAA,qDAEAE,EAAA0I,YACAD,EAAAE,aAAA,8BAEAF,EAAAE,aAAA,cACAF,EAAAE,aAAA,qBACAF,EAAAE,aAAA,wBACAF,EAAAE,aAAA,iBAEAF,EAAAjW,MAAAoW,QAAA,IACA3T,EAAA4T,aAAAJ,EAAAxT,EAAA6T,YAEA,IAAAC,EAAA,cAEAC,GAAA,EACAC,GAAA,EACAC,GAAA,EACAC,GAAA,EACAC,EAAA,GACAC,GAAA,EACA,IAAS,IAAAC,EAAAha,SAAAia,gBAAAd,EAAmD,MAAA1H,IAE5DN,EAAAN,YAAAsI,EAAA,gBAAA1H,GACAyH,EAAAgB,OAAAzI,GACAuI,GAAA,IAEA7I,EAAAN,YAAAsI,EAAA,iBAAA1H,GACAuI,GAAA,EACAd,EAAAiB,QAAA1I,GACA2I,MAEAtkB,KAAAukB,MAAA,WACA,GAAAP,EAAA,OAAAX,EAAAkB,QACAlB,EAAAjW,MAAAqB,SAAA,QACA4U,EAAAkB,SAEAvkB,KAAAwkB,KAAA,WACAnB,EAAAmB,QAEAxkB,KAAAkkB,UAAA,WACA,OAAAA,GAEA,IAAAO,EAAA3B,EAAAL,YAAA,WACAyB,GAAAI,EAAAL,KAEAS,EAAA5B,EAAAL,YAAA,WACAsB,IACAV,EAAAvb,MAAA6b,EACAO,GAAAI,OAIA,SAAAA,EAAAK,GACA,IAAAZ,EAAA,CAIA,GAFAA,GAAA,EAEAa,EACAC,EAAA,EACAC,EAAAH,EAAA,EAAAtB,EAAAvb,MAAAlI,OAAA,OAEA,IAAAilB,EAAA,EACAC,EAAA,EAEA,IACAzB,EAAA0B,kBAAAF,EAAAC,GACS,MAAAnJ,IAEToI,GAAA,GAGA,SAAAiB,IACAjB,IAEAV,EAAAvb,MAAA6b,EACA/I,EAAAP,UACAqK,EAAAnC,YAGA3H,EAAAP,UAAA+I,EAAAlI,iBAAA,6BACAkI,EAAA6B,UAAAN,WAAAV,IACAA,KACAQ,EAAAlC,cAIAyC,IACAd,GACAd,EAAAiB,UAGA,IAaAO,EAAA,KACA5kB,KAAAklB,gBAAA,SAAAC,GAAyCP,EAAAO,GACzCnlB,KAAAolB,gBAAA,WAAuC,OAAAR,GACvC,IAAAS,GAAA,EAEAC,EAAA,SAAAlF,GACA,IAAAiD,EAAAwB,gBAAA,IAAAxB,EAAAyB,eAGAF,IACAxE,EAAAwE,EAAAxE,GACAwE,EAAA,MAEAd,GACAQ,IACAlE,GACAgD,EAAAmC,QAAAnF,GACA0D,GAAA,GACS1D,GAAAuD,EAAA6B,OAAA,QAAAnC,EAAAwB,eACTQ,EACAjC,EAAAqC,YAAA,OAAyCrmB,OAAA,QAEzCgkB,EAAAqC,YAAA,aAA+CrmB,OAAA,QACtCwkB,IACTxD,EAAAsF,UAAA,MAAA/B,GAAAvD,EAAAxgB,OAAA+jB,EAAA/jB,OACAwgB,IAAAoF,OAAA,GACApF,EAAAoF,OAAA,MAAA7B,EAAA6B,OAAA,KACApF,IAAAoF,OAAA,EAAApF,EAAAxgB,OAAA+jB,EAAA/jB,OAAA,GACAwgB,EAAAre,OAAAqe,EAAAxgB,OAAA,IAAA+jB,EAAA5hB,OAAA,KACAqe,IAAApe,MAAA,OACAoe,GAAAuD,EAAA5hB,OAAA,IACaqe,EAAAre,OAAAqe,EAAAxgB,OAAA,IAAA+jB,EAAA5hB,OAAA,KACbqe,IAAApe,MAAA,OAEAoe,GACAgD,EAAAuC,YAAAvF,IAEAwD,IACAA,GAAA,GAEAyB,IACAA,GAAA,KAEAO,EAAA,SAAAjK,GACA,IAAAoI,EAAA,CAEA,IAAA3D,EAAAiD,EAAAvb,MACAwd,EAAAlF,GACA4E,MAGAa,EAAA,SAAAlK,EAAAyE,EAAA0F,GACA,IAAAC,EAAApK,EAAAoK,eAAA9lB,OAAA8lB,cACA,GAAAA,IAAA9C,EAAA,CAEA,IAAA+C,EAAA9C,GAAA4C,EAAA,oBACA,IACA,OAAA1F,GACA,IAAA2F,EAAAE,QAAAD,EAAA5F,GAEA2F,EAAAG,QAAAF,GAES,MAAArK,GACT,IAAAmK,EACA,OAAAD,EAAAlK,EAAAyE,GAAA,MAIA+F,EAAA,SAAAxK,EAAAyK,GACA,IAAAhG,EAAAgD,EAAAiD,cACA,IAAAjG,EACA,OAAA/E,EAAAQ,eAAAF,GAEAkK,EAAAlK,EAAAyE,IACAxF,EAAAF,QACAmJ,EAAAuC,EACA/C,EAAAvb,MAAA,QAAAsY,EAAA,QACAiD,EAAA0B,kBAAA,IAAA3E,EAAAxgB,QACAgkB,GACA9b,MAAAsY,IAGAgG,EAAAhD,EAAAkD,QAAAlD,EAAAmD,SACA3L,EAAAF,OAAAW,EAAAQ,eAAAF,KAEAiI,GAAA,EACAP,EAAAvb,MAAAsY,EACAiD,EAAAmD,SACA1H,WAAA,WACA8E,GAAA,EACAoB,IACAV,IACA8B,EAAAhD,EAAAkD,QAAAlD,EAAAmD,aA4BAlL,EAAAwE,sBAAAwD,EAAAD,EAAAqD,aAAAjiB,KAAA4e,IAEA/H,EAAAN,YAAAsI,EAAA,SAnIA,SAAA1H,IAJA,SAAA0H,GACA,WAAAA,EAAAwB,gBAAAxB,EAAAyB,eAAAzB,EAAAvb,MAAAlI,OAIA8mB,CAAArD,GAGSuB,GACTN,EAAAlB,EAAA6B,UAAAN,YAHAvB,EAAAuD,YACArC,OAkIAjJ,EAAAN,YAAAsI,EAAA,QAAAuC,GAEAvK,EAAAN,YAAAsI,EAAA,MA7BA,SAAA1H,GACAwK,EAAAxK,GAAA,KA6BAN,EAAAN,YAAAsI,EAAA,OA1BA,SAAA1H,GACAwK,EAAAxK,GAAA,KA0BAN,EAAAN,YAAAsI,EAAA,QAvBA,SAAA1H,GACA,IAAAyE,EAAAyF,EAAAlK,GACA,iBAAAyE,GACAA,GACAgD,EAAAmC,QAAAnF,EAAAzE,GACAf,EAAAnB,MACAqF,WAAAwF,GACAjJ,EAAAQ,eAAAF,KAGA0H,EAAAvb,MAAA,GACAgc,GAAA,KAaA,IAuIA8C,EAvHAC,EAAA,WACA,GAAA9C,GAAAX,EAAAyD,sBAAAzD,EAAA0D,UAAA,CAEA,IAAAC,EAAA1D,EAAAvb,MAAA3F,QAAA,YACA,GAAA4hB,EAAAiD,YAAAD,IAEA3D,EAAAyD,oBAAAE,GACAhD,EAAAiD,WACA5D,EAAA6D,OACAlD,EAAAmD,UACAnD,EAAAiD,UAAAD,GACAhD,EAAAiD,WAAA,CACA,IAAAG,EAAA/D,EAAA6B,UAAAmC,WACAhE,EAAA3c,OAAAsd,EAAAiD,WACA5D,EAAAiE,QAAAC,gBACAvD,EAAAwD,MAAAnE,EAAA6B,UAAAmC,WACAhE,EAAA6B,UAAAuC,SAAAL,GACA/D,EAAA6B,UAAAwC,oBAIAC,EAAA,SAAA/L,GACA,GAAAyH,EAAAsE,mBAAAtE,EAAA0D,UAAA,CACA,IAAAa,EAAA5D,EACAA,GAAA,EACA,IAAAxF,EAAAO,WAAA,WACAP,EAAA,KACA,IAAAjb,EAAA+f,EAAAvb,MAAA3F,QAAA,YACA4hB,IAEAzgB,GAAAqkB,EAAAX,UACAhC,KACA2C,EAAAX,WAAA1jB,IACA0hB,IACAM,EAAAhiB,OAGAshB,EAAA,SAAAthB,GAIA,OAHAib,GACAM,aAAAN,IACAjb,IAAAnB,QAAA,cACAwlB,EAAAX,UACA,IACAW,EAAAX,WAAAzI,GACA6E,EAAA6D,OACA3jB,IAEA8f,EAAAsE,mBACAtE,EAAA7H,eAAA,YAAAmM,GACA,kBAAA/L,EAAAV,MAAA0M,EAAAJ,OACAnE,EAAA6B,UAAAuC,SAAAG,EAAAJ,QAGA3M,EAAAN,UAAAM,EAAAN,UAAA,IACAM,EAAAP,UAAAO,EAAAP,UAAA,MAGAuL,MAMAgC,EAAA9E,EAAAL,YAAAoE,EAAA,IAyDA,SAAAgB,IACAhJ,aAAA+H,GACAA,EAAA9H,WAAA,WACAkF,IACAX,EAAAjW,MAAAD,QAAA6W,EACAA,EAAA,IAEA,MAAAZ,EAAA0E,SAAAC,wBACA3E,EAAA0E,SAAAC,uBAAA,EACA3E,EAAA0E,SAAAE,0BAES,GAlET3M,EAAAN,YAAAsI,EAAA,mBAjFA,SAAA1H,GACAoI,IAAAX,EAAA6E,oBAAA7E,EAAA0D,aAEA/C,MACAmD,QAAA9D,EAAAiE,QAAAa,aACA9E,EAAA6E,qBACAnJ,WAAA+H,EAAA,GACAzD,EAAA+E,GAAA,YAAAT,GACA3D,EAAAmD,UAAA9D,EAAA6B,UAAAN,YACAvB,EAAA3c,OAAA,IACA2c,EAAAiE,QAAAC,gBACAlE,EAAA6B,UAAAwC,kBAEArE,EAAAiE,QAAAC,mBAqEA1M,EAAAf,QACAwB,EAAAN,YAAAsI,EAAA,kBAAmDuE,EAAArF,cAEnDlH,EAAAN,YAAAsI,EAAA,mBAAoDuE,EAAArF,aACpDlH,EAAAN,YAAAsI,EAAA,qBAAsDuE,EAAArF,cAEtDlH,EAAAN,YAAAsI,EAAA,iBAAAqE,GAEA1nB,KAAAooB,WAAA,WACA,OAAA/E,GAGArjB,KAAAqoB,YAAA,SAAAC,GACAjF,EAAAiF,YAGAtoB,KAAAuoB,cAAA,SAAA5M,GACA0J,GAAA,EACAf,EAAAlB,EAAA6B,UAAAN,WACAvB,EAAAoF,MAAA,qBAAyChpB,OAAA4jB,EAAAqF,SAAA9M,IACzC3b,KAAA0oB,YAAA/M,GAAA,IAGA3b,KAAA0oB,YAAA,SAAA/M,EAAAgN,GACA3E,IACAA,EAAAX,EAAAjW,MAAAD,SACAkW,EAAAjW,MAAAD,SAAAwb,EAAA,kBAA6D,IAC7D,UAAAtF,EAAAjW,MAAAkB,OAAA,KACAsM,EAAAnB,KAAA,eAA6C,IAE7C,IAAAmP,EAAAxF,EAAAyF,UAAAC,wBACA1b,EAAAyV,EAAA/U,cAAAsV,EAAAyF,WACAE,EAAAH,EAAAG,KAAAlb,SAAAT,EAAA4b,iBAAA,GACAta,EAAAka,EAAAla,MAAAb,SAAA+a,EAAAK,kBAAA,GACAC,EAAAN,EAAAO,OAAAJ,EAAA1F,EAAApV,aAAA,EACAmb,EAAA,SAAAzN,GACA0H,EAAAjW,MAAAsB,KAAAiN,EAAAqB,QAAAtO,EAAA,OACA2U,EAAAjW,MAAA2b,IAAAziB,KAAAM,IAAA+U,EAAAsB,QAAA8L,EAAA,EAAAG,GAAA,MAEAE,EAAAzN,GAEA,aAAAA,EAAAV,OAGAmI,EAAA0E,SAAAC,wBACA3E,EAAA0E,SAAAC,sBAAA,MAEAlJ,aAAA+H,GACAhM,EAAApB,OACA6B,EAAAkB,QAAA6G,EAAAyF,UAAAO,EAAAvB,KAGA7nB,KAAA6nB,qBAgBA,IAAAU,EAAA,SAAA5M,GACAyH,EAAAiG,UAAAd,cAAA5M,GACAkM,KAUA,GARAxM,EAAAN,YAAAsI,EAAA,UAAAkF,GACAlN,EAAAN,YAAAsI,EAAA,qBAAA1H,GACAA,EAAAE,iBACAgM,MAEAxM,EAAAN,YAAAqI,EAAA0E,SAAAwB,SAAA,cAAAf,GACAlN,EAAAN,YAAAsI,EAAA,cAAAkF,GAEA3N,EAAAF,MAAA,CACA,IAAA6O,EAAA,KACAC,GAAA,EAEA3Z,EAAAqL,iBAAA,mBAAAS,GACA4N,GAAA1K,aAAA0K,GACAC,GAAA,IAGA3Z,EAAAqL,iBAAA,iBAAAS,GACA4N,EAAAzK,WAAA,WACA0K,GAAA,GACa,OAEb,IAAAC,EAAA,SAAA9N,GACA,GAAAzR,SAAAia,gBAAAd,IACAmG,EAAA,CAEA,GAAA3F,EACA,OAAA/E,WAAA,WACA+E,GAAA,GACiB,KAEjB,IAAAgB,EAAAxB,EAAAwB,eACAC,EAAAzB,EAAAyB,aAEA,GADAzB,EAAA0B,kBAAA,KACAF,GAAAC,EACA,OAAAD,GACA,OAAAzB,EAAAqD,aAAA,OAAA1D,EAAA2G,IAAgE,MAChE,OAAAtG,EAAAqD,aAAA,OAAA1D,EAAA4G,MAAkE,MAClE,OAAAvG,EAAAqD,aAAA,KAAAzD,EAAAvR,OAAAsR,EAAArU,MAA4E,MAC5E,OAAA0U,EAAAqD,aAAA,OAAA1D,EAAArU,MAAkE,MAClE,OAAA0U,EAAAqD,aAAA,OAAA1D,EAAA6G,OAAmE,MACnE,OAAAxG,EAAAqD,aAAA,KAAAzD,EAAAvR,OAAAsR,EAAA6G,OAA6E,MAC7E,OAAAxG,EAAAqD,aAAA,OAAA1D,EAAA8G,KAAiE,MACjE,OAAAzG,EAAAqD,aAAA,OAAA1D,EAAA+G,UAEa,CACb,OAAAhF,GACA,OAAA1B,EAAAqD,aAAA,KAAAzD,EAAAtR,MAAAqR,EAAA6G,OAA4E,MAC5E,OAAAxG,EAAAqD,aAAA,KAAAzD,EAAAtR,MAAAsR,EAAAvR,OAAAsR,EAAA6G,OAA0F,MAC1F,OAAAxG,EAAAqD,aAAA,KAAAzD,EAAAtR,MAAAqR,EAAA8G,KAA0E,MAC1E,OAAAzG,EAAAqD,aAAA,KAAAzD,EAAAtR,MAAAqR,EAAA+G,MAEA,OAAAjF,GACA,OAAAzB,EAAAqD,aAAA,KAAAzD,EAAAtR,MAAAqR,EAAA2G,IAAyE,MACzE,OAAAtG,EAAAqD,aAAA,KAAAzD,EAAAtR,MAAAqR,EAAA4G,MAA2E,MAC3E,OAAAvG,EAAAqD,aAAA,KAAAzD,EAAAtR,MAAAsR,EAAAvR,OAAAsR,EAAArU,MAAyF,MACzF,OAAA0U,EAAAqD,aAAA,KAAAzD,EAAAtR,MAAAqR,EAAArU,UAIAxE,SAAAgR,iBAAA,kBAAAuO,GACArG,EAAA+E,GAAA,qBACAje,SAAAsR,oBAAA,kBAAAiO,SAQA9mB,IAAAzC,OAAA,+JAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAmc,EAAA7Z,EAAA,gBACAoZ,EAAApZ,EAAA,oBACAqhB,EAAArhB,EAAA,cACAshB,EAAAthB,EAAA,eACAyhB,EAAArI,EAAAN,SAAA,GACA4I,EAAAtI,EAAAnB,KAEAsQ,EAAAvoB,EAAA,mBAAA2hB,UA2ZAhkB,EAAAgkB,UA1ZA,SAAAtT,EAAAuT,GACA,GAAAxI,EAAAF,MACA,OAAAqP,EAAA3oB,KAAApB,KAAA6P,EAAAuT,GAEA,IAAAC,EAAAR,EAAA1Y,cAAA,YACAkZ,EAAAhX,UAAA,iBAEAgX,EAAAE,aAAA,cACAF,EAAAE,aAAA,qBACAF,EAAAE,aAAA,wBACAF,EAAAE,aAAA,iBAEAF,EAAAjW,MAAAoW,QAAA,IACA3T,EAAA4T,aAAAJ,EAAAxT,EAAA6T,YAEA,IAAAC,EAAA,eAEAC,GAAA,EACAE,GAAA,EACAC,GAAA,EACAC,EAAA,GACAC,GAAA,EACA,IAAS,IAAAC,EAAAha,SAAAia,gBAAAd,EAAmD,MAAA1H,IAE5DN,EAAAN,YAAAsI,EAAA,gBAAA1H,GACAyH,EAAAgB,OAAAzI,GACAuI,GAAA,IAEA7I,EAAAN,YAAAsI,EAAA,iBAAA1H,GACAuI,GAAA,EACAd,EAAAiB,QAAA1I,GACA2I,MAEAtkB,KAAAukB,MAAA,WACA,GAAAP,EAAA,OAAAX,EAAAkB,QACA,IAAAwE,EAAA1F,EAAAjW,MAAA2b,IACA1F,EAAAjW,MAAAqB,SAAA,QACA4U,EAAAjW,MAAA2b,IAAA,MACA1F,EAAAkB,QACAzF,WAAA,WACAuE,EAAAjW,MAAAqB,SAAA,GACA,OAAA4U,EAAAjW,MAAA2b,MACA1F,EAAAjW,MAAA2b,QACS,IAET/oB,KAAAwkB,KAAA,WACAnB,EAAAmB,QAEAxkB,KAAAkkB,UAAA,WACA,OAAAA,GAEA,IAAAO,EAAA3B,EAAAL,YAAA,WACAyB,GAAAI,EAAAL,KAEAS,EAAA5B,EAAAL,YAAA,WACAsB,IACAV,EAAAvb,MAAA6b,EACAO,GAAAI,OAIA,SAAAA,EAAAK,GACA,IAAAZ,EAAA,CAIA,GAFAA,GAAA,EAEAa,EACA,IAAAC,EAAA,EACAC,EAAAH,EAAA,EAAAtB,EAAAvb,MAAAlI,OAAA,OAEAilB,EAAAF,EAAA,IACAG,EAAA,EAEA,IACAzB,EAAA0B,kBAAAF,EAAAC,GACS,MAAAnJ,IAEToI,GAAA,GAGA,SAAAiB,IACAjB,IAEAV,EAAAvb,MAAA6b,EACA/I,EAAAP,UACAqK,EAAAnC,YAGA3H,EAAAP,UAAA+I,EAAAlI,iBAAA,6BACAkI,EAAA6B,UAAAN,WAAAV,IACAA,KACAQ,EAAAlC,cAIAyC,IACAd,GACAd,EAAAiB,UAGA,IAeAO,EAAA,KACA5kB,KAAAklB,gBAAA,SAAAC,GAAyCP,EAAAO,GACzCnlB,KAAAolB,gBAAA,WAAuC,OAAAR,GACvC,IAAAS,GAAA,EAEAC,EAAA,SAAAlF,GACAwE,IACAxE,EAAAwE,EAAAxE,GACAwE,EAAA,MAEAd,GACAQ,IACAlE,GACAgD,EAAAmC,QAAAnF,GACA0D,GAAA,GACS1D,GAAAuD,EAAA5hB,OAAA,GACTsjB,EACAjC,EAAAqC,YAAA,OAAyCrmB,OAAA,QAEzCgkB,EAAAqC,YAAA,aAA+CrmB,OAAA,SAE/CghB,EAAAsF,UAAA,MAAA/B,EACAvD,IAAAoF,OAAA,GACApF,EAAAre,OAAA,IAAA4hB,EAAA5hB,OAAA,GACAqe,IAAAoF,OAAA,GACApF,EAAAre,OAAAqe,EAAAxgB,OAAA,IAAA+jB,EAAA5hB,OAAA,KACAqe,IAAApe,MAAA,OACAoe,EAAAre,OAAAqe,EAAAxgB,OAAA,IAAA+jB,EAAA5hB,OAAA,KACAqe,IAAApe,MAAA,OAEAoe,GACAgD,EAAAuC,YAAAvF,IAEAiF,IACAA,GAAA,IAEAO,EAAA,SAAAjK,GACA,IAAAoI,EAAA,CAEA,IAAA3D,EAAAiD,EAAAvb,MACAwd,EAAAlF,GACA4E,MAGAa,EAAA,SAAAlK,EAAAyE,EAAA0F,GACA,IAAAC,EAAApK,EAAAoK,eAAA9lB,OAAA8lB,cACA,GAAAA,IAAA9C,EAAA,CAEA,IAAA+C,EAAA9C,GAAA4C,EAAA,oBACA,IACA,OAAA1F,GACA,IAAA2F,EAAAE,QAAAD,EAAA5F,GAEA2F,EAAAG,QAAAF,GAES,MAAArK,GACT,IAAAmK,EACA,OAAAD,EAAAlK,EAAAyE,GAAA,MAIA+F,EAAA,SAAAxK,EAAAyK,GACA,IAAAhG,EAAAgD,EAAAiD,cACA,IAAAjG,EACA,OAAA/E,EAAAQ,eAAAF,GAEAkK,EAAAlK,EAAAyE,IACAgG,EAAAhD,EAAAkD,QAAAlD,EAAAmD,SACAlL,EAAAQ,eAAAF,KAEAiI,GAAA,EACAP,EAAAvb,MAAAsY,EACAiD,EAAAmD,SACA1H,WAAA,WACA8E,GAAA,EACAoB,IACAV,IACA8B,EAAAhD,EAAAkD,QAAAlD,EAAAmD,aAKAD,EAAA,SAAA3K,GACAwK,EAAAxK,GAAA,IAGA4K,EAAA,SAAA5K,GACAwK,EAAAxK,GAAA,IAGA4J,EAAA,SAAA5J,GACA,IAAAyE,EAAAyF,EAAAlK,GACA,iBAAAyE,GACAA,GACAgD,EAAAmC,QAAAnF,EAAAzE,GACAf,EAAAnB,MACAqF,WAAAwF,GACAjJ,EAAAQ,eAAAF,KAGA0H,EAAAvb,MAAA,GACAgc,GAAA,IAIAzI,EAAAwE,sBAAAwD,EAAAD,EAAAqD,aAAAjiB,KAAA4e,IAEA/H,EAAAN,YAAAsI,EAAA,SAtHA,SAAA1H,GACAiI,EACAA,GAAA,EANA,SAAAP,GACA,WAAAA,EAAAwB,gBAAAxB,EAAAyB,eAAAzB,EAAAvb,MAAAlI,OAMS8mB,CAAArD,IACTD,EAAAuD,YACArC,KACSM,GACTN,EAAAlB,EAAA6B,UAAAN,aAiHAtJ,EAAAN,YAAAsI,EAAA,QAAAuC,GAEAvK,EAAAN,YAAAsI,EAAA,MAAAiD,GACAjL,EAAAN,YAAAsI,EAAA,OAAAkD,GACAlL,EAAAN,YAAAsI,EAAA,QAAAkC,GACA,UAAAlC,GAAA,WAAAA,GAAA,YAAAA,GACAhI,EAAAN,YAAAlL,EAAA,mBAAA8L,GACA,KAAAf,EAAA3B,OAAA0C,EAAAuD,UAAAvD,EAAAK,QAGA,OAAAL,EAAAlD,SACA,QACA8N,EAAA5K,GACA,MACA,QACA4J,EAAA5J,GACA,MACA,QACA2K,EAAA3K,MAKA,IAuIAiL,EAvHAC,EAAA,WACA,GAAA9C,GAAAX,EAAAyD,sBAAAzD,EAAA0D,UAAA,CAEA,IAAAC,EAAA1D,EAAAvb,MAAA3F,QAAA,cACA,GAAA4hB,EAAAiD,YAAAD,IAEA3D,EAAAyD,oBAAAE,GACAhD,EAAAiD,WACA5D,EAAA6D,OACAlD,EAAAmD,UACAnD,EAAAiD,UAAAD,GACAhD,EAAAiD,WAAA,CACA,IAAAG,EAAA/D,EAAA6B,UAAAmC,WACAhE,EAAA3c,OAAAsd,EAAAiD,WACA5D,EAAAiE,QAAAC,gBACAvD,EAAAwD,MAAAnE,EAAA6B,UAAAmC,WACAhE,EAAA6B,UAAAuC,SAAAL,GACA/D,EAAA6B,UAAAwC,oBAIAC,EAAA,SAAA/L,GACA,GAAAyH,EAAAsE,mBAAAtE,EAAA0D,UAAA,CACA,IAAAa,EAAA5D,EACAA,GAAA,EACA,IAAAxF,EAAAO,WAAA,WACAP,EAAA,KACA,IAAAjb,EAAA+f,EAAAvb,MAAA3F,QAAA,cACA4hB,IAEAzgB,GAAAqkB,EAAAX,UACAhC,KACA2C,EAAAX,WAAA1jB,IACA0hB,IACAM,EAAAhiB,OAGAshB,EAAA,SAAAthB,GAIA,OAHAib,GACAM,aAAAN,IACAjb,IAAAnB,QAAA,gBACAwlB,EAAAX,UACA,IACAW,EAAAX,WAAAzI,GACA6E,EAAA6D,OACA3jB,IAEA8f,EAAAsE,mBACAtE,EAAA7H,eAAA,YAAAmM,GACA,kBAAA/L,EAAAV,MAAA0M,EAAAJ,OACAnE,EAAA6B,UAAAuC,SAAAG,EAAAJ,QAGA3M,EAAAN,UAAAM,EAAAN,UAAA,IACAM,EAAAP,UAAAO,EAAAP,UAAA,MAGAuL,MAMAgC,EAAA9E,EAAAL,YAAAoE,EAAA,IAyDA,SAAAgB,IACAhJ,aAAA+H,GACAA,EAAA9H,WAAA,WACAkF,IACAX,EAAAjW,MAAAD,QAAA6W,EACAA,EAAA,IAEA,MAAAZ,EAAA0E,SAAAC,wBACA3E,EAAA0E,SAAAC,uBAAA,EACA3E,EAAA0E,SAAAE,0BAES,GAlET3M,EAAAN,YAAAsI,EAAA,mBAjFA,SAAA1H,GACAoI,IAAAX,EAAA6E,oBAAA7E,EAAA0D,aAEA/C,MACAmD,QAAA9D,EAAAiE,QAAAa,aACA9E,EAAA6E,qBACAnJ,WAAA+H,EAAA,GACAzD,EAAA+E,GAAA,YAAAT,GACA3D,EAAAmD,UAAA9D,EAAA6B,UAAAN,YACAvB,EAAA3c,OAAA,IACA2c,EAAAiE,QAAAC,gBACAlE,EAAA6B,UAAAwC,kBAEArE,EAAAiE,QAAAC,mBAqEA1M,EAAAf,QACAwB,EAAAN,YAAAsI,EAAA,kBAAmDuE,EAAArF,cAEnDlH,EAAAN,YAAAsI,EAAA,mBAAoDuE,EAAArF,aACpDlH,EAAAN,YAAAsI,EAAA,qBAAsDuE,EAAArF,cAEtDlH,EAAAN,YAAAsI,EAAA,iBAAAqE,GAEA1nB,KAAAooB,WAAA,WACA,OAAA/E,GAGArjB,KAAAqoB,YAAA,SAAAC,GACAjF,EAAAiF,YAGAtoB,KAAAuoB,cAAA,SAAA5M,GACA0J,GAAA,EACAf,EAAAlB,EAAA6B,UAAAN,WACAvB,EAAAoF,MAAA,qBAAyChpB,OAAA4jB,EAAAqF,SAAA9M,IACzC3b,KAAA0oB,YAAA/M,GAAA,IAGA3b,KAAA0oB,YAAA,SAAA/M,EAAAgN,GACA3E,IACAA,EAAAX,EAAAjW,MAAAD,SACAkW,EAAAjW,MAAAD,SAAAwb,EAAA,kBAA6D,IAC7D,UAAAtF,EAAAjW,MAAAkB,OAAA,KACAsM,EAAAnB,KAAA,eAA6C,IAE7C,IAAAmP,EAAAxF,EAAAyF,UAAAC,wBACA1b,EAAAyV,EAAA/U,cAAAsV,EAAAyF,WACAE,EAAAH,EAAAG,KAAAlb,SAAAT,EAAA4b,iBAAA,GACAta,EAAAka,EAAAla,MAAAb,SAAA+a,EAAAK,kBAAA,GACAC,EAAAN,EAAAO,OAAAJ,EAAA1F,EAAApV,aAAA,EACAmb,EAAA,SAAAzN,GACA0H,EAAAjW,MAAAsB,KAAAiN,EAAAqB,QAAAtO,EAAA,OACA2U,EAAAjW,MAAA2b,IAAAziB,KAAAM,IAAA+U,EAAAsB,QAAA8L,EAAA,EAAAG,GAAA,MAEAE,EAAAzN,GAEA,aAAAA,EAAAV,OAGAmI,EAAA0E,SAAAC,wBACA3E,EAAA0E,SAAAC,sBAAA,MAEAlJ,aAAA+H,GACAhM,EAAApB,OACA6B,EAAAkB,QAAA6G,EAAAyF,UAAAO,EAAAvB,KAGA7nB,KAAA6nB,qBAgBA,IAAAU,EAAA,SAAA5M,GACAyH,EAAAiG,UAAAd,cAAA5M,GACAkM,KAEAxM,EAAAN,YAAAsI,EAAA,UAAAkF,GACAlN,EAAAN,YAAAsI,EAAA,qBAAA1H,GACAA,EAAAE,iBACAgM,MAEAxM,EAAAN,YAAAqI,EAAA0E,SAAAwB,SAAA,cAAAf,GACAlN,EAAAN,YAAAsI,EAAA,cAAAkF,MAMA5lB,IAAAzC,OAAA,uHAAAsB,EAAArC,EAAAD,GACA,aAEAsC,EAAA,cACAA,EAAA,gBADA,IAEAoZ,EAAApZ,EAAA,oBAKA,SAAAwoB,EAAAC,GACAA,EAAAC,gBAAA,KAEA,IAAAC,EAAAF,EAAAE,OACAA,EAAAC,kBAAA,YAAApqB,KAAAqqB,YAAA7lB,KAAAylB,IACAE,EAAAC,kBAAA,WAAApqB,KAAAsqB,cAAA9lB,KAAAylB,IACAE,EAAAC,kBAAA,cAAApqB,KAAAuqB,cAAA/lB,KAAAylB,IACAE,EAAAC,kBAAA,YAAApqB,KAAAwqB,YAAAhmB,KAAAylB,IACAE,EAAAC,kBAAA,aAAApqB,KAAAyqB,aAAAjmB,KAAAylB,IACAE,EAAAC,kBAAA,YAAApqB,KAAA0qB,YAAAlmB,KAAAylB,KAEA,qEACA,yDAEA3iB,QAAA,SAAAlE,GACA6mB,EAAA7mB,GAAApD,KAAAoD,IACKpD,MAELiqB,EAAAU,cAAA3qB,KAAA4qB,kBAAApmB,KAAAylB,EAAA,gBACAA,EAAAY,cAAA7qB,KAAA4qB,kBAAApmB,KAAAylB,EAAA,gBAoPA,SAAAa,EAAAvD,EAAAwD,GACA,GAAAxD,EAAArhB,MAAA8kB,KAAAzD,EAAAsC,IAAAmB,IACA,IAAAC,EAAA,EAAAF,EAAAG,OAAA3D,EAAArhB,MAAAglB,OAAA3D,EAAAsC,IAAAqB,YACA,GAAA3D,EAAArhB,MAAA8kB,KAAAzD,EAAAsC,IAAAmB,IAAA,GAAAzD,EAAArhB,MAAAglB,QAAA3D,EAAAsC,IAAAqB,OAGAD,EAAA,EAAAF,EAAAC,IAAAzD,EAAArhB,MAAA8kB,IAAAzD,EAAAsC,IAAAmB,SAFA,IAAAC,EAAAF,EAAAG,OAAA,EAIA,OAAAD,EAAA,GACgBF,OAAAxD,EAAArhB,MAAAilB,OAAA5D,EAAAsC,MAEAkB,OAAAxD,EAAAsC,IAAAsB,OAAA5D,EAAArhB,QA5PhB,WAEAlG,KAAAqqB,YAAA,SAAAe,GACA,IAAAC,EAAAD,EAAAC,cACAjlB,EAAAglB,EAAAE,sBACAtrB,KAAAurB,eAAAH,EACA,IAAAjB,EAAAnqB,KAAAmqB,OAEAhO,EAAAiP,EAAArP,YACA,OAAAI,EAAA,CACA,IACAqP,EADArB,EAAAsB,oBACA9G,UAUA,OATAwF,EAAAuB,mBACAF,GAAA,GAAArP,IACAgO,EAAAlF,UAAA0G,eAAAvlB,GACA+jB,EAAAuB,uBACA,GAAAvP,IACAgO,EAAAd,UAAAd,cAAA6C,EAAA3C,UACA7N,EAAAd,WACAsR,EAAAvP,mBAMA,OADA7b,KAAAurB,eAAAK,KAAA1gB,KAAAC,OACAkgB,GAAAlB,EAAAjG,cACAiG,EAAA5F,SACAvkB,KAAA6rB,cAAA7rB,KAAAkqB,iBAAAC,EAAA2B,oBAOA9rB,KAAA+rB,aAAAX,GACAprB,KAAAgsB,YAAA5lB,EAAAglB,EAAA3C,SAAA1J,QAAA,GACAqM,EAAAvP,mBARA7b,KAAAisB,SAAA,kBACAjsB,KAAA+rB,aAAAX,KAUAprB,KAAAgsB,YAAA,SAAA5lB,EAAA8lB,GACA9lB,KAAApG,KAAAmqB,OAAArC,SAAAqE,wBAAAnsB,KAAAoD,EAAApD,KAAAosB,GACA,IAAAjC,EAAAnqB,KAAAmqB,OACAA,EAAAuB,kBACA1rB,KAAAurB,eAAAc,cACAlC,EAAAlF,UAAAqH,iBAAAlmB,GACA8lB,GACA/B,EAAAlF,UAAA0G,eAAAvlB,GACA8lB,GACAlsB,KAAAwmB,SACA2D,EAAArC,SAAAwB,SAAAiD,YACApC,EAAArC,SAAAwB,SAAAiD,aAEApC,EAAAqC,SAAA,iBACAxsB,KAAAisB,SAAA,UACA9B,EAAAuB,mBAGA1rB,KAAAwmB,OAAA,WACA,IAAA2E,EAAAhB,EAAAnqB,KAAAmqB,OACAY,EAAAZ,EAAArC,SAAAqE,wBAAAnsB,KAAAoD,EAAApD,KAAAosB,GAEA,GADAjC,EAAAuB,kBACA1rB,KAAAkqB,gBAAA,CACA,IAAAe,EAAAjrB,KAAAkqB,gBAAAuC,aAAA1B,GAEA,OAAAE,EACAE,EAAAnrB,KAAAkqB,gBAAAL,SACa,MAAAoB,EACbE,EAAAnrB,KAAAkqB,gBAAAhkB,UACa,CACb,IAAAwmB,EAAA5B,EAAA9qB,KAAAkqB,gBAAAa,GACAA,EAAA2B,EAAA3B,OACAI,EAAAuB,EAAAvB,OAEAhB,EAAAlF,UAAA0H,mBAAAxB,EAAAH,IAAAG,EAAAD,QAEAf,EAAAlF,UAAAqH,iBAAAvB,GACAZ,EAAAuB,kBACAvB,EAAArC,SAAA8E,wBAGA5sB,KAAA4qB,kBAAA,SAAAiC,GACA,IAAA1B,EAAAhB,EAAAnqB,KAAAmqB,OACAY,EAAAZ,EAAArC,SAAAqE,wBAAAnsB,KAAAoD,EAAApD,KAAAosB,GACA7E,EAAA4C,EAAAlF,UAAA4H,GAAA9B,EAAAC,IAAAD,EAAAG,QAEA,GADAf,EAAAuB,kBACA1rB,KAAAkqB,gBAAA,CACA,IAAA4C,EAAA9sB,KAAAkqB,gBAAAuC,aAAAlF,EAAArhB,OACA6mB,EAAA/sB,KAAAkqB,gBAAAuC,aAAAlF,EAAAsC,KAEA,OAAAiD,GAAAC,GAAA,EACA5B,EAAAnrB,KAAAkqB,gBAAAL,IACAtC,EAAAsC,IAAAmB,KAAAD,EAAAC,KAAAzD,EAAAsC,IAAAqB,QAAAH,EAAAG,SACAH,EAAAxD,EAAArhB,YACa,MAAA6mB,GAAAD,GAAA,EACb3B,EAAAnrB,KAAAkqB,gBAAAhkB,MACAqhB,EAAArhB,MAAA8kB,KAAAD,EAAAC,KAAAzD,EAAArhB,MAAAglB,QAAAH,EAAAG,SACAH,EAAAxD,EAAAsC,UACa,OAAAiD,GAAA,GAAAC,EACbhC,EAAAxD,EAAAsC,IACAsB,EAAA5D,EAAArhB,UACa,CACb,IAAAwmB,EAAA5B,EAAA9qB,KAAAkqB,gBAAAa,GACAA,EAAA2B,EAAA3B,OACAI,EAAAuB,EAAAvB,OAEAhB,EAAAlF,UAAA0H,mBAAAxB,EAAAH,IAAAG,EAAAD,QAEAf,EAAAlF,UAAAqH,iBAAAvB,GACAZ,EAAAuB,kBACAvB,EAAArC,SAAA8E,wBAGA5sB,KAAAgtB,UACAhtB,KAAAitB,aACAjtB,KAAAktB,iBACAltB,KAAAmtB,iBAAA,WACAntB,KAAAkqB,gBAAA,KACAlqB,KAAAmqB,OAAAiD,WAAA,iBACAptB,KAAAmqB,OAAArC,SAAAwB,SAAA+D,gBACArtB,KAAAmqB,OAAArC,SAAAwB,SAAA+D,kBAIArtB,KAAAstB,UAAA,WACA,IAAAC,EAiHA,SAAAC,EAAAC,EAAAC,EAAAC,GACA,OAAArnB,KAAAsnB,KAAAtnB,KAAAiS,IAAAmV,EAAAF,EAAA,GAAAlnB,KAAAiS,IAAAoV,EAAAF,EAAA,IAlHAI,CAAA7tB,KAAAurB,eAAAnoB,EAAApD,KAAAurB,eAAAa,EAAApsB,KAAAoD,EAAApD,KAAAosB,GACAR,EAAA1gB,KAAAC,OAEAoiB,EAxJA,GAwJA3B,EAAA5rB,KAAAurB,eAAAK,KAAA5rB,KAAA6rB,eACA7rB,KAAAgsB,YAAAhsB,KAAAurB,eAAAD,wBAGAtrB,KAAAsqB,cAAA,SAAAc,GACA,IAAAhlB,EAAAglB,EAAAE,sBACAnB,EAAAnqB,KAAAmqB,OAGA5C,EAFA4C,EAAA9C,QAEAyG,gBAAA1nB,GACAmhB,GACAA,EAAA5C,YACA4C,EAAArhB,MAAAglB,SACA3D,EAAAsC,IAAAqB,UAEAlrB,KAAAisB,SAAA,YAEA1E,EAAA4C,EAAAlF,UAAA8I,aAAA3nB,EAAA4kB,IAAA5kB,EAAA8kB,QACAlrB,KAAAisB,SAAA,kBAEAjsB,KAAAkqB,gBAAA3C,EACAvnB,KAAAwmB,UAGAxmB,KAAAuqB,cAAA,SAAAa,GACA,IAAAhlB,EAAAglB,EAAAE,sBACAnB,EAAAnqB,KAAAmqB,OAEAnqB,KAAAisB,SAAA,iBACA,IAAA1E,EAAA4C,EAAAsB,oBACAlE,EAAAyG,eAAAzG,EAAA0G,SAAA7nB,EAAA4kB,IAAA5kB,EAAA8kB,SACAlrB,KAAAkqB,gBAAAC,EAAAlF,UAAAiJ,aAAA3G,EAAArhB,MAAA8kB,KACAhrB,KAAAkqB,gBAAAL,IAAAM,EAAAlF,UAAAiJ,aAAA3G,EAAAsC,IAAAmB,KAAAnB,KAEA7pB,KAAAkqB,gBAAAC,EAAAlF,UAAAiJ,aAAA9nB,EAAA4kB,KAEAhrB,KAAAwmB,UAGAxmB,KAAAwqB,YAAA,SAAAY,GACA,IAAAjB,EAAAnqB,KAAAmqB,OAEAA,EAAAxD,YACA3mB,KAAAkqB,gBAAAC,EAAAsB,oBACAzrB,KAAAisB,SAAA,cAGAjsB,KAAAyqB,aAAA,SAAAW,GACA,IAAAA,EAAA+C,cAAA,CAEA/C,EAAAiB,eAAAjB,EAAAjO,SAAAiO,EAAAlO,SACAkO,EAAAlO,OAAAkO,EAAAjO,OACAiO,EAAAjO,OAAA,GAGA,IAAAgN,EAAAnqB,KAAAmqB,OAEAnqB,KAAAouB,cACApuB,KAAAouB,aAAgCC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,QAAA,IAEhC,IAAAC,EAAAzuB,KAAAouB,YACAC,EAAAjD,EAAA3C,SAAAhJ,UACAiP,EAAAL,EAAAI,EAAAJ,EACAC,EAAAlD,EAAAlO,OAAAwR,EACAH,EAAAnD,EAAAjO,OAAAuR,EACAA,EAxNA,MAyNAJ,KAAAG,EAAAH,IAAA,EACAC,KAAAE,EAAAF,IAAA,GAGA,IAAAI,EAAAroB,KAAAgC,IAAAgmB,EAAAC,GAEAK,GAAA,EAMA,GALAD,GAAA,GAAAxE,EAAArC,SAAA+G,eAAAzD,EAAAlO,OAAAkO,EAAA0D,MAAA,KACAF,GAAA,GACAD,GAAA,GAAAxE,EAAArC,SAAA+G,eAAA,EAAAzD,EAAAjO,OAAAiO,EAAA0D,SACAF,GAAA,GAEAA,EACAH,EAAAD,QAAAH,OACS,GAAAA,EAAAI,EAAAD,QAvOT,IAuOS,CACTloB,KAAAgC,IAAAgmB,IAAA,IAAAhoB,KAAAgC,IAAAmmB,EAAAH,KACAhoB,KAAAgC,IAAAimB,IAAA,IAAAjoB,KAAAgC,IAAAmmB,EAAAF,KAEAK,GAAA,EACAH,EAAAD,QAAAH,GAGAI,EAAAD,QAAA,EAQA,OAJAC,EAAAJ,IACAI,EAAAH,KACAG,EAAAF,KAEAK,GACAzE,EAAArC,SAAAiH,SAAA3D,EAAAlO,OAAAkO,EAAA0D,MAAA1D,EAAAjO,OAAAiO,EAAA0D,OACA1D,EAAA4D,aAFA,IAMAhvB,KAAA0qB,YAAA,SAAAU,GACAprB,KAAAmqB,OAAA3B,MAAA,aAAA4C,MAGChqB,KAAA4oB,EAAA9oB,WAED/B,EAAA6qB,oBAsBArnB,IAAAzC,OAAA,kFAAAsB,EAAArC,EAAAD,GACA,aAEAsC,EAAA,iBACAqhB,EAAArhB,EAAA,aACA,SAAAytB,EAAApf,GACA7P,KAAAkvB,QAAA,EACAlvB,KAAAmvB,SAAA,KACAnvB,KAAAovB,YAAAvf,GAGA,WACA7P,KAAAqvB,MAAA,WAKA,OAJArvB,KAAAmvB,SAAAtM,EAAA1Y,cAAA,OACAnK,KAAAmvB,SAAA9iB,UAAA,cACArM,KAAAmvB,SAAA/hB,MAAAmB,QAAA,OACAvO,KAAAovB,YAAA/hB,YAAArN,KAAAmvB,UACAnvB,KAAAmvB,UAEAnvB,KAAAooB,WAAA,WACA,OAAApoB,KAAAmvB,UAAAnvB,KAAAqvB,SAEArvB,KAAAsvB,QAAA,SAAAjM,GACAR,EAAA9S,aAAA/P,KAAAooB,aAAA/E,IAEArjB,KAAAuvB,QAAA,SAAAC,GACAxvB,KAAAooB,aAAAxY,UAAA4f,GAEAxvB,KAAAyvB,YAAA,SAAArsB,EAAAgpB,GACApsB,KAAAooB,aAAAhb,MAAAsB,KAAAtL,EAAA,KACApD,KAAAooB,aAAAhb,MAAA2b,IAAAqD,EAAA,MAEApsB,KAAA0vB,aAAA,SAAArjB,GACAwW,EAAAvW,YAAAtM,KAAAooB,aAAA/b,IAEArM,KAAA2vB,KAAA,SAAAtM,EAAAjgB,EAAAgpB,GACA,MAAA/I,GACArjB,KAAAsvB,QAAAjM,GACA,MAAAjgB,GAAA,MAAAgpB,GACApsB,KAAAyvB,YAAArsB,EAAAgpB,GACApsB,KAAAkvB,SACAlvB,KAAAooB,aAAAhb,MAAAmB,QAAA,QACAvO,KAAAkvB,QAAA,IAIAlvB,KAAA4vB,KAAA,WACA5vB,KAAAkvB,SACAlvB,KAAAooB,aAAAhb,MAAAmB,QAAA,OACAvO,KAAAkvB,QAAA,IAGAlvB,KAAA6vB,UAAA,WACA,OAAA7vB,KAAAooB,aAAA0H,cAEA9vB,KAAA+vB,SAAA,WACA,OAAA/vB,KAAAooB,aAAAtZ,aAGA9O,KAAAgwB,QAAA,WACAhwB,KAAAkvB,QAAA,EACAlvB,KAAAmvB,UAAAnvB,KAAAmvB,SAAAtf,YACA7P,KAAAmvB,SAAAtf,WAAAb,YAAAhP,KAAAmvB,aAIC/tB,KAAA6tB,EAAA/tB,WAED/B,EAAA8vB,YAGAtsB,IAAAzC,OAAA,qIAAAsB,EAAArC,EAAAD,GACA,aACA,IAAA2jB,EAAArhB,EAAA,cACAsP,EAAAtP,EAAA,cACA6Z,EAAA7Z,EAAA,gBACAytB,EAAAztB,EAAA,cAAAytB,QAsHA,SAAAgB,EAAApgB,GACAof,EAAA7tB,KAAApB,KAAA6P,GAGAiB,EAAAR,SAAA2f,EAAAhB,GAEA,WACAjvB,KAAAyvB,YAAA,SAAArsB,EAAAgpB,GACA,IAAA8D,EAAAjwB,OAAAkwB,YAAAjmB,SAAA8B,gBAAA+B,YACAqiB,EAAAnwB,OAAAowB,aAAAnmB,SAAA8B,gBAAAiC,aACAG,EAAApO,KAAA+vB,WACAzhB,EAAAtO,KAAA6vB,YAEAzD,GAAA,IADAhpB,GAAA,IAEAgL,EAAA8hB,IACA9sB,KAAAgL,EAAA8hB,GAEA9D,EAAA9d,EAAA8hB,IACAhE,GAAA,GAAA9d,GAEA2gB,EAAA/tB,UAAAuuB,YAAAruB,KAAApB,KAAAoD,EAAAgpB,KAGChrB,KAAA6uB,EAAA/uB,WAID/B,EAAAmxB,cA/IA,SAAArG,GACA,IA8BAsG,EAAAC,EAAAC,EA9BAtG,EAAAF,EAAAE,OACAuG,EAAAvG,EAAArC,SAAA6I,aACAC,EAAA,IAAAX,EAAA9F,EAAAtB,WAgEA,SAAAgI,IACAN,IACAA,EAAA1R,aAAA0R,IACAE,IACAG,EAAAhB,OACAa,EAAA,KACAtG,EAAA2G,QAAA,oBAAAF,GACAzG,EAAA3O,oBAAA,aAAAqV,IAIA,SAAAE,EAAApV,GACAiV,EAAAnB,YAAA9T,EAAAvY,EAAAuY,EAAAyQ,GA1EAnC,EAAAE,OAAAC,kBAAA,2BAAAzO,GACA,GAAAwO,EAAAjG,aAAA,GAAAvI,EAAAI,aAIA,eAFA2U,EAAAM,UAAArV,GAEA,CAGA,IAAAqP,EAAArP,EAAA2P,sBAAAN,IACA/F,EAAAkF,EAAA9C,QAAApC,UAEA,GAAAtJ,EAAA0Q,cACApH,EAAAgM,SAAAjG,EAAA,OACA,CACA,MAAArP,EAAA8M,SAAAzK,OAEA,OADAmM,EAAAxD,YACAhL,EAAAE,iBAEAoO,EAAAC,gBAAAC,EAAAlF,UAAAiJ,aAAAlD,GAIA,OAFAf,EAAAgC,SAAA,iBACAhC,EAAA8B,aAAApQ,GACAA,EAAAE,oBAuDAoO,EAAAE,OAAAC,kBAAA,2BAAAzO,GACA,IAAAnc,EAAAmc,EAAA8M,SAAAjpB,QAAAmc,EAAA8M,SAAAyI,WACA,GAAArO,EAAA1W,YAAA3M,EAAA,mBACA,OAAAqxB,IAEAJ,GAAAxG,EAAAkH,sBACAJ,EAAApV,GAEA6U,EAAA7U,EACA4U,IAEAA,EAAAzR,WAAA,WACAyR,EAAA,KACAC,IAAAvG,EAAAmH,eA9DA,WACA,IAAApG,EAAAwF,EAAAlF,sBAAAN,IACAqG,EAAAX,EAAAY,aAAAtG,GACA,IAAAqG,EACA,OAAAR,IAGA,GAAA7F,GADAb,EAAA9C,QAAAkK,YACA,CACA,IAAAC,EAAArH,EAAArC,SAAA2J,yBAAA,EAAAjB,EAAApE,GAAApB,IACA5kB,EAAAoqB,EAAAkB,KACA,GAAAF,EAAArH,EAAA9C,QAAAsK,oBAAAvrB,EAAA4kB,IAAA5kB,EAAA8kB,QACA,OAAA2F,IAGA,GAAAJ,GAAAY,EASA,GAPAZ,EAAAY,EAAAhO,KAAAphB,KAAA,SAEA2uB,EAAArB,QAAAkB,GACAG,EAAAjB,OACAxF,EAAA2G,QAAA,oBAAAF,GACAzG,EAAAhC,GAAA,aAAA0I,GAEA5G,EAAAkH,qBACAJ,EAAAP,OACS,CACT,IACA5H,EADA4H,EAAA/H,SAAAjpB,OACAspB,wBACA1b,EAAAwjB,EAAAxI,aAAAhb,MACAA,EAAAsB,KAAAka,EAAAgB,MAAA,KACAxc,EAAA2b,IAAAH,EAAAO,OAAA,MAiCAyI,GAEAf,KACS,OAGTxV,EAAAN,YAAAoP,EAAArC,SAAA+J,QAAA,oBAAAlW,GACA6U,EAAA,KACAC,IAAAF,IAGAA,EAAAzR,WAAA,WACAyR,EAAA,KACAM,KACS,OAGT1G,EAAAhC,GAAA,gBAAA0I,MAkCAluB,IAAAzC,OAAA,oGAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAmc,EAAA7Z,EAAA,gBACAoZ,EAAApZ,EAAA,oBACAswB,EAAA3yB,EAAA2yB,WAAA,SAAArJ,EAAA0B,GACAnqB,KAAAyoB,WACAzoB,KAAAmqB,SAEAnqB,KAAAoD,EAAApD,KAAAgd,QAAAyL,EAAAzL,QACAhd,KAAAosB,EAAApsB,KAAAid,QAAAwL,EAAAxL,QAEAjd,KAAA0xB,KAAA,KACA1xB,KAAA+xB,aAAA,KAEA/xB,KAAAgyB,oBAAA,EACAhyB,KAAA0f,kBAAA,IAGA,WAEA1f,KAAA4b,gBAAA,WACAP,EAAAO,gBAAA5b,KAAAyoB,UACAzoB,KAAAgyB,oBAAA,GAGAhyB,KAAA6b,eAAA,WACAR,EAAAQ,eAAA7b,KAAAyoB,UACAzoB,KAAA0f,kBAAA,GAGA1f,KAAAgvB,KAAA,WACAhvB,KAAA4b,kBACA5b,KAAA6b,kBAEA7b,KAAAsrB,oBAAA,WACA,OAAAtrB,KAAA0xB,KACA1xB,KAAA0xB,MAEA1xB,KAAA0xB,KAAA1xB,KAAAmqB,OAAArC,SAAAqE,wBAAAnsB,KAAAgd,QAAAhd,KAAAid,SACAjd,KAAA0xB,OAEA1xB,KAAAqrB,YAAA,WACA,UAAArrB,KAAA+xB,aACA,OAAA/xB,KAAA+xB,aAEA,IAGAE,EAHAjyB,KAAAmqB,OAGAsB,oBACA,GAAAwG,EAAAtN,UACA3kB,KAAA+xB,cAAA,MACA,CACA,IAAA3rB,EAAApG,KAAAsrB,sBACAtrB,KAAA+xB,aAAAE,EAAAhE,SAAA7nB,EAAA4kB,IAAA5kB,EAAA8kB,QAGA,OAAAlrB,KAAA+xB,cAEA/xB,KAAA+b,UAAA,WACA,OAAAV,EAAAU,UAAA/b,KAAAyoB,WAEAzoB,KAAAqsB,YAAA,WACA,OAAArsB,KAAAyoB,SAAAvM,UAGAlc,KAAAmuB,YAAAvT,EAAA3B,MACA,WAAsB,OAAAjZ,KAAAyoB,SAAAvJ,SACtB,WAAsB,OAAAlf,KAAAyoB,SAAAzM,WAErB5a,KAAA0wB,EAAA5wB,aAIDyB,IAAAzC,OAAA,uHAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA2jB,EAAArhB,EAAA,cACA6Z,EAAA7Z,EAAA,gBACAoZ,EAAApZ,EAAA,oBAEA0wB,EAAA,IACAC,EAAA,IACAC,EAAA,EAEA,SAAAC,EAAApI,GAEA,IAAAE,EAAAF,EAAAE,OAEAmI,EAAAzP,EAAA1Y,cAAA,OACAmoB,EAAAC,IAAA,6EACA3X,EAAAT,UACAmY,EAAAllB,MAAAD,QAAA,mFAEA,mEAEA7F,QAAA,SAAAlE,GACA6mB,EAAA7mB,GAAApD,KAAAoD,IACKpD,MACLmqB,EAAAjP,iBAAA,YAAAlb,KAAAqqB,YAAA7lB,KAAAylB,IAGA,IACAuI,EAAApvB,EAAAgpB,EACAqG,EAAAlL,EACAmL,EACAC,EACAC,EACAC,EACAC,EACAC,EARAC,EAAA7I,EAAAtB,UAGAoK,EAAA,EAwLA,SAAAC,IACA,IAAAC,EAAAT,GA3DA,SAAA3H,EAAAoI,GACA,IAAAhoB,EAAAD,KAAAC,MACAioB,GAAAD,GAAApI,EAAAC,KAAAmI,EAAAnI,IACAqI,GAAAF,GAAApI,EAAAG,QAAAiI,EAAAjI,QACA4H,GAAAM,GAAAC,GACAlJ,EAAAuB,iBAAA,EACAvB,EAAAmJ,qBAAAvI,GACAZ,EAAAuB,iBAAA,EACAoH,EAAA3nB,EACA4nB,GAAuC3vB,IAAAgpB,MAEvCyB,EAAAkF,EAAA3vB,EAAA2vB,EAAA3G,EAAAhpB,EAAAgpB,GACAgG,EACAU,EAAA,KACa3nB,EAAA2nB,GAAAX,IACbhI,EAAArC,SAAA8E,uBACAkG,EAAA,OA6CAlG,CADA8F,EAAAvI,EAAArC,SAAAqE,wBAAA/oB,EAAAgpB,GACA+G,GAxCA,SAAApI,EAAAoI,GACA,IAAAhoB,EAAAD,KAAAC,MACAooB,EAAApJ,EAAArC,SAAA0L,YAAAD,WACAE,EAAAtJ,EAAArC,SAAA0L,YAAAC,eACAC,EAAAvJ,EAAArC,SAAAwB,SAAAR,wBACA6K,GACAvwB,GACAsL,KAAAtL,EAAAswB,EAAAhlB,KACAkb,MAAA8J,EAAA9J,MAAAxmB,GAEAgpB,GACArD,IAAAqD,EAAAsH,EAAA3K,IACAI,OAAAuK,EAAAvK,OAAAiD,IAGAwH,EAAAttB,KAAAM,IAAA+sB,EAAAvwB,EAAAsL,KAAAilB,EAAAvwB,EAAAwmB,OACAiK,EAAAvtB,KAAAM,IAAA+sB,EAAAvH,EAAArD,IAAA4K,EAAAvH,EAAAjD,QACA2K,GAA4B9I,IAAAD,EAAAC,IAAAE,OAAAH,EAAAG,QAC5B0I,EAAAH,GAAA,IACAK,EAAA5I,QAAAyI,EAAAvwB,EAAAsL,KAAAilB,EAAAvwB,EAAAwmB,OAAA,KAEAiK,EAAAN,GAAA,IACAO,EAAA9I,KAAA2I,EAAAvH,EAAArD,IAAA4K,EAAAvH,EAAAjD,QAAA,KAEA,IAAA4K,EAAAhJ,EAAAC,KAAA8I,EAAA9I,IACAgJ,EAAAjJ,EAAAG,QAAA4I,EAAA5I,OACAkI,GAAAD,GAAApI,EAAAC,KAAAmI,EAAAnI,IACA+I,GAAAC,IAAAZ,EACAP,EAEA1nB,EAAA0nB,GAAAX,GACA/H,EAAArC,SAAA8E,qBAAAkH,GAFAjB,EAAA1nB,EAIA0nB,EAAA,KAQAoB,CAAAvB,EAAAS,GAGA,SAAAe,IACA3M,EAAA4C,EAAAlF,UAAAkP,kBACA3B,EAAArI,EAAA9C,QAAA+M,UAAA7M,EAAA,gBAAA4C,EAAAkK,qBACAlK,EAAA1C,iBACA0C,EAAAjG,aACAiG,EAAArC,SAAAwM,aAAAC,aAAA,GACAC,cAAA/B,GACAS,IACAT,EAAAgC,YAAAvB,EAAA,IACAD,EAAA,EACA5X,EAAAN,YAAA7Q,SAAA,YAAAwqB,GAGA,SAAAC,IACAH,cAAA/B,GACAtI,EAAA9C,QAAAuN,aAAApC,GACAA,EAAA,KACArI,EAAAuB,iBAAA,EACAvB,EAAAlF,UAAA4P,kBAAAtN,GACA4C,EAAAuB,iBAAA,EACAvB,EAAAjG,cAAA0O,GACAzI,EAAArC,SAAAwM,aAAAC,aAAApK,EAAA2K,eACAvN,EAAA,KACAmL,EAAA,KACAO,EAAA,EACAJ,EAAA,KACAC,EAAA,KACAzX,EAAAE,eAAArR,SAAA,YAAAwqB,GAnNA10B,KAAA+0B,YAAA,SAAApZ,GACA,GAAA3b,KAAAg1B,aAAAhC,EAAAiC,UAAA,CACA,IAAAvtB,EAAA1H,KAKA,OAJA8e,WAAA,WACApX,EAAAskB,cACAtkB,EAAAqkB,aAAApQ,IACa,GACbA,EAAAE,iBAEA0L,EAAA4C,EAAAsB,oBAEA,IAAAyJ,EAAAvZ,EAAAuZ,aACAA,EAAAC,cAAAhL,EAAA2K,cAAA,kBACAla,EAAAT,UACAgQ,EAAAtB,UAAAxb,YAAAilB,GACAA,EAAAjjB,UAAA,GAEA6lB,EAAAE,cAAAF,EAAAE,aAAA9C,EAAA,KACA1X,EAAAT,SACAgQ,EAAAtB,UAAA7Z,YAAAsjB,GAEA4C,EAAAG,YACAH,EAAAjP,QAAA,OAAAkE,EAAA9C,QAAAiO,gBAEA1C,GAAA,EACA5yB,KAAAisB,SAAA,SAGAjsB,KAAAu1B,UAAA,SAAA5Z,GAIA,GAHAqX,EAAAiC,WAAA,EACArC,GAAA,EACA5yB,KAAAisB,SAAA,OACA9B,EAAA2K,cAAA,CACA,IAAAU,EAAA7Z,EAAAuZ,aAAAM,WACA7C,GAAA,QAAA6C,GACArL,EAAA9C,QAAA1gB,OAAAwjB,EAAAsB,qBACAtB,EAAArC,SAAAwM,aAAAC,aAAA,GAEAv0B,KAAAmqB,OAAAiD,WAAA,gBACAptB,KAAAmqB,OAAArC,SAAA2N,eAAA,KAGAz1B,KAAA01B,YAAA,SAAA/Z,GACA,IAAAwO,EAAA2K,eAAAa,EAAAha,EAAAuZ,cAQA,OANA9xB,EAAAuY,EAAAqB,QACAoP,EAAAzQ,EAAAsB,QACAuV,GACA0B,IACAjB,IACAtX,EAAAuZ,aAAAM,WAAA7C,EAAAiD,EAAAja,GACAN,EAAAQ,eAAAF,IAGA3b,KAAA61B,WAAA,SAAAla,GACA,IAAAwO,EAAA2K,eAAAa,EAAAha,EAAAuZ,cAYA,OAVA9xB,EAAAuY,EAAAqB,QACAoP,EAAAzQ,EAAAsB,QACAuV,IACA0B,IACAjB,KAEA,OAAA6C,IACAA,EAAA,MAEAna,EAAAuZ,aAAAM,WAAA7C,EAAAiD,EAAAja,GACAN,EAAAQ,eAAAF,IAGA3b,KAAA+1B,YAAA,SAAApa,GAEA,KADAsX,GACA,GAAAT,EAGA,OAFAmC,IACAhC,EAAA,KACAtX,EAAAQ,eAAAF,IAIA3b,KAAAg2B,OAAA,SAAAra,GACA,GAAA+W,EAAA,CAEA,IAAAwC,EAAAvZ,EAAAuZ,aACA,GAAAtC,EACA,OAAAD,GACA,WAEApL,EADAA,EAAA0G,SAAAyE,EAAA1H,IAAA0H,EAAAxH,SAEAhlB,MAAAwsB,EACA7I,IAAA6I,GAGAvI,EAAA8L,SAAA1O,EAAAmL,GAEA,MACA,WACAnL,EAAA4C,EAAA8L,SAAA1O,EAAAmL,GAAA,OAGS,CACT,IAAAwD,EAAAhB,EAAAhP,QAAA,QACAqB,GACArhB,MAAAwsB,EACA7I,IAAAM,EAAA9C,QAAA5gB,OAAAisB,EAAAwD,IAEA/L,EAAA5F,QACAoO,EAAA,KAGA,OADAgC,IACAtZ,EAAAQ,eAAAF,KAGAN,EAAAN,YAAAiY,EAAA,YAAAhzB,KAAA+0B,YAAAvwB,KAAAylB,IACA5O,EAAAN,YAAAiY,EAAA,UAAAhzB,KAAAu1B,UAAA/wB,KAAAylB,IACA5O,EAAAN,YAAAiY,EAAA,YAAAhzB,KAAA01B,YAAAlxB,KAAAylB,IACA5O,EAAAN,YAAAiY,EAAA,WAAAhzB,KAAA61B,WAAArxB,KAAAylB,IACA5O,EAAAN,YAAAiY,EAAA,YAAAhzB,KAAA+1B,YAAAvxB,KAAAylB,IACA5O,EAAAN,YAAAiY,EAAA,OAAAhzB,KAAAg2B,OAAAxxB,KAAAylB,IAgGA,IAAA6L,EAAA,KACA,SAAApB,IACA,MAAAoB,IACAA,EAAAhX,WAAA,WACA,MAAAgX,GAAAtD,GACAmC,KACa,KAIb,SAAAgB,EAAAT,GACA,IAAAiB,EAAAjB,EAAAiB,MACA,OAAAA,GAAAvyB,MAAA1C,UAAA8G,KAAA5G,KAAA+0B,EAAA,SAAAlb,GACA,oBAAAA,GAAA,QAAAA,IAIA,SAAA2a,EAAAja,GACA,IAAAya,GAAA,yCAGAC,EAAAzb,EAAA3B,MAAA0C,EAAAM,OAAAN,EAAAK,QACAmZ,EAAA,gBACA,IACAA,EAAAxZ,EAAAuZ,aAAAC,cAAAld,cACS,MAAA0D,IACT,IAAA6Z,EAAA,OASA,OAPAa,GAAAD,EAAAv2B,QAAAs1B,IAAA,EACAK,EAAA,QAVA,oDAWA31B,QAAAs1B,IAAA,EACAK,EAAA,OACAY,EAAAv2B,QAAAs1B,IAAA,IACAK,EAAA,QAEAA,GAwFA,SAAA3H,EAAAL,EAAAC,EAAAC,EAAAC,GACA,OAAArnB,KAAAsnB,KAAAtnB,KAAAiS,IAAAmV,EAAAF,EAAA,GAAAlnB,KAAAiS,IAAAoV,EAAAF,EAAA,KArFA,WAEAztB,KAAAs2B,SAAA,WACAprB,KAAAC,MAAAnL,KAAAurB,eAAAK,KACA5rB,KAAAmqB,OAAAoM,gBACAv2B,KAAAw2B,aAGAx2B,KAAAy2B,YAAA,WACAz2B,KAAAmqB,OAAAtB,UACAoM,WAAA,EACAj1B,KAAAgsB,YAAAhsB,KAAAurB,eAAAD,uBACAtrB,KAAAgtB,aAGAhtB,KAAA02B,aAAA,SAAA/a,GACA3b,KAAAmqB,OAAArC,SAAAwM,aAAAC,aAAAv0B,KAAAmqB,OAAA2K,eACA90B,KAAAmqB,OAAAiD,WAAA,gBACAptB,KAAAmqB,OAAArC,SAAA2N,eAAA,IACAz1B,KAAAy2B,eAGAz2B,KAAAw2B,UAAA,WACAx2B,KAAAg1B,YAAA,EACA,IAAA7K,EAAAnqB,KAAAmqB,OACAA,EAAAtB,UACAoM,WAAA,EACA9K,EAAArC,SAAAwM,aAAAC,aAAA,GACApK,EAAAqC,SAAA,gBACA,IAAAmK,EAAA/b,EAAApB,MAAA,iBACA2Q,EAAArC,SAAA2N,eAAAkB,GACA32B,KAAAisB,SAAA,cAGAjsB,KAAA42B,YAAA,SAAAjb,GACA,IAAAnc,EAAAQ,KAAAmqB,OAAAtB,UACAjO,EAAAnB,MAAA,aAAAzZ,KAAA62B,QACAhJ,EAAA7tB,KAAAurB,eAAAnoB,EAAApD,KAAAurB,eAAAa,EAAApsB,KAAAoD,EAAApD,KAAAosB,GACA,GACA5sB,EAAAs3B,YAEA,aAAA92B,KAAA62B,QACAhJ,EAAA7tB,KAAAurB,eAAAnoB,EAAApD,KAAAurB,eAAAa,EAAApsB,KAAAoD,EAAApD,KAAAosB,GACA,IACA5sB,EAAAy1B,WAAA,EACAj1B,KAAAgsB,YAAAhsB,KAAAurB,eAAAD,0BAKAtrB,KAAAqqB,YAAA,SAAA1O,GACA,GAAA3b,KAAA+2B,aAAA,CAEA/2B,KAAAurB,eAAA5P,EACA,IAAAwO,EAAAnqB,KAAAmqB,OAEAkB,EAAA1P,EAAA0P,cACAlP,EAAAR,EAAAI,YAEA,QADAJ,EAAA8M,SAAAzK,QAAA,IACA,IAAA7B,GAAAkP,EAAA,CACA,GAAA1P,EAAAwO,OAAA2B,oBAAAnQ,EAAAwS,eAAAxS,EAAA0Q,eACA,OACArsB,KAAAurB,eAAAK,KAAA1gB,KAAAC,MACA,IAAA6rB,EAAArb,EAAA8M,SAAAjpB,QAAAmc,EAAA8M,SAAAyI,WAGA,GAFA,iBAAA8F,IACAA,EAAAC,aAAA,MACA9M,EAAAoM,eAAA,CACA,GAAA3b,EAAAP,SACAra,KAAAg1B,YAAA,EACA7K,EAAAtB,UACAoM,WAAA,EAEAj1B,KAAAisB,SAAA,iBAEAjsB,KAAAw2B,YAEAx2B,KAAA+rB,aAAApQ,EAAA3b,KAAA42B,YAAApyB,KAAAxE,OACA2b,EAAA+D,kBAAA,OAICte,KAAAixB,EAAAnxB,WAOD/B,EAAAkzB,oBAIA1vB,IAAAzC,OAAA,oEAAAsB,EAAArC,EAAAD,GACA,aACA,IAAA2jB,EAAArhB,EAAA,SAEArC,EAAA8J,IAAA,SAAAiuB,EAAAn2B,GACA,IAAAo2B,EAAA,IAAAC,eACAD,EAAAE,KAAA,MAAAH,GAAA,GACAC,EAAAG,mBAAA,WACA,IAAAH,EAAAI,YACAx2B,EAAAo2B,EAAAK,eAGAL,EAAAM,KAAA,OAGAt4B,EAAAu4B,WAAA,SAAAC,EAAA52B,GACA,IAAA+K,EAAA+W,EAAAjX,kBACAgsB,EAAA1tB,SAAAC,cAAA,UAEAytB,EAAArF,IAAAoF,EACA7rB,EAAAuB,YAAAuqB,GAEAA,EAAAC,OAAAD,EAAAN,mBAAA,SAAAQ,EAAAC,IACAA,GAAAH,EAAAL,YAAA,UAAAK,EAAAL,YAAA,YAAAK,EAAAL,aACAK,IAAAC,OAAAD,EAAAN,mBAAA,KACAS,GACAh3B,OAIA5B,EAAA64B,WAAA,SAAAd,GACA,IAAAnxB,EAAAmE,SAAAC,cAAA,KAEA,OADApE,EAAA2H,KAAAwpB,EACAnxB,EAAA2H,QAKA/K,IAAAzC,OAAA,gEAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA+4B,KACArc,EAAA,WAAkC5b,KAAAgyB,oBAAA,GAClCnW,EAAA,WAAiC7b,KAAA0f,kBAAA,GAEjCuY,EAAAzP,MACAyP,EAAAC,eAAA,SAAAC,EAAAxc,GACA3b,KAAAo4B,iBAAAp4B,KAAAo4B,mBACAp4B,KAAAq4B,mBAAAr4B,KAAAq4B,qBAEA,IAAAC,EAAAt4B,KAAAo4B,eAAAD,OACAI,EAAAv4B,KAAAq4B,iBAAAF,GACA,GAAAG,EAAA14B,QAAA24B,EAAA,CAGA,iBAAA5c,OACAA,MAEAA,EAAAV,OACAU,EAAAV,KAAAkd,GACAxc,EAAAC,kBACAD,EAAAC,mBACAD,EAAAE,iBACAF,EAAAE,kBAEAyc,IAAAt2B,QACA,QAAAzC,EAAA,EAAiBA,EAAA+4B,EAAA14B,SACjB04B,EAAA/4B,GAAAoc,EAAA3b,OACA2b,EAAAqW,oBAFqCzyB,KAMrC,OAAAg5B,IAAA5c,EAAA+D,iBACA6Y,EAAA5c,EAAA3b,WADA,IAKAi4B,EAAAnH,QAAA,SAAAqH,EAAAxc,GACA,IAAA2c,GAAAt4B,KAAAo4B,oBAA8CD,GAC9C,GAAAG,EAAA,CAEAA,IAAAt2B,QACA,QAAAzC,EAAA,EAAiBA,EAAA+4B,EAAA14B,OAAoBL,IACrC+4B,EAAA/4B,GAAAoc,EAAA3b,QAGAi4B,EAAAO,KAAA,SAAAL,EAAAp3B,GACA,IAAA4hB,EAAA3iB,KACAe,GAAAf,KAAAkb,iBAAAid,EAAA,SAAAM,IACA9V,EAAAnH,oBAAA2c,EAAAM,GACA13B,EAAAN,MAAA,KAAAJ,cAKA43B,EAAA7N,kBAAA,SAAA+N,EAAAp3B,GACA,IAAA23B,EAAA14B,KAAAq4B,iBAIA,GAHAK,IACAA,EAAA14B,KAAAq4B,kBAA4CM,gBAE5CD,EAAAP,GAAA,CACA,IAAAS,EAAAF,EAAAP,GACAU,EAAAH,EAAAC,WAAAR,GACAU,IACAH,EAAAC,WAAAR,GAAAU,MACAA,EAAAp3B,KAAAm3B,GACA,IAAAr5B,EAAAs5B,EAAAh5B,QAAAkB,IACA,GAAAxB,GACAs5B,EAAAhzB,OAAAtG,EAAA,GAEAm5B,EAAAP,GAAAp3B,GAEAk3B,EAAAa,qBAAA,SAAAX,EAAAp3B,GACA,IAAA23B,EAAA14B,KAAAq4B,iBACA,GAAAK,EAAA,CAEA,IAAAG,EAAAH,EAAAC,WAAAR,GAEA,GAAAO,EAAAP,IAAAp3B,EAAA,CACA23B,EAAAP,GACAU,GACA74B,KAAAoqB,kBAAA+N,EAAAU,EAAAE,YACK,GAAAF,EAAA,CACL,IAAAt5B,EAAAs5B,EAAAh5B,QAAAkB,IACA,GAAAxB,GACAs5B,EAAAhzB,OAAAtG,EAAA,MAIA04B,EAAA9P,GACA8P,EAAA/c,iBAAA,SAAAid,EAAAp3B,EAAAi4B,GACAh5B,KAAAo4B,eAAAp4B,KAAAo4B,mBAEA,IAAAE,EAAAt4B,KAAAo4B,eAAAD,GAMA,OALAG,IACAA,EAAAt4B,KAAAo4B,eAAAD,QAEA,GAAAG,EAAAz4B,QAAAkB,IACAu3B,EAAAU,EAAA,kBAAAj4B,GACAA,GAGAk3B,EAAAgB,IACAhB,EAAA1c,eACA0c,EAAAzc,oBAAA,SAAA2c,EAAAp3B,GACAf,KAAAo4B,eAAAp4B,KAAAo4B,mBAEA,IAAAE,EAAAt4B,KAAAo4B,eAAAD,GACA,GAAAG,EAAA,CAGA,IAAAn0B,EAAAm0B,EAAAz4B,QAAAkB,IACA,IAAAoD,GACAm0B,EAAAzyB,OAAA1B,EAAA,KAGA8zB,EAAAiB,mBAAA,SAAAf,GACAn4B,KAAAo4B,iBAAAp4B,KAAAo4B,eAAAD,QAGAh5B,EAAA84B,iBAIAt1B,IAAAzC,OAAA,mGAAAsB,EAAArC,EAAAD,GACA,gBAEA,IAAA4R,EAAAtP,EAAA,SACAy2B,EAAAz2B,EAAA,mBAAAy2B,aAEAkB,GACAC,WAAA,SAAAC,GACA35B,OAAAC,KAAA05B,GAAA/xB,QAAA,SAAAhI,GACAU,KAAAs5B,UAAAh6B,EAAA+5B,EAAA/5B,KACSU,OAETu5B,WAAA,SAAAC,GACA,IAAA30B,KAUA,OATA20B,EAES51B,MAAAqD,QAAAuyB,KACT30B,EAAA20B,EACAA,EAAA95B,OAAAC,KAAAkF,IAHA20B,EAAA95B,OAAAC,KAAAK,KAAAy5B,UAKAD,EAAAlyB,QAAA,SAAAhI,GACAuF,EAAAvF,GAAAU,KAAA05B,UAAAp6B,IACSU,MACT6E,GAEAy0B,UAAA,SAAA/1B,EAAAuE,GACA,GAAA9H,KAAA,IAAAuD,KAAAuE,EAAA,CAEA,IAAA6xB,EAAA35B,KAAAy5B,SAAAl2B,GACA,IAAAo2B,EACA,OAAAC,EAAA,sBAAAr2B,EAAA,KAEA,GAAAo2B,EAAAE,UACA,OAAA75B,KAAA25B,EAAAE,YAAA75B,KAAA25B,EAAAE,WAAAP,UAAA/1B,EAAAuE,GAEA6xB,EAAAG,aACA95B,KAAA,IAAAuD,GAAAuE,GACA6xB,KAAAzwB,KACAywB,EAAAzwB,IAAA9H,KAAApB,KAAA8H,KAEA4xB,UAAA,SAAAn2B,GACA,IAAAo2B,EAAA35B,KAAAy5B,SAAAl2B,GACA,OAAAo2B,EAGAA,EAAAE,UACA75B,KAAA25B,EAAAE,YAAA75B,KAAA25B,EAAAE,WAAAH,UAAAn2B,GACAo2B,KAAA1wB,IAAA0wB,EAAA1wB,IAAA7H,KAAApB,WAAA,IAAAuD,GAJAq2B,EAAA,sBAAAr2B,EAAA,OAQA,SAAAq2B,EAAAG,GACA,oBAAAr5B,iBAAAk5B,MACAl5B,QAAAk5B,KAAAn5B,MAAAC,QAAAL,WAGA,SAAA25B,EAAAC,EAAA7Z,GACA,IAAAzE,EAAA,IAAA7b,MAAAm6B,GACAte,EAAAyE,OACA,iBAAA1f,iBAAAC,OACAD,QAAAC,MAAAgb,GACAmD,WAAA,WAA2B,MAAAnD,IAG3B,IAAAue,EAAA,WACAl6B,KAAAm6B,qBAGA,WACArpB,EAAAF,UAAA5Q,KAAAi4B,GACAj4B,KAAAo6B,cAAA,SAAAlzB,EAAAywB,EAAA0C,GAgBA,OAfAnzB,EAAAuyB,WACAz5B,KAAAm6B,gBAAAxC,GAAAzwB,EAAAuyB,aAEA/5B,OAAAC,KAAA06B,GAAA/yB,QAAA,SAAAhI,GACA,IAAAq6B,EAAAU,EAAA/6B,GACA,iBAAAq6B,IACAA,GAAuBE,UAAAF,IAEvBA,EAAAp2B,OAAAo2B,EAAAp2B,KAAAjE,GACA4H,EAAAuyB,SAAAE,EAAAp2B,MAAAo2B,EACA,iBAAAA,IACAzyB,EAAA,IAAAyyB,EAAAp2B,MAAAo2B,EAAAW,gBAEAxpB,EAAAF,UAAA1J,EAAAiyB,GAEAn5B,MAGAA,KAAAu6B,aAAA,SAAArzB,GACAxH,OAAAC,KAAAuH,EAAAuyB,UAAAnyB,QAAA,SAAAhI,GACA,IAAAq6B,EAAAzyB,EAAAuyB,SAAAn6B,GACA,UAAAq6B,GACAzyB,EAAAoyB,UAAAh6B,EAAAq6B,EAAA7xB,UAIA9H,KAAAw6B,gBAAA,SAAA7C,EAAAp0B,EAAAuE,GACA,IAAA2yB,EAAAz6B,KAAAm6B,gBAAAxC,KAAA33B,KAAAm6B,gBAAAxC,OACA8C,EAAAl3B,KACAk3B,EAAAZ,UACA75B,KAAAw6B,gBAAAC,EAAAZ,UAAAt2B,EAAAuE,GAEA2yB,EAAAl3B,GAAAuE,UAIA9H,KAAA06B,iBAAA,SAAA/C,EAAAgD,GACAj7B,OAAAC,KAAAg7B,GAAArzB,QAAA,SAAAhI,GACAU,KAAAw6B,gBAAA7C,EAAAr4B,EAAAq7B,EAAAr7B,KACSU,OAGTA,KAAA45B,OACA55B,KAAAg6B,gBAEC54B,KAAA84B,EAAAh5B,WAED/B,EAAA+6B,cAIAv3B,IAAAzC,OAAA,qHAAAsB,EAAArC,EAAAD,GACA,gBAEA,IAAA4jB,EAAAthB,EAAA,cAEAo5B,GADAp5B,EAAA,aACAA,EAAA,cACA04B,EAAA14B,EAAA,oBAAA04B,UAEAh7B,EAAAC,UAAA,IAAA+6B,EAEA,IAAAn6B,EAAA,WACA,OAAAC,MAAA,oBAAAC,eADA,GAIAo6B,GACA93B,UAAA,EACAs4B,WAAA,KACAC,SAAA,KACAC,UAAA,KACAC,SAAA,GACAC,OAAA,MACAC,gBAuFW,SAAAC,EAAA54B,GAEX,GAAAxC,KAAAmK,SAAA,CAGAmwB,EAAA93B,YAAAf,EAAAe,UAAArD,EAAAqD,UAAAxC,EAAAG,QAA6Fk7B,EAAA,QAAM74B,SAQnG,IANA,IAAA84B,KACAC,EAAA,GACAC,EAAArxB,SAAAqxB,eAAArxB,SAAAsxB,eAGAC,GAFAF,KAAAG,eAAAxxB,UAEA6B,qBAAA,UACAxM,EAAA,EAAiBA,EAAAk8B,EAAA77B,OAAkBL,IAAA,CACnC,IAAAo8B,EAAAF,EAAAl8B,GAEAgzB,EAAAoJ,EAAApJ,KAAAoJ,EAAAC,aAAA,OACA,GAAArJ,EAAA,CAIA,IADA,IAAAsJ,EAAAF,EAAAE,WACAC,EAAA,EAAAx6B,EAAAu6B,EAAAj8B,OAA0Ck8B,EAAAx6B,EAAOw6B,IAAA,CACjD,IAAAC,EAAAF,EAAAC,GACA,IAAAC,EAAAx4B,KAAA1D,QAAA,eACAw7B,EAAAW,EAAAD,EAAAx4B,KAAApB,QAAA,mBAAA45B,EAAAj0B,OAIA,IAAAm0B,EAAA1J,EAAAvvB,MAAA,gCACAi5B,IACAX,EAAAW,EAAA,KAcA,QAAA38B,KAXAg8B,IACAD,EAAAa,KAAAb,EAAAa,MAAAZ,EACAD,EAAA94B,UAAA,GAGA84B,EAAAL,SAAAK,EAAAa,KACAb,EAAAR,WAAAQ,EAAAR,YAAAQ,EAAAa,KACAb,EAAAP,SAAAO,EAAAP,UAAAO,EAAAa,KACAb,EAAAN,UAAAM,EAAAN,WAAAM,EAAAa,YACAb,EAAAa,KAEAb,OACA,IAAAA,EAAA/7B,IACAH,EAAA+J,IAAA5J,EAAA+7B,EAAA/7B,KAKA,SAAA08B,EAAA14B,GACA,OAAAA,EAAAnB,QAAA,iBAAA85B,EAAAE,GAAiD,OAAAA,EAAAC,gBAxIjDj9B,EAAA8J,IAAA,SAAA3J,GACA,IAAA+6B,EAAA70B,eAAAlG,GACA,UAAAQ,MAAA,uBAAAR,GAEA,OAAA+6B,EAAA/6B,IAGAH,EAAA+J,IAAA,SAAA5J,EAAAwI,GACA,IAAAuyB,EAAA70B,eAAAlG,GACA,UAAAQ,MAAA,uBAAAR,GAEA+6B,EAAA/6B,GAAAwI,GAGA3I,EAAAk9B,IAAA,WACA,OAAAvZ,EAAA3B,WAAAkZ,IAEAl7B,EAAAm9B,UAAA,SAAA/4B,EAAAg5B,GACA,GAAAlC,EAAAa,YAAA33B,GACA,OAAA82B,EAAAa,YAAA33B,GAEA,IAAAi5B,EAAAj5B,EAAAzB,MAAA,KAEA26B,EAAA,aADAF,KAAAC,IAAA58B,OAAA,QACA,QACAs8B,EAAAM,IAAA58B,OAAA,GACA,aAAA28B,GAAA,KAAAE,EAAA,CACA,IAAAC,EAAA,IAAA55B,OAAA,IAAAy5B,EAAA,gBAAAA,EAAA,SACAL,IAAA/5B,QAAAu6B,EAAA,MAGAR,MAAAK,IAAAC,EAAA58B,OAAA,IACAs8B,EAAAM,IAAA58B,OAAA,IACA,IAAA+3B,EAAA0C,EAAAkC,EAAA,QAQA,OAPA,MAAA5E,EACAA,EAAA0C,EAAAW,SACK,KAAAyB,IACLF,EAAAE,EAAA,IAEA9E,GAAA,KAAAA,EAAA31B,OAAA,KACA21B,GAAA,KACAA,EAAA4E,EAAAE,EAAAP,EAAAl8B,KAAAiJ,IAAA,WAGA9J,EAAAw9B,aAAA,SAAAp5B,EAAAq5B,GACA,OAAAvC,EAAAa,YAAA33B,GAAAq5B,GAGAz9B,EAAA09B,YACA19B,EAAA29B,WAAA,SAAAl7B,EAAAm7B,GACA,IAAA79B,EAAA89B,EACAp5B,MAAAqD,QAAArF,KACAo7B,EAAAp7B,EAAA,GACAA,IAAA,IAGA,IACA1C,EAAAsC,EAAAI,GACK,MAAA+Z,IACL,GAAAzc,IAAAC,EAAA09B,SAAAj7B,GACA,OAAAm7B,KAAA79B,GAOA,GALAC,EAAA09B,SAAAj7B,KACAzC,EAAA09B,SAAAj7B,OAEAzC,EAAA09B,SAAAj7B,GAAAH,KAAAs7B,KAEA59B,EAAA09B,SAAAj7B,GAAAhC,OAAA,IAGA,IAAAq9B,EAAA,WACAz7B,GAAAI,GAAA,SAAA1C,GACAC,EAAAqpB,MAAA,eAA0CjlB,KAAA3B,EAAA1C,WAC1C,IAAAo5B,EAAAn5B,EAAA09B,SAAAj7B,GACAzC,EAAA09B,SAAAj7B,GAAA,KACA02B,EAAAhxB,QAAA,SAAAy1B,GACAA,KAAA79B,QAKA,IAAAC,EAAA8J,IAAA,YACA,OAAAg0B,IACArC,EAAAlD,WAAAv4B,EAAAm9B,UAAA16B,EAAAo7B,GAAAC,KAEA9B,GAAA,GAiDAh8B,EAAAg8B,SAQAx4B,IAAAzC,OAAA,wOAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAmc,EAAA7Z,EAAA,gBACAoZ,EAAApZ,EAAA,oBACAwoB,EAAAxoB,EAAA,sBAAAwoB,gBACAkT,EAAA17B,EAAA,4BAAA8uB,cACAwB,EAAAtwB,EAAA,iBAAAswB,WACAO,EAAA7wB,EAAA,sBAAA6wB,gBACA8K,EAAA37B,EAAA,aAEA47B,EAAA,SAAAjT,GACA,IAAAxH,EAAA3iB,KACAA,KAAAmqB,SAEA,IAAAH,EAAAhqB,MACA,IAAAk9B,EAAAl9B,MACA,IAAAqyB,EAAAryB,MAEA,IAAAq9B,EAAA,SAAA1hB,KACAzR,SAAAozB,WAAApzB,SAAAozB,aACAnT,EAAAjG,aAAAha,SAAAia,gBAAAgG,EAAAd,WAAAc,EAAAd,UAAAjB,gBAEAnoB,OAAAskB,QACA4F,EAAA5F,SAGAyO,EAAA7I,EAAArC,SAAAyV,sBACAliB,EAAAN,YAAAiY,EAAA,QAAAhzB,KAAAw9B,aAAAh5B,KAAAxE,KAAA,UACAqb,EAAAN,YAAAiY,EAAA,YAAAhzB,KAAA00B,YAAAlwB,KAAAxE,KAAA,cACAqb,EAAA4C,2BACA+U,EACA7I,EAAArC,SAAA2V,YAAAtT,EAAArC,SAAA2V,WAAAtvB,MACAgc,EAAArC,SAAA4V,YAAAvT,EAAArC,SAAA4V,WAAAvvB,MACAgc,EAAAd,WAAAc,EAAAd,UAAAjB,cACAvgB,OAAA81B,UAAA,aAAA39B,KAAA,gBACAqb,EAAA+B,sBAAA+M,EAAAtB,UAAA7oB,KAAAyqB,aAAAjmB,KAAAxE,KAAA,eACAqb,EAAAsB,qBAAAwN,EAAAtB,UAAA7oB,KAAA0qB,YAAAlmB,KAAAxE,KAAA,cAEA,IAAA49B,EAAAzT,EAAArC,SAAA+J,QACAxW,EAAAN,YAAA6iB,EAAA,YAAA59B,KAAAw9B,aAAAh5B,KAAAxE,KAAA,oBACAqb,EAAAN,YAAA6iB,EAAA,QAAA59B,KAAAw9B,aAAAh5B,KAAAxE,KAAA,gBACAqb,EAAAN,YAAA6iB,EAAA,WAAA59B,KAAAw9B,aAAAh5B,KAAAxE,KAAA,mBACAqb,EAAAN,YAAA6iB,EAAA,YAAA59B,KAAAw9B,aAAAh5B,KAAAxE,KAAA,oBAEAqb,EAAAN,YAAAiY,EAAA,YAAAqK,GACAhiB,EAAAN,YAAA6iB,EAAA,YAAAP,GACAziB,EAAAnB,MAAA0Q,EAAArC,SAAA2V,aACApiB,EAAAN,YAAAoP,EAAArC,SAAA2V,WAAA7vB,QAAA,YAAAyvB,GACAhiB,EAAAN,YAAAoP,EAAArC,SAAA4V,WAAA9vB,QAAA,YAAAyvB,IAGAlT,EAAAhC,GAAA,qBAAAxM,GACA,IAAAgH,EAAAkU,QAAAlU,EAAAkb,YAAAlb,EAAAoU,aAAA,CAGA,IAAA+G,EAAA3T,EAAArC,SAAAqE,wBAAAxQ,EAAAvY,EAAAuY,EAAAyQ,GACA7E,EAAA4C,EAAA9C,QAAApC,UAAAmC,WACAU,EAAAqC,EAAArC,UAEAP,EAAA5C,WAAA4C,EAAAwW,YAAAD,EAAA9S,IAAA8S,EAAA5S,QACApD,EAAA2N,eAAA,WAEA3N,EAAA2N,eAAA,SAKA,WACAz1B,KAAAw9B,aAAA,SAAAj6B,EAAAoY,GACA3b,KAAAmqB,OAAA3B,MAAAjlB,EAAA,IAAAuuB,EAAAnW,EAAA3b,KAAAmqB,UAGAnqB,KAAA00B,YAAA,SAAAnxB,EAAAoY,GACA,IAAA2c,EAAAt4B,KAAAmqB,OAAAiO,gBAAAp4B,KAAAmqB,OAAAiO,eAAA4F,UACA1F,KAAA14B,QAGAI,KAAAmqB,OAAA3B,MAAAjlB,EAAA,IAAAuuB,EAAAnW,EAAA3b,KAAAmqB,UAGAnqB,KAAAyqB,aAAA,SAAAlnB,EAAAoY,GACA,IAAA6U,EAAA,IAAAsB,EAAAnW,EAAA3b,KAAAmqB,QACAqG,EAAA1B,MAAA,EAAA9uB,KAAAi+B,aACAzN,EAAAtT,OAAAvB,EAAAuB,OACAsT,EAAArT,OAAAxB,EAAAwB,OAEAnd,KAAAmqB,OAAA3B,MAAAjlB,EAAAitB,IAGAxwB,KAAA0qB,YAAA,SAAAnnB,EAAAoY,GACA,IAAA6U,EAAA,IAAAsB,EAAAnW,EAAA3b,KAAAmqB,QACAqG,EAAA1B,MAAA,EACA0B,EAAAtT,OAAAvB,EAAAuB,OACAsT,EAAArT,OAAAxB,EAAAwB,OACAnd,KAAAmqB,OAAA3B,MAAAjlB,EAAAitB,IAGAxwB,KAAAisB,SAAA,SAAA4K,GACA72B,KAAA62B,SAGA72B,KAAA+rB,aAAA,SAAAX,EAAA8S,GACAl+B,KAAAoD,EAAAgoB,EAAAhoB,EACApD,KAAAosB,EAAAhB,EAAAgB,EAEApsB,KAAAoxB,gBAAA,EACA,IAAAtJ,EAAA9nB,KAAAmqB,OAAArC,SACAA,EAAAC,wBACAD,EAAAC,sBAAA,MAEA,IAAArgB,EAAA1H,KACA00B,EAAA,SAAA/Y,GACA,GAAAA,EAAA,CACA,GAAAf,EAAAP,WAAAsB,EAAAwiB,OAAAz2B,EAAA02B,aACA,OAAA12B,EAAA02B,eAEA12B,EAAAtE,EAAAuY,EAAAqB,QACAtV,EAAA0kB,EAAAzQ,EAAAsB,QACAihB,KAAAviB,GACAjU,EAAA8oB,WAAA,IAAAsB,EAAAnW,EAAAjU,EAAAyiB,QACAziB,EAAA22B,aAAA,IAGAC,EAAA,SAAA3iB,GACA6Y,cAAA/B,GACA8L,IACA72B,IAAAmvB,MAAA,QAAAnvB,IAAAmvB,MAAA,OAAAlb,GACAjU,EAAAmvB,MAAA,GACA,MAAA/O,EAAAC,wBACAD,EAAAC,uBAAA,EACAD,EAAAE,yBAEAtgB,EAAA0pB,gBAAA,EACA1pB,EAAA82B,oBAAA92B,EAAA02B,aAAA,KACAziB,GAAAjU,EAAA81B,aAAA,UAAA7hB,IAGA4iB,EAAA,WACA72B,IAAAmvB,QAAAnvB,IAAAmvB,SACAnvB,EAAA22B,aAAA,GAGA,GAAAzjB,EAAAhB,SAAA,YAAAwR,EAAA3C,SAAAxN,KACA,OAAA6D,WAAA,WAA0Cwf,EAAAlT,KAG1C1jB,EAAA82B,oBAAA9J,EACAhtB,EAAA02B,aAAA/iB,EAAAkB,QAAAvc,KAAAmqB,OAAAtB,UAAA6L,EAAA4J,GACA,IAAA7L,EAAAgC,YAAA8J,EAAA,KAEAv+B,KAAAo+B,aAAA,KACAp+B,KAAAy+B,kBAAA,WACA,IAAAzP,EAAA,SAAArT,GACAA,KAAA8M,UAAA,eAAA9M,EAAA8M,SAAAxN,OAEAjb,KAAAmqB,OAAA8O,IAAA,oBAAAjK,GACArT,KAAA8M,UACApN,EAAAK,UAAAC,EAAA8M,YACSjkB,KAAAxE,MACT8e,WAAAkQ,EAAA,IACAhvB,KAAAmqB,OAAAhC,GAAA,oBAAA6G,MAEC5tB,KAAAg8B,EAAAl8B,WAEDi8B,EAAA/C,cAAAgD,EAAAl8B,UAAA,gBACAw9B,aAAkBpE,aAAA,GAClBqE,WAAgBrE,aAAA1f,EAAA3B,MAAA,OAChB2lB,aAAkBtE,cAAA,GAClBuE,aAAkBvE,aAAA,GAClBwE,qBAA0BxE,cAAA,KAI1Bn7B,EAAAi+B,iBAGAz6B,IAAAzC,OAAA,iEAAAsB,EAAArC,EAAAD,GACA,aAyDAC,EAAA4/B,YAvDA,SAAA5U,GAEAA,EAAAhC,GAAA,iBAAAxM,GACA,IAAAlN,EAAAkN,EAAA2P,sBACAjE,EAAA8C,EAAA9C,QACA2X,EAAA3X,EAAA4X,UAAAxwB,EAAAuc,IAAAvc,EAAAyc,OAAA,GACA8T,IACArjB,EAAAwS,cACA9G,EAAA6X,WAAAF,GAEA3X,EAAA8X,WAAAH,GAEArjB,EAAAqT,UAIA7E,EAAAhC,GAAA,uBAAAxM,GAGA,kBAFAwO,EAAArC,SAAA6I,aAAAK,UAAArV,GAEA,CACA,IAAAqP,EAAArP,EAAA2P,sBAAAN,IACA3D,EAAA8C,EAAA9C,QACAA,EAAA+X,aAAA/X,EAAA+X,YAAApU,IACAb,EAAA9C,QAAAgY,kBAAArU,EAAArP,GACAwO,EAAAjG,aACAiG,EAAA5F,QACA5I,EAAAqT,UAIA7E,EAAAhC,GAAA,0BAAAxM,GAGA,kBAFAwO,EAAArC,SAAA6I,aAAAK,UAAArV,GAEA,CACA,IAAAqP,EAAArP,EAAA2P,sBAAAN,IACA3D,EAAA8C,EAAA9C,QACAjH,EAAAiH,EAAAiY,uBAAAtU,GAAA,GACAzD,EAAAnH,EAAAmH,OAAAnH,EAAAmf,WAEA,GAAAhY,EAAA,CACAyD,EAAAzD,EAAArhB,MAAA8kB,IACA,IAAAgU,EAAA3X,EAAA4X,UAAAjU,EAAA3D,EAAAmY,QAAAxU,GAAAprB,OAAA,GAEAo/B,EACA3X,EAAA6X,WAAAF,IAEA3X,EAAAoY,QAAA,MAAAlY,GACA4C,EAAArC,SAAA8E,sBAA0D5B,IAAAzD,EAAArhB,MAAA8kB,IAAAE,OAAA,KAG1DvP,EAAAqT,aASArsB,IAAAzC,OAAA,iGAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAwgC,EAAAl+B,EAAA,eACA6Z,EAAA7Z,EAAA,gBAEAm+B,EAAA,SAAAxV,GACAnqB,KAAA4/B,QAAAzV,EACAnqB,KAAA6/B,OAAkB1V,UAClBnqB,KAAA8/B,aACA9/B,KAAAoqB,kBAAAD,EAAA4V,YAGA,WACA//B,KAAAoqB,kBAAA,SAAA4V,GACAhgC,KAAAigC,sBAAAjgC,KAAAkgC,iBACAlgC,KAAAkgC,gBAAAF,EACAhgC,KAAAmgC,mBAAAH,EAAA,IAGAhgC,KAAAogC,mBAAA,SAAAJ,GACA,IAAAK,EAAArgC,KAAA8/B,UACA,GAAAO,IAAAzgC,OAAA,IAAAogC,EAAA,CAGA,KAAAK,IAAAzgC,OAAA,IAAAygC,IAAAzgC,OAAA,IAAAI,KAAAkgC,iBACAlgC,KAAAigC,sBAAAI,IAAAzgC,OAAA,IAEAI,KAAAmgC,mBAAAH,EAAA,KAGAhgC,KAAAmgC,mBAAA,SAAAH,EAAA55B,GACA,GAAA45B,EAAA,CAEA,mBAAAA,KAAAM,iBACAN,EAAAM,eAAAN,GACA,IAAAzgC,EAAAS,KAAA8/B,UAAAjgC,QAAAmgC,IACA,GAAAzgC,GACAS,KAAA8/B,UAAAj6B,OAAAtG,EAAA,QAEA0B,GAAAmF,EACApG,KAAA8/B,UAAAr+B,KAAAu+B,GAEAhgC,KAAA8/B,UAAAj6B,OAAAO,EAAA,EAAA45B,IAEA,GAAAzgC,GAAAygC,EAAAO,QACAP,EAAAO,OAAAvgC,KAAA4/B,WAGA5/B,KAAAigC,sBAAA,SAAAD,GACA,IAAAzgC,EAAAS,KAAA8/B,UAAAjgC,QAAAmgC,GACA,UAAAzgC,IAEAS,KAAA8/B,UAAAj6B,OAAAtG,EAAA,GACAygC,EAAAQ,QAAAR,EAAAQ,OAAAxgC,KAAA4/B,UACA,IAGA5/B,KAAAygC,mBAAA,WACA,OAAAzgC,KAAA8/B,UAAA9/B,KAAA8/B,UAAAlgC,OAAA,IAGAI,KAAA0gC,cAAA,WACA,IAAAtgB,EAAApgB,KAAA6/B,MACA1V,EAAA/J,EAAA+J,OACA,OAAAnqB,KAAA8/B,UAAAl4B,IAAA,SAAAy4B,GACA,OAAAA,EAAAK,eAAAL,EAAAK,cAAAvW,EAAA/J,IAAA,KACSvY,OAAA81B,SAAA17B,KAAA,MAGTjC,KAAA2gC,sBAAA,SAAAvhB,EAAA1G,EAAAD,EAAAkD,GAKA,IAJA,IAAAilB,EACAC,GAAA,EACAd,EAAA//B,KAAA4/B,QAAAG,SAEAxgC,EAAAS,KAAA8/B,UAAAlgC,OAA2CL,QAC3CqhC,EAAA5gC,KAAA8/B,UAAAvgC,GAAA+gC,eACAtgC,KAAA6/B,MAAAzgB,EAAA1G,EAAAD,EAAAkD,KAEAilB,EAAA/uB,WAGAgvB,EADA,QAAAD,EAAA/uB,SAGAkuB,EAAAl9B,KAAA+9B,EAAA/uB,QAAA7R,KAAA4/B,QAAAgB,EAAAj8B,KAAAgX,KAEAA,IAAA,GAAAyD,GACA,GAAAwhB,EAAAE,WAAA,GAAAF,EAAA/uB,QAAAivB,WAEAzlB,EAAAK,UAAAC,GAEAklB,MAYA,OARAA,IAAA,GAAAzhB,IACAwhB,GAAyB/uB,QAAA,gBACzBgvB,EAAAd,EAAAl9B,KAAA,eAAA7C,KAAA4/B,QAAAlnB,IAGAmoB,GAAA7gC,KAAA4/B,QAAA9O,SACA9wB,KAAA4/B,QAAA9O,QAAA,mBAAA8P,GAEAC,GAGA7gC,KAAAymB,aAAA,SAAA9K,EAAAyD,EAAA3G,GACA,IAAAC,EAAAgnB,EAAAlnB,gBAAAC,GACAzY,KAAA2gC,sBAAAvhB,EAAA1G,EAAAD,EAAAkD,IAGA3b,KAAA2lB,YAAA,SAAAtC,GACArjB,KAAA2gC,uBAAA,EAAAtd,MAGCjiB,KAAAu+B,EAAAz+B,WAED/B,EAAAwgC,eAGAh9B,IAAAzC,OAAA,2DAAAsB,EAAArC,EAAAD,GACA,aAEA,IAEA6hC,EAAA,EAAAC,EAAA,EACAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAEAC,IAAA,mGAGAC,IAAA,iEAGAC,EAAA,EAEAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GAEAC,GACAD,kBAAAZ,EAAAD,EAAAC,EAAAE,EAAAH,EAAAa,IACAA,wBAAAb,MAAAC,EACAE,EAAAJ,IAAAO,MAAAP,UAAAM,EAAAD,EAAAC,EAAAD,IACAP,oBAAAO,EAAAL,UACAA,EAAAJ,8BACAA,sBAAAI,UACAA,EAAAJ,8BACAA,sBAAAI,QAAAc,EACAA,UAAAb,EAAAa,oBACAA,gCACAT,EAAAL,EAAAO,QAAAP,QAAAJ,EAAAI,IAAAc,EAAAd,IACAO,IAAAT,IAAAE,EAAAJ,EAAAI,MAAAF,EAAAF,EAAAI,WAGAgB,GACAZ,sBAAAU,MAAAlB,EAAAC,EACAG,gCACAA,gBAAAI,EAAAH,EAAAQ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAR,EACAE,UAAAP,sBACAA,QAAAK,EAAAL,sBACAA,8BAAAI,GAqEA,SAAAa,EAAAC,EAAAC,EAAAC,GACA,KAAA/B,EAAA6B,GAGA,MAAAA,GAAA9B,GAAAO,GAAAJ,EAKA,IADA,IAAArX,EAAAmZ,EAAAC,EAAAC,EAAAC,EAAAJ,EAAAnjC,OAAAsG,EAAA,EACAA,EAAAi9B,GAAA,CACA,GAAAL,EAAA58B,IAAA28B,EAAA,CAEA,IADAhZ,EAAA3jB,EAAA,EACA2jB,EAAAsZ,GAAAL,EAAAjZ,IAAAgZ,GACAhZ,IAEA,IAAAmZ,EAAA98B,EAAA+8B,EAAApZ,EAAA,EAAgCmZ,EAAAC,EAASD,IAAAC,IACzCC,EAAAH,EAAAC,GACAD,EAAAC,GAAAD,EAAAE,GACAF,EAAAE,GAAAC,EAEAh9B,EAAA2jB,EAEA3jB,SAjBA68B,EAAAjiB,UAqBA,SAAAsiB,EAAAC,EAAAlN,EAAA3pB,EAAA82B,GACA,IAAAC,EAAAC,EAAAL,EAAA5jC,EAAAkkC,EAAAtN,EAAAmN,GACA,OAAAG,GACA,KAAAlC,EACA,KAAAC,EACAP,GAAA,EACA,KAAAU,EACA,KAAAD,EACA,OAAA+B,EACA,KAAAhC,EACA,OAAAR,EAAAS,EAAAD,EACA,KAAAK,EAGA,OAFAb,GAAA,GACA,EACAO,EACA,KAAAO,EACA,OAAAJ,EACA,KAAAK,EACA,OAAAsB,EAAA,GAAAA,EAAA,GAAAnN,EAAAv2B,SACA2jC,EAAA/2B,EAAA82B,EAAA,KAAA7B,GAAA8B,GAAA7B,IACA8B,EAAArN,EAAAmN,EAAA,KAAA7B,GAAA+B,GAAA9B,EACAC,GAEAV,IAAmBuC,EAAA9B,GACnB8B,GAAAD,EAAAC,EAAA7B,GACA,KAAAM,EAEA,OADAsB,EAAAD,EAAA,EAAA92B,EAAA82B,EAAA,GAAA1B,IACAH,GAAA6B,EAAA,EAAAnN,EAAAv2B,QAAAu2B,EAAAmN,EAAA,IAAA7B,EACAA,EAEAE,EACA,KAAAO,EACA,GAAAoB,EAAA,GAAA92B,EAAA82B,EAAA,IAAA7B,EACA,OAAAA,EAEA,GAAAR,EACA,OAAAU,EAIA,IAFApiC,EAAA+jC,EAAA,EACAH,EAAAhN,EAAAv2B,OACAL,EAAA4jC,GAAAhN,EAAA52B,IAAA2iC,GACA3iC,IAEA,OAAAA,EAAA4jC,GAAAhN,EAAA52B,IAAAkiC,EACAA,EAEAE,EACA,KAAAQ,EAGA,IAFAgB,EAAAhN,EAAAv2B,OACAL,EAAA+jC,EAAA,EACA/jC,EAAA4jC,GAAAhN,EAAA52B,IAAA4iC,GACA5iC,IAEA,GAAAA,EAAA4jC,EAAA,CACA,IAAAxb,EAAA0b,EAAAC,GAAAI,EAAA/b,GAAA,MAAAA,GAAA,aAAAA,EAGA,GADA4b,EAAApN,EAAA52B,GACAmkC,IAAAH,GAAA/B,GAAA+B,GAAAzB,GACA,OAAAN,EAIA,OAAA8B,EAAA,IAAAC,EAAApN,EAAAmN,EAAA,KAAA1B,EACAD,EAEAn1B,EAAA82B,EAAA,GACA,KAAA1B,EAGA,OAFAX,GAAA,EACAC,GAAA,EACAH,EACA,KAAAc,EAEA,OADAV,GAAA,EACAQ,EACA,KAAAS,EACA,KAAAC,EACA,KAAAE,EACA,KAAAC,EACA,KAAAF,EACArB,GAAA,EACA,KAAAwB,EACA,OAAAd,GAIA,SAAAgC,EAAAC,GACA,IAAAC,EAAAD,EAAAE,WAAA,GAAAb,EAAAY,GAAA,EAEA,UAAAZ,EACAY,EAAA,IAAAtC,EAAAmB,EAAAmB,GACE,GAAAZ,EACF,kBAAAlgC,KAAA6gC,GAAApC,EAAAD,EACE,GAAA0B,EACF,yDAAAlgC,KAAA6gC,GACAzB,EACA,+BAAAp/B,KAAA6gC,GACAlC,EACA,MAAAmC,EACA3B,EACA,kBAAAn/B,KAAA6gC,GACAnC,EAEAK,EACE,IAAAmB,GAAAY,GAAA,KACFlB,EAAA,IAAAkB,GACE,KAAAZ,GACFY,GAAA,MAAA/B,EAEAH,EAMAxiC,EAAAoiC,IACApiC,EAAAqiC,IACAriC,EAAAsiC,KACAtiC,EAAA4kC,KAAA,EACA5kC,EAAAuiC,GAAA,EACAviC,EAAA6kC,IAAA,EACA7kC,EAAAyiC,EAAA,EAEAziC,EAAA8kC,IAAA,IACA9kC,EAAA+kC,cAAA,SAAA7gB,EAAA8gB,EAAAC,GACA,GAAA/gB,EAAAzjB,OAAA,EACA,SAEA,IAAAyjC,EAAAhgB,EAAAvhB,MAAA,IAAAuiC,EAAA,IAAAzgC,MAAAy/B,EAAAzjC,QACA0kC,EAAA,IAAA1gC,MAAAy/B,EAAAzjC,QAAAkjC,KAEA/B,EAAAqD,EAAA9C,EA3QA,EA8CA,SAAA+B,EAAAP,EAAAK,EAAAoB,GACA,IAAAC,EAAAzD,EAAAM,EAAAD,EACAqD,EAAA,KAAAC,EAAA,KAAAC,EAAA,KAAAC,EAAA,EACAC,EAAA,KAAAC,GAAA,EAAAvlC,EAAA,KAAA+jC,EAAA,KAAA92B,KAEA,IAAA+3B,EACA,IAAAhlC,EAAA,EAAAglC,KAA6BhlC,EAAA4jC,EAAS5jC,IACtCglC,EAAAhlC,GAAAokC,EAAAN,EAAA9jC,IAQA,IALAyhC,EAAAD,EACAE,GAAA,GACA,EACAC,GAAA,EACAC,GAAA,EACAmC,EAAA,EAAaA,EAAAH,EAAUG,IAAA,CAOvB,GANAmB,EAAAG,EACAp4B,EAAA82B,GAAAoB,EAAAtB,EAAAC,EAAAkB,EAAA/3B,EAAA82B,GAEAuB,EAAA,KADAD,EAAAJ,EAAAC,GAAAC,IAEAE,GAAA,GACA9B,EAAAQ,GAAAqB,EAAAH,EAAAI,GAAA,GACAC,EAAA,EACA,OAAAA,EAAA,CACA,IAAAtlC,EAAAulC,EAAoBvlC,EAAA+jC,EAAQ/jC,IAC5BujC,EAAAvjC,GAAA,EAEAulC,GAAA,OAEAA,GAAA,EAIA,GADAN,EAAAI,GAAA,IAEA,GAAAE,IACAA,EAAAxB,QAGA,GAAAwB,GAAA,GACA,IAAAvlC,EAAAulC,EAAoBvlC,EAAA+jC,EAAQ/jC,IAC5BujC,EAAAvjC,GAAAolC,EAEAG,GAAA,EAGAP,EAAAjB,IAAA1B,IACAkB,EAAAQ,GAAA,GAEAtC,GAAA2D,EAEA,GAAAxD,EACA,IAAA5hC,EAAA,EAAYA,EAAA4jC,EAAS5jC,IACrB,GAAAglC,EAAAhlC,IAAAsiC,EAAA,CACAiB,EAAAvjC,GAAAwhC,EACA,QAAAjF,EAAAv8B,EAAA,EAAsBu8B,GAAA,GACtByI,EAAAzI,IAAAiG,EAD8BjG,IAE9BgH,EAAAhH,GAAAiF,GAuKAgE,CAAA1B,EAAAP,EAAAO,EAAAzjC,OAAAukC,GAEA,QAAA5kC,EAAA,EAAgBA,EAAA8kC,EAAAzkC,OAA8BykC,EAAA9kC,UAE9CqjC,EAAA,EAAAE,EAAAuB,GACAzB,EAAA,EAAAE,EAAAuB,GAEA,IAAA9kC,EAAA,EAAgBA,EAAA8kC,EAAAzkC,OAAA,EAAkCL,IAClD4kC,EAAA5kC,KAAAmiC,EACAoB,EAAAvjC,GAAAJ,EAAAuiC,GACGoB,EAAAvjC,KAAAiiC,IAAA2C,EAAA5kC,GAAAuiC,GAAAqC,EAAA5kC,GAAA6iC,GACH+B,EAAA5kC,KAAAoiC,GAAAwC,EAAA5kC,KAAAkjC,GACAK,EAAAvjC,GAAAJ,EAAA4kC,KACGxkC,EAAA,SAAA8jC,EAAA9jC,EAAA,kCAAAwD,KAAAsgC,EAAA9jC,MACHujC,EAAAvjC,EAAA,GAAAujC,EAAAvjC,GAAAJ,EAAA6kC,IACAzkC,KAGA8jC,IAAAzjC,OAAA,KAAAT,EAAA8kC,MACAnB,EAAAO,EAAAzjC,OAAA,GAAAT,EAAAyiC,GAEA,IAAAriC,EAAA,EAAgBA,EAAA8kC,EAAAzkC,OAA8BL,IAC9C+kC,EAAA/kC,GAAAujC,EAAAuB,EAAA9kC,IAGA,OAAS8kC,oBAAAC,eAETnlC,EAAA6lC,kBAAA,SAAA3hB,EAAA8gB,GAEA,IADA,IAAAnzB,GAAA,EACAzR,EAAA,EAAgBA,EAAA8jB,EAAAzjB,OAAiBL,IACjC4kC,EAAA5kC,GAAAokC,EAAAtgB,EAAAthB,OAAAxC,IACAyR,GAAAmzB,EAAA5kC,IAAAiiC,GAAA2C,EAAA5kC,IAAAuiC,IACA9wB,GAAA,GAEA,OAAAA,GAEA7R,EAAA8lC,wBAAA,SAAAC,EAAAC,GACA,QAAA5lC,EAAA,EAAgBA,EAAA4lC,EAAAd,kBAAAzkC,OAAqCL,IACrD,GAAA4lC,EAAAd,kBAAA9kC,IAAA2lC,EACA,OAAA3lC,EAEA,YAKAoD,IAAAzC,OAAA,gHAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAkmC,EAAA5jC,EAAA,kBACAshB,EAAAthB,EAAA,cACAoZ,EAAApZ,EAAA,mBACA6jC,EAAA,4CACAC,EAAA,SAAAje,GACArnB,KAAAqnB,UACArnB,KAAAulC,WACAvlC,KAAAwlC,WAAA,KACAxlC,KAAAolC,WACAplC,KAAAylC,cACAzlC,KAAA0lC,IAAA,IACA1lC,KAAA2lC,gBAAA,EACA3lC,KAAA4lC,UAAA,EACA5lC,KAAA6lC,KAAA,GACA7lC,KAAA8lC,WAAA,EACA9lC,KAAA+lC,WAAA,EACA/lC,KAAAgmC,IAAA,IACAhmC,KAAAimC,UAAA,IAGA,WACAjmC,KAAAkmC,UAAA,SAAA1U,EAAA2U,EAAAC,GACA,QAAApmC,KAAAimC,WAEAzU,IAAAxxB,KAAAwlC,aACAxlC,KAAAwlC,WAAAhU,EACAxxB,KAAAqmC,cAAAF,EAAAC,GACApmC,KAAAsmC,iBAEAtmC,KAAAulC,QAAAjB,aAGAtkC,KAAAumC,SAAA,SAAAC,GACAxmC,KAAAimC,SAOAjmC,KAAAwlC,WAAA,KANA,UAAAgB,EAAA3B,QAAAQ,EAAAtiC,KAAAyjC,EAAAC,MAAAxkC,KAAA,SACAjC,KAAAimC,UAAA,EACAjmC,KAAAwlC,WAAA,OAQAxlC,KAAA0mC,eAAA,WACA,IAAAP,EAAA,EACAQ,EAAA3mC,KAAAqnB,QAAAuf,gBACA,GAAAD,EAAA/mC,OAAA,CACA,IAAAuE,EAAAnE,KAAAqnB,QAAAwf,kBAAAF,EAAA3mC,KAAAwlC,YACArhC,GAAA,IACAgiC,EAAAnmC,KAAAqnB,QAAAyf,aAAA3iC,IAGA,OAAAgiC,GAGAnmC,KAAA+mC,cAAA,WACA,IAAAX,EAAA,EACAO,EAAA3mC,KAAAqnB,QAAAuf,gBACA,GAAAD,EAAA/mC,OAEA,IADA,IAAAonC,EAAAC,EAAAjnC,KAAAqnB,QAAAwf,kBAAAF,EAAA3mC,KAAAwlC,YACAxlC,KAAAwlC,WAAAY,EAAA,IACAY,EAAAhnC,KAAAqnB,QAAAwf,kBAAAF,EAAA3mC,KAAAwlC,WAAAY,EAAA,MACAa,GAGAA,EAAAD,EACAZ,IAIA,OAAAA,GAGApmC,KAAAqmC,cAAA,SAAAF,EAAAC,GAOA,QANAnlC,IAAAklC,IACAA,EAAAnmC,KAAA0mC,kBAEA1mC,KAAA8lC,WAAA,EACA9lC,KAAA+lC,UAAAI,IAAAnmC,KAAAqnB,QAAAkK,YAAA,EACAvxB,KAAA6lC,KAAA7lC,KAAAqnB,QAAAmY,QAAA2G,GACAnmC,KAAAqnB,QAAA6f,aAAA,CACA,IAAAC,EAAAnnC,KAAAqnB,QAAA+f,UAAAjB,GACAgB,SACAlmC,IAAAmlC,IACAA,EAAApmC,KAAA+mC,iBAEAX,EAAA,GAAAe,EAAAvnC,QACAI,KAAA8lC,WAAAqB,EAAAE,OACArnC,KAAA6lC,KAAAO,EAAAe,EAAAvnC,OACAI,KAAA6lC,KAAAngB,UAAAyhB,EAAAf,EAAA,GAAAe,IAAAvnC,OAAA,IACAI,KAAA6lC,KAAAngB,UAAAyhB,IAAAvnC,OAAA,KAEAI,KAAA6lC,KAAA7lC,KAAA6lC,KAAAngB,UAAA,EAAAyhB,EAAAf,KAIA,IAAAkB,EAAAjgB,EAAArnB,KAAAqnB,QAAA3V,EAAA,EACA1R,KAAA6lC,KAAA7lC,KAAA6lC,KAAA1jC,QAAA,8CAAAyhC,EAAArkC,GACA,aAAAqkC,GAAAvc,EAAAkgB,YAAA3D,EAAAE,WAAA,KACAwD,EAAA,OAAA1D,EAAAvc,EAAAmgB,iBAAAjoC,EAAAmS,GAAA,EACAA,GAAA41B,EAAA,EACAxkB,EAAA/B,aAAAqkB,EAAAnB,IAAAqD,IAEA1D,KAIA5jC,KAAAsmC,cAAA,WACA,IAAAnC,KAAAsD,EAAAznC,KAAA+lC,UAAA/lC,KAAAgmC,IAAAhmC,KAAA0lC,IACAG,EAAA7lC,KAAA6lC,MAAA7lC,KAAA2lC,eAAA8B,EAAArC,EAAAnB,KACAmB,EAAAJ,kBAAAa,EAAA1B,GACAnkC,KAAAulC,QAAAH,EAAAlB,cAAA2B,EAAA1B,EAAAnkC,KAAA4lC,UAEA5lC,KAAAulC,YAGAvlC,KAAA0nC,YAAA,WACA1nC,KAAAwlC,WAAA,MAEAxlC,KAAA2nC,sBAAA,SAAAC,GACA,GAAA5nC,KAAAimC,UAEAjmC,KAAAyzB,iBAAAmU,EAAAC,eAAAz5B,MAAA,CAGA,IAAAqlB,EAAAzzB,KAAAyzB,eAAAmU,EAAAC,eAAAz5B,MACA05B,EAAAF,EAAAG,kBAAA,KAEA/nC,KAAAylC,WAAAL,EAAA7D,GAAAvhC,KAAAylC,WAAAL,EAAA3D,IAAAzhC,KAAAylC,WAAAL,EAAArB,MAAAtQ,EACAzzB,KAAAylC,WAAAL,EAAA5D,GAAAxhC,KAAAylC,WAAAL,EAAA1D,IAAAoG,EACA9nC,KAAAylC,WAAAL,EAAApB,KAAAppB,EAAAN,SAAAwtB,EAAA,IAAAA,EACA9nC,KAAAylC,WAAAL,EAAAxD,GAAA,EAEA5hC,KAAAwlC,WAAA,OAGAxlC,KAAAgoC,kBAAA,WACA,OAAAhoC,KAAA2lC,gBAGA3lC,KAAAioC,kBAAA,SAAAtC,GACA3lC,KAAA2lC,iBACA3lC,KAAAwlC,WAAA,MAGAxlC,KAAAkoC,WAAA,SAAAC,GACAnoC,KAAA0lC,IAAAyC,GAGAnoC,KAAAooC,WAAA,SAAAxC,GACA5lC,KAAA4lC,YAEA5lC,KAAAqoC,WAAA,SAAAC,GACAA,GAAAtoC,KAAA8lC,WACA,IAAAyC,EAAAnD,EAAAH,wBAAAqD,EAAA,EAAAA,EAAA,IAAAtoC,KAAAulC,SACAzC,EAAA9iC,KAAAulC,QAAAjB,WAAA51B,EAAA,EAEA,IAAA45B,GAAAxF,EAAAyF,GAAA,MACAA,IAEA,QAAAhpC,EAAA,EAAuBA,EAAAgpC,EAAehpC,IACtCmP,GAAA1O,KAAAylC,WAAA3C,EAAAvjC,IASA,OANA,IAAA+oC,GAAAxF,EAAAyF,GAAA,OACA75B,GAAA1O,KAAAylC,WAAA3C,EAAAyF,KAEAvoC,KAAA8lC,aACAp3B,GAAA1O,KAAA8lC,WAAA9lC,KAAAylC,WAAAL,EAAA7D,IAEA7yB,GAEA1O,KAAAwoC,cAAA,SAAAC,EAAAC,GAKA,IAJA,IAAAC,EAIAzD,EAJAt9B,EAAA5H,KAAAulC,QAAAzC,EAAAl7B,EAAA08B,WAAAriB,EAAAjiB,KAAA8lC,WAAA9lC,KAAAylC,WAAAL,EAAA7D,GAAAqH,KACAC,EAAAviC,KAAAM,IAAA6hC,EAAAC,GAAA1oC,KAAA8lC,WAAAgD,EAAAxiC,KAAAC,IAAAkiC,EAAAC,GAAA1oC,KAAA8lC,WACAiD,GAAA,EAAAC,GAAA,EAAAnkB,EAAA,EAEAokB,EAAA,EAAoCA,EAAAnG,EAAAljC,OAAwBqpC,IAC5D/D,EAAAt9B,EAAAy8B,kBAAA4E,GACAN,EAAA7F,EAAAmG,IACAF,EAAA7D,GAAA2D,GAAA3D,EAAA4D,KACAE,EACAnkB,EAAA5C,GACa8mB,GAAAC,GACbJ,EAAAnnC,MAAiCiN,KAAAmW,EAAAzW,MAAA6T,EAAA4C,IAEjC5C,GAAAjiB,KAAAylC,WAAAkD,GACAK,EAAAD,EAOA,OAJAA,GAAAE,IAAAnG,EAAAljC,QACAgpC,EAAAnnC,MAA6BiN,KAAAmW,EAAAzW,MAAA6T,EAAA4C,IAG7B+jB,GAEA5oC,KAAAkpC,YAAA,SAAAC,GACA,IAAAC,EAAA,EACAnnB,GADAknB,EAAA7iC,KAAAC,IAAA4iC,EAAA,GACA,GAAAZ,EAAA,EAAAzF,EAAA9iC,KAAAulC,QAAAjB,WACA+E,EAAArpC,KAAAylC,WAAA3C,EAAAyF,IAMA,IAJAvoC,KAAA8lC,aACAqD,GAAAnpC,KAAA8lC,WAAA9lC,KAAAylC,WAAAL,EAAA7D,IAGA4H,EAAAlnB,EAAAonB,EAAA,IAEA,GADApnB,GAAAonB,EACAd,IAAAzF,EAAAljC,OAAA,GACAypC,EAAA,EACA,MAEAA,EAAArpC,KAAAylC,WAAA3C,IAAAyF,IAqBA,OAlBAA,EAAA,GAAAzF,EAAAyF,EAAA,SAAAzF,EAAAyF,GAAA,MACAY,EAAAlnB,GACAsmB,IACAa,EAAAppC,KAAAulC,QAAAlB,kBAAAkE,IAESA,EAAA,GAAAzF,EAAAyF,EAAA,SAAAzF,EAAAyF,GAAA,KACTa,EAAA,GAAAD,EAAAlnB,EAAAjiB,KAAAulC,QAAAlB,kBAAAkE,GACAvoC,KAAAulC,QAAAlB,kBAAAkE,EAAA,IAESvoC,KAAA4lC,UAAA2C,IAAAzF,EAAAljC,OAAA,OAAAypC,GAAAvG,EAAAyF,EAAA,UACTvoC,KAAA4lC,UAAA,IAAA2C,GAAAzF,EAAAyF,GAAA,KACAa,EAAA,EAAAppC,KAAAulC,QAAAlB,kBAAAkE,IAEAA,EAAA,GAAAzF,EAAAyF,EAAA,aAAAc,GACAd,IACAa,EAAAppC,KAAAulC,QAAAlB,kBAAAkE,IAGAa,EAAAppC,KAAA8lC,cAGC1kC,KAAAkkC,EAAApkC,WAED/B,EAAAmmC,gBAGA3iC,IAAAzC,OAAA,oDAAAsB,EAAArC,EAAAD,GACA,aACA,IAGAoqC,EAAA,SAAAC,EAAAC,EAAAC,EAAAC,GACA1pC,KAAAkG,OACA8kB,IAAAue,EACAre,OAAAse,GAGAxpC,KAAA6pB,KACAmB,IAAAye,EACAve,OAAAwe,KAIA,WACA1pC,KAAA2pC,QAAA,SAAApiB,GACA,OAAAvnB,KAAAkG,MAAA8kB,MAAAzD,EAAArhB,MAAA8kB,KACAhrB,KAAA6pB,IAAAmB,MAAAzD,EAAAsC,IAAAmB,KACAhrB,KAAAkG,MAAAglB,SAAA3D,EAAArhB,MAAAglB,QACAlrB,KAAA6pB,IAAAqB,SAAA3D,EAAAsC,IAAAqB,QAEAlrB,KAAAmB,SAAA,WACA,iBAAAnB,KAAAkG,MAAA8kB,IAAA,IAAAhrB,KAAAkG,MAAAglB,OACA,SAAAlrB,KAAA6pB,IAAAmB,IAAA,IAAAhrB,KAAA6pB,IAAAqB,OAAA,KAGAlrB,KAAAiuB,SAAA,SAAAjD,EAAAE,GACA,UAAAlrB,KAAA4pC,QAAA5e,EAAAE,IAEAlrB,KAAA6pC,aAAA,SAAAtiB,GACA,IAAA0D,EACApB,EAAAtC,EAAAsC,IACA3jB,EAAAqhB,EAAArhB,MAGA,WADA+kB,EAAAjrB,KAAA4pC,QAAA/f,EAAAmB,IAAAnB,EAAAqB,SAGA,IADAD,EAAAjrB,KAAA4pC,QAAA1jC,EAAA8kB,IAAA9kB,EAAAglB,SAEA,EACa,GAAAD,EACb,EAEA,GAES,GAAAA,GACT,GAGA,IADAA,EAAAjrB,KAAA4pC,QAAA1jC,EAAA8kB,IAAA9kB,EAAAglB,UAEA,EACa,GAAAD,EACb,GAEA,GAIAjrB,KAAAysB,aAAA,SAAAqd,GACA,OAAA9pC,KAAA4pC,QAAAE,EAAA9e,IAAA8e,EAAA5e,SAEAlrB,KAAA+pC,cAAA,SAAAxiB,GACA,UAAAvnB,KAAAysB,aAAAlF,EAAArhB,QAAA,GAAAlG,KAAAysB,aAAAlF,EAAAsC,MAEA7pB,KAAAgqC,WAAA,SAAAziB,GACA,IAAA0D,EAAAjrB,KAAA6pC,aAAAtiB,GACA,UAAA0D,GAAA,GAAAA,GAAA,GAAAA,GAEAjrB,KAAAiqC,MAAA,SAAAjf,EAAAE,GACA,OAAAlrB,KAAA6pB,IAAAmB,QAAAhrB,KAAA6pB,IAAAqB,WAEAlrB,KAAAkqC,QAAA,SAAAlf,EAAAE,GACA,OAAAlrB,KAAAkG,MAAA8kB,QAAAhrB,KAAAkG,MAAAglB,WAEAlrB,KAAAmqC,SAAA,SAAAnf,EAAAE,GACA,iBAAAF,GACAhrB,KAAAkG,MAAAglB,OAAAF,EAAAE,OACAlrB,KAAAkG,MAAA8kB,YAEAhrB,KAAAkG,MAAA8kB,MACAhrB,KAAAkG,MAAAglB,WAGAlrB,KAAAoqC,OAAA,SAAApf,EAAAE,GACA,iBAAAF,GACAhrB,KAAA6pB,IAAAqB,OAAAF,EAAAE,OACAlrB,KAAA6pB,IAAAmB,YAEAhrB,KAAA6pB,IAAAmB,MACAhrB,KAAA6pB,IAAAqB,WAGAlrB,KAAAqqC,OAAA,SAAArf,EAAAE,GACA,UAAAlrB,KAAA4pC,QAAA5e,EAAAE,MACAlrB,KAAAiqC,MAAAjf,EAAAE,KAAAlrB,KAAAkqC,QAAAlf,EAAAE,KAQAlrB,KAAA+9B,YAAA,SAAA/S,EAAAE,GACA,UAAAlrB,KAAA4pC,QAAA5e,EAAAE,KACAlrB,KAAAiqC,MAAAjf,EAAAE,IAQAlrB,KAAAsqC,UAAA,SAAAtf,EAAAE,GACA,UAAAlrB,KAAA4pC,QAAA5e,EAAAE,KACAlrB,KAAAkqC,QAAAlf,EAAAE,IAQAlrB,KAAA4pC,QAAA,SAAA5e,EAAAE,GACA,OAAAlrB,KAAAguB,eACAhD,IAAAhrB,KAAAkG,MAAA8kB,IAKAA,EAAAhrB,KAAAkG,MAAA8kB,KACA,EAEAA,EAAAhrB,KAAA6pB,IAAAmB,IACA,EAEAhrB,KAAAkG,MAAA8kB,QACAE,GAAAlrB,KAAAkG,MAAAglB,OAAA,KAEAlrB,KAAA6pB,IAAAmB,QACAE,GAAAlrB,KAAA6pB,IAAAqB,OAAA,IAEA,EAhBAA,EAAAlrB,KAAAkG,MAAAglB,QAAA,EAAAA,EAAAlrB,KAAA6pB,IAAAqB,OAAA,KAkBAlrB,KAAAuqC,aAAA,SAAAvf,EAAAE,GACA,OAAAlrB,KAAAkG,MAAA8kB,QAAAhrB,KAAAkG,MAAAglB,WACA,EAEAlrB,KAAA4pC,QAAA5e,EAAAE,IAGAlrB,KAAAwqC,WAAA,SAAAxf,EAAAE,GACA,OAAAlrB,KAAA6pB,IAAAmB,QAAAhrB,KAAA6pB,IAAAqB,UACA,EAEAlrB,KAAA4pC,QAAA5e,EAAAE,IAGAlrB,KAAAyqC,cAAA,SAAAzf,EAAAE,GACA,OAAAlrB,KAAA6pB,IAAAmB,QAAAhrB,KAAA6pB,IAAAqB,UACA,EACSlrB,KAAAkG,MAAA8kB,QAAAhrB,KAAAkG,MAAAglB,WACT,EAEAlrB,KAAA4pC,QAAA5e,EAAAE,IAGAlrB,KAAA0qC,SAAA,SAAAC,EAAAC,GACA,GAAA5qC,KAAA6pB,IAAAmB,IAAA4f,EACA,IAAA/gB,GAAuBmB,IAAA4f,EAAA,EAAA1f,OAAA,QACvB,GAAAlrB,KAAA6pB,IAAAmB,IAAA2f,EACA9gB,GAAuBmB,IAAA2f,EAAAzf,OAAA,GAEvB,GAAAlrB,KAAAkG,MAAA8kB,IAAA4f,EACA,IAAA1kC,GAAyB8kB,IAAA4f,EAAA,EAAA1f,OAAA,QACzB,GAAAlrB,KAAAkG,MAAA8kB,IAAA2f,EACAzkC,GAAyB8kB,IAAA2f,EAAAzf,OAAA,GAEzB,OAAAoe,EAAAuB,WAAA3kC,GAAAlG,KAAAkG,MAAA2jB,GAAA7pB,KAAA6pB,MAEA7pB,KAAA8qC,OAAA,SAAA9f,EAAAE,GACA,IAAAD,EAAAjrB,KAAA4pC,QAAA5e,EAAAE,GAEA,MAAAD,EACA,OAAAjrB,KACA,OAAAirB,EACA,IAAA/kB,GAAyB8kB,MAAAE,eAEzB,IAAArB,GAAuBmB,MAAAE,UAEvB,OAAAoe,EAAAuB,WAAA3kC,GAAAlG,KAAAkG,MAAA2jB,GAAA7pB,KAAA6pB,MAGA7pB,KAAA2kB,QAAA,WACA,OAAA3kB,KAAAkG,MAAA8kB,MAAAhrB,KAAA6pB,IAAAmB,KAAAhrB,KAAAkG,MAAAglB,SAAAlrB,KAAA6pB,IAAAqB,QAEAlrB,KAAAguB,YAAA,WACA,OAAAhuB,KAAAkG,MAAA8kB,MAAAhrB,KAAA6pB,IAAAmB,KAEAhrB,KAAA+qC,MAAA,WACA,OAAAzB,EAAAuB,WAAA7qC,KAAAkG,MAAAlG,KAAA6pB,MAEA7pB,KAAAgrC,aAAA,WACA,UAAAhrC,KAAA6pB,IAAAqB,OACA,IAAAoe,EAAAtpC,KAAAkG,MAAA8kB,IAAA,EAAA1kB,KAAAC,IAAAvG,KAAAkG,MAAA8kB,IAAAhrB,KAAA6pB,IAAAmB,IAAA,MAEA,IAAAse,EAAAtpC,KAAAkG,MAAA8kB,IAAA,EAAAhrB,KAAA6pB,IAAAmB,IAAA,IAEAhrB,KAAAirC,cAAA,SAAA5jB,GACA,IAAA6jB,EAAA7jB,EAAA8jB,yBAAAnrC,KAAAkG,OACAklC,EAAA/jB,EAAA8jB,yBAAAnrC,KAAA6pB,KAEA,WAAAyf,EACA4B,EAAAlgB,IAAAkgB,EAAAhgB,OACAkgB,EAAApgB,IAAAogB,EAAAlgB,SAGAlrB,KAAAqrC,OAAA,SAAArgB,EAAAE,GACAlrB,KAAAkG,MAAA8kB,OACAhrB,KAAAkG,MAAAglB,UACAlrB,KAAA6pB,IAAAmB,OACAhrB,KAAA6pB,IAAAqB,aAGC9pB,KAAAkoC,EAAApoC,WACDooC,EAAAuB,WAAA,SAAA3kC,EAAA2jB,GACA,WAAAyf,EAAApjC,EAAA8kB,IAAA9kB,EAAAglB,OAAArB,EAAAmB,IAAAnB,EAAAqB,SAEAoe,EAAAgC,cAnOA,SAAAC,EAAAC,GACA,OAAAD,EAAAvgB,IAAAwgB,EAAAxgB,KAAAugB,EAAArgB,OAAAsgB,EAAAtgB,QAoOAoe,EAAAgC,cAAA,SAAAC,EAAAC,GACA,OAAAD,EAAAvgB,IAAAwgB,EAAAxgB,KAAAugB,EAAArgB,OAAAsgB,EAAAtgB,QAIA/rB,EAAAmqC,UAGA3mC,IAAAzC,OAAA,yHAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,aACAshB,EAAAthB,EAAA,cACAy2B,EAAAz2B,EAAA,uBAAAy2B,aACAqR,EAAA9nC,EAAA,WAAA8nC,MACAmC,EAAA,SAAApkB,GACArnB,KAAAqnB,UACArnB,KAAA6L,IAAAwb,EAAAqkB,cAEA1rC,KAAAynB,iBACAznB,KAAA2rC,KAAA3rC,KAAA4rC,cAAA5rC,KAAA6L,IAAAggC,aAAA,KACA7rC,KAAAmrB,OAAAnrB,KAAA8rC,gBAAA9rC,KAAA6L,IAAAggC,aAAA,KAEA,IAAAnkC,EAAA1H,KACAA,KAAA2rC,KAAAxjB,GAAA,kBAAAxM,GACAjU,EAAA8gB,MAAA,gBACA9gB,EAAAqkC,UACArkC,EAAA8gB,MAAA,mBACA9gB,EAAAskC,4BAAArwB,EAAAid,IAAA1N,QAAAvP,EAAA7T,MAAAojB,SACAxjB,EAAAukC,eAAA,QAGAjsC,KAAA8rC,gBAAA3jB,GAAA,oBACAzgB,EAAAqkC,UACArkC,EAAA8gB,MAAA,uBAIA,WAEA1X,EAAAF,UAAA5Q,KAAAi4B,GACAj4B,KAAA2kB,QAAA,WACA,OAAA3kB,KAAA+rC,UACA/rC,KAAAmrB,OAAAH,KAAAhrB,KAAA2rC,KAAA3gB,KACAhrB,KAAAmrB,OAAAD,QAAAlrB,KAAA2rC,KAAAzgB,QAGAlrB,KAAAguB,YAAA,WACA,OAAAhuB,KAAA2kB,WAIA3kB,KAAAonB,WAAA4G,eAEAhuB,KAAAksC,UAAA,WACA,OAAAlsC,KAAA2rC,KAAAQ,eAEAnsC,KAAA2sB,mBAAA,SAAA3B,EAAAE,GACAlrB,KAAAmrB,OAAAsE,YAAAzE,EAAAE,GAEAlrB,KAAA+rC,WACA/rC,KAAA+rC,UAAA,EACA/rC,KAAAwoB,MAAA,qBAGAxoB,KAAAosC,mBAAA,WACA,OAAApsC,KAAA+rC,SACA/rC,KAAAqsC,mBAEArsC,KAAAmrB,OAAAghB,eAEAnsC,KAAAqsC,iBAAA,WACA,OAAArsC,KAAA2rC,KAAAQ,eAEAnsC,KAAAssC,eAAA,SAAAC,GACA,GAAAvsC,KAAA+rC,SACA/rC,KAAAwsC,aAAAxsC,KAAA2rC,KAAA3gB,IAAAhrB,KAAA2rC,KAAAzgB,OAAAqhB,OADA,CAKA,IAAAphB,EAAAnrB,KAAAosC,qBACAT,EAAA3rC,KAAAqsC,mBAEAI,EAAAzsC,KAAAysC,cAEAA,GAAA,IAAAthB,EAAAD,QACAlrB,KAAA2sB,mBAAAxB,EAAAH,IAAAG,EAAAD,OAAAqhB,IAEAE,GAAA,IAAAd,EAAAzgB,SACAlrB,KAAA0sC,eAAA,WACA1sC,KAAAwsC,aAAAb,EAAA3gB,IAAA2gB,EAAAzgB,OAAAqhB,OAIAvsC,KAAAysC,YAAA,WACA,IAAAthB,EAAAnrB,KAAAmrB,OACAwgB,EAAA3rC,KAAA2rC,KACA,OAAAxgB,EAAAH,IAAA2gB,EAAA3gB,KAAAG,EAAAH,KAAA2gB,EAAA3gB,KAAAG,EAAAD,OAAAygB,EAAAzgB,QAEAlrB,KAAAonB,SAAA,WACA,IAAA+D,EAAAnrB,KAAAmrB,OACAwgB,EAAA3rC,KAAA2rC,KAEA,OAAA3rC,KAAA2kB,UACA2kB,EAAAuB,WAAAc,KAEA3rC,KAAAysC,cACAnD,EAAAuB,WAAAc,EAAAxgB,GAGAme,EAAAuB,WAAA1f,EAAAwgB,IAGA3rC,KAAAynB,eAAA,WACAznB,KAAA+rC,WACA/rC,KAAA+rC,UAAA,EACA/rC,KAAAwoB,MAAA,qBAGAxoB,KAAA2mB,UAAA,WACA,IAAAikB,EAAA5qC,KAAA6L,IAAA0lB,YAAA,EACAvxB,KAAA2sB,mBAAA,KACA3sB,KAAAwsC,aAAA5B,EAAA5qC,KAAA6L,IAAA2zB,QAAAoL,GAAAhrC,SAEAI,KAAAwnB,SACAxnB,KAAA+kB,kBAAA,SAAAwC,EAAAzG,GACAA,GACA9gB,KAAA2sB,mBAAApF,EAAAsC,IAAAmB,IAAAzD,EAAAsC,IAAAqB,QACAlrB,KAAAixB,SAAA1J,EAAArhB,MAAA8kB,IAAAzD,EAAArhB,MAAAglB,UAEAlrB,KAAA2sB,mBAAApF,EAAArhB,MAAA8kB,IAAAzD,EAAArhB,MAAAglB,QACAlrB,KAAAixB,SAAA1J,EAAAsC,IAAAmB,IAAAzD,EAAAsC,IAAAqB,SAEAlrB,KAAAonB,WAAAzC,YACA3kB,KAAA+rC,UAAA,GACA/rC,KAAAisC,eAAA,MAGAjsC,KAAA0sC,eAAA,SAAAC,GACA,IAAAhB,EAAA3rC,KAAA2rC,KACA3rC,KAAA+rC,UACA/rC,KAAA2sB,mBAAAgf,EAAA3gB,IAAA2gB,EAAAzgB,QAEAyhB,EAAAvrC,KAAApB,OAEAA,KAAAixB,SAAA,SAAAjG,EAAAE,GACAlrB,KAAA0sC,eAAA,WACA1sC,KAAAwsC,aAAAxhB,EAAAE,MAGAlrB,KAAAssB,iBAAA,SAAAlmB,GACApG,KAAA0sC,eAAA,WACA1sC,KAAAszB,qBAAAltB,MAGApG,KAAA4sC,OAAA,SAAA5hB,EAAAE,GACAlrB,KAAAynB,iBACAznB,KAAAwsC,aAAAxhB,EAAAE,IAEAlrB,KAAA2rB,eAAA,SAAAvlB,GACApG,KAAAynB,iBACAznB,KAAAszB,qBAAAltB,IAEApG,KAAA6sC,SAAA,WACA7sC,KAAA0sC,eAAA1sC,KAAA8sC,eAEA9sC,KAAA+sC,WAAA,WACA/sC,KAAA0sC,eAAA1sC,KAAAgtC,iBAEAhtC,KAAAitC,YAAA,WACAjtC,KAAA0sC,eAAA1sC,KAAAktC,kBAEAltC,KAAAmtC,WAAA,WACAntC,KAAA0sC,eAAA1sC,KAAAotC,iBAEAptC,KAAAqtC,gBAAA,WACArtC,KAAA0sC,eAAA1sC,KAAAstC,sBAEAttC,KAAAutC,cAAA,WACAvtC,KAAA0sC,eAAA1sC,KAAAwtC,oBAEAxtC,KAAAytC,cAAA,WACAztC,KAAA0sC,eAAA1sC,KAAA0tC,oBAEA1tC,KAAA2tC,gBAAA,WACA3tC,KAAA0sC,eAAA1sC,KAAA4tC,sBAEA5tC,KAAA6tC,gBAAA,WACA7tC,KAAA0sC,eAAA1sC,KAAA8tC,sBAEA9tC,KAAA+tC,eAAA,WACA/tC,KAAA0sC,eAAA1sC,KAAAguC,qBAEAhuC,KAAA+tB,aAAA,SAAA/C,EAAAE,GACA,YAAAA,EAAA,CACA,IAAAH,EAAAC,GAAAhrB,KAAA2rC,KACA3gB,EAAAD,EAAAC,IACAE,EAAAH,EAAAG,OAEA,OAAAlrB,KAAAqnB,QAAA0G,aAAA/C,EAAAE,IAEAlrB,KAAAiuC,WAAA,WACAjuC,KAAA+kB,kBAAA/kB,KAAA+tB,iBAEA/tB,KAAAkuC,YAAA,WACA,IAAAnjB,EAAA/qB,KAAAksC,YACA3kB,EAAAvnB,KAAAqnB,QAAA8mB,cAAApjB,EAAAC,IAAAD,EAAAG,QACAlrB,KAAA+kB,kBAAAwC,IAGAvnB,KAAAkuB,aAAA,SAAAlD,EAAAojB,GACA,IACAC,EADAC,EAAA,iBAAAtjB,IAAAhrB,KAAA2rC,KAAA3gB,IAGAujB,EAAAvuC,KAAAqnB,QAAAmnB,YAAAF,GAOA,OANAC,GACAD,EAAAC,EAAAroC,MAAA8kB,IACAqjB,EAAAE,EAAA1kB,IAAAmB,KAEAqjB,EAAAC,GAEA,IAAAF,EACA,IAAA9E,EAAAgF,EAAA,EAAAD,EAAAruC,KAAAqnB,QAAAmY,QAAA6O,GAAAzuC,QAEA,IAAA0pC,EAAAgF,EAAA,EAAAD,EAAA,MAEAruC,KAAAyuC,WAAA,WACAzuC,KAAA+kB,kBAAA/kB,KAAAkuB,iBAEAluB,KAAA8sC,aAAA,WACA9sC,KAAA0uC,cAAA,MAEA1uC,KAAAgtC,eAAA,WACAhtC,KAAA0uC,aAAA,MAEA1uC,KAAA2uC,qBAAA,SAAA5jB,EAAA6jB,EAAAjgB,GACA,IAAAzoB,EAAA6kB,EAAAG,OACArB,EAAAkB,EAAAG,OAAA0jB,EAMA,OAJAjgB,EAAA,IACAzoB,EAAA6kB,EAAAG,OAAA0jB,EACA/kB,EAAAkB,EAAAG,QAEAlrB,KAAAqnB,QAAAwnB,UAAA9jB,IAAA/qB,KAAA6L,IAAA2zB,QAAAzU,EAAAC,KAAAhpB,MAAAkE,EAAA2jB,GAAA/nB,MAAA,KAAAlC,OAAA,GAAAgvC,GAEA5uC,KAAAotC,eAAA,WACA,IACApO,EADAjU,EAAA/qB,KAAA2rC,KAAAQ,cAGA,GAAAnN,EAAAh/B,KAAAqnB,QAAA4X,UAAAlU,EAAAC,IAAAD,EAAAG,QAAA,GACAlrB,KAAAwsC,aAAAxN,EAAA94B,MAAA8kB,IAAAgU,EAAA94B,MAAAglB,aACS,OAAAH,EAAAG,OACTH,EAAAC,IAAA,GACAhrB,KAAAwsC,aAAAzhB,EAAAC,IAAA,EAAAhrB,KAAA6L,IAAA2zB,QAAAzU,EAAAC,IAAA,GAAAprB,YAGA,CACA,IAAAgvC,EAAA5uC,KAAAqnB,QAAAynB,aACA9uC,KAAA2uC,qBAAA5jB,EAAA6jB,GAAA,KAAA5uC,KAAAqnB,QAAA0nB,4BACA/uC,KAAA0uC,aAAA,GAAAE,GAEA5uC,KAAA0uC,aAAA,QAIA1uC,KAAAktC,gBAAA,WACA,IACAlO,EADAjU,EAAA/qB,KAAA2rC,KAAAQ,cAEA,GAAAnN,EAAAh/B,KAAAqnB,QAAA4X,UAAAlU,EAAAC,IAAAD,EAAAG,OAAA,GACAlrB,KAAAwsC,aAAAxN,EAAAnV,IAAAmB,IAAAgU,EAAAnV,IAAAqB,aAEA,GAAAlrB,KAAA2rC,KAAAzgB,QAAAlrB,KAAA6L,IAAA2zB,QAAAx/B,KAAA2rC,KAAA3gB,KAAAprB,OACAI,KAAA2rC,KAAA3gB,IAAAhrB,KAAA6L,IAAA0lB,YAAA,GACAvxB,KAAAwsC,aAAAxsC,KAAA2rC,KAAA3gB,IAAA,SAGA,CACA,IAAA4jB,EAAA5uC,KAAAqnB,QAAAynB,aACA/jB,EAAA/qB,KAAA2rC,KACA3rC,KAAA2uC,qBAAA5jB,EAAA6jB,EAAA,KAAA5uC,KAAAqnB,QAAA0nB,4BACA/uC,KAAA0uC,aAAA,EAAAE,GAEA5uC,KAAA0uC,aAAA,OAIA1uC,KAAAstC,oBAAA,WACA,IAAAtiB,EAAAhrB,KAAA2rC,KAAA3gB,IACAE,EAAAlrB,KAAA2rC,KAAAzgB,OACAsG,EAAAxxB,KAAAqnB,QAAAsK,oBAAA3G,EAAAE,GACA8jB,EAAAhvC,KAAAqnB,QAAA4nB,yBAAAzd,EAAA,GAMA0d,EALAlvC,KAAAqnB,QAAA8nB,eACAnkB,EAAA,KAAAgkB,EAAAhkB,IACAgkB,EAAA9jB,QAGAloB,MAAA,QACAksC,EAAA,GAAAtvC,QAAAsrB,GAAAlrB,KAAAqnB,QAAA+nB,0BACAJ,EAAA9jB,QAAAgkB,EAAA,GAAAtvC,QACAI,KAAAszB,qBAAA0b,IAEAhvC,KAAAwtC,kBAAA,WACA,IAAA7B,EAAA3rC,KAAA2rC,KACA0D,EAAArvC,KAAAqnB,QAAAioB,iCAAA3D,EAAA3gB,IAAA2gB,EAAAzgB,QACA,GAAAlrB,KAAA2rC,KAAAzgB,QAAAmkB,EAAAnkB,OAAA,CACA,IAAA2a,EAAA7lC,KAAAqnB,QAAAmY,QAAA6P,EAAArkB,KACA,GAAAqkB,EAAAnkB,QAAA2a,EAAAjmC,OAAA,CACA,IAAA2vC,EAAA1J,EAAA2J,OAAA,QACAD,EAAA,IACAF,EAAAnkB,OAAAqkB,IAIAvvC,KAAAwsC,aAAA6C,EAAArkB,IAAAqkB,EAAAnkB,SAEAlrB,KAAA0tC,kBAAA,WACA,IAAA1iB,EAAAhrB,KAAA6L,IAAA0lB,YAAA,EACArG,EAAAlrB,KAAA6L,IAAA2zB,QAAAxU,GAAAprB,OACAI,KAAAwsC,aAAAxhB,EAAAE,IAEAlrB,KAAA4tC,oBAAA,WACA5tC,KAAAwsC,aAAA,MAEAxsC,KAAAyvC,wBAAA,WACA,IAAAzkB,EAAAhrB,KAAA2rC,KAAA3gB,IACAE,EAAAlrB,KAAA2rC,KAAAzgB,OACA2a,EAAA7lC,KAAA6L,IAAA2zB,QAAAxU,GACA0kB,EAAA7J,EAAAngB,UAAAwF,GAGAlrB,KAAAqnB,QAAAsoB,WAAAtsC,UAAA,EACArD,KAAAqnB,QAAAuoB,QAAAvsC,UAAA,EACA,IAAA27B,EAAAh/B,KAAAqnB,QAAA4X,UAAAjU,EAAAE,EAAA,GACA,GAAA8T,EACAh/B,KAAAwsC,aAAAxN,EAAAnV,IAAAmB,IAAAgU,EAAAnV,IAAAqB,YADA,CASA,GALAlrB,KAAAqnB,QAAAsoB,WAAA9sC,KAAA6sC,KACAxkB,GAAAlrB,KAAAqnB,QAAAsoB,WAAAtsC,UACArD,KAAAqnB,QAAAsoB,WAAAtsC,UAAA,EACAqsC,EAAA7J,EAAAngB,UAAAwF,IAEAA,GAAA2a,EAAAjmC,OAKA,OAJAI,KAAAwsC,aAAAxhB,EAAA6a,EAAAjmC,QACAI,KAAAktC,uBACAliB,EAAAhrB,KAAA6L,IAAA0lB,YAAA,GACAvxB,KAAA8tC,uBAGA9tC,KAAAqnB,QAAAuoB,QAAA/sC,KAAA6sC,KACAxkB,GAAAlrB,KAAAqnB,QAAAuoB,QAAAvsC,UACArD,KAAAqnB,QAAAuoB,QAAAvsC,UAAA,GAGArD,KAAAwsC,aAAAxhB,EAAAE,KAEAlrB,KAAA6vC,uBAAA,WACA,IAEA7Q,EAFAhU,EAAAhrB,KAAA2rC,KAAA3gB,IACAE,EAAAlrB,KAAA2rC,KAAAzgB,OAEA,GAAA8T,EAAAh/B,KAAAqnB,QAAA4X,UAAAjU,EAAAE,GAAA,GACAlrB,KAAAwsC,aAAAxN,EAAA94B,MAAA8kB,IAAAgU,EAAA94B,MAAAglB,YADA,CAKA,IAAA5nB,EAAAtD,KAAAqnB,QAAAyoB,gBAAA9kB,EAAAE,GAAA,GACA,MAAA5nB,IACAA,EAAAtD,KAAA6L,IAAA2zB,QAAAxU,GAAAtF,UAAA,EAAAwF,IAGA,IAAA6kB,EAAAjtB,EAAAlC,cAAAtd,GASA,GAPAtD,KAAAqnB,QAAAsoB,WAAAtsC,UAAA,EACArD,KAAAqnB,QAAAuoB,QAAAvsC,UAAA,EACArD,KAAAqnB,QAAAsoB,WAAA9sC,KAAAktC,KACA7kB,GAAAlrB,KAAAqnB,QAAAsoB,WAAAtsC,UACA0sC,IAAA/tC,MAAAhC,KAAAqnB,QAAAsoB,WAAAtsC,WACArD,KAAAqnB,QAAAsoB,WAAAtsC,UAAA,GAEA6nB,GAAA,EAKA,OAJAlrB,KAAAwsC,aAAAxhB,EAAA,GACAhrB,KAAAotC,sBACApiB,EAAA,GACAhrB,KAAAguC,sBAGAhuC,KAAAqnB,QAAAuoB,QAAA/sC,KAAAktC,KACA7kB,GAAAlrB,KAAAqnB,QAAAuoB,QAAAvsC,UACArD,KAAAqnB,QAAAuoB,QAAAvsC,UAAA,GAGArD,KAAAwsC,aAAAxhB,EAAAE,KAGAlrB,KAAAgwC,mBAAA,SAAAN,GACA,IAAA9L,EAAAz/B,EAAA,EACA8rC,EAAA,KACAL,EAAA5vC,KAAAqnB,QAAAuoB,QAGA,GADAA,EAAAvsC,UAAA,EACArD,KAAAqnB,QAAAuoB,QAAA/sC,KAAA6sC,GACAvrC,EAAAnE,KAAAqnB,QAAAuoB,QAAAvsC,cACS,CACT,MAAAugC,EAAA8L,EAAAvrC,KAAA8rC,EAAAltC,KAAA6gC,IACAz/B,IAEA,GAAAA,EAAA,EAEA,IADAyrC,EAAAvsC,UAAA,GACAugC,EAAA8L,EAAAvrC,MAAAyrC,EAAA7sC,KAAA6gC,IAGA,GAFAgM,EAAAvsC,UAAA,EACAc,IACA8rC,EAAAltC,KAAA6gC,GAAA,CACA,GAAAz/B,EAAA,GACAA,IACA,MAEA,MAAAy/B,EAAA8L,EAAAvrC,KAAA8rC,EAAAltC,KAAA6gC,IACAz/B,IACA,GAAAA,EAAA,EACA,OAQA,OAFAyrC,EAAAvsC,UAAA,EAEAc,GAGAnE,KAAAkwC,yBAAA,WACA,IAAAllB,EAAAhrB,KAAA2rC,KAAA3gB,IACAE,EAAAlrB,KAAA2rC,KAAAzgB,OACA2a,EAAA7lC,KAAA6L,IAAA2zB,QAAAxU,GACA0kB,EAAA7J,EAAAngB,UAAAwF,GAEA8T,EAAAh/B,KAAAqnB,QAAA4X,UAAAjU,EAAAE,EAAA,GACA,GAAA8T,EACA,OAAAh/B,KAAAwsC,aAAAxN,EAAAnV,IAAAmB,IAAAgU,EAAAnV,IAAAqB,QAEA,GAAAA,GAAA2a,EAAAjmC,OAAA,CACA,IAAA0B,EAAAtB,KAAA6L,IAAA0lB,YACA,GACAvG,IACA0kB,EAAA1vC,KAAA6L,IAAA2zB,QAAAxU,SACaA,EAAA1pB,GAAA,QAAAyB,KAAA2sC,IAEb,OAAA3sC,KAAA2sC,KACAA,EAAA,IACAxkB,EAAA,EAGA,IAAA/mB,EAAAnE,KAAAgwC,mBAAAN,GAEA1vC,KAAAwsC,aAAAxhB,EAAAE,EAAA/mB,IAGAnE,KAAAmwC,wBAAA,WACA,IAGAnR,EAHAhU,EAAAhrB,KAAA2rC,KAAA3gB,IACAE,EAAAlrB,KAAA2rC,KAAAzgB,OAGA,GAAA8T,EAAAh/B,KAAAqnB,QAAA4X,UAAAjU,EAAAE,GAAA,GACA,OAAAlrB,KAAAwsC,aAAAxN,EAAA94B,MAAA8kB,IAAAgU,EAAA94B,MAAAglB,QAEA,IAAA2a,EAAA7lC,KAAAqnB,QAAAmY,QAAAxU,GAAAtF,UAAA,EAAAwF,GACA,OAAAA,EAAA,CACA,GACAF,IACA6a,EAAA7lC,KAAA6L,IAAA2zB,QAAAxU,SACaA,EAAA,WAAAjoB,KAAA8iC,IAEb3a,EAAA2a,EAAAjmC,OACA,OAAAmD,KAAA8iC,KACAA,EAAA,IAGA,IAAAkK,EAAAjtB,EAAAlC,cAAAilB,GACA1hC,EAAAnE,KAAAgwC,mBAAAD,GAEA,OAAA/vC,KAAAwsC,aAAAxhB,EAAAE,EAAA/mB,IAGAnE,KAAA8tC,oBAAA,WACA9tC,KAAAqnB,QAAA+oB,iBACApwC,KAAAyvC,0BAEAzvC,KAAAkwC,4BAGAlwC,KAAAguC,mBAAA,WACAhuC,KAAAqnB,QAAA+oB,iBACApwC,KAAA6vC,yBAEA7vC,KAAAmwC,2BAEAnwC,KAAA0uC,aAAA,SAAA2B,EAAAhN,GACA,IAKAiN,EALAC,EAAAvwC,KAAAqnB,QAAA8jB,yBACAnrC,KAAA2rC,KAAA3gB,IACAhrB,KAAA2rC,KAAAzgB,QAKA,IAAAmY,IACA,IAAAgN,IACArwC,KAAAqnB,QAAAmpB,aAAAtK,UAAAqK,EAAAvlB,IAAAhrB,KAAA2rC,KAAA3gB,MACAslB,EAAAtwC,KAAAqnB,QAAAmpB,aAAAnI,WAAAkI,EAAArlB,QACAqlB,EAAArlB,OAAA5kB,KAAAmqC,MAAAH,EAAAtwC,KAAAqnB,QAAAmpB,aAAA/K,WAAA,KAEA6K,EAAAC,EAAArlB,OAAAlrB,KAAAqnB,QAAAmpB,aAAA/K,WAAA,IAIAzlC,KAAAisC,eACAsE,EAAArlB,OAAAlrB,KAAAisC,eAEAjsC,KAAAisC,eAAAsE,EAAArlB,QAGA,IAAAwlB,EAAA1wC,KAAAqnB,QAAA4nB,yBAAAsB,EAAAvlB,IAAAqlB,EAAAE,EAAArlB,OAAAolB,GAEA,IAAAD,GAAA,IAAAhN,GAAAqN,EAAA1lB,MAAAhrB,KAAA2rC,KAAA3gB,KAAA0lB,EAAAxlB,SAAAlrB,KAAA2rC,KAAAzgB,QACAlrB,KAAAqnB,QAAAspB,aAAA3wC,KAAAqnB,QAAAspB,YAAAD,EAAA1lB,OACA0lB,EAAA1lB,IAAA,GAAAqlB,EAAA,IACAK,EAAA1lB,MAGAhrB,KAAAwsC,aAAAkE,EAAA1lB,IAAA0lB,EAAAxlB,OAAAmY,EAAA,IAAAA,IAEArjC,KAAAszB,qBAAA,SAAA7kB,GACAzO,KAAAwsC,aAAA/9B,EAAAuc,IAAAvc,EAAAyc,SAEAlrB,KAAAwsC,aAAA,SAAAxhB,EAAAE,EAAA0lB,GACA,IAAA5R,EAAAh/B,KAAAqnB,QAAA4X,UAAAjU,EAAAE,EAAA,GACA8T,IACAhU,EAAAgU,EAAA94B,MAAA8kB,IACAE,EAAA8T,EAAA94B,MAAAglB,QAGAlrB,KAAAgsC,4BAAA,EACA,IAAAnG,EAAA7lC,KAAAqnB,QAAAmY,QAAAxU,GACA,kBAAAjoB,KAAA8iC,EAAA9jC,OAAAmpB,KAAA2a,EAAA9jC,OAAAmpB,EAAA,KACAlrB,KAAA2rC,KAAA3gB,QAAAhrB,KAAA2rC,KAAAzgB,UAAA,EACAA,GAAA,EAEAA,GAAA,GAEAlrB,KAAA2rC,KAAAlc,YAAAzE,EAAAE,GACAlrB,KAAAgsC,4BAAA,EAEA4E,IACA5wC,KAAAisC,eAAA,OAEAjsC,KAAA6wC,mBAAA,SAAA7lB,EAAAE,EAAA0lB,GACA,IAAAxqC,EAAApG,KAAAqnB,QAAA4nB,yBAAAjkB,EAAAE,GACAlrB,KAAAwsC,aAAApmC,EAAA4kB,IAAA5kB,EAAA8kB,OAAA0lB,IAEA5wC,KAAAwgC,OAAA,WACAxgC,KAAA2rC,KAAAnL,SACAxgC,KAAAmrB,OAAAqV,SACAxgC,KAAAqnB,QAAArnB,KAAA6L,IAAA,MAGA7L,KAAA60B,kBAAA,SAAAtN,GACAvnB,KAAA+kB,kBAAAwC,IAAAwD,QAAAxD,EAAArhB,OACAlG,KAAAisC,eAAA1kB,EAAAupB,eAAA9wC,KAAAisC,gBAGAjsC,KAAAm0B,gBAAA,SAAA5M,GACA,IAAAJ,EAAAnnB,KAAAonB,WAYA,OAXAG,GACAA,EAAArhB,MAAAglB,OAAA/D,EAAAjhB,MAAAglB,OACA3D,EAAArhB,MAAA8kB,IAAA7D,EAAAjhB,MAAA8kB,IACAzD,EAAAsC,IAAAqB,OAAA/D,EAAA0C,IAAAqB,OACA3D,EAAAsC,IAAAmB,IAAA7D,EAAA0C,IAAAmB,KAEAzD,EAAAJ,EAGAI,EAAAwD,OAAA/qB,KAAAysC,cAAAllB,EAAArhB,MAAAqhB,EAAAsC,IACAtC,EAAAupB,cAAA9wC,KAAAisC,eACA1kB,GAEAvnB,KAAA+wC,oBAAA,SAAAC,GACA,IAAA9qC,EAAAlG,KAAAksC,YACA,IACA8E,EAAAhxC,MACA,IAAA6pB,EAAA7pB,KAAAksC,YACA,OAAA5C,EAAAuB,WAAA3kC,EAAA2jB,GACS,MAAAlO,GACT,OAAA2tB,EAAAuB,WAAA3kC,KACS,QACTlG,KAAAszB,qBAAAptB,KAIAlG,KAAAixC,OAAA,WACA,GAAAjxC,KAAAkxC,WACA,IAAA9wB,EAAApgB,KAAAmxC,OAAAvpC,IAAA,SAAAuf,GACA,IAAAiqB,EAAAjqB,EAAA4jB,QAEA,OADAqG,EAAA3E,YAAAtlB,EAAA4D,QAAA5D,EAAAjhB,MACAkrC,SAGAhxB,EAAApgB,KAAAonB,YACAqlB,YAAAzsC,KAAAysC,cAEA,OAAArsB,GAGApgB,KAAAqxC,SAAA,SAAAjxB,GACA,QAAAnf,GAAAmf,EAAAla,MAAA,CACA,GAAAlG,KAAAsxC,UAAA,CACAtxC,KAAAuxC,cAAAnxB,EAAA,IACA,QAAA7gB,EAAA6gB,EAAAxgB,OAAyCL,KAAK,CAC9C,IAAA4nB,EAAAmiB,EAAAuB,WAAAzqB,EAAA7gB,GAAA2G,MAAAka,EAAA7gB,GAAAsqB,KACAzJ,EAAA7gB,GAAAktC,cACAtlB,EAAA4D,OAAA5D,EAAAjhB,OACAlG,KAAAwxC,SAAArqB,GAAA,GAEA,OAEA/G,IAAA,GAEApgB,KAAAsxC,WACAtxC,KAAAuxC,cAAAnxB,GACApgB,KAAA+kB,kBAAA3E,IAAAqsB,cAGAzsC,KAAA2pC,QAAA,SAAAvpB,GACA,IAAAA,EAAAxgB,QAAAI,KAAAkxC,aAAA9wB,EAAAxgB,QAAAI,KAAAkxC,WACA,SACA,IAAA9wB,EAAAxgB,SAAAI,KAAAmxC,OACA,OAAAnxC,KAAAonB,WAAAuiB,QAAAvpB,GAEA,QAAA7gB,EAAAS,KAAAmxC,OAAAvxC,OAAwCL,KACxC,IAAAS,KAAAmxC,OAAA5xC,GAAAoqC,QAAAvpB,EAAA7gB,IACA,SAEA,YAGC6B,KAAAqqC,EAAAvqC,WAED/B,EAAAssC,cAGA9oC,IAAAzC,OAAA,qEAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAi+B,EAAA37B,EAAA,YACAiwC,EAAA,IACAC,EAAA,SAAAC,GAKA,QAAAryC,KAJAU,KAAA4xC,OAAAD,EAEA3xC,KAAA6xC,WACA7xC,KAAA8xC,iBACA9xC,KAAA4xC,OAAA,CAQA,IAPA,IAAA/a,EAAA72B,KAAA4xC,OAAAtyC,GACAyyC,KACAC,EAAA,EACAC,EAAAjyC,KAAA8xC,cAAAxyC,IAAiD4yC,aAAA,QACjDC,EAAA,IAEAC,KACA7yC,EAAA,EAAuBA,EAAAs3B,EAAAj3B,OAAkBL,IAAA,CACzC,IAAA8yC,EAAAxb,EAAAt3B,GAKA,GAJA8yC,EAAAH,eACAD,EAAAC,aAAAG,EAAAH,cACAG,EAAAC,kBACAH,EAAA,MACA,MAAAE,EAAAxuC,MAAA,CAGAwuC,EAAAxuC,iBAAAf,SACAuvC,EAAAxuC,MAAAwuC,EAAAxuC,MAAA1C,WAAAa,MAAA,OACA,IAAAuwC,EAAAF,EAAAxuC,MACA2uC,EAAA,IAAA1vC,OAAA,OAAAyvC,EAAA,UAAA1vC,KAAA,KAAAjD,OAAA,EACAgE,MAAAqD,QAAAorC,EAAAI,OACA,GAAAJ,EAAAI,MAAA7yC,QAAA,GAAA4yC,EACAH,EAAAI,MAAAJ,EAAAI,MAAA,GACiBD,EAAA,GAAAH,EAAAI,MAAA7yC,QACjBI,KAAAg6B,YAAA,qDACAqY,OACAK,WAAAF,EAAA,IAEAH,EAAAI,MAAAJ,EAAAI,MAAA,KAEAJ,EAAAM,WAAAN,EAAAI,MACAJ,EAAAI,MAAA,KACAJ,EAAAO,QAAA5yC,KAAA6yC,cAEa,mBAAAR,EAAAI,OAAAJ,EAAAO,UAEbP,EAAAO,QADAJ,EAAA,EACAxyC,KAAA8yC,YAEAT,EAAAI,OAGAD,EAAA,IACA,OAAAzvC,KAAAsvC,EAAAxuC,OACA0uC,EAAAF,EAAAxuC,MAAA1B,QAAA,uBAAAa,EAAA+vC,GACA,YAAAllC,SAAAklC,EAAA,IAAAf,EAAA,MAGAQ,EAAA,EACAD,EAAAvyC,KAAAgzC,sBAAAX,EAAAxuC,QAEAwuC,EAAAY,YAAA,iBAAAZ,EAAAI,OACAL,EAAA3wC,KAAA4wC,IAGAJ,EAAAD,GAAAzyC,EACAyyC,GAAAQ,EAEAT,EAAAtwC,KAAA8wC,GACAF,EAAAO,UACAP,EAAAO,QAAA,OAGAb,EAAAnyC,SACAqyC,EAAA,KACAF,EAAAtwC,KAAA,MAGA2wC,EAAA9qC,QAAA,SAAA+qC,GACAA,EAAAY,WAAAjzC,KAAAkzC,qBAAAb,EAAAxuC,MAAAsuC,IACSnyC,MAETA,KAAA6xC,QAAAvyC,GAAA,IAAAwD,OAAA,IAAAivC,EAAA9vC,KAAA,eAAAkwC,MAIA,WACAnyC,KAAAmzC,kBAAA,SAAAlX,GACAwV,EAAA,EAAAxV,GAGAj8B,KAAA8yC,YAAA,SAAAxvC,GACA,IAAA8vC,EAAApzC,KAAAizC,WAAApwC,KAAAS,GAAAtB,MAAA,GACAm0B,EAAAn2B,KAAAyyC,MAAAhyC,MAAAT,KAAAozC,GACA,oBAAAjd,EACA,QAAqBlb,KAAAkb,EAAAruB,MAAAxE,IAGrB,IADA,IAAA+vC,KACA9zC,EAAA,EAAA+B,EAAA60B,EAAAv2B,OAAyCL,EAAA+B,EAAO/B,IAChD6zC,EAAA7zC,KACA8zC,IAAAzzC,SACAqb,KAAAkb,EAAA52B,GACAuI,MAAAsrC,EAAA7zC,KAGA,OAAA8zC,GAGArzC,KAAA6yC,aAAA,SAAAvvC,GACA,IAAAA,EACA,SACA,IAAA8vC,EAAApzC,KAAAizC,WAAApwC,KAAAS,GACA,IAAA8vC,EACA,aAGA,IAFA,IAAAC,KACAld,EAAAn2B,KAAA2yC,WACApzC,EAAA,EAAA+B,EAAA60B,EAAAv2B,OAAyCL,EAAA+B,EAAO/B,IAChD6zC,EAAA7zC,EAAA,KACA8zC,IAAAzzC,SACAqb,KAAAkb,EAAA52B,GACAuI,MAAAsrC,EAAA7zC,EAAA,KAGA,OAAA8zC,GAGArzC,KAAAgzC,sBAAA,SAAAzgB,GAKA,OAJAA,EAAApwB,QACA,0CACA,SAAAiB,EAAAgpB,GAA4B,OAAAA,EAAA,MAAAhpB,KAK5BpD,KAAAkzC,qBAAA,SAAA3gB,EAAA4f,GACA,OAAA5f,EAAA1yB,QAAA,QACA,IAAAyzC,EAAA,EACAC,GAAA,EACAC,KACAjhB,EAAApwB,QAAA,gDACA85B,EAAA7jB,EAAAq7B,EAAAC,EAAAC,EAAAxvC,GAmBA,OAjBAovC,EACAA,EAAA,KAAAI,EACiBA,EACjBJ,GAAA,EACiBG,GACjBJ,GAAAE,EAAAF,QACAE,EAAA3pB,IAAA1lB,EAAA,EACAqvC,EAAAF,OAAA,GAEAA,KACiBG,IACjBH,IACA,GAAAG,EAAA7zC,SACA4zC,EAAAF,QACAE,EAAAttC,MAAA/B,IAGA83B,IAGA,MAAAuX,EAAA3pB,KAAA,QAAA9mB,KAAAwvB,EAAA/M,OAAAguB,EAAA3pB,QACA0I,IAAA7M,UAAA,EAAA8tB,EAAAttC,OAAAqsB,EAAA/M,OAAAguB,EAAA3pB,MAKA,MAHA,KAAA0I,EAAAxwB,OAAA,KAAAwwB,EAAA,IAAAA,GACA,KAAAA,EAAAxwB,OAAAwwB,EAAA3yB,OAAA,KAAA2yB,GAAA,KAEA,IAAAzvB,OAAAyvB,GAAA4f,GAAA,IAAAhwC,QAAA,UAEAnC,KAAA4zC,cAAA,SAAA/N,EAAAgO,GACA,GAAAA,GAAA,iBAAAA,EAGA,UADAA,GADAP,EAAAO,EAAA7xC,MAAA,IACA,MAEAsxC,EAAA5hC,QACAmiC,EAAAP,EAAA5hC,cAGA,IAAA4hC,KAEA,IAAAQ,EAAAD,GAAA,QACAhd,EAAA72B,KAAA4xC,OAAAkC,GACAjd,IACAid,EAAA,QACAjd,EAAA72B,KAAA4xC,OAAAkC,IAEA,IAAA7B,EAAAjyC,KAAA8xC,cAAAgC,GACApX,EAAA18B,KAAA6xC,QAAAiC,GACApX,EAAAr5B,UAAA,EAQA,IANA,IAAAL,EAAAqwC,KACAhwC,EAAA,EACA0wC,EAAA,EAEAtB,GAAqBx3B,KAAA,KAAAnT,MAAA,IAErB9E,EAAA05B,EAAA75B,KAAAgjC,IAAA,CACA,IAAA5qB,EAAAg3B,EAAAC,aACAG,EAAA,KACAvqC,EAAA9E,EAAA,GACAmB,EAAAu4B,EAAAr5B,UAEA,GAAAc,EAAA2D,EAAAlI,OAAAyD,EAAA,CACA,IAAA2wC,EAAAnO,EAAAngB,UAAAriB,EAAAc,EAAA2D,EAAAlI,QACA6yC,EAAAx3B,QACAw3B,EAAA3qC,OAAAksC,GAEAvB,EAAAx3B,MACAo4B,EAAA5xC,KAAAgxC,GACAA,GAA6Bx3B,OAAAnT,MAAAksC,IAI7B,QAAAz0C,EAAA,EAA2BA,EAAAyD,EAAApD,OAAA,EAAoBL,IAC/C,QAAA0B,IAAA+B,EAAAzD,EAAA,IAMA0b,GAHAo3B,EAAAxb,EAAAob,EAAA1yC,KAEAqzC,QACAP,EAAAO,QAAA9qC,EAAAgsC,EAAAR,EAAAzN,GAEAwM,EAAAI,MAEAJ,EAAA4B,OAEAH,EADA,iBAAAzB,EAAA4B,KACA5B,EAAA4B,KAEA5B,EAAA4B,KAAAH,EAAAR,IAGAzc,EAAA72B,KAAA4xC,OAAAkC,MAEA9zC,KAAAg6B,YAAA,sBAAA8Z,GACAA,EAAA,QACAjd,EAAA72B,KAAA4xC,OAAAkC,IAEA7B,EAAAjyC,KAAA8xC,cAAAgC,GACAzwC,EAAAc,GACAu4B,EAAA18B,KAAA6xC,QAAAiC,IACAzwC,UAAAc,GAEAkuC,EAAA6B,iBACA7wC,EAAAc,GACA,MAGA,GAAA2D,EACA,oBAAAmT,EACAo3B,IAAA,IAAAA,EAAA8B,OAAA1B,EAAAx3B,UAGAw3B,EAAAx3B,MACAo4B,EAAA5xC,KAAAgxC,GACAA,GAAiCx3B,OAAAnT,UAJjC2qC,EAAA3qC,cAMiB,GAAAmT,EAAA,CACjBw3B,EAAAx3B,MACAo4B,EAAA5xC,KAAAgxC,GACAA,GAA6Bx3B,KAAA,KAAAnT,MAAA,IAC7B,IAAAvI,EAAA,EAAmCA,EAAA0b,EAAArb,OAAiBL,IACpD8zC,EAAA5xC,KAAAwZ,EAAA1b,IAIA,GAAA8D,GAAAwiC,EAAAjmC,OACA,MAIA,GAFAyD,EAAAc,EAEA4vC,IAAAtC,EAAA,CAOA,IANAsC,EAAA,EAAAlO,EAAAjmC,QACAI,KAAAg6B,YAAA,uCACA6Z,aACAhO,SAGAxiC,EAAAwiC,EAAAjmC,QACA6yC,EAAAx3B,MACAo4B,EAAA5xC,KAAAgxC,GACAA,GACA3qC,MAAA+9B,EAAAngB,UAAAriB,KAAA,KACA4X,KAAA,YAGA64B,EAAA,QACAR,KACA,OAWA,OAPAb,EAAAx3B,MACAo4B,EAAA5xC,KAAAgxC,GAEAa,EAAA1zC,OAAA,GACA0zC,EAAA,KAAAQ,GACAR,EAAAc,QAAA,OAAAN,IAGAT,SACAxc,MAAAyc,EAAA1zC,OAAA0zC,EAAAQ,IAIA9zC,KAAAg6B,YAAAmD,EAAAnD,cAEC54B,KAAAswC,EAAAxwC,WAED/B,EAAAuyC,cAGA/uC,IAAAzC,OAAA,uFAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4jB,EAAAthB,EAAA,eAEA6yC,EAAA,WAEAr0C,KAAAs0C,QACApuC,QACAusC,MAAA,aACA5uC,MAAA,OAEAquC,aAAA,YAKA,WAEAlyC,KAAAu0C,SAAA,SAAA5C,EAAA6C,GACA,GAAAA,EAKA,QAAAl1C,KAAAqyC,EAAA,CAEA,IADA,IAAA9a,EAAA8a,EAAAryC,GACAC,EAAA,EAA2BA,EAAAs3B,EAAAj3B,OAAkBL,IAAA,CAC7C,IAAA8yC,EAAAxb,EAAAt3B,IACA8yC,EAAA4B,MAAA5B,EAAAO,WACA,iBAAAP,EAAA4B,MACA,IAAA5B,EAAA4B,KAAAp0C,QAAA20C,KACAnC,EAAA4B,KAAAO,EAAAnC,EAAA4B,MAEA5B,EAAAoC,WAAA,IAAApC,EAAAoC,UAAA50C,QAAA20C,KACAnC,EAAAoC,UAAAD,EAAAnC,EAAAoC,YAGAz0C,KAAAs0C,OAAAE,EAAAl1C,GAAAu3B,OAjBA,QAAAv3B,KAAAqyC,EACA3xC,KAAAs0C,OAAAh1C,GAAAqyC,EAAAryC,IAoBAU,KAAA00C,SAAA,WACA,OAAA10C,KAAAs0C,QAGAt0C,KAAA20C,WAAA,SAAAC,EAAAJ,EAAAK,EAAAjD,EAAAkD,GACA,IAAAH,EAAA,mBAAAC,GACA,IAAAA,GAAAF,WACAE,EACA,GAAAhD,EACA,QAAAryC,EAAA,EAA2BA,EAAAqyC,EAAAhyC,OAAmBL,IAC9CqyC,EAAAryC,GAAAi1C,EAAA5C,EAAAryC,QAGA,QAAAD,KADAsyC,KACA+C,EACA/C,EAAAnwC,KAAA+yC,EAAAl1C,GAKA,GAFAU,KAAAu0C,SAAAI,EAAAH,GAEAK,EACA,KAAAN,EAAA3wC,MAAA1C,UAAA4zC,EAAA,kBACA,IAAAv1C,EAAA,EAA2BA,EAAAqyC,EAAAhyC,OAAmBL,IAC9Cg1C,EAAA9zC,MAAAT,KAAAs0C,OAAA1C,EAAAryC,IAAAujB,EAAAxB,SAAAuzB,IAGA70C,KAAA+0C,UACA/0C,KAAA+0C,YACA/0C,KAAA+0C,QAAAtzC,KAAA+yC,IAGAx0C,KAAAg1C,UAAA,WACA,OAAAh1C,KAAA+0C,SAGA,IAAAE,EAAA,SAAAnB,EAAAR,GAGA,OAFA,SAAAQ,GAAAR,EAAA1zC,SACA0zC,EAAAc,QAAAp0C,KAAAy0C,UAAAX,GACA9zC,KAAAy0C,WAEAS,EAAA,SAAApB,EAAAR,GAEA,OADAA,EAAA5hC,QACA4hC,EAAA5hC,SAAA,SAGA1R,KAAAm1C,eAAA,WACA,IAAA9yC,EAAA,EACAsvC,EAAA3xC,KAAAs0C,OAkFA50C,OAAAC,KAAAgyC,GAAArqC,QAjFA,SAAA8tC,EAAA91C,GACA,IAAAu3B,EAAA8a,EAAAryC,GACAu3B,EAAAwe,WAAA,EACA,QAAA91C,EAAA,EAA2BA,EAAAs3B,EAAAj3B,OAAkBL,IAAA,CAC7C,IAAA8yC,EAAAxb,EAAAt3B,GACA+1C,EAAA,KACA1xC,MAAAqD,QAAAorC,KACAiD,EAAAjD,EACAA,OAEAA,EAAAxuC,OAAAwuC,EAAAnsC,QACAmsC,EAAAxuC,MAAAwuC,EAAAnsC,MACAmsC,EAAA4B,OACA5B,EAAA4B,SACA5B,EAAA4B,KAAAxyC,MACAywC,aAAAG,EAAAI,QAEAA,MAAAJ,EAAAI,MAAA,OACA5uC,MAAAwuC,EAAAxoB,KAAAwoB,EAAAnsC,MACA+tC,KAAA,QAEA5B,EAAAI,MAAAJ,EAAAI,MAAA,SACAJ,EAAA5wC,MAAA,GAEA,IAAAwyC,EAAA5B,EAAA4B,MAAA5B,EAAA5wC,KACA,GAAAwyC,GAAArwC,MAAAqD,QAAAgtC,GAAA,CACA,IAAAsB,EAAAlD,EAAAkD,UACAA,IAEA,iBADAA,EAAAlD,EAAAI,SAEA8C,IAAA,QACA5D,EAAA4D,KACAA,GAAAlzC,MAEAsvC,EAAA4D,GAAAtB,EACA5B,EAAA4B,KAAAsB,EACAH,EAAAG,OACiB,OAAAtB,IACjB5B,EAAA4B,KAAAiB,GASA,GANA7C,EAAA5wC,OACA4wC,EAAAoC,UAAApC,EAAA4B,MAAA5B,EAAA5wC,KACA4wC,EAAA4B,KAAAgB,SACA5C,EAAA5wC,MAGA4wC,EAAAV,MACA,QAAAxqB,KAAAkrB,EAAAV,MACAA,EAAAxqB,GACAwqB,EAAAxqB,GAAA1lB,MACAkwC,EAAAxqB,GAAA1lB,KAAAhB,MAAAkxC,EAAAxqB,GAAAkrB,EAAAV,MAAAxqB,IAEAwqB,EAAAxqB,GAAAkrB,EAAAV,MAAAxqB,GAIA,IAAAquB,EAAA,iBAAAnD,MAAAzlC,QAQA,GAPA4oC,IAEAF,EADA1xC,MAAAqD,QAAAuuC,GACAA,EAAA5tC,IAAA,SAAAxE,GAAgE,OAAAuuC,EAAAvuC,KAEhEuuC,EAAA6D,IAGAF,EAAA,CACA,IAAA3wC,GAAApF,EAAA,GAAAuF,OAAAwwC,GACAjD,EAAAoD,WACA9wC,IAAAkD,OAAA,SAAAzE,GAAwD,OAAAA,EAAA6wC,QACxDpd,EAAAhxB,OAAApF,MAAAo2B,EAAAlyB,GACApF,IAGA8yC,EAAAqD,aACArD,EAAAI,MAAAzyC,KAAA21C,oBACAtD,EAAAqD,WAAArD,EAAAH,cAAA,OAAAG,EAAAC,wBAEAD,EAAAH,gBAIAlyC,OAGAA,KAAA21C,oBAAA,SAAA/tC,EAAAsqC,EAAApuC,EAAA8xC,GACA,IAAAC,EAAAn2C,OAAA0J,OAAA,MAcA,OAbA1J,OAAAC,KAAAiI,GAAAN,QAAA,SAAA+E,GACA,IAAAtG,EAAA6B,EAAAyE,GACAvI,IACAiC,IAAAkS,eAEA,IADA,IAAA69B,EAAA/vC,EAAAjE,MAAA8zC,GAAA,KACAr2C,EAAAu2C,EAAAl2C,OAAqCL,KACrCs2C,EAAAC,EAAAv2C,IAAA8M,IAEA3M,OAAA6I,eAAAstC,KACAA,EAAArtC,UAAA,MAEAxI,KAAA+1C,aAAAr2C,OAAAC,KAAAk2C,GACAjuC,EAAA,KACA9D,EACA,SAAAgE,GAA+B,OAAA+tC,EAAA/tC,EAAAmQ,gBAAAi6B,GAC/B,SAAApqC,GAA+B,OAAA+tC,EAAA/tC,IAAAoqC,IAG/BlyC,KAAAg2C,YAAA,WACA,OAAAh2C,KAAAi2C,aAGC70C,KAAAizC,EAAAnzC,WAED/B,EAAAk1C,uBAGA1xC,IAAAzC,OAAA,6DAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAg3C,EAAA,WACAl2C,KAAAm2C,iBAGA,WAEAn2C,KAAA0G,IAAA,SAAAnD,EAAAshC,EAAA9jC,GACA,YAAAE,GACA,KAAAjB,KAAAm2C,YACAn2C,KAAAm2C,eACA,KAAAn2C,KAAAm2C,YAAA5yC,GACAvD,KAAAm2C,YAAA5yC,MAEAvD,KAAAm2C,YAAA5yC,GAAAshC,GAAA9jC,GAGAf,KAAAo2C,cAAA,SAAAC,GACA,QAAA/2C,KAAA+2C,EACA,QAAAxR,KAAAwR,EAAA/2C,GACAU,KAAA0G,IAAApH,EAAAulC,EAAAwR,EAAA/2C,GAAAulC,KAKA7kC,KAAA2G,OAAA,SAAApD,GACAvD,KAAAm2C,aAAAn2C,KAAAm2C,YAAA5yC,WACAvD,KAAAm2C,YAAA5yC,IAIAvD,KAAAs2C,QAAA,SAAAC,EAAA1uC,GACA,sBAAA0uC,EACA,IAAAF,GAAA,IAAAE,GAAAC,cAAA3uC,QAEAwuC,EAAAE,EAAAC,cAAA3uC,GAEA7H,KAAAo2C,cAAAC,IAGAr2C,KAAAw2C,cAAA,SAAA3uC,GACA,GAAAA,EAES,CAET,IADA,IAAAmJ,KACAzR,EAAA,EAA2BA,EAAAsI,EAAAjI,OAAmBL,IAC9CS,KAAAm2C,YAAAtuC,EAAAtI,MACAyR,EAAAnJ,EAAAtI,IAAAS,KAAAm2C,YAAAtuC,EAAAtI,KAGA,OAAAyR,EARA,OAAAhR,KAAAm2C,eAYC/0C,KAAA80C,EAAAh1C,WAED/B,EAAA+2C,cAGAvzC,IAAAzC,OAAA,yEAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAoqC,EAAA9nC,EAAA,WAAA8nC,MACAmN,EAAA,SAAApvB,EAAAqvB,EAAAC,GACA32C,KAAA42C,SAAAvvB,EACArnB,KAAA62C,KAAAH,EACA12C,KAAA82C,WAAAzvB,EAAA0vB,UAAAL,GAEA,IAAAjE,EAAAprB,EAAA2vB,WAAAN,EAAAC,GACA32C,KAAAi3C,YAAAxE,IAAAtuC,OAAA,IAGA,WACAnE,KAAAk3C,aAAA,WAGA,IAFAl3C,KAAAi3C,aAAA,EAEAj3C,KAAAi3C,YAAA,IAEA,GADAj3C,KAAA62C,MAAA,EACA72C,KAAA62C,KAAA,EAEA,OADA72C,KAAA62C,KAAA,EACA,KAGA72C,KAAA82C,WAAA92C,KAAA42C,SAAAG,UAAA/2C,KAAA62C,MACA72C,KAAAi3C,YAAAj3C,KAAA82C,WAAAl3C,OAAA,EAGA,OAAAI,KAAA82C,WAAA92C,KAAAi3C,cAEAj3C,KAAAm3C,YAAA,WAEA,IAAAC,EACA,IAFAp3C,KAAAi3C,aAAA,EAEAj3C,KAAAi3C,aAAAj3C,KAAA82C,WAAAl3C,QAAA,CAIA,GAHAI,KAAA62C,MAAA,EACAO,IACAA,EAAAp3C,KAAA42C,SAAArlB,aACAvxB,KAAA62C,MAAAO,EAEA,OADAp3C,KAAA62C,KAAAO,EAAA,EACA,KAGAp3C,KAAA82C,WAAA92C,KAAA42C,SAAAG,UAAA/2C,KAAA62C,MACA72C,KAAAi3C,YAAA,EAGA,OAAAj3C,KAAA82C,WAAA92C,KAAAi3C,cAEAj3C,KAAAq3C,gBAAA,WACA,OAAAr3C,KAAA82C,WAAA92C,KAAAi3C,cAEAj3C,KAAAs3C,mBAAA,WACA,OAAAt3C,KAAA62C,MAEA72C,KAAAu3C,sBAAA,WACA,IAAAC,EAAAx3C,KAAA82C,WACAW,EAAAz3C,KAAAi3C,YACA/rB,EAAAssB,EAAAC,GAAAvxC,MACA,QAAAjF,IAAAiqB,EACA,OAAAA,EAGA,IADAA,EAAA,EACAusB,EAAA,GAEAvsB,GAAAssB,EADAC,GAAA,GACA3vC,MAAAlI,OAGA,OAAAsrB,GAEAlrB,KAAA03C,wBAAA,WACA,OAAgB1sB,IAAAhrB,KAAA62C,KAAA3rB,OAAAlrB,KAAAu3C,0BAEhBv3C,KAAA23C,qBAAA,WACA,IAAAlF,EAAAzyC,KAAA82C,WAAA92C,KAAAi3C,aACA/rB,EAAAlrB,KAAAu3C,wBACA,WAAAjO,EAAAtpC,KAAA62C,KAAA3rB,EAAAlrB,KAAA62C,KAAA3rB,EAAAunB,EAAA3qC,MAAAlI,WAGCwB,KAAAq1C,EAAAv1C,WAED/B,EAAAs3C,kBAGA9zC,IAAAzC,OAAA,2IAAAsB,EAAArC,EAAAD,GACA,aAEA,IAUA04C,EAVA9mC,EAAAtP,EAAA,iBACA00C,EAAA10C,EAAA,gBAAA00C,UACAO,EAAAj1C,EAAA,wBAAAi1C,cACA3zB,EAAAthB,EAAA,kBAEAq2C,GACA,8CACAC,GACA,wDAGAC,KACAC,GAAqBC,IAAA,IAAAC,IAAA,KAErBC,EAAA,SAAAhuB,GACA,IAAA9nB,GAAA,EAMA,GALA8nB,EAAAiuB,cACA/1C,EAAA8nB,EAAAlF,UAAA9gB,MACA4zC,EAAA7G,YAAA/mB,EAAAiuB,YAAAlH,aACA6G,GAA4B7G,WAAA/mB,EAAAiuB,YAAAlH,cAE5B6G,EAAA11C,GACA,OAAAu1C,EAAAG,EAAA11C,GACAu1C,EAAAG,EAAA11C,IACAg2C,qBAAA,EACAC,iBAAA,EACAC,oBAAA,GACAC,sBAAA,EACAC,kBAAA,EACAC,uBAAA,GACAC,qBAAA,KAIAC,EAAA,SAAA3zB,EAAA4zB,EAAAC,EAAAC,GACA,IAAAC,EAAA/zB,EAAA4E,IAAAmB,IAAA/F,EAAA/e,MAAA8kB,IACA,OACA3H,KAAAy1B,EAAAD,EAAAE,EACA9zB,WACA,EACAA,EAAA/e,MAAAglB,OAAA,EACA8tB,EACA/zB,EAAA4E,IAAAqB,QAAA8tB,EAAA,QAKAC,EAAA,SAAA5e,GACAr6B,KAAA0G,IAAA,8BAAAmwB,EAAAgO,EAAA1a,EAAA9C,EAAAhE,GACA,IAAA0H,EAAAZ,EAAA+uB,oBACArT,EAAAxe,EAAAxb,IAAA2zB,QAAAzU,EAAAC,KACA,QAAA3H,EAAsB,CACtB80B,EAAAhuB,GACA,IAAAlF,EAAAkF,EAAAsB,oBACAotB,EAAAxxB,EAAAxb,IAAAypB,aAAArQ,GACA,QAAA4zB,GAAA,MAAAA,GAAkD1uB,EAAAgvB,2BAClD,OAAAP,EAAA3zB,EAAA4zB,EAAA,IAAyD,KAC5C,GAAAI,EAAAG,gBAAAjvB,EAAA9C,GACb,iBAA0BtkB,KAAA8iC,EAAA9a,EAAAG,UAAAf,EAAA2B,mBAAAuO,KAAAgf,QAC1BJ,EAAAK,iBAAAnvB,EAAA9C,EAAA,MAEAhE,KAAA,KACA4B,WAAA,QAGAg0B,EAAAM,kBAAApvB,EAAA9C,EAAA,MAEAhE,KAAA,IACA4B,WAAA,YAIS,QAAA5B,EAAoB,CAG7B,GAFA80B,EAAAhuB,GAEA,KADA0b,EAAAngB,UAAAqF,EAAAG,OAAAH,EAAAG,OAAA,GAGA,UADA7D,EAAAmyB,oBAAA,KAAiEtuB,OAAAH,EAAAG,OAAA,EAAAF,IAAAD,EAAAC,OACjEiuB,EAAAQ,sBAAA1uB,EAAA8a,EAAAxiB,GAEA,OADA41B,EAAAS,0BAEAr2B,KAAA,GACA4B,WAAA,UAIS,UAAA5B,GAAA,QAAAA,EAAA,CACT80B,EAAAhuB,GACA,IAAA4uB,EAAA,GAMA,GALAE,EAAAU,uBAAA5uB,EAAA8a,KACAkT,EAAAj2B,EAAA/B,aAAA,IAA8C62B,EAAAY,uBAC9CS,EAAAW,6BAGA,MADA/T,EAAAngB,UAAAqF,EAAAG,OAAAH,EAAAG,OAAA,GACgC,CAChC,IAAA2uB,EAAAxyB,EAAAyyB,qBAAgE9uB,IAAAD,EAAAC,IAAAE,OAAAH,EAAAG,OAAA,GAAyC,KACzG,IAAA2uB,EACA,YACA,IAAAE,EAAA/5C,KAAAg6C,WAAA3yB,EAAAmY,QAAAqa,EAAA7uB,UACa,KAAA+tB,EAIb,YADAE,EAAAW,4BAFAG,EAAA/5C,KAAAg6C,WAAAnU,GAKA,IAAAwB,EAAA0S,EAAA1yB,EAAA4yB,eAEA,OACA52B,KAAA,KAAAgkB,EAAA,KAAA0S,EAAAhB,EACA9zB,WAAA,EAAAoiB,EAAAznC,OAAA,EAAAynC,EAAAznC,SAGAq5C,EAAAW,+BAIA55C,KAAA0G,IAAA,6BAAAmwB,EAAAgO,EAAA1a,EAAA9C,EAAAE,GACA,IAAAsxB,EAAAxxB,EAAAxb,IAAAypB,aAAA/N,GACA,IAAAA,EAAAyG,eAAA,KAAA6qB,EAAkD,CAIlD,GAHAV,EAAAhuB,GAGA,KAFA9C,EAAAxb,IAAA2zB,QAAAjY,EAAArhB,MAAA8kB,KACAtF,UAAA6B,EAAAsC,IAAAqB,OAAA3D,EAAAsC,IAAAqB,OAAA,GAGA,OADA3D,EAAAsC,IAAAqB,SACA3D,EAEAqwB,EAAAY,2BAKAx4C,KAAA0G,IAAA,8BAAAmwB,EAAAgO,EAAA1a,EAAA9C,EAAAhE,GACA,QAAAA,EAAA,CACA80B,EAAAhuB,GACA,IAAAlF,EAAAkF,EAAAsB,oBACAotB,EAAAxxB,EAAAxb,IAAAypB,aAAArQ,GACA,QAAA4zB,GAAA1uB,EAAAgvB,2BACA,OAAAP,EAAA3zB,EAAA4zB,EAAA,SACa,GAAAI,EAAAG,gBAAAjvB,EAAA9C,GAEb,OADA4xB,EAAAK,iBAAAnvB,EAAA9C,EAAA,MAEAhE,KAAA,KACA4B,WAAA,WAGS,QAAA5B,EAAA,CACT80B,EAAAhuB,GACA,IAAAY,EAAAZ,EAAA+uB,oBACArT,EAAAxe,EAAAxb,IAAA2zB,QAAAzU,EAAAC,KAEA,QADA6a,EAAAngB,UAAAqF,EAAAG,OAAAH,EAAAG,OAAA,GAGA,UADA7D,EAAAmyB,oBAAA,KAAiEtuB,OAAAH,EAAAG,OAAA,EAAAF,IAAAD,EAAAC,OACjEiuB,EAAAQ,sBAAA1uB,EAAA8a,EAAAxiB,GAEA,OADA41B,EAAAS,0BAEAr2B,KAAA,GACA4B,WAAA,SAOAjlB,KAAA0G,IAAA,6BAAAmwB,EAAAgO,EAAA1a,EAAA9C,EAAAE,GACA,IAAAsxB,EAAAxxB,EAAAxb,IAAAypB,aAAA/N,GACA,IAAAA,EAAAyG,eAAA,KAAA6qB,IACAV,EAAAhuB,GAGA,KAFA9C,EAAAxb,IAAA2zB,QAAAjY,EAAArhB,MAAA8kB,KACAtF,UAAA6B,EAAArhB,MAAAglB,OAAA,EAAA3D,EAAArhB,MAAAglB,OAAA,IAGA,OADA3D,EAAAsC,IAAAqB,SACA3D,IAKAvnB,KAAA0G,IAAA,gCAAAmwB,EAAAgO,EAAA1a,EAAA9C,EAAAhE,GACA,QAAAA,EAAA,CACA80B,EAAAhuB,GACA,IAAAlF,EAAAkF,EAAAsB,oBACAotB,EAAAxxB,EAAAxb,IAAAypB,aAAArQ,GACA,QAAA4zB,GAAA1uB,EAAAgvB,2BACA,OAAAP,EAAA3zB,EAAA4zB,EAAA,SACa,GAAAI,EAAAG,gBAAAjvB,EAAA9C,GAEb,OADA4xB,EAAAK,iBAAAnvB,EAAA9C,EAAA,MAEAhE,KAAA,KACA4B,WAAA,WAGS,QAAA5B,EAAA,CACT80B,EAAAhuB,GACA,IAAAY,EAAAZ,EAAA+uB,oBACArT,EAAAxe,EAAAxb,IAAA2zB,QAAAzU,EAAAC,KAEA,QADA6a,EAAAngB,UAAAqF,EAAAG,OAAAH,EAAAG,OAAA,GAGA,UADA7D,EAAAmyB,oBAAA,KAAiEtuB,OAAAH,EAAAG,OAAA,EAAAF,IAAAD,EAAAC,OACjEiuB,EAAAQ,sBAAA1uB,EAAA8a,EAAAxiB,GAEA,OADA41B,EAAAS,0BAEAr2B,KAAA,GACA4B,WAAA,SAOAjlB,KAAA0G,IAAA,+BAAAmwB,EAAAgO,EAAA1a,EAAA9C,EAAAE,GACA,IAAAsxB,EAAAxxB,EAAAxb,IAAAypB,aAAA/N,GACA,IAAAA,EAAAyG,eAAA,KAAA6qB,IACAV,EAAAhuB,GAGA,KAFA9C,EAAAxb,IAAA2zB,QAAAjY,EAAArhB,MAAA8kB,KACAtF,UAAA6B,EAAArhB,MAAAglB,OAAA,EAAA3D,EAAArhB,MAAAglB,OAAA,IAGA,OADA3D,EAAAsC,IAAAqB,SACA3D,IAKAvnB,KAAA0G,IAAA,sCAAAmwB,EAAAgO,EAAA1a,EAAA9C,EAAAhE,GACA,IAAA62B,EAAA7yB,EAAA8yB,MAAAC,SAAApC,EACA,MAAA30B,EAAAzjB,QAAAs6C,EAAA72B,GAAA,CACA,GAAArjB,KAAAq6C,mBAAA,GAAAr6C,KAAAq6C,iBAAAx6C,QAAAwjB,GACA,OACA80B,EAAAhuB,GACA,IAAAmwB,EAAAj3B,EACA4B,EAAAkF,EAAAsB,oBACAotB,EAAAxxB,EAAAxb,IAAAypB,aAAArQ,GACA,UAAA4zB,GAAA,GAAAA,EAAAj5C,QAAAs6C,EAAArB,KAAA1uB,EAAAgvB,2BACA,OAAAP,EAAA3zB,EAAA4zB,EAAAyB,KACa,IAAAzB,EAAA,CACb,IAAA9tB,EAAAZ,EAAA+uB,oBACArT,EAAAxe,EAAAxb,IAAA2zB,QAAAzU,EAAAC,KACAuvB,EAAA1U,EAAAngB,UAAAqF,EAAAG,OAAA,EAAAH,EAAAG,QACAsvB,EAAA3U,EAAAngB,UAAAqF,EAAAG,OAAAH,EAAAG,OAAA,GAEAunB,EAAAprB,EAAA2vB,WAAAjsB,EAAAC,IAAAD,EAAAG,QACAuvB,EAAApzB,EAAA2vB,WAAAjsB,EAAAC,IAAAD,EAAAG,OAAA,GACA,SAAAqvB,GAAA9H,GAAA,SAAA1vC,KAAA0vC,EAAAx3B,MACA,YAEA,IAGAy/B,EAHAC,EAAAlI,GAAA,gBAAA1vC,KAAA0vC,EAAAx3B,MACA2/B,GAAAH,GAAA,gBAAA13C,KAAA03C,EAAAx/B,MAGA,GAAAu/B,GAAAF,GACAI,EAAAC,IAAAC,IACA,cAAA73C,KAAA03C,EAAAx/B,QACAy/B,GAAA,OACiB,CACjB,GAAAC,IAAAC,EACA,YACA,GAAAD,GAAAC,EACA,YACA,IAAAC,EAAAxzB,EAAA8yB,MAAAvK,QACAiL,EAAAx3C,UAAA,EACA,IAAAy3C,EAAAD,EAAA93C,KAAAw3C,GACAM,EAAAx3C,UAAA,EACA,IAAA03C,EAAAF,EAAA93C,KAAAw3C,GACA,GAAAO,GAAAC,EACA,YACA,GAAAP,IAAA,gBAA8Cz3C,KAAAy3C,GAC9C,YACAE,GAAA,EAEA,OACAr3B,KAAAq3B,EAAAJ,IAAA,GACAr1B,WAAA,UAMAjlB,KAAA0G,IAAA,qCAAAmwB,EAAAgO,EAAA1a,EAAA9C,EAAAE,GACA,IAAAsxB,EAAAxxB,EAAAxb,IAAAypB,aAAA/N,GACA,IAAAA,EAAAyG,gBAAA,KAAA6qB,GAAA,KAAAA,KACAV,EAAAhuB,GACA9C,EAAAxb,IAAA2zB,QAAAjY,EAAArhB,MAAA8kB,KACAtF,UAAA6B,EAAArhB,MAAAglB,OAAA,EAAA3D,EAAArhB,MAAAglB,OAAA,IACA2tB,GAEA,OADAtxB,EAAAsC,IAAAqB,SACA3D,KAQA0xB,EAAAG,gBAAA,SAAAjvB,EAAA9C,GACA,IAAA0D,EAAAZ,EAAA+uB,oBACA8B,EAAA,IAAAvE,EAAApvB,EAAA0D,EAAAC,IAAAD,EAAAG,QACA,IAAAlrB,KAAAi7C,gBAAAD,EAAA3D,mBAAA,OAAAQ,GAAA,CACA,IAAAqD,EAAA,IAAAzE,EAAApvB,EAAA0D,EAAAC,IAAAD,EAAAG,OAAA,GACA,IAAAlrB,KAAAi7C,gBAAAC,EAAA7D,mBAAA,OAAAQ,GACA,SAGA,OADAmD,EAAA7D,cACA6D,EAAA1D,uBAAAvsB,EAAAC,KACAhrB,KAAAi7C,gBAAAD,EAAA3D,mBAAA,OAAAS,IAGAmB,EAAAgC,gBAAA,SAAAxI,EAAAtc,GACA,OAAAA,EAAAt2B,QAAA4yC,EAAAx3B,MAAAw3B,IAAA,GAGAwG,EAAAK,iBAAA,SAAAnvB,EAAA9C,EAAA8zB,GACA,IAAApwB,EAAAZ,EAAA+uB,oBACArT,EAAAxe,EAAAxb,IAAA2zB,QAAAzU,EAAAC,KACAhrB,KAAAy5C,sBAAA1uB,EAAA8a,EAAA+R,EAAAW,oBAAA,MACAX,EAAAS,qBAAA,GACAT,EAAAU,gBAAAvtB,EAAAC,IACA4sB,EAAAW,oBAAA4C,EAAAtV,EAAArgB,OAAAuF,EAAAG,QACA0sB,EAAAS,wBAGAY,EAAAM,kBAAA,SAAApvB,EAAA9C,EAAA8zB,GACA,IAAApwB,EAAAZ,EAAA+uB,oBACArT,EAAAxe,EAAAxb,IAAA2zB,QAAAzU,EAAAC,KACAhrB,KAAA25C,uBAAA5uB,EAAA8a,KACA+R,EAAAY,sBAAA,GACAZ,EAAAa,iBAAA1tB,EAAAC,IACA4sB,EAAAc,uBAAA7S,EAAArgB,OAAA,EAAAuF,EAAAG,QAAAiwB,EACAvD,EAAAe,qBAAA9S,EAAArgB,OAAAuF,EAAAG,QACA0sB,EAAAY,yBAGAS,EAAAQ,sBAAA,SAAA1uB,EAAA8a,EAAAsV,GACA,OAAAvD,EAAAS,qBAAA,GACAttB,EAAAC,MAAA4sB,EAAAU,iBACA6C,IAAAvD,EAAAW,oBAAA,IACA1S,EAAArgB,OAAAuF,EAAAG,UAAA0sB,EAAAW,qBAGAU,EAAAU,uBAAA,SAAA5uB,EAAA8a,GACA,OAAA+R,EAAAY,sBAAA,GACAztB,EAAAC,MAAA4sB,EAAAa,kBACA5S,EAAArgB,OAAAuF,EAAAG,UAAA0sB,EAAAe,sBACA9S,EAAArgB,OAAA,EAAAuF,EAAAG,SAAA0sB,EAAAc,wBAGAO,EAAAS,uBAAA,WACA9B,EAAAW,oBAAAX,EAAAW,oBAAA/yB,OAAA,GACAoyB,EAAAS,wBAGAY,EAAAW,0BAAA,WACAhC,IACAA,EAAAY,sBAAA,EACAZ,EAAAa,kBAAA,IAMA3nC,EAAAR,SAAA2oC,EAAA/C,GAEA/2C,EAAA85C,oBAGAt2C,IAAAzC,OAAA,sDAAAsB,EAAArC,EAAAD,GACA,aACAC,EAAAi8C,YA0CA,SAAAC,GACA,IAAAC,EAAA,SACA,QAAA/3C,KAAA83C,EACAl8C,EAAAi8C,SAAA73C,GAAA83C,EAAA93C,GAAApB,QAAAm5C,EAAA,SA3CAC,EACAha,EAAA,4sFACAia,GAAA,uhFACAC,GAAA,o8EACAC,GAAA,0DACAC,GAAA,8QACAC,GAAA,knEACAC,EAAA,izCACAC,GAAA,4tCACAC,GAAA,qsBACAC,GAAA,0CACAC,EAAA,4hBACAC,GAAA,8TACAC,GAAA,6DACAC,GAAA,+MACAC,EAAA,40BACAC,GAAA,wEACAC,GAAA,mSACAC,GAAA,+RACAC,GAAA,mDACAC,GAAA,2CACAC,GAAA,wCACAC,GAAA,+xBACA/a,EAAA,0kCACAgb,GAAA,mWACAC,GAAA,yFACAC,GAAA,4KACAC,GAAA,43BACAC,EAAA,gDACAC,GAAA,wCACAC,GAAA,OACAC,GAAA,OACAC,EAAA,0mFACAC,GAAA,qBACAC,GAAA,iFACAC,GAAA,YACAC,GAAA,YACAC,GAAA,ikFAWA/6C,IAAAzC,OAAA,kMAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAwyC,EAAAlwC,EAAA,gBAAAkwC,UACA2C,EAAA7yC,EAAA,0BAAA6yC,mBACA4E,EAAAz3C,EAAA,sBAAAy3C,gBACA0E,EAAAn8C,EAAA,cACAshB,EAAAthB,EAAA,eACAi1C,EAAAj1C,EAAA,qBAAAi1C,cACAnN,EAAA9nC,EAAA,YAAA8nC,MAEAsU,EAAA,WACA59C,KAAA40C,eAAAP,IAGA,WACAr0C,KAAA69C,kBAAA,IAAA5E,EAEAj5C,KAAA4vC,QAAA,IAAA9sC,OAAA,KACA66C,EAAAvC,SAAA7Z,EACAoc,EAAAvC,SAAAU,GAAA6B,EAAAvC,SAAAW,GACA4B,EAAAvC,SAAAc,GACAyB,EAAAvC,SAAAuB,GAAA,cAGA38C,KAAA2vC,WAAA,IAAA7sC,OAAA,SACA66C,EAAAvC,SAAA7Z,EACAoc,EAAAvC,SAAAU,GAAA6B,EAAAvC,SAAAW,GACA4B,EAAAvC,SAAAc,GACAyB,EAAAvC,SAAAuB,GAAA,oBAGA38C,KAAA89C,aAAA,WAKA,OAJA99C,KAAA+9C,aACA/9C,KAAAg+C,gBAAAh+C,KAAAg+C,iBAAA,IAAAh+C,KAAA40C,eAAA50C,KAAAi+C,sBACAj+C,KAAA+9C,WAAA,IAAArM,EAAA1xC,KAAAg+C,gBAAAtJ,aAEA10C,KAAA+9C,YAGA/9C,KAAAq6C,iBAAA,GACAr6C,KAAAk+C,aAAA,GAEAl+C,KAAAm+C,mBAAA,SAAAtnB,EAAAxP,EAAAkiB,EAAAE,GACA,IAAA59B,EAAAwb,EAAAxb,IAEAuyC,GAAA,EACAC,GAAA,EACAC,EAAAC,IACA3P,EAAAvnB,EAAAynB,aACA0P,GAAA,EAEA,GAAAx+C,KAAAq6C,iBAkCS,CACT,GAAAz2C,MAAAqD,QAAAjH,KAAAq6C,kBACAoE,EAAAz+C,KAAAq6C,iBAAAzyC,IAAAkb,EAAAlB,cAAA3f,KAAA,KACAo4C,EAAAr6C,KAAAq6C,iBAAA,QAEAoE,EAAA37B,EAAAlB,aAAA5hB,KAAAq6C,kBACAA,EAAAr6C,KAAAq6C,iBAEAoE,EAAA,IAAA37C,OAAA,aAAA27C,EAAA,OAEAD,EAAAn3B,EAAAq3B,iBAEAC,EAAA,SAAA9Y,EAAAtmC,GACA,IAAA08B,EAAA4J,EAAA7iC,MAAAy7C,GACA,GAAAxiB,EAAA,CACA,IAAA/1B,EAAA+1B,EAAA,GAAAr8B,OAAAiqB,EAAAoS,EAAA,GAAAr8B,OACAg/C,EAAA/Y,EAAA3/B,EAAA2jB,IAAA,KAAAoS,EAAA,GAAApS,EAAA,IACAA,IACAhe,EAAAgzC,aAAAt/C,EAAA2G,EAAA2jB,KANA,IAQAi1B,EAAAzE,EAAA,IAaAuE,GAZAG,EAAA,SAAAlZ,EAAAtmC,GACA6+C,IAAA,KAAAr7C,KAAA8iC,KACA+Y,EAAA/Y,EAAAyY,KACAzyC,EAAAmzC,cAA0Ch0B,IAAAzrB,EAAA2rB,OAAAozB,GAA0BQ,GAEpEjzC,EAAAmzC,cAA0Ch0B,IAAAzrB,EAAA2rB,OAAAozB,GAA0BjE,KAGpE4E,EAAA,SAAApZ,EAAAtmC,GACA,OAAAk/C,EAAA17C,KAAA8iC,IAGA,SAAAA,EAAAqZ,EAAAC,GAEA,IADA,IAAAC,EAAA,EACAF,KAAA,KAAArZ,EAAA9jC,OAAAm9C,IACAE,IACA,GAAAA,EAAAxQ,GAAA,EACA,SAEA,IADAwQ,EAAA,EACA,KAAAvZ,EAAA9jC,OAAAo9C,MACAC,IACA,OAAAxQ,EAAA,EACAwQ,EAAAxQ,KAAA,EAEAwQ,EAAAxQ,GAAA,QA/EA,CACA,IAAA5uC,KAAAk+C,aACA,SACA,IAAA7D,EAAAr6C,KAAAk+C,aAAAh4C,MACAm5C,EAAAr/C,KAAAk+C,aAAAr0B,IACA40B,EAAA,IAAA37C,OAAA,aAAAggB,EAAAlB,aAAAy4B,GAAA,KACAiF,EAAA,IAAAx8C,OAAA,MAAAggB,EAAAlB,aAAAy9B,GAAA,UAEAN,EAAA,SAAAlZ,EAAAtmC,GACA0/C,EAAApZ,EAAAtmC,IAEA6+C,IAAA,KAAAr7C,KAAA8iC,KACAh6B,EAAAmzC,cAAsCh0B,IAAAzrB,EAAA2rB,OAAA2a,EAAAjmC,QAA4By/C,GAClExzC,EAAAmzC,cAAsCh0B,IAAAzrB,EAAA2rB,OAAAozB,GAA0BjE,KAIhEsE,EAAA,SAAA9Y,EAAAtmC,GACA,IAAA08B,GACAA,EAAA4J,EAAA7iC,MAAAs8C,KACAzzC,EAAAgzC,aAAAt/C,EAAAsmC,EAAAjmC,OAAAq8B,EAAA,GAAAr8B,OAAAimC,EAAAjmC,SACAq8B,EAAA4J,EAAA7iC,MAAAy7C,KACA5yC,EAAAgzC,aAAAt/C,EAAA08B,EAAA,GAAAr8B,OAAAq8B,EAAA,GAAAr8B,SAGAq/C,EAAA,SAAApZ,EAAA7a,GACA,GAAAyzB,EAAA17C,KAAA8iC,GACA,SAEA,IADA,IAAAwN,EAAAhsB,EAAA0vB,UAAA/rB,GACAzrB,EAAA,EAA+BA,EAAA8zC,EAAAzzC,OAAmBL,IAClD,eAAA8zC,EAAA9zC,GAAA0b,KACA,UAqDA,SAAAskC,EAAAh4C,GACA,QAAAhI,EAAAgqC,EAAkChqC,GAAAkqC,EAAalqC,IAC/CgI,EAAAsE,EAAA2zB,QAAAjgC,MAIA,IAAAigD,EAAAjB,IACAgB,EAAA,SAAA1Z,EAAAtmC,GACA,IAAA8nC,EAAAxB,EAAA2J,OAAA,OACA,IAAAnI,GACAA,EAAAiX,IACAA,EAAAjX,GACAgX,IAAAY,EAAApZ,EAAAtmC,KACA8+C,GAAA,IACamB,EAAA3Z,EAAAjmC,SACb4/C,EAAA3Z,EAAAjmC,UAIA0+C,GAAAC,MACAD,EAAAkB,EACApB,GAAA,EACAC,GAAA,GAGAG,GAAAF,EAAA1P,GAAA,IACA0P,EAAAh4C,KAAAoF,MAAA4yC,EAAA1P,MAEA2Q,EAAAlB,EAAAM,EAAAI,IAGA/+C,KAAAy/C,mBAAA,SAAA5oB,EAAAxP,EAAAE,EAAAwD,GACA,IAAAg0B,EAAA/+C,KAAAk+C,aACA,GAAAa,EAAA,EAEAA,EAAA74C,OAAA64C,EAAA,KACAA,IAAA,IAEA,IAKAxV,EAAAmW,EAJAjN,GADAuI,EAAA,IAAAvE,EAAApvB,EAAA0D,EAAAC,IAAAD,EAAAG,SACAmsB,kBAGAsI,GADAt4B,EAAApC,UACAoC,EAAApC,UAAAkP,mBAGA,GAAAse,GAAA,UAAA1vC,KAAA0vC,EAAAx3B,MAAA,CAEA,IADA,IAAA2kC,EAAAC,EACApN,GAAA,UAAA1vC,KAAA0vC,EAAAx3B,OAAA,CAEA,QADA1b,EAAAkzC,EAAA3qC,MAAAjI,QAAAk/C,EAAA74C,QACA,CACA,IAAA8kB,EAAAgwB,EAAA1D,qBACApsB,EAAA8vB,EAAAzD,wBAAAh4C,EACAqgD,EAAA,IAAAtW,EAAAte,EAAAE,EAAAF,EAAAE,EAAA6zB,EAAA74C,MAAAtG,QACA,MAEA6yC,EAAAuI,EAAA9D,eAGA,IAAA8D,EAEA,IADAvI,GADAuI,EAAA,IAAAvE,EAAApvB,EAAA0D,EAAAC,IAAAD,EAAAG,SACAmsB,kBACA5E,GAAA,UAAA1vC,KAAA0vC,EAAAx3B,OAAA,CACA,IAAA1b,EACA,QADAA,EAAAkzC,EAAA3qC,MAAAjI,QAAAk/C,EAAAl1B,MACA,CACAmB,EAAAgwB,EAAA1D,qBACApsB,EAAA8vB,EAAAzD,wBAAAh4C,EACAsgD,EAAA,IAAAvW,EAAAte,EAAAE,EAAAF,EAAAE,EAAA6zB,EAAAl1B,IAAAjqB,QACA,MAEA6yC,EAAAuI,EAAA7D,cAEA0I,GACAx4B,EAAA1gB,OAAAk5C,GACAD,IACAv4B,EAAA1gB,OAAAi5C,GACArW,EAAAqW,EAAA15C,MAAA8kB,IACA00B,GAAAX,EAAA74C,MAAAtG,aAGA8/C,EAAAX,EAAA74C,MAAAtG,OACA2pC,EAAAhiB,EAAArhB,MAAA8kB,IACA3D,EAAA5gB,OAAA8gB,EAAAsC,IAAAk1B,EAAAl1B,KACAxC,EAAA5gB,OAAA8gB,EAAArhB,MAAA64C,EAAA74C,OAEAy5C,EAAAz5C,MAAA8kB,KAAAue,IACAoW,EAAAz5C,MAAAglB,QAAAw0B,GACAC,EAAA91B,IAAAmB,KAAAue,IACAoW,EAAA91B,IAAAqB,QAAAw0B,GACAr4B,EAAApC,UAAA4P,kBAAA8qB,KAGA3/C,KAAA8/C,kBAAA,SAAAjpB,EAAAgP,EAAAka,GACA,OAAA//C,KAAAg6C,WAAAnU,IAGA7lC,KAAAggD,aAAA,SAAAnpB,EAAAgP,EAAAoa,GACA,UAGAjgD,KAAAkgD,YAAA,SAAArpB,EAAAhrB,EAAAmf,KAGAhrB,KAAAg6C,WAAA,SAAAnU,GACA,OAAAA,EAAA7iC,MAAA,YAGAhD,KAAAmgD,aAAA,SAAA94B,GACA,aAGArnB,KAAAogD,oBAAA,SAAAnO,GAGA,QAAA1yC,KAFAS,KAAA+0C,WACA/0C,KAAAqgD,UACApO,EACAA,EAAA1yC,KACAS,KAAA+0C,QAAAtzC,KAAAlC,GACAS,KAAAqgD,OAAA9gD,GAAA,IAAA0yC,EAAA1yC,IAIA,IAAA+gD,GAAA,8DACA,iEAEA,IAAA/gD,EAAA,EAAuBA,EAAA+gD,EAAA1gD,OAAwBL,KAC/C,SAAAghD,GACA,IAAAC,EAAAF,EAAA/gD,GACAg5B,EAAAgoB,EAAAC,GACAD,EAAAD,EAAA/gD,IAAA,WACA,OAAAS,KAAAygD,WAAAD,EAAAngD,UAAAk4B,IAJA,CAMav4B,OAIbA,KAAAygD,WAAA,SAAAC,EAAA/7C,EAAA4zB,GACA,IAAA1B,EAAAlyB,EAAA,GACA,iBAAAkyB,IACAA,IAAA,IACA,QAAAt3B,EAAA,EAAuBA,EAAAS,KAAA+0C,QAAAn1C,OAAyBL,IAChD,GAAAS,KAAAqgD,OAAArgD,KAAA+0C,QAAAx1C,IAAA,CAEA,IAAAuC,EAAA+0B,EAAA/0B,MAAA9B,KAAA+0C,QAAAx1C,IACA,IAAAuC,EAAA,IAAAA,EAAA,IACA6C,EAAA,GAAA7C,EAAA,GACA,IAAAy0C,EAAAv2C,KAAAqgD,OAAArgD,KAAA+0C,QAAAx1C,IACA,OAAAg3C,EAAAmK,GAAAjgD,MAAA81C,EAAA5xC,IAGA,IAAAqM,EAAAunB,EAAA93B,MAAAT,KAAA2E,GACA,OAAA4zB,EAAAvnB,OAAA/P,GAGAjB,KAAA2gD,gBAAA,SAAA9pB,EAAAgO,EAAA1a,EAAA9C,EAAAu5B,GACA,GAAA5gD,KAAA6gD,WAAA,CACA,IAAAxK,EAAAr2C,KAAA6gD,WAAArK,gBACA,QAAAl3C,KAAA+2C,EACA,GAAAA,EAAA/2C,GAAAulC,GAAA,CACA,IAAA7zB,EAAAqlC,EAAA/2C,GAAAulC,GAAApkC,MAAAT,KAAAK,WACA,GAAA2Q,EACA,OAAAA,KAOAhR,KAAAg2C,YAAA,SAAAlB,GACA,IAAA90C,KAAA8gD,mBAAA,CACA,IAAAnP,EAAA3xC,KAAA+9C,WAAApM,MACAmP,KACA,QAAAzO,KAAAV,EAEA,IADA,IAAAoP,EAAApP,EAAAU,GACAlrB,EAAA,EAAA7lB,EAAAy/C,EAAAnhD,OAAmDunB,EAAA7lB,EAAO6lB,IAC1D,oBAAA45B,EAAA55B,GAAAsrB,MACA,0BAAA1vC,KAAAg+C,EAAA55B,GAAAsrB,QACAqO,EAAAr/C,KAAAs/C,EAAA55B,GAAAtjB,YAEA,oBAAAk9C,EAAA55B,GAAAsrB,MACA,QAAA1sC,EAAA,EAAAi7C,EAAAD,EAAA55B,GAAAsrB,MAAA7yC,OAA0EmG,EAAAi7C,EAAaj7C,IACvF,6BAAAhD,KAAAg+C,EAAA55B,GAAAsrB,MAAA1sC,IAAA,CACAssC,EAAA0O,EAAA55B,GAAAtjB,MAAAb,MAAA,YAAA+C,GACA+6C,EAAAr/C,KAAA4wC,EAAA7sB,OAAA,EAAA6sB,EAAAzyC,OAAA,IAMAI,KAAA8gD,qBAEA,OAAAhM,EAEAgM,EAAAh8C,OAAA9E,KAAA+1C,kBADA/1C,KAAA+1C,cAIA/1C,KAAAihD,mBAAA,WAGA,OAFAjhD,KAAAg+C,iBACAh+C,KAAA89C,eACA99C,KAAA+1C,aAAA/1C,KAAAg+C,gBAAAjI,kBAGA/1C,KAAAkhD,eAAA,SAAArqB,EAAAxP,EAAAjhB,EAAAouC,GAEA,OADAx0C,KAAA+1C,cAAA/1C,KAAAihD,sBACAr5C,IAAA,SAAAu5C,GACA,OACA59C,KAAA49C,EACAr5C,MAAAq5C,EACAC,MAAA,EACAxvC,KAAA,cAKA5R,KAAAqhD,IAAA,kBACCjgD,KAAAw8C,EAAA18C,WAED/B,EAAAy+C,SAGAj7C,IAAAzC,OAAA,0DAAAsB,EAAArC,EAAAD,GACA,aA+BAC,EAAAmiD,WAAA,SAAAC,EAAA/a,EAAAgb,GAEA,IAAAx2B,EAAAwb,EAAAtgC,MAAA8kB,IACAwe,EAAAhD,EAAAtgC,MAAAglB,OACA2a,EAAA0b,EAAAv2B,IAAA,GACA,OAAAwb,EAAA3B,QACA,aAEA,OADA2B,EAAAC,MACA7mC,OACA2hD,EAAAv2B,GAAA6a,EAAAngB,UAAA,EAAA8jB,GAAAhD,EAAAC,MAAA,GAAAZ,EAAAngB,UAAA8jB,OACa,CACb,IAAA7kC,GAAAqmB,EAAA,GAAAlmB,OAAA0hC,EAAAC,OACA8a,EAAA17C,OAAApF,MAAA8gD,EAAA58C,GACA48C,EAAAv2B,GAAA6a,EAAAngB,UAAA,EAAA8jB,GAAA+X,EAAAv2B,GACAu2B,EAAAv2B,EAAAwb,EAAAC,MAAA7mC,OAAA,IAAAimC,EAAAngB,UAAA8jB,GAEA,MACA,aACA,IAAAE,EAAAlD,EAAA3c,IAAAqB,OACAue,EAAAjD,EAAA3c,IAAAmB,IACAA,IAAAye,EACA8X,EAAAv2B,GAAA6a,EAAAngB,UAAA,EAAA8jB,GAAA3D,EAAAngB,UAAAgkB,GAEA6X,EAAA17C,OACAmlB,EAAAye,EAAAze,EAAA,EACA6a,EAAAngB,UAAA,EAAA8jB,GAAA+X,EAAA9X,GAAA/jB,UAAAgkB,QAQA/mC,IAAAzC,OAAA,2FAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,aACAy2B,EAAAz2B,EAAA,uBAAAy2B,aAEAwpB,EAAAtiD,EAAAsiD,OAAA,SAAA51C,EAAAmf,EAAAE,GACAlrB,KAAA0hD,UAAA1hD,KAAAumC,SAAA/hC,KAAAxE,MACAA,KAAAugC,OAAA10B,QAEA,IAAAqf,EACAlrB,KAAAyvB,YAAAzE,QAAAE,QAEAlrB,KAAAyvB,YAAAzE,EAAAE,KAGA,WAqBA,SAAAy2B,EAAAC,EAAAC,EAAAC,GACA,IAAAC,EAAAD,EAAAF,EAAA12B,QAAA22B,EAAA32B,OAAA02B,EAAA12B,OAAA22B,EAAA32B,OACA,OAAA02B,EAAA52B,IAAA62B,EAAA72B,KAAA42B,EAAA52B,KAAA62B,EAAA72B,KAAA+2B,EArBAjxC,EAAAF,UAAA5Q,KAAAi4B,GACAj4B,KAAAmsC,YAAA,WACA,OAAAnsC,KAAAgiD,wBAAAhiD,KAAAgrB,IAAAhrB,KAAAkrB,SAEAlrB,KAAA0rC,YAAA,WACA,OAAA1rC,KAAAkK,UAEAlK,KAAAiiD,cAAA,EACAjiD,KAAAumC,SAAA,SAAAC,GACA,KAAAA,EAAAtgC,MAAA8kB,KAAAwb,EAAA3c,IAAAmB,KAAAwb,EAAAtgC,MAAA8kB,KAAAhrB,KAAAgrB,KAGAwb,EAAAtgC,MAAA8kB,IAAAhrB,KAAAgrB,KAAA,CAGA,IAAAk3B,EASA,SAAA1b,EAAA0b,EAAAC,GACA,IAAAC,EAAA,UAAA5b,EAAA3B,OACAwd,GAAAD,EAAA,OAAA5b,EAAA3c,IAAAmB,IAAAwb,EAAAtgC,MAAA8kB,KACAs3B,GAAAF,EAAA,OAAA5b,EAAA3c,IAAAqB,OAAAsb,EAAAtgC,MAAAglB,QACAq3B,EAAA/b,EAAAtgC,MACAs8C,EAAAJ,EAAAG,EAAA/b,EAAA3c,IACA,GAAA83B,EAAAO,EAAAK,EAAAJ,GACA,OACAn3B,IAAAk3B,EAAAl3B,IACAE,OAAAg3B,EAAAh3B,QAGA,GAAAy2B,EAAAa,EAAAN,GAAAC,GACA,OACAn3B,IAAAk3B,EAAAl3B,IAAAq3B,EACAn3B,OAAAg3B,EAAAh3B,QAAAg3B,EAAAl3B,KAAAw3B,EAAAx3B,IAAAs3B,EAAA,IAIA,OACAt3B,IAAAu3B,EAAAv3B,IACAE,OAAAq3B,EAAAr3B,QA9BAu3B,CAAAjc,GAAiDxb,IAAAhrB,KAAAgrB,IAAAE,OAAAlrB,KAAAkrB,QAAmClrB,KAAAiiD,cACpFjiD,KAAAyvB,YAAAyyB,EAAAl3B,IAAAk3B,EAAAh3B,QAAA,KAgCAlrB,KAAAyvB,YAAA,SAAAzE,EAAAE,EAAAw3B,GACA,IAAAt8C,EAUA,GARAA,EADAs8C,GAEA13B,MACAE,UAGAlrB,KAAAgiD,wBAAAh3B,EAAAE,GAGAlrB,KAAAgrB,KAAA5kB,EAAA4kB,KAAAhrB,KAAAkrB,QAAA9kB,EAAA8kB,OAAA,CAGA,IAAA0N,GACA5N,IAAAhrB,KAAAgrB,IACAE,OAAAlrB,KAAAkrB,QAGAlrB,KAAAgrB,IAAA5kB,EAAA4kB,IACAhrB,KAAAkrB,OAAA9kB,EAAA8kB,OACAlrB,KAAA8wB,QAAA,UACA8H,MACA9wB,MAAA1B,MAGApG,KAAAwgC,OAAA,WACAxgC,KAAAkK,SAAAsR,oBAAA,SAAAxb,KAAA0hD,YAEA1hD,KAAAugC,OAAA,SAAA10B,GACA7L,KAAAkK,SAAA2B,GAAA7L,KAAAkK,SACAlK,KAAAkK,SAAAie,GAAA,SAAAnoB,KAAA0hD,YAEA1hD,KAAAgiD,wBAAA,SAAAh3B,EAAAE,GACA,IAAA9kB,KAkBA,OAhBA4kB,GAAAhrB,KAAAkK,SAAAqnB,aACAnrB,EAAA4kB,IAAA1kB,KAAAC,IAAA,EAAAvG,KAAAkK,SAAAqnB,YAAA,GACAnrB,EAAA8kB,OAAAlrB,KAAAkK,SAAAs1B,QAAAp5B,EAAA4kB,KAAAprB,QAEAorB,EAAA,GACA5kB,EAAA4kB,IAAA,EACA5kB,EAAA8kB,OAAA,IAGA9kB,EAAA4kB,MACA5kB,EAAA8kB,OAAA5kB,KAAAM,IAAA5G,KAAAkK,SAAAs1B,QAAAp5B,EAAA4kB,KAAAprB,OAAA0G,KAAAC,IAAA,EAAA2kB,KAGAA,EAAA,IACA9kB,EAAA8kB,OAAA,GAEA9kB,KAGChF,KAAAqgD,EAAAvgD,aAIDyB,IAAAzC,OAAA,wIAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,aACA8/C,EAAA9/C,EAAA,iBAAA8/C,WACArpB,EAAAz2B,EAAA,uBAAAy2B,aACAqR,EAAA9nC,EAAA,WAAA8nC,MACAmY,EAAAjgD,EAAA,YAAAigD,OAEAkB,EAAA,SAAAC,GACA5iD,KAAA6iD,QAAA,IACA,IAAAD,EAAAhjD,OACAI,KAAA6iD,QAAA,IACKj/C,MAAAqD,QAAA27C,GACL5iD,KAAA8iD,mBAAgC93B,IAAA,EAAAE,OAAA,GAAkB03B,GAElD5iD,KAAAyG,QAAqBukB,IAAA,EAAAE,OAAA,GAAiB03B,KAItC,WAEA9xC,EAAAF,UAAA5Q,KAAAi4B,GACAj4B,KAAA+iD,SAAA,SAAA1/B,GACA,IAAA8f,EAAAnjC,KAAAuxB,YAAA,EACAvxB,KAAA2G,OAAA,IAAA2iC,EAAA,IAAAnG,EAAAnjC,KAAAw/B,QAAA2D,GAAAvjC,SACAI,KAAAyG,QAAqBukB,IAAA,EAAAE,OAAA,GAAkB7H,IAEvCrjB,KAAAgjD,SAAA,WACA,OAAAhjD,KAAAijD,cAAAhhD,KAAAjC,KAAAkjD,wBAEAljD,KAAA6rC,aAAA,SAAA7gB,EAAAE,GACA,WAAAu2B,EAAAzhD,KAAAgrB,EAAAE,IAEA,UAAAppB,MAAA,KAAAlC,OACAI,KAAAmjD,OAAA,SAAA9/B,GACA,OAAAA,EAAAlhB,QAAA,iBAAAL,MAAA,OAGA9B,KAAAmjD,OAAA,SAAA9/B,GACA,OAAAA,EAAAvhB,MAAA,eAKA9B,KAAAojD,eAAA,SAAA//B,GACA,IAAArgB,EAAAqgB,EAAArgB,MAAA,qBACAhD,KAAAqjD,aAAArgD,IAAA,QACAhD,KAAA8wB,QAAA,sBAEA9wB,KAAAkjD,oBAAA,WACA,OAAAljD,KAAAsjD,cACA,cACA,aACA,WACA,WACA,QACA,OAAAtjD,KAAAqjD,cAAA,OAIArjD,KAAAqjD,aAAA,GACArjD,KAAAsjD,aAAA,OACAtjD,KAAAujD,eAAA,SAAAC,GACAxjD,KAAAsjD,eAAAE,IAGAxjD,KAAAsjD,aAAAE,EACAxjD,KAAA8wB,QAAA,uBAEA9wB,KAAAyjD,eAAA,WACA,OAAAzjD,KAAAsjD,cAEAtjD,KAAA0jD,UAAA,SAAArgC,GACA,cAAAA,GAAA,MAAAA,GAAA,MAAAA,GAEArjB,KAAAw/B,QAAA,SAAAxU,GACA,OAAAhrB,KAAA6iD,OAAA73B,IAAA,IAEAhrB,KAAA2jD,SAAA,SAAAhZ,EAAAC,GACA,OAAA5qC,KAAA6iD,OAAA7gD,MAAA2oC,EAAAC,EAAA,IAEA5qC,KAAAijD,YAAA,WACA,OAAAjjD,KAAA2jD,SAAA,EAAA3jD,KAAAuxB,cAEAvxB,KAAAuxB,UAAA,WACA,OAAAvxB,KAAA6iD,OAAAjjD,QAEAI,KAAAs1B,aAAA,SAAA/N,GACA,OAAAvnB,KAAA4jD,iBAAAr8B,GAAAtlB,KAAAjC,KAAAkjD,wBAEAljD,KAAA4jD,iBAAA,SAAAr8B,GACA,IAAAkf,EACA,GAAAlf,EAAArhB,MAAA8kB,MAAAzD,EAAAsC,IAAAmB,IACAyb,GAAAzmC,KAAAw/B,QAAAjY,EAAArhB,MAAA8kB,KAAAtF,UAAA6B,EAAArhB,MAAAglB,OAAA3D,EAAAsC,IAAAqB,aACS,EACTub,EAAAzmC,KAAA2jD,SAAAp8B,EAAArhB,MAAA8kB,IAAAzD,EAAAsC,IAAAmB,MACA,IAAAyb,EAAA,QAAA/gB,UAAA6B,EAAArhB,MAAAglB,QACA,IAAA5pB,EAAAmlC,EAAA7mC,OAAA,EACA2nB,EAAAsC,IAAAmB,IAAAzD,EAAArhB,MAAA8kB,KAAA1pB,IACAmlC,EAAAnlC,GAAAmlC,EAAAnlC,GAAAokB,UAAA,EAAA6B,EAAAsC,IAAAqB,SAEA,OAAAub,GAEAzmC,KAAA6jD,YAAA,SAAA74B,EAAAyb,GAEA,OADA/lC,QAAAk5B,KAAA,sFACA55B,KAAA8jD,gBAAA94B,EAAAyb,IAEAzmC,KAAA+jD,YAAA,SAAApZ,EAAAC,GAEA,OADAlqC,QAAAk5B,KAAA,sFACA55B,KAAAgkD,gBAAArZ,EAAAC,IAEA5qC,KAAAikD,cAAA,SAAAx1C,GAEA,OADA/N,QAAAk5B,KAAA,mGACA55B,KAAA8iD,kBAAAr0C,GAAA,SAEAzO,KAAAyG,OAAA,SAAAgI,EAAA4U,GAIA,OAHArjB,KAAAuxB,aAAA,GACAvxB,KAAAojD,eAAA//B,GAEArjB,KAAA8iD,kBAAAr0C,EAAAzO,KAAAmjD,OAAA9/B,KAEArjB,KAAAg/C,aAAA,SAAAvwC,EAAA4U,GACA,IAAAnd,EAAAlG,KAAAkkD,WAAAz1C,EAAAuc,IAAAvc,EAAAyc,QACArB,EAAA7pB,KAAAoG,IAAAqI,EAAAuc,IAAAvc,EAAAyc,OAAA7H,EAAAzjB,QASA,OAPAI,KAAAshD,YACAp7C,QACA2jB,MACAgb,OAAA,SACA4B,OAAApjB,KACS,GAETrjB,KAAAmkD,SAAAt6B,IAGA7pB,KAAAkkD,WAAA,SAAAl5B,EAAAE,GACA,IAAAtrB,EAAAI,KAAAuxB,iBACAtwB,IAAA+pB,EACAA,EAAAprB,EACSorB,EAAA,EACTA,EAAA,EACSA,GAAAprB,IACTorB,EAAAprB,EAAA,EACAsrB,OAAAjqB,GAEA,IAAA4kC,EAAA7lC,KAAAw/B,QAAAxU,GAIA,YAHA/pB,GAAAiqB,IACAA,EAAA2a,EAAAjmC,SAEgBorB,MAAAE,OADhBA,EAAA5kB,KAAAM,IAAAN,KAAAC,IAAA2kB,EAAA,GAAA2a,EAAAjmC,UAIAI,KAAAmkD,SAAA,SAAA/9C,GACA,OAAgB4kB,IAAA5kB,EAAA4kB,IAAAE,OAAA9kB,EAAA8kB,SAGhBlrB,KAAAoG,IAAA,SAAA4kB,EAAAE,GACA,OAAgBF,MAAAE,WAGhBlrB,KAAAokD,cAAA,SAAA31C,GACA,IAAA7O,EAAAI,KAAAuxB,YAQA,OAPA9iB,EAAAuc,KAAAprB,GACA6O,EAAAuc,IAAA1kB,KAAAC,IAAA,EAAA3G,EAAA,GACA6O,EAAAyc,OAAAlrB,KAAAw/B,QAAA5/B,EAAA,GAAAA,SAEA6O,EAAAuc,IAAA1kB,KAAAC,IAAA,EAAAkI,EAAAuc,KACAvc,EAAAyc,OAAA5kB,KAAAM,IAAAN,KAAAC,IAAAkI,EAAAyc,OAAA,GAAAlrB,KAAAw/B,QAAA/wB,EAAAuc,KAAAprB,SAEA6O,GAEAzO,KAAA8jD,gBAAA,SAAA94B,EAAAyb,GAEA,IAAAvb,EAAA,GADAF,EAAA1kB,KAAAM,IAAAN,KAAAC,IAAAykB,EAAA,GAAAhrB,KAAAuxB,cAEAvxB,KAAAuxB,aACAkV,IAAA3hC,QAAA,KACAomB,EAAA,IAEAub,GAAA,IAAA3hC,OAAA2hC,GACAzb,IACAE,EAAAlrB,KAAA6iD,OAAA73B,GAAAprB,QAEAI,KAAA8iD,mBAAgC93B,MAAAE,UAAyBub,IAEzDzmC,KAAA8iD,kBAAA,SAAAr0C,EAAAg4B,GACA,IAAAvgC,EAAAlG,KAAAkkD,WAAAz1C,EAAAuc,IAAAvc,EAAAyc,QACArB,GACAmB,IAAA9kB,EAAA8kB,IAAAyb,EAAA7mC,OAAA,EACAsrB,QAAA,GAAAub,EAAA7mC,OAAAsG,EAAAglB,OAAA,GAAAub,IAAA7mC,OAAA,GAAAA,QAUA,OAPAI,KAAAshD,YACAp7C,QACA2jB,MACAgb,OAAA,SACA4B,UAGAzmC,KAAAmkD,SAAAt6B,IAEA7pB,KAAA2G,OAAA,SAAA4gB,GACA,IAAArhB,EAAAlG,KAAAkkD,WAAA38B,EAAArhB,MAAA8kB,IAAAzD,EAAArhB,MAAAglB,QACArB,EAAA7pB,KAAAkkD,WAAA38B,EAAAsC,IAAAmB,IAAAzD,EAAAsC,IAAAqB,QAOA,OANAlrB,KAAAshD,YACAp7C,QACA2jB,MACAgb,OAAA,SACA4B,MAAAzmC,KAAA4jD,kBAA0C19C,QAAA2jB,UAE1C7pB,KAAAmkD,SAAAj+C,IAEAlG,KAAA6+C,aAAA,SAAA7zB,EAAAwe,EAAAE,GACA,IAAAxjC,EAAAlG,KAAAkkD,WAAAl5B,EAAAwe,GACA3f,EAAA7pB,KAAAkkD,WAAAl5B,EAAA0e,GASA,OAPA1pC,KAAAshD,YACAp7C,QACA2jB,MACAgb,OAAA,SACA4B,MAAAzmC,KAAA4jD,kBAA0C19C,QAAA2jB,UACjC,GAET7pB,KAAAmkD,SAAAj+C,IAEAlG,KAAAgkD,gBAAA,SAAArZ,EAAAC,GACAD,EAAArkC,KAAAM,IAAAN,KAAAC,IAAA,EAAAokC,GAAA3qC,KAAAuxB,YAAA,GAEA,IAAA8yB,GADAzZ,EAAAtkC,KAAAM,IAAAN,KAAAC,IAAA,EAAAqkC,GAAA5qC,KAAAuxB,YAAA,KACAvxB,KAAAuxB,YAAA,GAAAoZ,EAAA,EACA2Z,EAAA1Z,EAAA5qC,KAAAuxB,YAAA,EACAgY,EAAA8a,EAAA1Z,EAAA,EAAAA,EACAlC,EAAA4b,EAAArkD,KAAAw/B,QAAA+J,GAAA3pC,OAAA,EACA6pC,EAAA6a,EAAA1Z,EAAA,EAAAA,EACAlC,EAAA4b,EAAA,EAAAtkD,KAAAw/B,QAAAiK,GAAA7pC,OACA2nB,EAAA,IAAA+hB,EAAAC,EAAAd,EAAAgB,EAAAf,GACA6b,EAAAvkD,KAAA6iD,OAAA7gD,MAAA2oC,EAAAC,EAAA,GAQA,OANA5qC,KAAAshD,YACAp7C,MAAAqhB,EAAArhB,MACA2jB,IAAAtC,EAAAsC,IACAgb,OAAA,SACA4B,MAAAzmC,KAAA4jD,iBAAAr8B,KAEAg9B,GAEAvkD,KAAAwkD,cAAA,SAAAx5B,GACAA,EAAAhrB,KAAAuxB,YAAA,GAAAvG,GAAA,GACAhrB,KAAAshD,YACAp7C,MAAAlG,KAAAoG,IAAA4kB,EAAAhrB,KAAAw/B,QAAAxU,GAAAprB,QACAiqB,IAAA7pB,KAAAoG,IAAA4kB,EAAA,KACA6Z,OAAA,SACA4B,OAAA,UAIAzmC,KAAAmC,QAAA,SAAAolB,EAAAlE,GAGA,OAFAkE,aAAA+hB,IACA/hB,EAAA+hB,EAAAuB,WAAAtjB,EAAArhB,MAAAqhB,EAAAsC,MACA,IAAAxG,EAAAzjB,QAAA2nB,EAAA5C,UACA4C,EAAArhB,MACAmd,GAAArjB,KAAAs1B,aAAA/N,GACAA,EAAAsC,KAEA7pB,KAAA2G,OAAA4gB,GAEAlE,EACArjB,KAAAyG,OAAA8gB,EAAArhB,MAAAmd,GAGAkE,EAAArhB,QAKAlG,KAAAykD,YAAA,SAAAC,GACA,QAAAnlD,EAAA,EAAqBA,EAAAmlD,EAAA9kD,OAAiBL,IACtCS,KAAAshD,WAAAoD,EAAAnlD,KAGAS,KAAA2kD,aAAA,SAAAD,GACA,QAAAnlD,EAAAmlD,EAAA9kD,OAAA,EAAmCL,GAAA,EAAMA,IACzCS,KAAA4kD,YAAAF,EAAAnlD,KAGAS,KAAAshD,WAAA,SAAA9a,EAAAgb,GACA,IAAAqD,EAAA,UAAAre,EAAA3B,QACAggB,EAAAre,EAAAC,MAAA7mC,QAAA,IAAA4mC,EAAAC,MAAA,IACA6C,EAAAgC,cAAA9E,EAAAtgC,MAAAsgC,EAAA3c,QAIAg7B,GAAAre,EAAAC,MAAA7mC,OAAA,KACAI,KAAA8kD,yBAAAte,EAAA,KACA8a,EAAAthD,KAAA6iD,OAAArc,EAAAgb,GACAxhD,KAAA8wB,QAAA,SAAA0V,KAGAxmC,KAAA8kD,yBAAA,SAAAte,EAAAue,GAMA,IALA,IAAAte,EAAAD,EAAAC,MACAnlC,EAAAmlC,EAAA7mC,OACAorB,EAAAwb,EAAAtgC,MAAA8kB,IACAE,EAAAsb,EAAAtgC,MAAAglB,OACAvnB,EAAA,EAAAqhD,EAAA,IACA,CACArhD,EAAAqhD,EACAA,GAAAD,EAAA,EACA,IAAAE,EAAAxe,EAAAzkC,MAAA2B,EAAAqhD,GACA,GAAAA,EAAA1jD,EAAA,CACAklC,EAAAC,MAAAwe,EACAze,EAAAtgC,MAAA8kB,MAAArnB,EACA6iC,EAAAtgC,MAAAglB,SACA,MAEA+5B,EAAAxjD,KAAA,IACAzB,KAAAshD,YACAp7C,MAAAlG,KAAAoG,IAAA4kB,EAAArnB,EAAAunB,GACArB,IAAA7pB,KAAAoG,IAAA4kB,EAAAg6B,EAAA95B,EAAA,GACA2Z,OAAA2B,EAAA3B,OACA4B,MAAAwe,IACa,KAGbjlD,KAAA4kD,YAAA,SAAApe,GACAxmC,KAAAshD,YACAp7C,MAAAlG,KAAAmkD,SAAA3d,EAAAtgC,OACA2jB,IAAA7pB,KAAAmkD,SAAA3d,EAAA3c,KACAgb,OAAA,UAAA2B,EAAA3B,OAAA,kBACA4B,MAAAD,EAAAC,MAAAzkC,WAGAhC,KAAAklD,gBAAA,SAAA/gD,EAAAolC,GAGA,IAFA,IAAA9C,EAAAzmC,KAAA6iD,QAAA7iD,KAAAijD,cACAkC,EAAAnlD,KAAAkjD,sBAAAtjD,OACAL,EAAAgqC,GAAA,EAAAjoC,EAAAmlC,EAAA7mC,OAAqDL,EAAA+B,EAAO/B,IAE5D,IADA4E,GAAAsiC,EAAAlnC,GAAAK,OAAAulD,GACA,EACA,OAAwBn6B,IAAAzrB,EAAA2rB,OAAA/mB,EAAAsiC,EAAAlnC,GAAAK,OAAAulD,GAExB,OAAgBn6B,IAAA1pB,EAAA,EAAA4pB,OAAAub,EAAAnlC,EAAA,GAAA1B,SAEhBI,KAAAolD,gBAAA,SAAAh/C,EAAAmjC,GAKA,IAJA,IAAA9C,EAAAzmC,KAAA6iD,QAAA7iD,KAAAijD,cACAkC,EAAAnlD,KAAAkjD,sBAAAtjD,OACAuE,EAAA,EACA6mB,EAAA1kB,KAAAM,IAAAR,EAAA4kB,IAAAyb,EAAA7mC,QACAL,EAAAgqC,GAAA,EAAmChqC,EAAAyrB,IAASzrB,EAC5C4E,GAAAsiC,EAAAlnC,GAAAK,OAAAulD,EAEA,OAAAhhD,EAAAiC,EAAA8kB,UAGC9pB,KAAAuhD,EAAAzhD,WAED/B,EAAAwjD,aAGAhgD,IAAAzC,OAAA,yGAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,aACAy2B,EAAAz2B,EAAA,uBAAAy2B,aAEAotB,EAAA,SAAAC,EAAAn7B,GACAnqB,KAAAulD,SAAA,EACAvlD,KAAAymC,SACAzmC,KAAA4xC,UACA5xC,KAAAwlD,YAAA,EACAxlD,KAAAslD,YAEA,IAAA59C,EAAA1H,KAEAA,KAAAylD,QAAA,WACA,GAAA/9C,EAAA69C,QAAA,CAQA,IANA,IAAAG,EAAA,IAAAx6C,KACAs6C,EAAA99C,EAAA89C,YACAG,GAAA,EACA95C,EAAAnE,EAAAmE,IAEA+5C,EAAAJ,EACA99C,EAAA++B,MAAA+e,IACAA,IAEA,IAAAriB,EAAAt3B,EAAA0lB,YACAs0B,EAAA,EAEA,IADAn+C,EAAA69C,SAAA,EACAC,EAAAriB,GAAA,CACAz7B,EAAAo+C,aAAAN,GACAG,EAAAH,EACA,GACAA,UACa99C,EAAA++B,MAAA+e,IAEb,KADAK,EACA,UAAA36C,KAAAw6C,EAAA,IACAh+C,EAAA69C,QAAAzmC,WAAApX,EAAA+9C,QAAA,IACA,OAGA/9C,EAAA89C,eAEA,GAAAG,IACAA,EAAAH,GAEAI,GAAAD,GACAj+C,EAAAq+C,gBAAAH,EAAAD,OAIA,WAEA70C,EAAAF,UAAA5Q,KAAAi4B,GACAj4B,KAAAgmD,aAAA,SAAAV,GACAtlD,KAAAslD,YACAtlD,KAAAymC,SACAzmC,KAAA4xC,UAEA5xC,KAAAkG,MAAA,IAEAlG,KAAAimD,YAAA,SAAAp6C,GACA7L,KAAA6L,MACA7L,KAAAymC,SACAzmC,KAAA4xC,UAEA5xC,KAAAgvB,QAEAhvB,KAAA+lD,gBAAA,SAAApb,EAAAC,GACA,IAAAxqB,GACA8lC,MAAAvb,EACAhqB,KAAAiqB,GAEA5qC,KAAA8wB,QAAA,UAAgC1Q,UAEhCpgB,KAAAkG,MAAA,SAAAqjC,GACAvpC,KAAAwlD,YAAAl/C,KAAAM,IAAA2iC,GAAA,EAAAvpC,KAAAwlD,YAAAxlD,KAAA6L,IAAA0lB,aACAvxB,KAAAymC,MAAA5gC,OAAA7F,KAAAwlD,YAAAxlD,KAAAymC,MAAA7mC,QACAI,KAAA4xC,OAAA/rC,OAAA7F,KAAAwlD,YAAAxlD,KAAA4xC,OAAAhyC,QAEAI,KAAAgvB,OACAhvB,KAAAulD,QAAAzmC,WAAA9e,KAAAylD,QAAA,MAGAzlD,KAAAmmD,cAAA,WACAnmD,KAAAulD,UACAvlD,KAAAulD,QAAAzmC,WAAA9e,KAAAylD,QAAA,OAGAzlD,KAAAomD,gBAAA,SAAA5f,GACA,IAAA+C,EAAA/C,EAAAtgC,MAAA8kB,IACAmY,EAAAqD,EAAA3c,IAAAmB,IAAAue,EAEA,OAAApG,EACAnjC,KAAAymC,MAAA8C,GAAA,UACS,aAAA/C,EAAA3B,OACT7kC,KAAAymC,MAAA5gC,OAAA0jC,EAAApG,EAAA,QACAnjC,KAAA4xC,OAAA/rC,OAAA0jC,EAAApG,EAAA,YACS,CACT,IAAAx+B,EAAAf,MAAAu/B,EAAA,GACAx+B,EAAAyvC,QAAA7K,EAAA,GACAvpC,KAAAymC,MAAA5gC,OAAApF,MAAAT,KAAAymC,MAAA9hC,GACA3E,KAAA4xC,OAAA/rC,OAAApF,MAAAT,KAAA4xC,OAAAjtC,GAGA3E,KAAAwlD,YAAAl/C,KAAAM,IAAA2iC,EAAAvpC,KAAAwlD,YAAAxlD,KAAA6L,IAAA0lB,aAEAvxB,KAAAgvB,QAEAhvB,KAAAgvB,KAAA,WACAhvB,KAAAulD,SACA1mC,aAAA7e,KAAAulD,SACAvlD,KAAAulD,SAAA,GAEAvlD,KAAA+2C,UAAA,SAAA/rB,GACA,OAAAhrB,KAAAymC,MAAAzb,IAAAhrB,KAAA8lD,aAAA96B,IAEAhrB,KAAAqmD,SAAA,SAAAr7B,GAGA,OAFAhrB,KAAAwlD,aAAAx6B,GACAhrB,KAAA8lD,aAAA96B,GACAhrB,KAAA4xC,OAAA5mB,IAAA,SAGAhrB,KAAA8lD,aAAA,SAAA96B,GACA,IAAA6a,EAAA7lC,KAAA6L,IAAA2zB,QAAAxU,GACA6L,EAAA72B,KAAA4xC,OAAA5mB,EAAA,GAEA5K,EAAApgB,KAAAslD,UAAA1R,cAAA/N,EAAAhP,EAAA7L,GAWA,OATAhrB,KAAA4xC,OAAA5mB,GAAA,IAAA5K,EAAAyW,MAAA,IACA72B,KAAA4xC,OAAA5mB,GAAA5K,EAAAyW,MACA72B,KAAAymC,MAAAzb,EAAA,QACAhrB,KAAAwlD,YAAAx6B,EAAA,IACAhrB,KAAAwlD,YAAAx6B,EAAA,IACShrB,KAAAwlD,aAAAx6B,IACThrB,KAAAwlD,YAAAx6B,EAAA,GAGAhrB,KAAAymC,MAAAzb,GAAA5K,EAAAizB,UAGCjyC,KAAAikD,EAAAnkD,WAED/B,EAAAkmD,wBAGA1iD,IAAAzC,OAAA,wGAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4jB,EAAAthB,EAAA,cAEA8nC,GADA9nC,EAAA,aACAA,EAAA,WAAA8nC,OAEAgd,EAAA,SAAAvkC,EAAAwkC,EAAAtrC,GACAjb,KAAAwmD,UAAAzkC,GACA/hB,KAAAumD,QACAvmD,KAAAib,QAAA,SAGA,WACAjb,KAAAymD,WAAA,IAEAzmD,KAAAwmD,UAAA,SAAAzkC,GACA/hB,KAAA+hB,OAAA,IAAAA,EAAA,KAEA/hB,KAAA+hB,SACA/hB,KAAA0mD,WAGA1mD,KAAA2mD,OAAA,SAAAn3B,EAAAo3B,EAAAv/B,EAAA8V,GACA,GAAAn9B,KAAA+hB,OAIA,IAFA,IAAA7b,EAAAi3B,EAAAwN,SAAA9gB,EAAAsT,EAAAyN,QAEArrC,EAAA2G,EAA2B3G,GAAAsqB,EAAUtqB,IAAA,CACrC,IAAA4xC,EAAAnxC,KAAA0mD,MAAAnnD,GACA,MAAA4xC,KACAA,EAAAruB,EAAAhB,gBAAAuF,EAAAmY,QAAAjgC,GAAAS,KAAA+hB,SACAniB,OAAAI,KAAAymD,aACAtV,IAAAnvC,MAAA,EAAAhC,KAAAymD,aACAtV,IAAAvpC,IAAA,SAAA5E,GACA,WAAAsmC,EAAA/pC,EAAAyD,EAAAif,OAAA1iB,EAAAyD,EAAAif,OAAAjf,EAAApD,UAEAI,KAAA0mD,MAAAnnD,GAAA4xC,EAAAvxC,OAAAuxC,EAAA,IAGA,QAAArV,EAAAqV,EAAAvxC,OAAuCk8B,KACvC8qB,EAAAC,qBACAr3B,EAAA2hB,EAAArV,GAAAmP,cAAA5jB,GAAArnB,KAAAumD,MAAAppB,OAKC/7B,KAAAklD,EAAAplD,WAED/B,EAAAmnD,oBAGA3jD,IAAAzC,OAAA,iFAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAoqC,EAAA9nC,EAAA,YAAA8nC,MACA,SAAAwd,EAAAC,EAAAC,GACAhnD,KAAA+mD,WACAnjD,MAAAqD,QAAA+/C,GACAhnD,KAAAgnD,QAEAA,EAAAhnD,KAAAgnD,UAGA,IAAArmC,EAAAqmC,IAAApnD,OAAA,GACAI,KAAAunB,MAAA,IAAA+hB,EAAA0d,EAAA,GAAA9gD,MAAA8kB,IAAAg8B,EAAA,GAAA9gD,MAAAglB,OACAvK,EAAAkJ,IAAAmB,IAAArK,EAAAkJ,IAAAqB,QACAlrB,KAAAkG,MAAAlG,KAAAunB,MAAArhB,MACAlG,KAAA6pB,IAAA7pB,KAAAunB,MAAAsC,IAEA7pB,KAAAgnD,MAAA1/C,QAAA,SAAA03B,GACAA,EAAAioB,YAAAjnD,OACKA,OAGL,WACAA,KAAAknD,SAAA,SAAAx1C,GACA1R,KAAAkG,MAAA8kB,KAAAtZ,EACA1R,KAAA6pB,IAAAmB,KAAAtZ,EACA1R,KAAAgnD,MAAA1/C,QAAA,SAAA03B,GACAA,EAAA94B,MAAA8kB,KAAAtZ,EACAstB,EAAAnV,IAAAmB,KAAAtZ,KAIA1R,KAAAy/B,QAAA,SAAAT,GACA,GAAAA,EAAAmoB,QAAA,CACA,GAAAnoB,EAAA94B,MAAA8kB,IAAAhrB,KAAAupC,UAAAvK,EAAAyK,OAAAzpC,KAAAypC,OACA,UAAA3pC,MAAA,6DAEAE,KAAAgnD,MAAAvlD,KAAAu9B,GACAh/B,KAAAgnD,MAAAI,KAAA,SAAArhD,EAAAshD,GACA,OAAAthD,EAAAwhB,MAAAijB,WAAA6c,EAAAnhD,MAAA8kB,IAAAq8B,EAAAnhD,MAAAglB,UAEAlrB,KAAAunB,MAAAijB,WAAAxL,EAAA94B,MAAA8kB,IAAAgU,EAAA94B,MAAAglB,QAAA,GACAlrB,KAAA6pB,IAAAmB,IAAAgU,EAAAnV,IAAAmB,IACAhrB,KAAA6pB,IAAAqB,OAAA8T,EAAAnV,IAAAqB,QACalrB,KAAAunB,MAAAgjB,aAAAvL,EAAAnV,IAAAmB,IAAAgU,EAAAnV,IAAAqB,QAAA,IACblrB,KAAAkG,MAAA8kB,IAAAgU,EAAA94B,MAAA8kB,IACAhrB,KAAAkG,MAAAglB,OAAA8T,EAAA94B,MAAAglB,aAES,GAAA8T,EAAA94B,MAAA8kB,KAAAhrB,KAAA6pB,IAAAmB,IACThrB,KAAAgnD,MAAAvlD,KAAAu9B,GACAh/B,KAAA6pB,IAAAmB,IAAAgU,EAAAnV,IAAAmB,IACAhrB,KAAA6pB,IAAAqB,OAAA8T,EAAAnV,IAAAqB,WACS,IAAA8T,EAAAnV,IAAAmB,KAAAhrB,KAAAkG,MAAA8kB,IAKT,UAAAlrB,MAAA,kEAJAE,KAAAgnD,MAAA5S,QAAApV,GACAh/B,KAAAkG,MAAA8kB,IAAAgU,EAAA94B,MAAA8kB,IACAhrB,KAAAkG,MAAAglB,OAAA8T,EAAA94B,MAAAglB,OAIA8T,EAAAuP,SAAAvuC,MAGAA,KAAAsnD,YAAA,SAAAt8B,GACA,OAAAA,GAAAhrB,KAAAkG,MAAA8kB,QAAAhrB,KAAA6pB,IAAAmB,KAGAhrB,KAAAunD,KAAA,SAAAxmD,EAAA0oC,EAAAC,GACA,IAEA1K,EACA/T,EAHAu8B,EAAA,EACAR,EAAAhnD,KAAAgnD,MAEAS,GAAA,EAEA,MAAAhe,IACAA,EAAAzpC,KAAA6pB,IAAAmB,IACA0e,EAAA1pC,KAAA6pB,IAAAqB,QAGA,QAAA3rB,EAAA,EAAuBA,EAAAynD,EAAApnD,OAAkBL,IAAA,CAIzC,QADA0rB,GAFA+T,EAAAgoB,EAAAznD,IAEAgoB,MAAAgjB,aAAAd,EAAAC,IAGA,YADA3oC,EAAA,KAAA0oC,EAAAC,EAAA8d,EAAAC,GAMA,IAFA1mD,EAAA,KAAAi+B,EAAA94B,MAAA8kB,IAAAgU,EAAA94B,MAAAglB,OAAAs8B,EAAAC,IACA1mD,EAAAi+B,EAAA0oB,YAAA1oB,EAAA94B,MAAA8kB,IAAAgU,EAAA94B,MAAAglB,OAAAs8B,IACA,IAAAv8B,EACA,OAEAw8B,GAAAzoB,EAAAmoB,QACAK,EAAAxoB,EAAAnV,IAAAqB,OAEAnqB,EAAA,KAAA0oC,EAAAC,EAAA8d,EAAAC,IAGAznD,KAAA2nD,cAAA,SAAA38B,EAAAE,GAEA,IADA,IAAA8T,EAAA/T,EACA1rB,EAAA,EAAuBA,EAAAS,KAAAgnD,MAAApnD,OAAuBL,IAAA,CAG9C,QADA0rB,GADA+T,EAAAh/B,KAAAgnD,MAAAznD,IACAgoB,MAAAijB,WAAAxf,EAAAE,IAEA,OACA8T,OACA4oB,KAAA,SAEa,OAAA38B,EACb,OACA+T,OACA4oB,KAAA,UAIA,aAGA5nD,KAAA6nD,eAAA,SAAA78B,EAAAE,EAAAiY,GACA,IACAnE,EAAAgoB,EADAh2C,EAAAhR,KAAA2nD,cAAA38B,EAAAE,GAEA,GAAAla,EAEA,GADAguB,EAAAhuB,EAAAguB,KACA,UAAAhuB,EAAA42C,MACA5oB,EAAA94B,MAAAglB,WACA8T,EAAA94B,MAAA8kB,OAEA/qB,OAAAS,SAAAT,OAAAS,QAAAonD,IAAA98B,EAAAE,EAAA8T,QACa,GAAAA,EAAA94B,MAAA8kB,OAAA,CAEb,IAAAzrB,GADAynD,EAAAhnD,KAAAgnD,OACAnnD,QAAAm/B,GAIA,IAHA,IAAAz/B,IACAS,KAAAkG,MAAAglB,QAAAiY,GAEuB5jC,EAAAynD,EAAApnD,OAAkBL,IAAA,CAGzC,IAFAy/B,EAAAgoB,EAAAznD,IACA2G,MAAAglB,QAAAiY,GACAnE,EAAAmoB,QACA,OAEAnoB,EAAAnV,IAAAqB,QAAAiY,EAEAnjC,KAAA6pB,IAAAqB,QAAAiY,IAKAnjC,KAAA8B,MAAA,SAAAkpB,EAAAE,GACA,IAAA9kB,EAAApG,KAAA2nD,cAAA38B,EAAAE,GAEA,IAAA9kB,GAAA,UAAAA,EAAAwhD,KACA,YAEA,IAAA5oB,EAAA54B,EAAA44B,KACAgoB,EAAAhnD,KAAAgnD,MACAD,EAAA/mD,KAAA+mD,SAEAxnD,EAAAynD,EAAAnnD,QAAAm/B,GACA+oB,EAAAf,EAAAznD,EAAA,GACAS,KAAA6pB,IAAAmB,IAAA+8B,EAAAl+B,IAAAmB,IACAhrB,KAAA6pB,IAAAqB,OAAA68B,EAAAl+B,IAAAqB,OAGA,IAAA88B,EAAA,IAAAlB,EAAAC,EAFAC,IAAAnhD,OAAAtG,EAAAynD,EAAApnD,OAAAL,IAIA,OADAwnD,EAAAlhD,OAAAkhD,EAAAlnD,QAAAG,MAAA,IAAAgoD,GACAA,GAGAhoD,KAAAm0C,MAAA,SAAA8T,GAEA,IADA,IAAAjB,EAAAiB,EAAAjB,MACAznD,EAAA,EAAuBA,EAAAynD,EAAApnD,OAAkBL,IACzCS,KAAAy/B,QAAAunB,EAAAznD,IAEA,IAAAwnD,EAAA/mD,KAAA+mD,SACAA,EAAAlhD,OAAAkhD,EAAAlnD,QAAAooD,GAAA,IAGAjoD,KAAAmB,SAAA,WACA,IAAA6P,GAAAhR,KAAAunB,MAAApmB,WAAA,OAMA,OAJAnB,KAAAgnD,MAAA1/C,QAAA,SAAA03B,GACAhuB,EAAAvP,KAAA,KAAAu9B,EAAA79B,cAEA6P,EAAAvP,KAAA,KACAuP,EAAA/O,KAAA,OAGAjC,KAAAkoD,cAAA,SAAAC,GAGA,IAFA,IAAAC,EAAA,EAEA7oD,EAAA,EAAuBA,EAAAS,KAAAgnD,MAAApnD,OAAuBL,IAAA,CAC9C,IAAAy/B,EAAAh/B,KAAAgnD,MAAAznD,GAGA,IADA4oD,GAAAnpB,EAAA94B,MAAAglB,OAAAk9B,GACA,EACA,OACAp9B,IAAAgU,EAAA94B,MAAA8kB,IACAE,OAAA8T,EAAA94B,MAAAglB,OAAAi9B,GAKA,IADAA,GAAAnpB,EAAA0oB,YAAA9nD,QACA,EACA,OAAAo/B,EAAA94B,MAGAkiD,EAAAppB,EAAAnV,IAAAqB,OAGA,OACAF,IAAAhrB,KAAA6pB,IAAAmB,IACAE,OAAAlrB,KAAA6pB,IAAAqB,OAAAi9B,MAGC/mD,KAAA0lD,EAAA5lD,WAED/B,EAAA2nD,aAGAnkD,IAAAzC,OAAA,qEAAAsB,EAAArC,EAAAD,GACA,aACA,IACAosC,EADA9pC,EAAA,WAAA8nC,MACAgC,cAEA+c,EAAA,WACAroD,KAAAmxC,YAGA,WACAnxC,KAAAsrC,gBAEAtrC,KAAAsoD,WAAA,SAAAliD,EAAAmiD,EAAAC,GAGA,IAFA,IAAA1S,EAAA91C,KAAAmxC,OAEA5xC,EAAAipD,GAAA,EAAqCjpD,EAAAu2C,EAAAl2C,OAAiBL,IAAA,CACtD,IAAAgoB,EAAAuuB,EAAAv2C,GACAwtB,EAAAue,EAAAllC,EAAAmhB,EAAAsC,KACA,KAAAkD,EAAA,IAEA,IAAAD,EAAAwe,EAAAllC,EAAAmhB,EAAArhB,OACA,WAAA6mB,EACAw7B,GAAA,IAAAz7B,GAAAvtB,EAAA,EAAAA,EACAutB,EAAA,OAAAA,IAAAy7B,EACAhpD,GAEAA,EAAA,GAEA,OAAAA,EAAA,GAGAS,KAAA0G,IAAA,SAAA6gB,GACA,IAAAghC,GAAAhhC,EAAA5C,UACA6jC,EAAAxoD,KAAAsoD,WAAA/gC,EAAArhB,MAAAqiD,GACAC,EAAA,IACAA,KAAA,GAEA,IAAAC,EAAAzoD,KAAAsoD,WAAA/gC,EAAAsC,IAAA0+B,EAAAC,GAMA,OAJAC,EAAA,EACAA,KAAA,EAEAA,IACAzoD,KAAAmxC,OAAAtrC,OAAA2iD,EAAAC,EAAAD,EAAAjhC,IAGAvnB,KAAA0oD,QAAA,SAAA5S,GAEA,IADA,IAAAtvC,KACAjH,EAAAu2C,EAAAl2C,OAAiCL,KACjCiH,EAAA/E,KAAAhB,MAAA+F,EAAAxG,KAAA0G,IAAAovC,EAAAv2C,KAEA,OAAAiH,GAGAxG,KAAA2oD,eAAA,SAAAviD,GACA,IAAA7G,EAAAS,KAAAsoD,WAAAliD,GAEA,GAAA7G,GAAA,EACA,OAAAS,KAAAmxC,OAAAtrC,OAAAtG,EAAA,IAEAS,KAAAm0C,MAAA,WASA,IARA,IAOA5sB,EAPA/gB,KACAsvC,EAAA91C,KAAAmxC,OAMA8C,GAJA6B,IAAAsR,KAAA,SAAArhD,EAAAshD,GACA,OAAA/b,EAAAvlC,EAAAG,MAAAmhD,EAAAnhD,UAGA,GACA3G,EAAA,EAAuBA,EAAAu2C,EAAAl2C,OAAiBL,IAAA,CACxCgoB,EAAA0sB,EACAA,EAAA6B,EAAAv2C,GACA,IAAA0rB,EAAAqgB,EAAA/jB,EAAAsC,IAAAoqB,EAAA/tC,OACA+kB,EAAA,IAGA,GAAAA,GAAA1D,EAAA5C,WAAAsvB,EAAAtvB,aAGA2mB,EAAA/jB,EAAAsC,IAAAoqB,EAAApqB,KAAA,IACAtC,EAAAsC,IAAAmB,IAAAipB,EAAApqB,IAAAmB,IACAzD,EAAAsC,IAAAqB,OAAA+oB,EAAApqB,IAAAqB,QAGA4qB,EAAAjwC,OAAAtG,EAAA,GACAiH,EAAA/E,KAAAwyC,GACAA,EAAA1sB,EACAhoB,KAKA,OAFAS,KAAAmxC,OAAA2E,EAEAtvC,GAGAxG,KAAAiuB,SAAA,SAAAjD,EAAAE,GACA,OAAAlrB,KAAAsoD,YAAgCt9B,MAAAE,YAAyB,GAGzDlrB,KAAA4oD,cAAA,SAAAxiD,GACA,OAAApG,KAAAsoD,WAAAliD,IAAA,GAGApG,KAAA6oD,aAAA,SAAAziD,GACA,IAAA7G,EAAAS,KAAAsoD,WAAAliD,GACA,GAAA7G,GAAA,EACA,OAAAS,KAAAmxC,OAAA5xC,IAIAS,KAAA0qC,SAAA,SAAAnB,EAAAE,GACA,IAAAqM,EAAA91C,KAAAmxC,OACA,GAAA2E,EAAA,GAAA5vC,MAAA8kB,IAAAye,GAAAqM,IAAAl2C,OAAA,GAAAsG,MAAA8kB,IAAAue,EACA,SAEA,IAAAif,EAAAxoD,KAAAsoD,YAA0Ct9B,IAAAue,EAAAre,OAAA,IAC1Cs9B,EAAA,IACAA,KAAA,GACA,IAAAC,EAAAzoD,KAAAsoD,YAAwCt9B,IAAAye,EAAAve,OAAA,GAAuBs9B,GAC/DC,EAAA,IACAA,KAAA,GAGA,IADA,IAAAK,KACAvpD,EAAAipD,EAAgCjpD,EAAAkpD,EAAclpD,IAC9CupD,EAAArnD,KAAAq0C,EAAAv2C,IAEA,OAAAupD,GAGA9oD,KAAA+oD,UAAA,WACA,OAAA/oD,KAAAmxC,OAAAtrC,OAAA,EAAA7F,KAAAmxC,OAAAvxC,SAGAI,KAAAugC,OAAA,SAAAlZ,GACArnB,KAAAqnB,SACArnB,KAAAwgC,SAEAxgC,KAAAqnB,UACArnB,KAAAumC,SAAAvmC,KAAA0hD,UAAAl9C,KAAAxE,MAEAA,KAAAqnB,QAAAc,GAAA,SAAAnoB,KAAAumC,WAGAvmC,KAAAwgC,OAAA,WACAxgC,KAAAqnB,UAEArnB,KAAAqnB,QAAA9L,eAAA,SAAAvb,KAAAumC,UACAvmC,KAAAqnB,QAAA,OAGArnB,KAAA0hD,UAAA,SAAAlb,GACA,aAAAA,EAAA3B,OACA,IAAA3+B,EAAAsgC,EAAAtgC,MACA2jB,EAAA2c,EAAA3c,SAEAA,EAAA2c,EAAAtgC,MACAA,EAAAsgC,EAAA3c,IASA,IAPA,IAAA0f,EAAArjC,EAAA8kB,IAEAg+B,EADAn/B,EAAAmB,IACAue,EAEAmW,GAAAx5C,EAAAglB,OAAArB,EAAAqB,OACAimB,EAAAnxC,KAAAmxC,OAEA5xC,EAAA,EAAAkM,EAAA0lC,EAAAvxC,OAA0CL,EAAAkM,EAAOlM,IAAA,CAEjD,MADA4nB,EAAAgqB,EAAA5xC,IACAsqB,IAAAmB,IAAAue,GAAA,CAEA,GAAApiB,EAAAjhB,MAAA8kB,IAAAue,EACA,MASA,GAPApiB,EAAAjhB,MAAA8kB,KAAAue,GAAApiB,EAAAjhB,MAAAglB,QAAAhlB,EAAAglB,SACA/D,EAAAjhB,MAAAglB,QAAAhlB,EAAAglB,QAAAlrB,KAAAiiD,eAEA96B,EAAAjhB,MAAAglB,QAAAw0B,EACAv4B,EAAAjhB,MAAA8kB,KAAAg+B,IAGA7hC,EAAA0C,IAAAmB,KAAAue,GAAApiB,EAAA0C,IAAAqB,QAAAhlB,EAAAglB,OAAA,CACA,GAAA/D,EAAA0C,IAAAqB,QAAAhlB,EAAAglB,QAAAlrB,KAAAiiD,aACA,SAEA96B,EAAA0C,IAAAqB,QAAAhlB,EAAAglB,QAAAw0B,EAAA,GAAAngD,EAAAkM,EAAA,GACA0b,EAAA0C,IAAAqB,OAAA/D,EAAAjhB,MAAAglB,QAAA/D,EAAA0C,IAAAqB,QAAAimB,EAAA5xC,EAAA,GAAA2G,MAAAglB,SACA/D,EAAA0C,IAAAqB,QAAAw0B,GAEAv4B,EAAA0C,IAAAqB,QAAAw0B,EACAv4B,EAAA0C,IAAAmB,KAAAg+B,IAIA,MAAAA,GAAAzpD,EAAAkM,EACA,KAAkBlM,EAAAkM,EAAOlM,IAAA,CACzB,IAAA4nB,KAAAgqB,EAAA5xC,IACA2G,MAAA8kB,KAAAg+B,EACA7hC,EAAA0C,IAAAmB,KAAAg+B,MAKC5nD,KAAAinD,EAAAnnD,WAED/B,EAAAkpD,cAGA1lD,IAAAzC,OAAA,2GAAAsB,EAAArC,EAAAD,GACA,aAEAsC,EAAA,YAAA8nC,MAAA,IACA+e,EAAA7mD,EAAA,iBAAA6mD,UACAv3C,EAAAtP,EAAA,cACAynD,EAAA9pD,EAAA8pD,KAAA,SAAA1hC,EAAAmgC,GACA1nD,KAAAuuC,SAAA,KACAvuC,KAAA0nD,cACA1nD,KAAAunB,QACAvnB,KAAAkG,MAAAqhB,EAAArhB,MACAlG,KAAA6pB,IAAAtC,EAAAsC,IAEA7pB,KAAAmnD,QAAA5/B,EAAArhB,MAAA8kB,KAAAzD,EAAAsC,IAAAmB,IACAhrB,KAAAkpD,SAAAlpD,KAAAmxC,WAqEA,SAAAgY,EAAAjH,EAAA/2B,GACA+2B,EAAAl3B,KAAAG,EAAAH,IACA,GAAAk3B,EAAAl3B,MACAk3B,EAAAh3B,QAAAC,EAAAD,QAMA,SAAAk+B,EAAAlH,EAAA/2B,GACA,GAAA+2B,EAAAl3B,MACAk3B,EAAAh3B,QAAAC,EAAAD,QACAg3B,EAAAl3B,KAAAG,EAAAH,IA9EAla,EAAAR,SAAA24C,EAAAZ,GAEA,WAEAroD,KAAAmB,SAAA,WACA,UAAAnB,KAAA0nD,YAAA,KAAA1nD,KAAAunB,MAAApmB,YAGAnB,KAAAinD,YAAA,SAAA1Y,GACAvuC,KAAAuuC,WACAvuC,KAAAkpD,SAAA5hD,QAAA,SAAA03B,GACAA,EAAAioB,YAAA1Y,MAIAvuC,KAAA+qC,MAAA,WACA,IAAAxjB,EAAAvnB,KAAAunB,MAAAwjB,QACA/L,EAAA,IAAAiqB,EAAA1hC,EAAAvnB,KAAA0nD,aAKA,OAJA1nD,KAAAkpD,SAAA5hD,QAAA,SAAA+hD,GACArqB,EAAAkqB,SAAAznD,KAAA4nD,EAAAte,WAEA/L,EAAAsqB,iBAAAtpD,KAAAspD,iBACAtqB,GAGAh/B,KAAAupD,WAAA,SAAAvqB,GACA,IAAAh/B,KAAAunB,MAAAoiB,QAAA3K,GAAA,CAGA,IAAAh/B,KAAAunB,MAAAwiB,cAAA/K,GACA,UAAAl/B,MAAA,+CAAAk/B,EAAAzX,MAAAvnB,KAAAunB,QAyCA,SAAAA,EAAA4D,GACAg+B,EAAA5hC,EAAArhB,MAAAilB,GACAg+B,EAAA5hC,EAAAsC,IAAAsB,GA1CAq+B,CAAAxqB,EAAAh/B,KAAAkG,OAGA,IADA,IAAA8kB,EAAAgU,EAAA94B,MAAA8kB,IAAAE,EAAA8T,EAAA94B,MAAAglB,OACA3rB,EAAA,EAAA0rB,GAAA,EAAiC1rB,EAAAS,KAAAkpD,SAAAtpD,QAEjC,IADAqrB,EAAAjrB,KAAAkpD,SAAA3pD,GAAAgoB,MAAAqiB,QAAA5e,EAAAE,IAD2D3rB,KAK3D,IAAAkqD,EAAAzpD,KAAAkpD,SAAA3pD,GAEA,MAAA0rB,EACA,OAAAw+B,EAAAF,WAAAvqB,GACAhU,EAAAgU,EAAAzX,MAAAsC,IAAAmB,IAAAE,EAAA8T,EAAAzX,MAAAsC,IAAAqB,OAAA,IACA4Q,EAAAv8B,EAAA,IAAA0rB,GAAA,EAAiC6Q,EAAA97B,KAAAkpD,SAAAtpD,QAEjC,IADAqrB,EAAAjrB,KAAAkpD,SAAAptB,GAAAvU,MAAAqiB,QAAA5e,EAAAE,IAD2D4Q,KAK3D97B,KAAAkpD,SAAAptB,GAEA,MAAA7Q,EACA,UAAAnrB,MAAA,+CAAAk/B,EAAAzX,MAAAvnB,KAAAunB,OAEAvnB,KAAAkpD,SAAArjD,OAAAtG,EAAAu8B,EAAAv8B,EAAAy/B,GAGA,OAFAA,EAAAioB,YAAAjnD,KAAAuuC,UAEAvP,IAGAh/B,KAAA0pD,aAAA,SAAAniC,GACA,OAmBA,SAAAA,EAAA4D,GACAi+B,EAAA7hC,EAAArhB,MAAAilB,GACAi+B,EAAA7hC,EAAAsC,IAAAsB,GArBAu+B,CAAAniC,EAAAvnB,KAAAkG,SAGC9E,KAAA6nD,EAAA/nD,aAuBDyB,IAAAzC,OAAA,yJAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAoqC,EAAA9nC,EAAA,YAAA8nC,MACAwd,EAAAtlD,EAAA,eAAAslD,SACAmC,EAAAznD,EAAA,UAAAynD,KACAxS,EAAAj1C,EAAA,qBAAAi1C,cAkuBAt3C,EAAAwqD,QAhuBA,WACA3pD,KAAAi/B,UAAA,SAAAjU,EAAAE,EAAA0+B,GACA,IAAArb,EAAAvuC,KAAAwuC,YAAAxjB,GACA,IAAAujB,EACA,YAGA,IADA,IAAAyY,EAAAzY,EAAAyY,MACAznD,EAAA,EAAuBA,EAAAynD,EAAApnD,OAAkBL,IAAA,CACzC,IAAAy/B,EAAAgoB,EAAAznD,GACA,GAAAy/B,EAAAzX,MAAA0G,SAAAjD,EAAAE,GAAA,CACA,MAAA0+B,GAAA5qB,EAAAzX,MAAA0iB,MAAAjf,EAAAE,GACA,SACiB,OAAA0+B,GAAA5qB,EAAAzX,MAAA2iB,QAAAlf,EAAAE,GACjB,SAEA,OAAA8T,KAIAh/B,KAAA6pD,gBAAA,SAAAtiC,GACA,IAAArhB,EAAAqhB,EAAArhB,MACA2jB,EAAAtC,EAAAsC,IACAigC,EAAA9pD,KAAA+pD,UACAC,KAEA9jD,EAAAglB,QAAA,EACArB,EAAAqB,QAAA,EAEA,QAAA3rB,EAAA,EAAuBA,EAAAuqD,EAAAlqD,OAAsBL,IAAA,CAC7C,IAAA0rB,EAAA6+B,EAAAvqD,GAAAgoB,MAAAsiB,aAAAtiB,GACA,MAAA0D,EAAA,CAGA,OAAAA,EACA,MAIA,IADA,IAAA+7B,EAAA8C,EAAAvqD,GAAAynD,MACAlrB,EAAA,EAA2BA,EAAAkrB,EAAApnD,OAAkBk8B,IAAA,CAC7C,IAAAkD,EAAAgoB,EAAAlrB,GAEA,QADA7Q,EAAA+T,EAAAzX,MAAAsiB,aAAAtiB,IAEA,MACiB,MAAA0D,EAAA,CAGjB,OAAAA,EACA,MAEA++B,EAAAvoD,KAAAu9B,MAMA,OAHA94B,EAAAglB,QAAA,EACArB,EAAAqB,QAAA,EAEA8+B,GAGAhqD,KAAAiqD,oBAAA,SAAA9Y,GACA,GAAAvtC,MAAAqD,QAAAkqC,GAAA,CACA,IAAA6V,KACA7V,EAAA7pC,QAAA,SAAAigB,GACAy/B,IAAAliD,OAAA9E,KAAA6pD,gBAAAtiC,KACavnB,WAEbgnD,EAAAhnD,KAAA6pD,gBAAA1Y,GAEA,OAAA6V,GAEAhnD,KAAAkqD,YAAA,WAIA,IAHA,IAAAlD,KACA8C,EAAA9pD,KAAA+pD,UAEAxqD,EAAA,EAAuBA,EAAAuqD,EAAAlqD,OAAsBL,IAC7C,QAAAu8B,EAAA,EAA2BA,EAAAguB,EAAAvqD,GAAAynD,MAAApnD,OAA+Bk8B,IAC1DkrB,EAAAvlD,KAAAqoD,EAAAvqD,GAAAynD,MAAAlrB,IAEA,OAAAkrB,GAEAhnD,KAAA8vC,gBAAA,SAAA9kB,EAAAE,EAAA5f,EAAAijC,GAEA,KADAA,KAAAvuC,KAAAwuC,YAAAxjB,IAEA,YAMA,IAJA,IAGA1nB,EAAA07B,EAHAmrB,GACAtgC,KAAkBqB,OAAA,IAGlB3rB,EAAA,EAAuBA,EAAAgvC,EAAAyY,MAAApnD,OAA2BL,IAAA,CAElD,IAAA0rB,GADA+T,EAAAuP,EAAAyY,MAAAznD,IACAgoB,MAAAijB,WAAAxf,EAAAE,GACA,OAAAD,EAAA,CACA3nB,EAAAtD,KACAw/B,QAAAR,EAAA94B,MAAA8kB,KACAtF,UAAAykC,EAAAtgC,IAAAqB,OAAA8T,EAAA94B,MAAAglB,QACA,MAEA,OAAAD,EACA,YAEAk/B,EAAAnrB,EAKA,OAHA17B,IACAA,EAAAtD,KAAAw/B,QAAAR,EAAA94B,MAAA8kB,KAAAtF,UAAAykC,EAAAtgC,IAAAqB,UAEA,GAAA5f,EACAhI,EAAAoiB,UAAA,EAAAwF,EAAAi/B,EAAAtgC,IAAAqB,QACA,GAAA5f,EACAhI,EAAAoiB,UAAAwF,EAAAi/B,EAAAtgC,IAAAqB,QAEA5nB,GAGAtD,KAAAwuC,YAAA,SAAArI,EAAAikB,GACA,IAAArD,EAAA/mD,KAAA+pD,UACAxqD,EAAA,EAKA,IAJA6qD,IACA7qD,EAAAwnD,EAAAlnD,QAAAuqD,KACA,GAAA7qD,IACAA,EAAA,GACeA,EAAAwnD,EAAAnnD,OAAqBL,IAAA,CACpC,IAAAgvC,EAAAwY,EAAAxnD,GACA,GAAAgvC,EAAAroC,MAAA8kB,KAAAmb,GAAAoI,EAAA1kB,IAAAmB,KAAAmb,EACA,OAAAoI,EACa,GAAAA,EAAA1kB,IAAAmB,IAAAmb,EACb,YAGA,aAEAnmC,KAAAqqD,gBAAA,SAAAlkB,EAAAikB,GACA,IAAArD,EAAA/mD,KAAA+pD,UACAxqD,EAAA,EAKA,IAJA6qD,IACA7qD,EAAAwnD,EAAAlnD,QAAAuqD,KACA,GAAA7qD,IACAA,EAAA,GACeA,EAAAwnD,EAAAnnD,OAAqBL,IAAA,CACpC,IAAAgvC,EAAAwY,EAAAxnD,GACA,GAAAgvC,EAAA1kB,IAAAmB,KAAAmb,EACA,OAAAoI,EAGA,aAGAvuC,KAAAsqD,kBAAA,SAAApE,EAAAvlC,GAEA,IADA,IAAAomC,EAAA/mD,KAAA+pD,UAAA3S,EAAAz2B,EAAAulC,EAAA,EACA3mD,EAAA,EAAuBA,EAAAwnD,EAAAnnD,OAAqBL,IAAA,CAC5C,IAAAgvC,EAAAwY,EAAAxnD,GACAsqB,EAAA0kB,EAAA1kB,IAAAmB,IACA9kB,EAAAqoC,EAAAroC,MAAA8kB,IACA,GAAAnB,GAAAlJ,EAAA,CACAza,EAAAya,IACAza,GAAAggD,EACA9O,GAAAz2B,EAAAza,EAEAkxC,EAAA,GAEA,MACavtB,GAAAq8B,IAEb9O,GADAlxC,GAAAggD,EACAr8B,EAAA3jB,EAEA2jB,EAAAq8B,EAAA,GAGA,OAAA9O,GAGAp3C,KAAAuqD,aAAA,SAAAhc,GAKA,OAJAvuC,KAAA+pD,UAAAtoD,KAAA8sC,GACAvuC,KAAA+pD,UAAA3C,KAAA,SAAArhD,EAAAshD,GACA,OAAAthD,EAAAG,MAAA8kB,IAAAq8B,EAAAnhD,MAAA8kB,MAEAujB,GAEAvuC,KAAAy/B,QAAA,SAAAioB,EAAAngC,GACA,IAEAyX,EAFA+nB,EAAA/mD,KAAA+pD,UACAS,GAAA,EAGA9C,aAAAuB,EACAjqB,EAAA0oB,GAEA1oB,EAAA,IAAAiqB,EAAA1hC,EAAAmgC,IACA4B,iBAAA/hC,EAAA+hC,iBAEAtpD,KAAAyqD,qBAAAzrB,EAAAzX,OAEA,IAAAgiB,EAAAvK,EAAA94B,MAAA8kB,IACAwe,EAAAxK,EAAA94B,MAAAglB,OACAue,EAAAzK,EAAAnV,IAAAmB,IACA0e,EAAA1K,EAAAnV,IAAAqB,OACA,KAAAqe,EAAAE,GACAF,GAAAE,GAAAD,GAAAE,EAAA,GACA,UAAA5pC,MAAA,mDAEA,IAAA4qD,EAAA1qD,KAAAi/B,UAAAsK,EAAAC,EAAA,GACAmhB,EAAA3qD,KAAAi/B,UAAAwK,EAAAC,GAAA,GACA,GAAAghB,GAAAC,GAAAD,EACA,OAAAA,EAAAnB,WAAAvqB,GAEA0rB,MAAAnjC,MAAA2iB,QAAAX,EAAAC,IACAxpC,KAAAk/B,WAAAwrB,GAEAC,MAAApjC,MAAA0iB,MAAAR,EAAAC,IACA1pC,KAAAk/B,WAAAyrB,GACA,IAAA3D,EAAAhnD,KAAA6pD,gBAAA7qB,EAAAzX,OACAy/B,EAAApnD,OAAA,IACAI,KAAA4qD,YAAA5D,GACAA,EAAA1/C,QAAA,SAAA+hD,GACArqB,EAAAuqB,WAAAF,MAIA,QAAA9pD,EAAA,EAAuBA,EAAAwnD,EAAAnnD,OAAqBL,IAAA,CAC5C,IAAAgvC,EAAAwY,EAAAxnD,GACA,GAAAkqC,GAAA8E,EAAAroC,MAAA8kB,IAAA,CACAujB,EAAA9O,QAAAT,GACAwrB,GAAA,EACA,MACa,GAAAjhB,GAAAgF,EAAA1kB,IAAAmB,IAAA,CAGb,GAFAujB,EAAA9O,QAAAT,GACAwrB,GAAA,GACAxrB,EAAAmoB,QAAA,CACA,IAAAc,EAAAlB,EAAAxnD,EAAA,GACA,GAAA0oD,KAAA/hD,MAAA8kB,KAAAye,EAAA,CACA8E,EAAA4F,MAAA8T,GACA,OAGA,MACa,GAAAxe,GAAA8E,EAAAroC,MAAA8kB,IACb,MAcA,OAVAw/B,IACAjc,EAAAvuC,KAAAuqD,aAAA,IAAAzD,EAAA9mD,KAAA+pD,UAAA/qB,KAEAh/B,KAAAknC,aACAlnC,KAAA6qD,gBAAAtc,EAAAroC,MAAA8kB,IAAAujB,EAAAroC,MAAA8kB,KAEAhrB,KAAA8qD,sBAAAvc,EAAAroC,MAAA8kB,IAAAujB,EAAAroC,MAAA8kB,KACAhrB,KAAA+qD,WAAA,EACA/qD,KAAA8wB,QAAA,cAAoC1Q,KAAA4e,EAAA6F,OAAA,QAEpC7F,GAGAh/B,KAAAgrD,SAAA,SAAAhE,GACAA,EAAA1/C,QAAA,SAAA03B,GACAh/B,KAAAy/B,QAAAT,IACSh/B,OAGTA,KAAAk/B,WAAA,SAAAF,GACA,IAAAuP,EAAAvP,EAAAuP,SACAhF,EAAAgF,EAAAroC,MAAA8kB,IACAye,EAAA8E,EAAA1kB,IAAAmB,IAEA8+B,EAAA9pD,KAAA+pD,UACA/C,EAAAzY,EAAAyY,MACA,MAAAA,EAAApnD,OACAkqD,EAAAjkD,OAAAikD,EAAAjqD,QAAA0uC,GAAA,QAEA,GAAAA,EAAAhnB,MAAA0iB,MAAAjL,EAAAnV,IAAAmB,IAAAgU,EAAAnV,IAAAqB,QACA87B,EAAAjuB,MACAwV,EAAA1kB,IAAAmB,IAAAg8B,IAAApnD,OAAA,GAAAiqB,IAAAmB,IACAujB,EAAA1kB,IAAAqB,OAAA87B,IAAApnD,OAAA,GAAAiqB,IAAAqB,YAEA,GAAAqjB,EAAAhnB,MAAA2iB,QAAAlL,EAAA94B,MAAA8kB,IAAAgU,EAAA94B,MAAAglB,QACA87B,EAAAt1C,QACA68B,EAAAroC,MAAA8kB,IAAAg8B,EAAA,GAAA9gD,MAAA8kB,IACAujB,EAAAroC,MAAAglB,OAAA87B,EAAA,GAAA9gD,MAAAglB,YAEA,GAAA8T,EAAAmoB,QACAH,EAAAnhD,OAAAmhD,EAAAnnD,QAAAm/B,GAAA,OAEA,CACA,IAAAgpB,EAAAzZ,EAAAzsC,MAAAk9B,EAAA94B,MAAA8kB,IAAAgU,EAAA94B,MAAAglB,SACA87B,EAAAgB,EAAAhB,OACAt1C,QACAs2C,EAAA9hD,MAAA8kB,IAAAg8B,EAAA,GAAA9gD,MAAA8kB,IACAg9B,EAAA9hD,MAAAglB,OAAA87B,EAAA,GAAA9gD,MAAAglB,OAGAlrB,KAAAirD,YACAjrD,KAAAknC,aACAlnC,KAAA6qD,gBAAAthB,EAAAE,GAEAzpC,KAAA8qD,sBAAAvhB,EAAAE,IAEAzpC,KAAA+qD,WAAA,EACA/qD,KAAA8wB,QAAA,cAAoC1Q,KAAA4e,EAAA6F,OAAA,YAGpC7kC,KAAA4qD,YAAA,SAAA5D,GAEA,IADA,IAAAkE,KACA3rD,EAAA,EAAuBA,EAAAynD,EAAApnD,OAAkBL,IACzC2rD,EAAAzpD,KAAAulD,EAAAznD,IAGA2rD,EAAA5jD,QAAA,SAAA03B,GACAh/B,KAAAk/B,WAAAF,IACSh/B,MACTA,KAAA+qD,WAAA,GAGA/qD,KAAAm/B,WAAA,SAAAH,GACAh/B,KAAAk/B,WAAAF,GACAA,EAAAkqB,SAAA5hD,QAAA,SAAA+hD,GACArqB,EAAA0qB,aAAAL,GACArpD,KAAAy/B,QAAA4pB,IACSrpD,MACTg/B,EAAAsqB,iBAAA,GACAtpD,KAAAmrD,QAAAnsB,EAAA94B,MAAA8kB,IAAA,EAAAgU,EAAAnV,IAAAmB,IAAAgU,EAAAsqB,iBAAA,GAEAtqB,EAAAkqB,aAGAlpD,KAAAorD,YAAA,SAAApE,GACAA,EAAA1/C,QAAA,SAAA03B,GACAh/B,KAAAm/B,WAAAH,IACSh/B,OAGTA,KAAAqrD,OAAA,SAAA9rC,EAAA+rC,GACA,IAAA/jC,EAAAy/B,EAYA,GAXA,MAAAznC,GACAgI,EAAA,IAAA+hB,EAAA,IAAAtpC,KAAAuxB,YAAA,GACA+5B,GAAA,GAEA/jC,EADS,iBAAAhI,EACT,IAAA+pB,EAAA/pB,EAAA,EAAAA,EAAAvf,KAAAw/B,QAAAjgB,GAAA3f,QACA,QAAA2f,EACA+pB,EAAAuB,WAAAtrB,KAEAA,EAEAynC,EAAAhnD,KAAAiqD,oBAAA1iC,GACA+jC,EACAtrD,KAAA4qD,YAAA5D,QAGA,IADA,IAAAkC,EAAAlC,EACAkC,EAAAtpD,QACAI,KAAAorD,YAAAlC,GACAA,EAAAlpD,KAAAiqD,oBAAA1iC,GAGA,GAAAy/B,EAAApnD,OACA,OAAAonD,GAEAhnD,KAAAurD,YAAA,SAAAplB,EAAAqlB,GACA,QAAAxrD,KAAAwuC,YAAArI,EAAAqlB,IAGAxrD,KAAAyrD,cAAA,SAAAtlB,EAAAqlB,GACA,IAAAjd,EAAAvuC,KAAAwuC,YAAArI,EAAAqlB,GACA,OAAAjd,IAAA1kB,IAAAmB,IAAAmb,GAGAnmC,KAAA0rD,gBAAA,SAAAvlB,EAAAqlB,GACA,IAAAjd,EAAAvuC,KAAAwuC,YAAArI,EAAAqlB,GACA,OAAAjd,IAAAroC,MAAA8kB,IAAAmb,GAGAnmC,KAAA2rD,mBAAA,SAAApd,EAAA9E,EAAAC,EAAAH,EAAAC,GACA,MAAAD,IACAA,EAAAgF,EAAAroC,MAAA8kB,KACA,MAAAwe,IACAA,EAAA,GACA,MAAAC,IACAA,EAAA8E,EAAA1kB,IAAAmB,KACA,MAAA0e,IACAA,EAAA1pC,KAAAw/B,QAAAiK,GAAA7pC,QACA,IAAAiM,EAAA7L,KAAA6L,IACA+/C,EAAA,GAiBA,OAfArd,EAAAgZ,KAAA,SAAAG,EAAA18B,EAAAE,EAAA2gC,GACA,KAAA7gC,EAAAue,GAAA,CAEA,GAAAve,GAAAue,EAAA,CACA,GAAAre,EAAAse,EACA,OACAqiB,EAAAvlD,KAAAC,IAAAijC,EAAAqiB,GAIAD,GADA,MAAAlE,EACAA,EAEA77C,EAAA2zB,QAAAxU,GAAAtF,UAAAmmC,EAAA3gC,KAESue,EAAAC,GACTkiB,GAGA5rD,KAAAmvC,eAAA,SAAAnkB,EAAA0e,EAAAH,EAAAC,GACA,IAGA3D,EAHA0I,EAAAvuC,KAAAwuC,YAAAxjB,GAEA,OAAAujB,EAKAvuC,KAAA2rD,mBACApd,EAAAvjB,EAAA0e,EAAAH,EAAAC,IAJA3D,EAAA7lC,KAAA6L,IAAA2zB,QAAAxU,IACAtF,UAAA8jB,GAAA,EAAAE,GAAA7D,EAAAjmC,SAOAI,KAAA8rD,eAAA,WACA,IAAAC,KAQA,OAPAA,EAAA/rD,KAAA+pD,UAAAniD,IAAA,SAAA2mC,GACA,IAAAyY,EAAAzY,EAAAyY,MAAAp/C,IAAA,SAAAo3B,GACA,OAAAA,EAAA+L,UAEA,WAAA+b,EAAAiF,EAAA/E,MAMAhnD,KAAAgsD,WAAA,SAAAC,GACA,IAEAjtB,EACAktB,EAFA3kC,EADAvnB,KAAAilB,UACAmC,WAIA,GAAAG,EAAA5C,UAAA,CACA,IAAAoG,EAAAxD,EAAArhB,MAGA,GAFA84B,EAAAh/B,KAAAi/B,UAAAlU,EAAAC,IAAAD,EAAAG,QAIA,YADAlrB,KAAAm/B,WAAAH,IAEaktB,EAAAlsD,KAAA85C,oBAAA/uB,IACb,GAAAxD,EAAAkF,aAAAy/B,GACA3kC,EAAAsC,IAAAqiC,GAEA3kC,EAAArhB,MAAAgmD,EACA3kC,EAAArhB,MAAAglB,SACA3D,EAAAsC,IAAAqB,WAEaghC,EAAAlsD,KAAA85C,qBAAiD9uB,IAAAD,EAAAC,IAAAE,OAAAH,EAAAG,OAAA,MAC9D,GAAA3D,EAAAkF,aAAAy/B,GACA3kC,EAAAsC,IAAAqiC,EAEA3kC,EAAArhB,MAAAgmD,EAEA3kC,EAAArhB,MAAAglB,UAEA3D,EAAAvnB,KAAAmsD,oBAAAphC,EAAAC,IAAAD,EAAAG,SAAA3D,MAES,CACT,IAAAy/B,EAAAhnD,KAAA6pD,gBAAAtiC,GACA,GAAA0kC,GAAAjF,EAAApnD,OAEA,YADAI,KAAAorD,YAAApE,GAEa,GAAAA,EAAApnD,SACbo/B,EAAAgoB,EAAA,IAOA,GAHAhoB,IACAA,EAAAh/B,KAAAi/B,UAAA1X,EAAArhB,MAAA8kB,IAAAzD,EAAArhB,MAAAglB,SAEA8T,KAAAzX,MAAApmB,YAAAomB,EAAApmB,WACAnB,KAAAm/B,WAAAH,OADA,CAKA,IAAA0oB,EAAA,MACA,IAAAngC,EAAAyG,cAAA,CAEA,IADA05B,EAAA1nD,KAAAs1B,aAAA/N,IACA3nB,OAAA,EACA,OACA8nD,IAAAp8C,OAAAoa,UAAA,UAGA1lB,KAAAy/B,QAAAioB,EAAAngC,KAGAvnB,KAAAmsD,oBAAA,SAAAnhC,EAAAE,EAAA6V,GACA,IAAAia,EAAA,IAAAvE,EAAAz2C,KAAAgrB,EAAAE,GACAunB,EAAAuI,EAAA3D,kBACAp8B,EAAAw3B,EAAAx3B,KACA,GAAAw3B,GAAA,kBAAA1vC,KAAAkY,GAAA,CAEA,YADAA,IAAAjY,MAAA,wBAEAiY,GAAA,cACA,IAAAyhB,EAAA,IAAA55B,OAAAmY,GACAsM,EAAA,IAAA+hB,EACA,MAAAvI,EAAA,CACA,GACA0R,EAAAuI,EAAA9D,qBACiBzE,GAAA/V,EAAA35B,KAAA0vC,EAAAx3B,OACjB+/B,EAAA7D,cAQA,GALA5vB,EAAArhB,MAAA8kB,IAAAgwB,EAAA1D,qBACA/vB,EAAArhB,MAAAglB,OAAA8vB,EAAAzD,wBAAA,EAEAyD,EAAA,IAAAvE,EAAAz2C,KAAAgrB,EAAAE,IAEA,GAAA6V,EAAA,CACA,IAAA6J,GAAA,EACA,GAEA,GADA6H,EAAAuI,EAAA7D,eACA,GAAAvM,EAAA,CACA,IAAA/T,EAAA72B,KAAAqmD,SAAArL,EAAAnE,MACAna,EAAA35B,KAAA8zB,KACA+T,EAAAoQ,EAAAnE,WACqB,GAAAmE,EAAAnE,KAAAjM,EACrB,YAEiB6H,GAAA/V,EAAA35B,KAAA0vC,EAAAx3B,OACjBw3B,EAAAuI,EAAA9D,oBAEAzE,EAAAuI,EAAA3D,kBAIA,OAFA9vB,EAAAsC,IAAAmB,IAAAgwB,EAAA1D,qBACA/vB,EAAAsC,IAAAqB,OAAA8vB,EAAAzD,wBAAA9E,EAAA3qC,MAAAlI,OAAA,EACA2nB,IAIAvnB,KAAAmrD,QAAA,SAAA5hB,EAAAE,EAAA2iB,QACAnrD,GAAAmrD,IACAA,EAAA,KACA,IAAAhtB,EAAAp/B,KAAAo/B,YACA,GAAAA,EAAA,CAEAqK,KAAAzpC,KAAAuxB,YAEA,QAAAvG,EADAue,KAAA,EACgCve,EAAAye,EAAcze,IAG9C,GAFA,MAAAoU,EAAApU,KACAoU,EAAApU,GAAAhrB,KAAAqsD,cAAArhC,IACA,SAAAoU,EAAApU,GAAA,CAGA,IAAAzD,EAAAvnB,KAAAssD,mBAAAthC,GACA,GAAAzD,KAAAyG,eACAzG,EAAAsC,IAAAmB,KAAAye,GACAliB,EAAArhB,MAAA8kB,KAAAue,EACA,CACAve,EAAAzD,EAAAsC,IAAAmB,IACA,IACA,IAAAgU,EAAAh/B,KAAAy/B,QAAA,MAAAlY,GACAyX,IACAA,EAAAsqB,iBAAA8C,GACiB,MAAAzwC,SAIjB3b,KAAAusD,aACAC,OAAA,EACAC,UAAA,EACAC,aAAA,GAEA1sD,KAAA2sD,WAAA,YACA3sD,KAAA4sD,aAAA,SAAAx/C,GACA,IAAApN,KAAAusD,YAAAn/C,GACA,UAAAtN,MAAA,uBAAAsN,EAAA,IAAA1N,OAAAC,KAAAK,KAAAusD,aAAAtqD,KAAA,WAEA,GAAAjC,KAAA2sD,YAAAv/C,EAAA,CAGApN,KAAA2sD,WAAAv/C,EAEA,UAAAA,GACApN,KAAAqrD,SACA,IAAA9U,EAAAv2C,KAAA6sD,UACA7sD,KAAA8sD,YAAA,MACA9sD,KAAA8sD,YAAAvW,KAGAv2C,KAAA8sD,YAAA,SAAAC,GACA/sD,KAAA6sD,WAAAE,IAGA/sD,KAAA6sD,UAAAE,EAEA/sD,KAAAi5B,IAAA,SAAAj5B,KAAAgtD,oBACAhtD,KAAAi5B,IAAA,kBAAAj5B,KAAAitD,6BACAjtD,KAAA8wB,QAAA,oBAEAi8B,GAAA,UAAA/sD,KAAA2sD,YAKA3sD,KAAAo/B,eACAp/B,KAAAqsD,cAAAU,EAAAV,cAAA7nD,KAAAuoD,EAAA/sD,UAAA2sD,YACA3sD,KAAAssD,mBAAAS,EAAAT,mBAAA9nD,KAAAuoD,EAAA/sD,UAAA2sD,YAEA3sD,KAAAgtD,mBAAAhtD,KAAAktD,kBAAA1oD,KAAAxE,MACAA,KAAAitD,4BAAAjtD,KAAAmtD,2BAAA3oD,KAAAxE,MACAA,KAAAmoB,GAAA,SAAAnoB,KAAAgtD,oBACAhtD,KAAAmoB,GAAA,kBAAAnoB,KAAAitD,8BAXAjtD,KAAAo/B,YAAA,OAcAp/B,KAAAs/B,uBAAA,SAAAtU,EAAAoiC,GACA,IAAAC,EAAArtD,KAAAo/B,YACA,IAAAiuB,GAAAD,GAAAC,EAAAriC,GACA,SAGA,IADA,IAAAuU,EAAAhgC,EAAAyrB,EAAA,EACAzrB,GAAA,IACA,IAAAooB,EAAA0lC,EAAA9tD,GAIA,GAHA,MAAAooB,IACAA,EAAA0lC,EAAA9tD,GAAAS,KAAAqsD,cAAA9sD,IAEA,SAAAooB,EAAA,CACA,IAAAJ,EAAAvnB,KAAAssD,mBAAA/sD,GAGA,GAFAggC,IACAA,EAAAhY,GACAA,KAAAsC,IAAAmB,OACA,MAEAzrB,IAGA,OACAgoB,OAAA,IAAAhoB,GAAAgoB,EACAgY,eAIAv/B,KAAAq/B,kBAAA,SAAArU,EAAArP,GAEA,IAAA0e,GACAizB,UAFA3xC,IAAA8M,UAEAvM,SACAmgB,IAAA1gB,EAAAK,SAAAL,EAAAuD,QACAquC,SAAA5xC,EAAAM,QAIA,IADAjc,KAAAwtD,kBAAAxiC,EAAAqP,GACA,CACA,IAAAjuB,EAAAuP,EAAAnc,QAAAmc,EAAAuV,WACA9kB,GAAA,kBAAArJ,KAAAqJ,EAAAC,aACAD,EAAAC,WAAA,kBAIArM,KAAAwtD,kBAAA,SAAAxiC,EAAAqP,GACA,GAAAr6B,KAAAqsD,cAAA,CAEA,IAAApxC,EAAAjb,KAAAqsD,cAAArhC,GACA6a,EAAA7lC,KAAAw/B,QAAAxU,GAEA+V,EAAA,QAAA9lB,GAAA,IACA+jB,EAAAh/B,KAAAi/B,UAAAjU,GAAA,IAAA+V,EAAA,EAAA8E,EAAAjmC,OAAAmhC,GAEA,GAAA/B,EAKA,OAJA3E,EAAAizB,UAAAjzB,EAAAgC,IACAr8B,KAAAk/B,WAAAF,GAEAh/B,KAAAm/B,WAAAH,GACAA,EAGA,IAAAzX,EAAAvnB,KAAAssD,mBAAAthC,GAAA,GACA,GAAAzD,MAAAyG,gBACAgR,EAAAh/B,KAAAi/B,UAAA1X,EAAArhB,MAAA8kB,IAAAzD,EAAArhB,MAAAglB,OAAA,KACA3D,EAAAoiB,QAAA3K,EAAAzX,OAEA,OADAvnB,KAAAk/B,WAAAF,GACAA,EAIA,GAAA3E,EAAAkzB,SAAA,CACA,IAAAntC,EAAApgB,KAAAs/B,uBAAAtU,GACA,GAAA5K,EAAAmH,MACA,IAAAgiB,EAAAnpB,EAAAmH,MAAArhB,MAAA8kB,IAAA,EACAye,EAAArpB,EAAAmH,MAAAsC,IAAAmB,IAEAhrB,KAAAmrD,QAAA5hB,EAAAE,EAAApP,EAAAgC,IAAA,YACShC,EAAAizB,UACT7jB,EAAAliB,IAAAsC,IAAAmB,IAAAhrB,KAAAuxB,YACAvxB,KAAAmrD,QAAAngC,EAAA,EAAAye,EAAApP,EAAAgC,IAAA,QACS9U,IACT8S,EAAAgC,MACA9U,EAAA+hC,iBAAA,KACAtpD,KAAAy/B,QAAA,MAAAlY,IAGA,OAAAA,IAKAvnB,KAAAytD,iBAAA,SAAAC,GACA,IAAA1iC,EAAAhrB,KAAAilB,UAAAinB,YAAAlhB,IACAA,EAAAhrB,KAAA0rD,gBAAA1gC,GACA,IAAAzD,EAAAvnB,KAAAwtD,kBAAAxiC,MAEA,IAAAzD,EAAA,CAEA,IAAAnH,EAAApgB,KAAAs/B,uBAAAtU,GAAA,GAGA,GAFAzD,EAAAnH,EAAAmH,OAAAnH,EAAAmf,WAEA,CACAvU,EAAAzD,EAAArhB,MAAA8kB,IACA,IAAAgU,EAAAh/B,KAAAi/B,UAAAjU,EAAAhrB,KAAAw/B,QAAAxU,GAAAprB,OAAA,GAEAo/B,EACAh/B,KAAAk/B,WAAAF,GAEAh/B,KAAAy/B,QAAA,MAAAlY,MAKAvnB,KAAAktD,kBAAA,SAAA1mB,GACA,IAAAmE,EAAAnE,EAAAtgC,MAAA8kB,IACAmY,EAAAqD,EAAA3c,IAAAmB,IAAA2f,EAEA,OAAAxH,EACAnjC,KAAAo/B,YAAAuL,GAAA,UACS,aAAAnE,EAAA3B,OACT7kC,KAAAo/B,YAAAv5B,OAAA8kC,EAAAxH,EAAA,YACS,CACT,IAAAx+B,EAAAf,MAAAu/B,EAAA,GACAx+B,EAAAyvC,QAAAzJ,EAAA,GACA3qC,KAAAo/B,YAAAv5B,OAAApF,MAAAT,KAAAo/B,YAAAz6B,KAGA3E,KAAAmtD,2BAAA,SAAAxxC,GACA,IAAA00B,EAAA10B,EAAAyE,KACAiwB,EAAA6V,OAAA7V,EAAA1vB,MACA3gB,KAAAo/B,YAAAx/B,OAAAywC,EAAA6V,OACAlmD,KAAAo/B,YAAAv5B,OAAAwqC,EAAA6V,MAAAlmD,KAAAo/B,YAAAx/B,YASA+C,IAAAzC,OAAA,0GAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAu3C,EAAAj1C,EAAA,qBAAAi1C,cACAnN,EAAA9nC,EAAA,YAAA8nC,MA8KAnqC,EAAAwuD,aA3KA,WAEA3tD,KAAA85C,oBAAA,SAAArrC,EAAAm/C,GACA,MAAAn/C,EAAAyc,OAAA,YAEA,IAAA2iC,EAAAD,GAAA5tD,KAAAw/B,QAAA/wB,EAAAuc,KAAAjpB,OAAA0M,EAAAyc,OAAA,GACA,OAAA2iC,EAAA,YAEA,IAAA7qD,EAAA6qD,EAAA7qD,MAAA,yBACA,OAAAA,EAGAA,EAAA,GACAhD,KAAA8tD,oBAAA9qD,EAAA,GAAAyL,GAEAzO,KAAAw5C,oBAAAx2C,EAAA,GAAAyL,GALA,MAQAzO,KAAA8tB,gBAAA,SAAA1nB,GACA,IACAmhB,EADAse,EAAA7lC,KAAAw/B,QAAAp5B,EAAA4kB,KACAk0B,GAAA,EAEA0O,EAAA/nB,EAAA9jC,OAAAqE,EAAA8kB,OAAA,GACAloB,EAAA4qD,KAAA5qD,MAAA,yBAOA,GANAA,IACA4qD,EAAA/nB,EAAA9jC,OAAAqE,EAAA8kB,QACA9kB,GAAmB4kB,IAAA5kB,EAAA4kB,IAAAE,OAAA9kB,EAAA8kB,OAAA,GACnBloB,EAAA4qD,KAAA5qD,MAAA,yBACAk8C,GAAA,IAEAl8C,EACA,YAEA,GAAAA,EAAA,IAEA,KADAkpD,EAAAlsD,KAAA8tD,oBAAA9qD,EAAA,GAAAoD,IAEA,YACAmhB,EAAA+hB,EAAAuB,WAAAzkC,EAAA8lD,GACAhN,IACA33B,EAAAsC,IAAAqB,SACA3D,EAAArhB,MAAAglB,UAEA3D,EAAAwD,OAAAxD,EAAAsC,QACS,CACT,IAAAqiC,EACA,KADAA,EAAAlsD,KAAAw5C,oBAAAx2C,EAAA,GAAAoD,IAEA,YACAmhB,EAAA+hB,EAAAuB,WAAAqhB,EAAA9lD,GACA84C,IACA33B,EAAArhB,MAAAglB,SACA3D,EAAAsC,IAAAqB,UAEA3D,EAAAwD,OAAAxD,EAAArhB,MAGA,OAAAqhB,GAGAvnB,KAAA+tD,WACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAU,IACVC,IAAU,KAGVruD,KAAAw5C,oBAAA,SAAA2B,EAAA1sC,EAAA6/C,GACA,IAAAC,EAAAvuD,KAAA+tD,UAAA5S,GACAiR,EAAA,EAEApR,EAAA,IAAAvE,EAAAz2C,KAAAyO,EAAAuc,IAAAvc,EAAAyc,QACAunB,EAAAuI,EAAA3D,kBAGA,GAFA5E,IACAA,EAAAuI,EAAA7D,eACA1E,EAAA,CAGA6b,IACAA,EAAA,IAAAxrD,OACA,QACA2vC,EAAAx3B,KAAA9Y,QAAA,WAAAA,QAAA,mBACAA,QAAA,qCACA,OAMA,IAHA,IAAAqsD,EAAA//C,EAAAyc,OAAA8vB,EAAAzD,wBAAA,EACAzvC,EAAA2qC,EAAA3qC,QAEA,CAEA,KAAA0mD,GAAA,IACA,IAAAZ,EAAA9lD,EAAA/F,OAAAysD,GACA,GAAAZ,GAAAW,GAEA,OADAnC,GAAA,GAEA,OAAgCphC,IAAAgwB,EAAA1D,qBAChCpsB,OAAAsjC,EAAAxT,EAAAzD,8BAGAqW,GAAAzS,IACAiR,GAAA,GAEAoC,GAAA,EAEA,GACA/b,EAAAuI,EAAA9D,qBACazE,IAAA6b,EAAAvrD,KAAA0vC,EAAAx3B,OAEb,SAAAw3B,EACA,MAGA+b,GADA1mD,EAAA2qC,EAAA3qC,OACAlI,OAAA,EAGA,cAGAI,KAAA8tD,oBAAA,SAAA3S,EAAA1sC,EAAA6/C,GACA,IAAAG,EAAAzuD,KAAA+tD,UAAA5S,GACAiR,EAAA,EAEApR,EAAA,IAAAvE,EAAAz2C,KAAAyO,EAAAuc,IAAAvc,EAAAyc,QACAunB,EAAAuI,EAAA3D,kBAGA,GAFA5E,IACAA,EAAAuI,EAAA7D,eACA1E,EAAA,CAGA6b,IACAA,EAAA,IAAAxrD,OACA,QACA2vC,EAAAx3B,KAAA9Y,QAAA,WAAAA,QAAA,mBACAA,QAAA,6CACA,OAKA,IAFA,IAAAqsD,EAAA//C,EAAAyc,OAAA8vB,EAAAzD,0BAEA,CAIA,IAFA,IAAAzvC,EAAA2qC,EAAA3qC,MACA4mD,EAAA5mD,EAAAlI,OACA4uD,EAAAE,GAAA,CACA,IAAAd,EAAA9lD,EAAA/F,OAAAysD,GACA,GAAAZ,GAAAa,GAEA,OADArC,GAAA,GAEA,OAAgCphC,IAAAgwB,EAAA1D,qBAChCpsB,OAAAsjC,EAAAxT,EAAAzD,8BAGAqW,GAAAzS,IACAiR,GAAA,GAEAoC,GAAA,EAEA,GACA/b,EAAAuI,EAAA7D,oBACa1E,IAAA6b,EAAAvrD,KAAA0vC,EAAAx3B,OAEb,SAAAw3B,EACA,MAEA+b,EAAA,EAGA,iBAOA7rD,IAAAzC,OAAA,wTAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,aACAshB,EAAAthB,EAAA,cACA8jC,EAAA9jC,EAAA,iBAAA8jC,YACAnI,EAAA37B,EAAA,YACAy2B,EAAAz2B,EAAA,uBAAAy2B,aACAwT,EAAAjqC,EAAA,eAAAiqC,UACAkjB,EAAAntD,EAAA,eAAAo8C,KACAtU,EAAA9nC,EAAA,WAAA8nC,MACAqZ,EAAAnhD,EAAA,cAAAmhD,SACA0C,EAAA7jD,EAAA,0BAAA6jD,oBACAiB,EAAA9kD,EAAA,sBAAA8kD,gBAEAsI,EAAA,SAAAvrC,EAAAkzB,GACAv2C,KAAA6uD,gBACA7uD,KAAA8uD,gBACA9uD,KAAA+uD,iBACA/uD,KAAAgvD,gBACAhvD,KAAAivD,UAAA,EACAjvD,KAAAkvD,aAAA,EAEAlvD,KAAA+pD,aACA/pD,KAAAqC,GAAA,aAAAusD,EAAAO,KACAnvD,KAAA+pD,UAAA5oD,SAAA,WACA,OAAAnB,KAAAiC,KAAA,OAEAjC,KAAAmoB,GAAA,aAAAnoB,KAAAovD,aAAA5qD,KAAAxE,OACAA,KAAA0hD,UAAA1hD,KAAAumC,SAAA/hC,KAAAxE,MAEA,iBAAAqjB,KAAAmc,UACAnc,EAAA,IAAAs/B,EAAAt/B,IAEArjB,KAAAwwC,aAAA,IAAAlL,EAAAtlC,MACAA,KAAAimD,YAAA5iC,GACArjB,KAAAilB,UAAA,IAAAwmB,EAAAzrC,MAEAm9B,EAAA5C,aAAAv6B,MACAA,KAAAqvD,QAAA9Y,GACApZ,EAAArM,QAAA,UAAA9wB,OAIA4uD,EAAAO,KAAA,EAEA,WAEAr+C,EAAAF,UAAA5Q,KAAAi4B,GACAj4B,KAAAimD,YAAA,SAAAp6C,GACA7L,KAAA6L,KACA7L,KAAA6L,IAAA0P,eAAA,SAAAvb,KAAA0hD,WAEA1hD,KAAA6L,MACAA,EAAAsc,GAAA,SAAAnoB,KAAA0hD,WAEA1hD,KAAAsvD,aACAtvD,KAAAsvD,YAAArJ,YAAAjmD,KAAA0rC,eAEA1rC,KAAAuvD,eAEAvvD,KAAA0rC,YAAA,WACA,OAAA1rC,KAAA6L,KAEA7L,KAAAwvD,eAAA,SAAArpB,GACA,IAAAA,EAGA,OAFAnmC,KAAA8mC,qBACA9mC,KAAA4mC,oBAGA,IAAAtlC,EAAAtB,KAAA8mC,aAAAlnC,OACAL,EAAAS,KAAA6mC,kBAAA7mC,KAAA8mC,aAAAX,GAAA,EACA7kC,EAAA/B,IACAS,KAAA8mC,aAAAjhC,OAAAtG,EAAA+B,GACAtB,KAAA4mC,gBAAA/gC,OAAAtG,EAAA+B,KAIAtB,KAAA6mC,kBAAA,SAAA4oB,EAAA1oC,GAIA,IAHA,IAAA2oC,EAAA,EACAzsB,EAAAwsB,EAAA7vD,OAAA,EAEA8vD,GAAAzsB,GAAA,CACA,IAAA0sB,EAAAD,EAAAzsB,GAAA,EACAtb,EAAA8nC,EAAAE,GAEA,GAAA5oC,EAAAY,EACA+nC,EAAAC,EAAA,MACA,MAAA5oC,EAAAY,GAGA,OAAAgoC,EAFA1sB,EAAA0sB,EAAA,GAKA,OAAAD,EAAA,GAGA1vD,KAAAuvD,YAAA,WACAvvD,KAAA+qD,WAAA,EACA/qD,KAAAonC,aACApnC,KAAA4vD,mBACA5vD,KAAAwvD,eAAA,GACAxvD,KAAAsvD,aACAtvD,KAAAsvD,YAAAppD,MAAA,IAGAlG,KAAAovD,aAAA,SAAAzzC,GACA,IAAAqjB,EAAArjB,EAAAyE,KACApgB,KAAAwvD,eAAAxwB,EAAA94B,MAAA8kB,MAGAhrB,KAAAumC,SAAA,SAAAC,GACAxmC,KAAA+qD,WAAA,EACA/qD,KAAAwwC,aAAAjK,SAAAC,GACAxmC,KAAAwvD,eAAAhpB,EAAAtgC,MAAA8kB,KAEA,IAAA6kC,EAAA7vD,KAAA8vD,4BAAAtpB,GACAxmC,KAAA+vD,YAAA/vD,KAAAkoB,cAAAse,EAAAwpB,SACAhwD,KAAAiwD,WAAAxuD,KAAA+kC,GACAqpB,GAAA,GAAAA,EAAAjwD,QACAI,KAAAkwD,YAAAzuD,MACAojC,OAAA,cACAmiB,MAAA6I,IAIA7vD,KAAAmwD,mBAAA5tC,YAGAviB,KAAAsvD,aAAAtvD,KAAAsvD,YAAAlJ,gBAAA5f,GACAxmC,KAAA8wB,QAAA,SAAA0V,IAEAxmC,KAAA+iD,SAAA,SAAA1/B,GACArjB,KAAA6L,IAAAk3C,SAAA1/B,GACArjB,KAAAilB,UAAA2nB,OAAA,KAEA5sC,KAAAwvD,eAAA,GACAxvD,KAAAowD,WACApwD,KAAAiwD,cACAjwD,KAAAkwD,eACAlwD,KAAAqwD,eAAArwD,KAAAkoB,cACAloB,KAAAswD,iBAAAC,SAEAvwD,KAAAgjD,SACAhjD,KAAAmB,SAAA,WACA,OAAAnB,KAAA6L,IAAAm3C,YAEAhjD,KAAAwwD,aAAA,WACA,OAAAxwD,KAAAilB,WAEAjlB,KAAAqmD,SAAA,SAAAr7B,GACA,OAAAhrB,KAAAsvD,YAAAjJ,SAAAr7B,IAEAhrB,KAAA+2C,UAAA,SAAA/rB,GACA,OAAAhrB,KAAAsvD,YAAAvY,UAAA/rB,IAEAhrB,KAAAg3C,WAAA,SAAAhsB,EAAAE,GACA,IACAunB,EADAY,EAAArzC,KAAAsvD,YAAAvY,UAAA/rB,GACArD,EAAA,EACA,SAAAuD,EAAA,CACA,IAAA3rB,EAAA8zC,EAAAzzC,OAAA,EACA+nB,EAAA3nB,KAAAw/B,QAAAxU,GAAAprB,YAEA,IAAAL,EAAA,EAA2BA,EAAA8zC,EAAAzzC,WAC3B+nB,GAAA0rB,EAAA9zC,GAAAuI,MAAAlI,SACAsrB,GAF8C3rB,KAO9C,OADAkzC,EAAAY,EAAA9zC,KAGAkzC,EAAAtuC,MAAA5E,EACAkzC,EAAAvsC,MAAAyhB,EAAA8qB,EAAA3qC,MAAAlI,OACA6yC,GAHA,MAKAzyC,KAAAqwD,eAAA,SAAAI,GASA,GARAzwD,KAAAkoB,aAAAuoC,EACAzwD,KAAAowD,WACApwD,KAAAiwD,cACAjwD,KAAAkwD,eAEAlwD,KAAAmwD,oBACAnwD,KAAAmwD,mBAAA7tC,SAEAmuC,EAAA,CACA,IAAA/oD,EAAA1H,KAEAA,KAAA0wD,uBAAA,WACAhpD,EAAAyoD,mBAAA7tC,SAEA5a,EAAAwoD,YAAAtwD,SACA8H,EAAA0oD,QAAA3uD,MACAkvD,MAAA,OACAjM,OAAAh9C,EAAAwoD,cAEAxoD,EAAAwoD,gBAGAxoD,EAAAuoD,WAAArwD,SACA8H,EAAA0oD,QAAA3uD,MACAkvD,MAAA,MACAjM,OAAAh9C,EAAAuoD,aAEAvoD,EAAAuoD,eAGAvoD,EAAA0oD,QAAAxwD,OAAA,GACA6wD,EAAAG,SACA/rB,OAAA,YACAlgC,MAAA+C,EAAA0oD,QAAA1oD,GACAysC,MAAAzsC,EAAAmpD,kBAGAnpD,EAAAmpD,iBAAA,EACAnpD,EAAA0oD,YAEApwD,KAAAmwD,mBAAArtC,EAAAL,YAAAziB,KAAA0wD,0BAGA1wD,KAAAsnB,cAAA,WACAtnB,KAAA0wD,wBACA1wD,KAAA0wD,0BAGA1wD,KAAA8wD,qBACA7pC,KAAA,aACA8pC,KAAA,aACAR,MAAA,cAEAvwD,KAAAswD,eAAA,WACA,OAAAtwD,KAAAkoB,cAAAloB,KAAA8wD,qBAEA9wD,KAAAi6C,aAAA,WACA,OAAAj6C,KAAA0+C,iBACA57B,EAAA/B,aAAA,IAAA/gB,KAAA8uC,cAEA,MAGA9uC,KAAAgxD,eAAA,SAAAjqC,GACA/mB,KAAAs5B,UAAA,cAAAvS,IAEA/mB,KAAA0+C,eAAA,WACA,OAAA1+C,KAAAixD,eAAAjxD,KAAAm6C,MAAA+W,iBAEAlxD,KAAAmxD,WAAA,SAAAviB,GACA5uC,KAAAs5B,UAAA,UAAAsV,IAEA5uC,KAAA8uC,WAAA,WACA,OAAA9uC,KAAAoxD,UAEApxD,KAAA6uC,UAAA,SAAApgC,GACA,OAAAzO,KAAAixD,cAAAxiD,EAAAyc,OAAAlrB,KAAAoxD,UAAA,GAEApxD,KAAAqxD,0BAAA,SAAAC,GACAtxD,KAAAs5B,UAAA,yBAAAg4B,IAEAtxD,KAAA+uC,0BAAA,WACA,OAAA/uC,KAAAuxD,yBAGAvxD,KAAAwxD,YAAA,EACAxxD,KAAAyxD,aAAA,SAAAC,GACA1xD,KAAAs5B,UAAA,YAAAo4B,IAEA1xD,KAAA2xD,aAAA,WACA,OAAA3xD,KAAAwxD,YAEAxxD,KAAA4xD,gBAAA,WACA5xD,KAAAyxD,cAAAzxD,KAAAwxD,aAEAxxD,KAAA6xD,oBAAA,SAAA7mC,EAAA3e,GACArM,KAAA8uD,aAAA9jC,KACAhrB,KAAA8uD,aAAA9jC,GAAA,IACAhrB,KAAA8uD,aAAA9jC,IAAA,IAAA3e,EACArM,KAAA8wB,QAAA,wBAEA9wB,KAAA8xD,uBAAA,SAAA9mC,EAAA3e,GACArM,KAAA8uD,aAAA9jC,IAAAhrB,KAAA8uD,aAAA9jC,IAAA,IAAA7oB,QAAA,IAAAkK,EAAA,IACArM,KAAA8wB,QAAA,wBAEA9wB,KAAA+xD,eAAA,WACA,OAAA/xD,KAAA6uD,cAEA7uD,KAAAgyD,eAAA,SAAA3hB,GACArwC,KAAA6uD,gBACA,QAAAtvD,EAAA,EAAqBA,EAAA8wC,EAAAzwC,OAAeL,IACpCS,KAAA6uD,aAAAxe,EAAA9wC,IAAA,iBAEAS,KAAA8wB,QAAA,wBAEA9wB,KAAAiyD,iBAAA,WACAjyD,KAAA6uD,gBACA7uD,KAAA8wB,QAAA,wBAEA9wB,KAAAkyD,cAAA,SAAAlnC,EAAA3e,QACApL,IAAAoL,IACAA,EAAA,kBACAA,EACArM,KAAA6uD,aAAA7jC,GAAA3e,SAEArM,KAAA6uD,aAAA7jC,GACAhrB,KAAA8wB,QAAA,wBAEA9wB,KAAAmyD,gBAAA,SAAAnnC,UACAhrB,KAAA6uD,aAAA7jC,GACAhrB,KAAA8wB,QAAA,wBAEA9wB,KAAAo0B,UAAA,SAAA7M,EAAAg/B,EAAAtrC,EAAAm3C,GACA,IAAA/vD,EAAArC,KAAAivD,YAEAoD,GACA9qC,QACAtM,QAAA,OACA6M,SAAA,mBAAA7M,IAAA,KACAsrC,QACA6L,YACA/vD,MAWA,OARA+vD,GACApyD,KAAA+uD,cAAA1sD,GAAAgwD,EACAryD,KAAA8wB,QAAA,uBAEA9wB,KAAAgvD,aAAA3sD,GAAAgwD,EACAryD,KAAA8wB,QAAA,qBAGAzuB,GAEArC,KAAAsyD,iBAAA,SAAAD,EAAAD,GACA,GAAAC,EAAA1L,OAAA,CAEA,IAAAtkD,EAAArC,KAAAivD,YAYA,OAXAoD,EAAAhwD,KACAgwD,EAAAD,YAEAA,GACApyD,KAAA+uD,cAAA1sD,GAAAgwD,EACAryD,KAAA8wB,QAAA,uBAEA9wB,KAAAgvD,aAAA3sD,GAAAgwD,EACAryD,KAAA8wB,QAAA,qBAGAuhC,IAEAryD,KAAA40B,aAAA,SAAA29B,GACA,IAAAF,EAAAryD,KAAA+uD,cAAAwD,IAAAvyD,KAAAgvD,aAAAuD,GACA,GAAAF,EAAA,CAGA,IAAAG,EAAAH,EAAAD,QAAApyD,KAAA+uD,cAAA/uD,KAAAgvD,aACAqD,WACAG,EAAAD,GACAvyD,KAAA8wB,QAAAuhC,EAAAD,QAAA,2CAGApyD,KAAAyyD,WAAA,SAAAL,GACA,OAAAA,EAAApyD,KAAA+uD,cAAA/uD,KAAAgvD,cAGAhvD,KAAA0yD,UAAA,SAAAh2B,GACA,IAAA18B,KAAA2yD,iBAAA,CACA,IAAAD,EAAA,IAAApM,EAAA,iCACAtmD,KAAA2yD,iBAAA3yD,KAAAsyD,iBAAAI,GAEA1yD,KAAA2yD,iBAAAnM,UAAA9pB,IAEA18B,KAAA4yD,eAAA,SAAArpB,EAAAE,EAAA8c,EAAA6L,GACA,iBAAA3oB,IACA8c,EAAA9c,EACAA,EAAAF,GAEAgd,IACAA,EAAA,YAEA,IAAAh/B,EAAA,IAAA+hB,EAAAC,EAAA,EAAAE,EAAA8U,KAEA,OADAh3B,EAAAllB,GAAArC,KAAAo0B,UAAA7M,EAAAg/B,EAAA,WAAA6L,GACA7qC,GAEAvnB,KAAA6yD,eAAA,SAAAC,GACA9yD,KAAAsxB,aAAAwhC,EACA9yD,KAAA8wB,QAAA,wBAEA9wB,KAAA+yD,eAAA,WACA,OAAA/yD,KAAAsxB,kBAEAtxB,KAAAgzD,iBAAA,WACAhzD,KAAA6yD,oBAEA7yD,KAAAojD,eAAA,SAAA//B,GACA,IAAArgB,EAAAqgB,EAAArgB,MAAA,gBAEAhD,KAAAqjD,aADArgD,EACAA,EAAA,GAEA,MAGAhD,KAAA+tB,aAAA,SAAA/C,EAAAE,GACA,IAAA2a,EAAA7lC,KAAAw/B,QAAAxU,GAEAioC,GAAA,EAOA,GANA/nC,EAAA,IACA+nC,IAAAptB,EAAA9jC,OAAAmpB,EAAA,GAAAloB,MAAAhD,KAAA4vC,UAEAqjB,IACAA,IAAAptB,EAAA9jC,OAAAmpB,GAAAloB,MAAAhD,KAAA4vC,UAEAqjB,EACA,IAAAv2B,EAAA18B,KAAA4vC,aACA,WAAA7sC,KAAA8iC,EAAA7jC,MAAAkpB,EAAA,EAAAA,EAAA,IACAwR,EAAA,UAEAA,EAAA18B,KAAA2vC,WAEA,IAAAzpC,EAAAglB,EACA,GAAAhlB,EAAA,GACA,GACAA,UAEAA,GAAA,GAAA2/B,EAAA9jC,OAAAmE,GAAAlD,MAAA05B,IACAx2B,IAIA,IADA,IAAA2jB,EAAAqB,EACArB,EAAAgc,EAAAjmC,QAAAimC,EAAA9jC,OAAA8nB,GAAA7mB,MAAA05B,IACA7S,IAGA,WAAAyf,EAAAte,EAAA9kB,EAAA8kB,EAAAnB,IAEA7pB,KAAAmuC,cAAA,SAAAnjB,EAAAE,GAIA,IAHA,IAAAgoC,EAAAlzD,KAAA+tB,aAAA/C,EAAAE,GACA2a,EAAA7lC,KAAAw/B,QAAA0zB,EAAArpC,IAAAmB,KAEA6a,EAAA9jC,OAAAmxD,EAAArpC,IAAAqB,QAAAloB,MAAA,UACAkwD,EAAArpC,IAAAqB,QAAA,EAEA,OAAAgoC,GAEAlzD,KAAAujD,eAAA,SAAAC,GACAxjD,KAAA6L,IAAA03C,eAAAC,IAEAxjD,KAAAyjD,eAAA,WACA,OAAAzjD,KAAA6L,IAAA43C,kBAEAzjD,KAAAmzD,aAAA,SAAAC,GAA6CpzD,KAAAs5B,UAAA,YAAA85B,IAC7CpzD,KAAAqzD,aAAA,WAAoC,OAAArzD,KAAAszD,YACpCtzD,KAAAuzD,kBAAA,SAAA53C,GACA,IAAA00B,EAAA10B,EAAAyE,KACApgB,KAAAsvD,YAAAppD,MAAAmqC,EAAA6V,OACAlmD,KAAA8wB,QAAA,kBAAAnV,IAGA3b,KAAAqgD,UACArgD,KAAAm6C,MAAA,KACAn6C,KAAAwzD,QAAA,KACAxzD,KAAAqvD,QAAA,SAAA9Y,EAAApxB,GACA,GAAAoxB,GAAA,iBAAAA,EAAA,CACA,GAAAA,EAAAuH,aACA,OAAA99C,KAAAyzD,cAAAld,GACA,IAAAlc,EAAAkc,EACA5e,EAAA0C,EAAA1C,UAEAA,EAAA4e,GAAA,gBAKA,GAHAv2C,KAAAqgD,OAAA,mBACArgD,KAAAqgD,OAAA,qBAAAsO,GAEA3uD,KAAAqgD,OAAA1oB,KAAA0C,EAGA,OAFAr6B,KAAAyzD,cAAAzzD,KAAAqgD,OAAA1oB,SACAxS,QAGAnlB,KAAAwzD,QAAA77B,EACAwF,EAAAL,YAAA,OAAAnF,GAAA,SAAAsE,GACA,GAAAj8B,KAAAwzD,UAAA77B,EACA,OAAAxS,OACAnlB,KAAAqgD,OAAA1oB,KAAA0C,EACAr6B,KAAAyzD,cAAAzzD,KAAAqgD,OAAA1oB,IACasE,KAAA2hB,OACb3hB,EAAA,IAAAA,EAAA2hB,KAAAvjB,GACAA,IACAr6B,KAAAqgD,OAAA1oB,GAAAsE,EACAA,EAAAolB,IAAA1pB,GAEA33B,KAAAyzD,cAAAx3B,IAEA9W,QACS3gB,KAAAxE,OACTA,KAAAm6C,OACAn6C,KAAAyzD,cAAAzzD,KAAAqgD,OAAA,sBAGArgD,KAAAyzD,cAAA,SAAAld,EAAAmd,GAGA,GAFAA,IACA1zD,KAAAwzD,QAAAjd,EAAA8K,KACArhD,KAAAm6C,QAAA5D,EAAA,CAGAv2C,KAAAm6C,MAAA5D,EAEAv2C,KAAA2zD,cAEA3zD,KAAAszD,YACAtzD,KAAA4zD,eAEA,IAAAtO,EAAA/O,EAAAuH,eAEA,QAAA78C,IAAAqkD,EAAApqC,iBAAA,CACA,IAAAq4C,EAAAvzD,KAAAuzD,kBAAA/uD,KAAAxE,MACAslD,EAAApqC,iBAAA,SAAAq4C,GAGA,GAAAvzD,KAAAsvD,YAOAtvD,KAAAsvD,YAAAtJ,aAAAV,OAPA,CACAtlD,KAAAsvD,YAAA,IAAAjK,EAAAC,GACA,IAAA3iC,EAAA3iB,KACAA,KAAAsvD,YAAAp0C,iBAAA,kBAAAS,GACAgH,EAAAmO,QAAA,kBAAAnV,KAMA3b,KAAAsvD,YAAArJ,YAAAjmD,KAAA0rC,eAEA1rC,KAAA4vC,QAAA2G,EAAA3G,QACA5vC,KAAA2vC,WAAA4G,EAAA5G,WAGA+jB,IACAnd,EAAAsd,iBACAtd,EAAAsd,gBAAA7zD,MACAA,KAAAy5B,SAAAq6B,WAAA5qD,IAAA9H,KAAApB,UAAA+zD,aACA/zD,KAAA8sD,YAAAvW,EAAAyd,cACAh0D,KAAAsvD,YAAAppD,MAAA,GACAlG,KAAAwoB,MAAA,iBAIAxoB,KAAA2zD,YAAA,WACA3zD,KAAAylD,UACAzlD,KAAAylD,QAAAwO,YACAj0D,KAAAylD,QAAA,OAIAzlD,KAAA4zD,aAAA,WACA,IACA5zD,KAAAylD,QAAAzlD,KAAAm6C,MAAAgG,aAAAngD,MACS,MAAA2b,GACTwhB,EAAAvD,KAAA,wBAAAje,GACA3b,KAAAylD,QAAA,OAGAzlD,KAAAk0D,QAAA,WACA,OAAAl0D,KAAAm6C,OAGAn6C,KAAAm0D,WAAA,EACAn0D,KAAAo0D,aAAA,SAAA/kD,GACArP,KAAAm0D,aAAA9kD,GAAAglD,MAAAhlD,KAGArP,KAAAm0D,WAAA9kD,EACArP,KAAA8wB,QAAA,kBAAAzhB,KAEArP,KAAAs0D,aAAA,WACA,OAAAt0D,KAAAm0D,YAGAn0D,KAAAu0D,YAAA,EACAv0D,KAAAw0D,cAAA,SAAAllD,GACAtP,KAAAu0D,cAAAjlD,GAAA+kD,MAAA/kD,KAGAtP,KAAAu0D,YAAAjlD,EACAtP,KAAA8wB,QAAA,mBAAAxhB,KAEAtP,KAAAy0D,cAAA,WACA,OAAAz0D,KAAAu0D,aAEAv0D,KAAA00D,eAAA,WAEA,OADA10D,KAAA20D,gBACA30D,KAAA2wC,YACArqC,KAAAC,IAAAvG,KAAA40D,wBAAA50D,KAAA60D,aACA70D,KAAA60D,aAGA70D,KAAA40D,sBAAA,WACA,SAAA50D,KAAA80D,iBAAA,OAAA90D,KAAA80D,iBACA,IAAA1mD,EAAA,EAKA,OAJApO,KAAA2wC,YAAArpC,QAAA,SAAAytD,GACAA,KAAAF,YAAAzmD,IACAA,EAAA2mD,EAAAF,eAEA70D,KAAAg1D,gBAAA5mD,GAGApO,KAAA20D,cAAA,SAAAM,GACA,GAAAj1D,KAAA+qD,WAAAkK,EAAA,CAGA,GAFAj1D,KAAA+qD,WAAA,EAEA/qD,KAAAknC,aACA,OAAAlnC,KAAA60D,YAAA70D,KAAAk1D,WAUA,IARA,IAAAzuB,EAAAzmC,KAAA6L,IAAAo3C,cACAyD,EAAA1mD,KAAA4vD,gBACAuF,EAAA,EACAC,EAAA,EACA7mB,EAAAvuC,KAAA+pD,UAAAqL,GACAC,EAAA9mB,IAAAroC,MAAA8kB,IAAAuzB,IACApb,EAAAsD,EAAA7mC,OAEAL,EAAA,EAA2BA,EAAA4jC,EAAS5jC,IAAA,CACpC,GAAAA,EAAA81D,EAAA,CAEA,IADA91D,EAAAgvC,EAAA1kB,IAAAmB,IAAA,IACAmY,EACA,MAEAkyB,GADA9mB,EAAAvuC,KAAA+pD,UAAAqL,MACA7mB,EAAAroC,MAAA8kB,IAAAuzB,IAGA,MAAAmI,EAAAnnD,KACAmnD,EAAAnnD,GAAAS,KAAAs1D,sBAAA7uB,EAAAlnC,IAAA,IAEAmnD,EAAAnnD,GAAA41D,IACAA,EAAAzO,EAAAnnD,IAEAS,KAAA60D,YAAAM,IAGAn1D,KAAAw/B,QAAA,SAAAxU,GACA,OAAAhrB,KAAA6L,IAAA2zB,QAAAxU,IAEAhrB,KAAA2jD,SAAA,SAAAhZ,EAAAC,GACA,OAAA5qC,KAAA6L,IAAA83C,SAAAhZ,EAAAC,IAEA5qC,KAAAuxB,UAAA,WACA,OAAAvxB,KAAA6L,IAAA0lB,aAEAvxB,KAAAs1B,aAAA,SAAA/N,GACA,OAAAvnB,KAAA6L,IAAAypB,aAAA/N,GAAAvnB,KAAAilB,UAAAmC,aAEApnB,KAAAyG,OAAA,SAAAgI,EAAA4U,GACA,OAAArjB,KAAA6L,IAAApF,OAAAgI,EAAA4U,IAEArjB,KAAA2G,OAAA,SAAA4gB,GACA,OAAAvnB,KAAA6L,IAAAlF,OAAA4gB,IAEAvnB,KAAAgkD,gBAAA,SAAArZ,EAAAC,GACA,OAAA5qC,KAAA6L,IAAAm4C,gBAAArZ,EAAAC,IAEA5qC,KAAAu1D,YAAA,SAAA7Q,EAAA8Q,GACA,GAAA9Q,EAAA9kD,OAAA,CAGAI,KAAA+vD,WAAA,EAEA,IADA,IAAA0F,EAAA,KACAl2D,EAAAmlD,EAAA9kD,OAAA,GAAuC,GAAAL,EAASA,IAAA,CAChD,IAAAinC,EAAAke,EAAAnlD,GACA,OAAAinC,EAAAmqB,OACA3wD,KAAA6L,IAAA84C,aAAAne,EAAAke,QACA+Q,EACAz1D,KAAA01D,kBAAAlvB,EAAAke,QAAA,EAAA+Q,IAEAjvB,EAAAke,OAAAp9C,QAAA,SAAAquD,GACA31D,KAAAgrD,SAAA2K,EAAA3O,QACiBhnD,MAQjB,OALAA,KAAA+vD,WAAA,EACA0F,GACAz1D,KAAAkvD,cACAsG,GACAx1D,KAAAilB,UAAAF,kBAAA0wC,GACAA,IAEAz1D,KAAA41D,YAAA,SAAAlR,EAAA8Q,GACA,GAAA9Q,EAAA9kD,OAAA,CAGAI,KAAA+vD,WAAA,EAEA,IADA,IAAA0F,EAAA,KACAl2D,EAAA,EAAuBA,EAAAmlD,EAAA9kD,OAAmBL,IAAA,CAC1C,IAAAinC,EAAAke,EAAAnlD,GACA,OAAAinC,EAAAmqB,QACA3wD,KAAA6L,IAAA44C,YAAAje,EAAAke,QACA+Q,EACAz1D,KAAA01D,kBAAAlvB,EAAAke,QAAA,EAAA+Q,IAQA,OALAz1D,KAAA+vD,WAAA,EACA0F,GACAz1D,KAAAkvD,cACAsG,GACAx1D,KAAAilB,UAAAF,kBAAA0wC,GACAA,IAEAz1D,KAAA61D,cAAA,SAAAC,GACA91D,KAAAkvD,YAAA4G,GAGA91D,KAAA01D,kBAAA,SAAAhR,EAAAqR,EAAAN,GACA,SAAA5Q,EAAAre,GACA,OAAAuvB,EAAA,WAAAvvB,EAAA3B,OAAA,WAAA2B,EAAA3B,OAGA,IACAtd,EAAA26B,EADA1b,EAAAke,EAAA,GAGAG,EAAAre,GACAjf,EAAA+hB,EAAAuB,WAAArE,EAAAtgC,MAAAsgC,EAAA3c,KAGAtC,EAAA+hB,EAAAuB,WAAArE,EAAAtgC,MAAAsgC,EAAAtgC,OAIA,QAAA3G,EAAA,EAAuBA,EAAAmlD,EAAA9kD,OAAmBL,IAE1CslD,EADAre,EAAAke,EAAAnlD,KAEA2iD,EAAA1b,EAAAtgC,OACA,GAAAqhB,EAAAqiB,QAAAsY,EAAAl3B,IAAAk3B,EAAAh3B,SACA3D,EAAA4iB,SAAA+X,GAEAA,EAAA1b,EAAA3c,IACA,GAAAtC,EAAAqiB,QAAAsY,EAAAl3B,IAAAk3B,EAAAh3B,SACA3D,EAAA6iB,OAAA8X,IAEA,IAEAA,EAAA1b,EAAAtgC,OACA,GAAAqhB,EAAAqiB,QAAAsY,EAAAl3B,IAAAk3B,EAAAh3B,UACA3D,EAAA+hB,EAAAuB,WAAArE,EAAAtgC,MAAAsgC,EAAAtgC,SAEA,GAGA,SAAAuvD,EAAA,CACA,IAAAnsB,EAAAgC,cAAAmqB,EAAAvvD,MAAAqhB,EAAArhB,SACAuvD,EAAAvvD,MAAAglB,QAAA3D,EAAAsC,IAAAqB,OAAA3D,EAAArhB,MAAAglB,OACAuqC,EAAA5rC,IAAAqB,QAAA3D,EAAAsC,IAAAqB,OAAA3D,EAAArhB,MAAAglB,QAGA,IAAAD,EAAAwqC,EAAA5rB,aAAAtiB,GACA,GAAA0D,EACA1D,EAAA4iB,SAAAsrB,EAAAvvD,QACa,GAAA+kB,GACb1D,EAAA6iB,OAAAqrB,EAAA5rC,KAIA,OAAAtC,GAEAvnB,KAAAmC,QAAA,SAAAolB,EAAAlE,GACA,OAAArjB,KAAA6L,IAAA1J,QAAAolB,EAAAlE,IAEArjB,KAAAi2B,SAAA,SAAA+/B,EAAAC,EAAA70C,GACA,IAAAiC,EAAArjB,KAAAs1B,aAAA0gC,GACAhP,EAAAhnD,KAAA6pD,gBAAAmM,GAEAE,EAAA5sB,EAAAuB,WAAAorB,KACA,IAAA70C,EAAA,CACAphB,KAAA2G,OAAAqvD,GACA,IAAAhd,EAAAgd,EAAA9vD,MAAA8kB,IAAAgrC,EAAAnsC,IAAAmB,KACAmrC,EAAAnd,GAAAgd,EAAAnsC,IAAAqB,OAAA8qC,EAAA9vD,MAAAglB,OAAA8qC,EAAAnsC,IAAAqB,UAEAgrC,EAAAhwD,MAAA8kB,KAAAgrC,EAAAnsC,IAAAmB,KAAAkrC,EAAAhwD,MAAAglB,OAAA8qC,EAAAnsC,IAAAqB,SACAgrC,EAAAhwD,MAAAglB,QAAAirC,GACAD,EAAArsC,IAAAmB,KAAAgrC,EAAAnsC,IAAAmB,KAAAkrC,EAAArsC,IAAAqB,OAAA8qC,EAAAnsC,IAAAqB,SACAgrC,EAAArsC,IAAAqB,QAAAirC,IAEAnd,GAAAkd,EAAAhwD,MAAA8kB,KAAAgrC,EAAAnsC,IAAAmB,MACAkrC,EAAAhwD,MAAA8kB,KAAAguB,EACAkd,EAAArsC,IAAAmB,KAAAguB,GAKA,GADAkd,EAAArsC,IAAA7pB,KAAAyG,OAAAyvD,EAAAhwD,MAAAmd,GACA2jC,EAAApnD,OAAA,CACA,IAAAw2D,EAAAJ,EAAA9vD,MACAmwD,EAAAH,EAAAhwD,MAEAiwD,GADAnd,EAAAqd,EAAArrC,IAAAorC,EAAAprC,IACAqrC,EAAAnrC,OAAAkrC,EAAAlrC,QACAlrB,KAAAgrD,SAAAhE,EAAAp/C,IAAA,SAAAxE,GAQA,OAPAA,IAAA2nC,SACA7kC,MAAA8kB,KAAAorC,EAAAprC,MACA5nB,EAAA8C,MAAAglB,QAAAirC,GACA/yD,EAAAymB,IAAAmB,KAAAorC,EAAAprC,MACA5nB,EAAAymB,IAAAqB,QAAAirC,GACA/yD,EAAA8C,MAAA8kB,KAAAguB,EACA51C,EAAAymB,IAAAmB,KAAAguB,EACA51C,KAIA,OAAA8yD,GAEAl2D,KAAAs2D,WAAA,SAAA/sB,EAAAE,EAAA8sB,GACAA,IAAAp0D,QAAA,MAAAnC,KAAAi6C,gBACA,QAAAjvB,EAAAue,EAA8Bve,GAAAye,EAAaze,IAC3ChrB,KAAA6L,IAAAmzC,cAAmCh0B,MAAAE,OAAA,GAAoBqrC,IAEvDv2D,KAAAw2D,YAAA,SAAAjvC,GAKA,IAJA,IAAAkvC,EAAAlvC,EAAAyjB,eACA0rB,EAAA,IAAAptB,EAAA,SACAhC,EAAAtnC,KAAA8uC,aAEAvvC,EAAAk3D,EAAAvwD,MAAA8kB,IAAwCzrB,GAAAk3D,EAAA5sC,IAAAmB,MAAuBzrB,EAAA,CAC/D,IAAAsmC,EAAA7lC,KAAAw/B,QAAAjgC,GAEAm3D,EAAAxwD,MAAA8kB,IAAAzrB,EACAm3D,EAAA7sC,IAAAmB,IAAAzrB,EACA,QAAAu8B,EAAA,EAA2BA,EAAAwL,GAC3B,KAAAzB,EAAA9jC,OAAA+5B,KADqCA,GAGrCA,EAAAwL,GAAA,MAAAzB,EAAA9jC,OAAA+5B,IACA46B,EAAAxwD,MAAAglB,OAAA4Q,EACA46B,EAAA7sC,IAAAqB,OAAA4Q,EAAA,IAEA46B,EAAAxwD,MAAAglB,OAAA,EACAwrC,EAAA7sC,IAAAqB,OAAA4Q,GAEA97B,KAAA2G,OAAA+vD,KAIA12D,KAAA22D,WAAA,SAAAhsB,EAAAC,EAAA7J,GAGA,GAFA4J,EAAA3qC,KAAA0rD,gBAAA/gB,GACAC,EAAA5qC,KAAAyrD,cAAA7gB,GACA7J,EAAA,GAEA,IADA/V,EAAAhrB,KAAA0rD,gBAAA/gB,EAAA5J,IACA,WACA,IAAA61B,EAAA5rC,EAAA2f,OACS,GAAA5J,EAAA,GACT,IAAA/V,EACA,IADAA,EAAAhrB,KAAAyrD,cAAA7gB,EAAA7J,IACA/gC,KAAA6L,IAAA0lB,YAAA,WACAqlC,EAAA5rC,EAAA4f,MACS,CACTD,EAAA3qC,KAAA62D,mBAAAlsB,GAEAisB,GADAhsB,EAAA5qC,KAAA62D,mBAAAjsB,IACAD,EAAA,EAGA,IAAApjB,EAAA,IAAA+hB,EAAAqB,EAAA,EAAAC,EAAAksB,OAAAC,WACA/P,EAAAhnD,KAAA6pD,gBAAAtiC,GAAA3f,IAAA,SAAAxE,GAIA,OAHAA,IAAA2nC,SACA7kC,MAAA8kB,KAAA4rC,EACAxzD,EAAAymB,IAAAmB,KAAA4rC,EACAxzD,IAGAqjC,EAAA,GAAA1F,EACA/gC,KAAA6L,IAAA83C,SAAAhZ,EAAAC,GACA5qC,KAAA6L,IAAAm4C,gBAAArZ,EAAAC,GAGA,OAFA5qC,KAAA6L,IAAAi4C,gBAAAnZ,EAAAisB,EAAAnwB,GACAugB,EAAApnD,QAAAI,KAAAgrD,SAAAhE,GACA4P,GAEA52D,KAAAg3D,YAAA,SAAArsB,EAAAC,GACA,OAAA5qC,KAAA22D,WAAAhsB,EAAAC,GAAA,IAEA5qC,KAAAi3D,cAAA,SAAAtsB,EAAAC,GACA,OAAA5qC,KAAA22D,WAAAhsB,EAAAC,EAAA,IAEA5qC,KAAAk3D,eAAA,SAAAvsB,EAAAC,GACA,OAAA5qC,KAAA22D,WAAAhsB,EAAAC,EAAA,IAIA5qC,KAAA62D,mBAAA,SAAA7rC,GACA,OAAA1kB,KAAAC,IAAA,EAAAD,KAAAM,IAAAokB,EAAAhrB,KAAA6L,IAAA0lB,YAAA,KAGAvxB,KAAAm3D,iBAAA,SAAAnsC,EAAAE,GACA,OAAAA,EAAA,EACA,EACA5kB,KAAAM,IAAA5G,KAAA6L,IAAA2zB,QAAAxU,GAAAprB,OAAAsrB,IAIAlrB,KAAAgiD,wBAAA,SAAAh3B,EAAAE,GAGA,GAFAA,EAAA5kB,KAAAC,IAAA,EAAA2kB,GAEAF,EAAA,EACAA,EAAA,EACAE,EAAA,MACS,CACT,IAAAiY,EAAAnjC,KAAA6L,IAAA0lB,YACAvG,GAAAmY,GACAnY,EAAAmY,EAAA,EACAjY,EAAAlrB,KAAA6L,IAAA2zB,QAAA2D,EAAA,GAAAvjC,QAEAsrB,EAAA5kB,KAAAM,IAAA5G,KAAA6L,IAAA2zB,QAAAxU,GAAAprB,OAAAsrB,GAIA,OACAF,MACAE,WAIAlrB,KAAAyqD,qBAAA,SAAAljC,GACAA,EAAArhB,MAAA8kB,IAAA,GACAzD,EAAArhB,MAAA8kB,IAAA,EACAzD,EAAArhB,MAAAglB,OAAA,GAEA3D,EAAArhB,MAAAglB,OAAAlrB,KAAAm3D,iBACA5vC,EAAArhB,MAAA8kB,IACAzD,EAAArhB,MAAAglB,QAIA,IAAAiY,EAAAnjC,KAAA6L,IAAA0lB,YAAA,EAUA,OATAhK,EAAAsC,IAAAmB,IAAAmY,GACA5b,EAAAsC,IAAAmB,IAAAmY,EACA5b,EAAAsC,IAAAqB,OAAAlrB,KAAA6L,IAAA2zB,QAAA2D,GAAAvjC,QAEA2nB,EAAAsC,IAAAqB,OAAAlrB,KAAAm3D,iBACA5vC,EAAAsC,IAAAmB,IACAzD,EAAAsC,IAAAqB,QAGA3D,GAEAvnB,KAAAk1D,WAAA,GACAl1D,KAAAknC,cAAA,EACAlnC,KAAAo3D,iBACAxwD,IAAA,KACAL,IAAA,MAEAvG,KAAAq3D,eAAA,SAAAC,GACA,GAAAA,GAAAt3D,KAAAknC,aAAA,CAIA,GAHAlnC,KAAAknC,aAAAowB,EACAt3D,KAAA+qD,WAAA,EACA/qD,KAAAwvD,eAAA,GACA8H,EAAA,CACA,IAAAn0B,EAAAnjC,KAAAuxB,YACAvxB,KAAAonC,UAAAxjC,MAAAu/B,GACAnjC,KAAA6qD,gBAAA,EAAA1nB,EAAA,GAGAnjC,KAAA8wB,QAAA,oBAGA9wB,KAAAu3D,eAAA,WACA,OAAAv3D,KAAAknC,cAEAlnC,KAAAw3D,kBAAA,SAAA5wD,EAAAL,GACAvG,KAAAo3D,gBAAAxwD,SAAA5G,KAAAo3D,gBAAA7wD,UACAvG,KAAAo3D,iBAAoCxwD,MAAAL,OACpCvG,KAAA+qD,WAAA,EACA/qD,KAAAwwC,aAAA9I,cACA1nC,KAAAknC,cACAlnC,KAAA8wB,QAAA,oBAGA9wB,KAAAy3D,gBAAA,SAAAC,EAAAC,GACA,IAAAC,EAAA53D,KAAAo3D,gBACAQ,EAAArxD,IAAA,IACAqxD,GAAsBhxD,IAAA+wD,EAAApxD,IAAAoxD,IACtB,IAAAE,EAAA73D,KAAA83D,oBAAAJ,EAAAE,EAAAhxD,IAAAgxD,EAAArxD,KACA,OAAAsxD,GAAA73D,KAAAk1D,YAAA2C,EAAA,IACA73D,KAAAk1D,WAAA2C,EACA73D,KAAA+qD,WAAA,EACA/qD,KAAAknC,eACAlnC,KAAA6qD,gBAAA,EAAA7qD,KAAAuxB,YAAA,GACAvxB,KAAAwvD,eAAA,GACAxvD,KAAA8wB,QAAA,qBAEA,IAKA9wB,KAAA83D,oBAAA,SAAAD,EAAAjxD,EAAAL,GAOA,OANAK,IACAixD,EAAAvxD,KAAAC,IAAAK,EAAAixD,IAEAtxD,IACAsxD,EAAAvxD,KAAAM,IAAAL,EAAAsxD,IAEAA,GAEA73D,KAAA+3D,aAAA,WACA,OAAA/3D,KAAAk1D,YAEAl1D,KAAAg4D,aAAA,SAAAC,GACAj4D,KAAAw3D,kBAAAS,MAEAj4D,KAAAk4D,kBAAA,WACA,OACAtxD,IAAA5G,KAAAo3D,gBAAAxwD,IACAL,IAAAvG,KAAAo3D,gBAAA7wD,MAIAvG,KAAA8vD,4BAAA,SAAAtpB,GACA,IAAA8wB,EAAAt3D,KAAAknC,aACArC,EAAA2B,EAAA3B,OACA3+B,EAAAsgC,EAAAtgC,MACA2jB,EAAA2c,EAAA3c,IACA8gB,EAAAzkC,EAAA8kB,IACA4f,EAAA/gB,EAAAmB,IACAmY,EAAAyH,EAAAD,EACAklB,EAAA,KAGA,GADA7vD,KAAAirD,WAAA,EACA,GAAA9nB,EACA,cAAA0B,EAAA,CACA7kC,KAAAs3D,EAAA,+BAAAzxD,OAAA8kC,EAAAxH,GAEA,IAAA2mB,EAAA9pD,KAAA+pD,UACA8F,EAAA7vD,KAAA6pD,gBAAArjB,GACAxmC,KAAA4qD,YAAAiF,GAEA,IACA1H,EAAA,EACA,GAFA5Z,EAAAvuC,KAAAwuC,YAAA3kB,EAAAmB,KAEA,CACAujB,EAAAsZ,eAAAh+B,EAAAmB,IAAAnB,EAAAqB,OAAAhlB,EAAAglB,OAAArB,EAAAqB,QACAqjB,EAAA2Y,UAAA/jB,GAEA,IAAAg1B,EAAAn4D,KAAAwuC,YAAA7D,GACAwtB,OAAA5pB,IACA4pB,EAAAhkB,MAAA5F,GACAA,EAAA4pB,GAEAhQ,EAAA2B,EAAAjqD,QAAA0uC,GAAA,EAGA,KAAyB4Z,EAAA2B,EAAAlqD,OAAwBuoD,IAAA,EACjD5Z,EAAAub,EAAA3B,IACAjiD,MAAA8kB,KAAAnB,EAAAmB,KACAujB,EAAA2Y,UAAA/jB,GAIAyH,EAAAD,MACa,CACb,IAAAhmC,EAAAf,MAAAu/B,GACAx+B,EAAAyvC,QAAAzJ,EAAA,GACA,IAAAnpB,EAAA81C,EAAAt3D,KAAAonC,UAAApnC,KAAA4vD,gBACApuC,EAAA3b,OAAApF,MAAA+gB,EAAA7c,GACAmlD,EAAA9pD,KAAA+pD,UAEA5B,EAAA,EACA,GAFA5Z,EAAAvuC,KAAAwuC,YAAA7D,GAEA,CACA,IAAA1f,EAAAsjB,EAAAhnB,MAAAkjB,cAAAvkC,EAAA8kB,IAAA9kB,EAAAglB,QACA,GAAAD,GACAsjB,IAAAzsC,MAAAoE,EAAA8kB,IAAA9kB,EAAAglB,WAEAqjB,EAAA2Y,SAAA/jB,GACAoL,EAAAsZ,eAAAjd,EAAA,EAAA/gB,EAAAqB,OAAAhlB,EAAAglB,UAGA,GAAAD,IACAsjB,EAAAsZ,eAAAld,EAAA,EAAA9gB,EAAAqB,OAAAhlB,EAAAglB,QACAqjB,EAAA2Y,SAAA/jB,IAEAglB,EAAA2B,EAAAjqD,QAAA0uC,GAAA,EAGA,KAAyB4Z,EAAA2B,EAAAlqD,OAAwBuoD,IAAA,CACjD,IAAA5Z,KAAAub,EAAA3B,IACAjiD,MAAA8kB,KAAA2f,GACA4D,EAAA2Y,SAAA/jB,SAKAA,EAAA78B,KAAAgC,IAAAk+B,EAAAtgC,MAAAglB,OAAAsb,EAAA3c,IAAAqB,QACA,WAAA2Z,IACAgrB,EAAA7vD,KAAA6pD,gBAAArjB,GACAxmC,KAAA4qD,YAAAiF,GAEA1sB,OAEAoL,EAAAvuC,KAAAwuC,YAAA7D,KAEA4D,EAAAsZ,eAAAld,EAAAzkC,EAAAglB,OAAAiY,GAcA,OAVAm0B,GAAAt3D,KAAAonC,UAAAxnC,QAAAI,KAAA6L,IAAA0lB,aACA7wB,QAAAC,MAAA,6DAEAX,KAAAirD,WAAA,EAEAqM,EACAt3D,KAAA6qD,gBAAAlgB,EAAAC,GAEA5qC,KAAA8qD,sBAAAngB,EAAAC,GAEAilB,GAGA7vD,KAAA8qD,sBAAA,SAAAngB,EAAAC,EAAAyc,GACArnD,KAAA4vD,gBAAAjlB,GAAA,KACA3qC,KAAA4vD,gBAAAhlB,GAAA,MAGA5qC,KAAA6qD,gBAAA,SAAAlgB,EAAAC,GACA,IAIAyI,EACA9E,EALA9H,EAAAzmC,KAAA6L,IAAAo3C,cACArU,EAAA5uC,KAAA8uC,aACAspB,EAAAp4D,KAAAonC,UACAywB,EAAA73D,KAAAk1D,WAIAlqC,EAAA2f,EAEA,IADAC,EAAAtkC,KAAAM,IAAAgkC,EAAAnE,EAAA7mC,OAAA,GACAorB,GAAA4f,IACA2D,EAAAvuC,KAAAwuC,YAAAxjB,EAAAujB,KAMA8E,KACA9E,EAAAgZ,KAAA,SAAAG,EAAA18B,EAAAE,EAAA2gC,GACA,IAAAwM,EACA,SAAA3Q,EAAA,EACA2Q,EAAAr4D,KAAAs4D,kBACA5Q,EAAArU,EAAAzzC,SACA,GAAA24D,EACA,QAAAh5D,EAAA,EAA2CA,EAAA84D,EAAAz4D,OAAuBL,IAClE84D,EAAA94D,GAAAi5D,OAGAH,EAAAr4D,KAAAs4D,kBACA7xB,EAAAzb,GAAAtF,UAAAmmC,EAAA3gC,GACAmoB,EAAAzzC,QAEAyzC,IAAAvuC,OAAAuzD,IACqB7zD,KAAAxE,MACrBuuC,EAAA1kB,IAAAmB,IACAyb,EAAA8H,EAAA1kB,IAAAmB,KAAAprB,OAAA,GAGAw4D,EAAA7pB,EAAAroC,MAAA8kB,KAAAhrB,KAAAy4D,mBAAAplB,EAAAwkB,EAAAjpB,GACA5jB,EAAAujB,EAAA1kB,IAAAmB,IAAA,IA1BAqoB,EAAArzC,KAAAs4D,kBAAA7xB,EAAAzb,IACAotC,EAAAptC,GAAAhrB,KAAAy4D,mBAAAplB,EAAAwkB,EAAAjpB,GACA5jB,MA4BA,IAEAutC,EAAA,EACAC,EAAA,EAEAE,EAAA,GACAC,EAAA,GACAC,EAAA,GAodA,SAAArxB,EAAA5f,GACA,QAAAA,EAAA,QAEAA,GAAA,MAAAA,GAAA,MACAA,GAAA,MAAAA,GAAA,MACAA,GAAA,MAAAA,GAAA,MACAA,GAAA,MAAAA,GAAA,MACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OACAA,GAAA,OAAAA,GAAA,OAnfA3nB,KAAAy4D,mBAAA,SAAAplB,EAAAwkB,EAAAjpB,GACA,MAAAyE,EAAAzzC,OACA,SAGA,IAAAunC,KACA0xB,EAAAxlB,EAAAzzC,OACAk5D,EAAA,EAAAC,EAAA,EAEAC,EAAAh5D,KAAAi5D,YAEAC,EAAAl5D,KAAAm5D,kBACAC,EAAAvB,GAAAvxD,KAAAC,IAAA,EAAAqoC,EAAA,KACA,IAAAsqB,EAAA,EAAA5yD,KAAAoF,MAAAmsD,EAAA,GAuBA,SAAAwB,EAAA9oB,GACA,IAAA+oB,EAAAjmB,EAAArxC,MAAA82D,EAAAvoB,GACApN,EAAAm2B,EAAA15D,OACA05D,EAAAr3D,KAAA,IACAE,QAAA,iBACAghC,GAAA,IAEAhhC,QAAA,gBACAghC,GAAA,IAGAgE,EAAAvnC,SACAynC,EAjCA,WACA,IAAAkyB,EAAA,EACA,OAAAH,EACA,OAAAG,EACA,GAAAL,EACA,QAAA35D,EAAA,EAA+BA,EAAA8zC,EAAAzzC,OAAmBL,IAAA,CAClD,IAAAkzC,EAAAY,EAAA9zC,GACA,GAAAkzC,GAAAimB,EACAa,GAAA,MACA,IAAA9mB,GAAAkmB,EAEA,IAAAlmB,GAAAmmB,EACA,SAEA,MAJAW,GAAA3qB,GASA,OAFAoqB,IAAA,IAAAE,IACAK,GAAA3qB,GACAtoC,KAAAM,IAAA2yD,EAAAH,GAcAI,GACAryB,EAAAE,UAEA0xB,GAAA51B,EACAgE,EAAA1lC,KAAAs3D,GACAD,EAAAvoB,EAGA,IADA,IAAAlJ,EAAA,EACAwxB,EAAAC,EAAAjB,EAAAxwB,GAAA,CACA,IAAAvlC,EAAAg3D,EAAAjB,EAAAxwB,EACA,GAAAgM,EAAAvxC,EAAA,IAAA42D,GAAArlB,EAAAvxC,IAAA42D,EACAW,EAAAv3D,QAGA,GAAAuxC,EAAAvxC,IAAAy2D,GAAAllB,EAAAvxC,IAAA02D,EAAA,CAuBA,IADA,IAAAiB,EAAAnzD,KAAAC,IAAAzE,GAAA+1D,MAAA,IAAAiB,EAAA,GACAh3D,EAAA23D,GAAApmB,EAAAvxC,GAAAy2D,GACAz2D,IAEA,GAAAk3D,EAAA,CACA,KAAAl3D,EAAA23D,GAAApmB,EAAAvxC,GAAAy2D,GACAz2D,IAEA,KAAAA,EAAA23D,GAlGA,GAkGApmB,EAAAvxC,IACAA,SAGA,KAAAA,EAAA23D,GAAApmB,EAAAvxC,GAAA42D,GACA52D,IAGAA,EAAA23D,EACAJ,IAAAv3D,IA9GA,GAkHAuxC,EADAvxC,EAAAg3D,EAAAjB,IAEA/1D,IACAu3D,EAAAv3D,EAAAulC,QA7CA,CACA,KAA2BvlC,GAAAg3D,EAAA,GAC3BzlB,EAAAvxC,IAAAy2D,EADmDz2D,KAKnD,GAAAA,EAAAg3D,EAAA,CACAO,EAAAv3D,GACA,SAGA,IADAA,EAAAg3D,EAAAjB,EAC2B/1D,EAAAuxC,EAAAzzC,QAC3ByzC,EAAAvxC,IAAA02D,EADkD12D,KAKlD,GAAAA,GAAAuxC,EAAAzzC,OACA,MAEAy5D,EAAAv3D,IA4BA,OAAAqlC,GAEAnnC,KAAAs4D,kBAAA,SAAAh1D,EAAA2e,GACA,IACA2sB,EADAptB,KAEAS,KAAA,EAEA,QAAA1iB,EAAA,EAAuBA,EAAA+D,EAAA1D,OAAgBL,IAAA,CACvC,IAAAooB,EAAArkB,EAAAwgC,WAAAvkC,GACA,MAAAooB,EAAA,CACAinB,EAAA5uC,KAAAwnC,iBAAAhmB,EAAA5hB,OAAAqiB,GACAT,EAAA/f,KAAAk3D,GACA,QAAAltD,EAAA,EAA+BA,EAAAmjC,EAAanjC,IAC5C+V,EAAA/f,KAAAm3D,QAGA,IAAAjxC,EACAnG,EAAA/f,KAAAi3D,GACa/wC,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,GACbnG,EAAA/f,KAtIA,GAwIAkmB,GAAA,MAAA4f,EAAA5f,GACAnG,EAAA/f,KA7IA,EACA,GA8IA+f,EAAA/f,KA/IA,GAkJA,OAAA+f,GAEAxhB,KAAAs1D,sBAAA,SAAAhyD,EAAAo2D,EAAAC,GACA,MAAAD,EACA,YAKA,IAAA/xC,EAAAuD,EACA,IALA,MAAAwuC,IACAA,EAAAnb,KACAob,KAAA,EAGAzuC,EAAA,EAAwBA,EAAA5nB,EAAA1D,SAExB,IADA+nB,EAAArkB,EAAAwgC,WAAA5Y,IAEAyuC,GAAA35D,KAAAwnC,iBAAAmyB,GAEAhyC,GAAA,MAAA4f,EAAA5f,GACAgyC,GAAA,EAEAA,GAAA,IAEAA,EAAAD,IAV6CxuC,KAe7C,OAAAyuC,EAAAzuC,IAGAlrB,KAAA2wC,YAAA,KACA3wC,KAAA45D,aAAA,SAAA5uC,GACA,GAAAhrB,KAAA2wC,YACA,IAAAtQ,EAAArgC,KAAA2wC,YAAA3lB,IAAAhrB,KAAA2wC,YAAA3lB,GAAAosB,UAAA,OAEA/W,EAAA,EACA,OAAArgC,KAAAknC,cAAAlnC,KAAAonC,UAAApc,GAGAhrB,KAAAonC,UAAApc,GAAAprB,OAAA,EAAAygC,EAFA,EAAAA,GAKArgC,KAAA65D,gBAAA,SAAA7uC,GACA,OAAAhrB,KAAAknC,cAAAlnC,KAAAonC,UAAApc,GAGAhrB,KAAAonC,UAAApc,GAAAprB,OAAA,EAFA,GAMAI,KAAA85D,iBAAA,SAAAtoC,GACA,GAAAxxB,KAAAknC,aAAA,CACA,IAAA9gC,EAAApG,KAAAivC,yBAAAzd,EAAAslC,OAAAC,WACA5vB,EAAAnnC,KAAAonC,UAAAhhC,EAAA4kB,KACA,OAAAmc,EAAAvnC,QAAAunC,EAAA,GAAA/gC,EAAA8kB,OAAAic,EAAAE,OAAA,EAEA,UAGArnC,KAAA+5D,uBAAA,SAAAvoC,GACA,IAAAprB,EAAApG,KAAAivC,yBAAAzd,EAAAslC,OAAAC,WACA,OAAA/2D,KAAAg6D,uBAAA5zD,EAAA4kB,IAAA5kB,EAAA8kB,SAEAlrB,KAAAi6D,yBAAA,SAAA9zB,EAAA+zB,GACA,IAAA1oC,EAAAxxB,KAAA2xB,oBAAAwU,EAAA+zB,GACA,OAAAl6D,KAAA+5D,uBAAAvoC,IAEAxxB,KAAAsvC,iCAAA,SAAAnJ,EAAA+zB,GACA,IAAA1oC,EAAAxxB,KAAA2xB,oBAAAwU,EAAA+zB,GACA,OAAAl6D,KAAAivC,yBAAAzd,EAAAslC,OAAAC,UAAA,KAEA/2D,KAAAm6D,gBAAA,SAAAnvC,GACA,OAAAhrB,KAAAknC,aAGAlnC,KAAAonC,UAAApc,QAFA,GAKAhrB,KAAAwnC,iBAAA,SAAAmyB,GACA,OAAA35D,KAAAoxD,SAAAuI,EAAA35D,KAAAoxD,UAIApxD,KAAAo6D,oBAAA,SAAA5oC,EAAAmoC,GACA,OAAA35D,KAAAivC,yBAAAzd,EAAAmoC,GAAA3uC,KAIAhrB,KAAAq6D,uBAAA,SAAA7oC,EAAAmoC,GACA,OAAA35D,KAAAivC,yBAAAzd,EAAAmoC,GAAAzuC,QAEAlrB,KAAAivC,yBAAA,SAAAzd,EAAAmoC,EAAArpB,GACA,GAAA9e,EAAA,EACA,OAAoBxG,IAAA,EAAAE,OAAA,GAEpB,IAAA2a,EAGA3a,EAFAib,EAAA,EACA+zB,EAAA,EAEAlvC,EAAA,EACAsvC,EAAA,EAEA3zB,EAAA3mC,KAAA4mC,gBACArnC,EAAAS,KAAA6mC,kBAAAF,EAAAnV,GACAlwB,EAAAqlC,EAAA/mC,OACA,GAAA0B,GAAA/B,GAAA,EACA,CAAAyrB,EAAA2b,EAAApnC,GACA4mC,EAAAnmC,KAAA8mC,aAAAvnC,GADA,IAEAg7D,EAAA/oC,EAAAmV,EAAArlC,EAAA,QAEAi5D,GAAAj5D,EAOA,IAJA,IAAAk5D,EAAAx6D,KAAAuxB,YAAA,EACAgd,EAAAvuC,KAAAqqD,gBAAAlkB,GACAkvB,EAAA9mB,IAAAroC,MAAA8kB,IAAAuzB,IAEAvzB,GAAAwG,KAEAxG,GADAsvC,EAAAt6D,KAAA45D,aAAAzzB,IACA3U,GAAA2U,GAAAq0B,IAGAxvC,GAAAsvC,IACAn0B,EACAkvB,IACAlvB,EAAAoI,EAAA1kB,IAAAmB,IAAA,EAEAqqC,GADA9mB,EAAAvuC,KAAAqqD,gBAAAlkB,EAAAoI,IACAA,EAAAroC,MAAA8kB,IAAAuzB,KAIAgc,IACAv6D,KAAA8mC,aAAArlC,KAAA0kC,GACAnmC,KAAA4mC,gBAAAnlC,KAAAupB,IAIA,GAAAujB,KAAAroC,MAAA8kB,KAAAmb,EACAN,EAAA7lC,KAAA2rD,mBAAApd,GACApI,EAAAoI,EAAAroC,MAAA8kB,QACS,IAAAA,EAAAsvC,GAAA9oC,GAAA2U,EAAAq0B,EACT,OACAxvC,IAAAwvC,EACAtvC,OAAAlrB,KAAAw/B,QAAAg7B,GAAA56D,QAGAimC,EAAA7lC,KAAAw/B,QAAA2G,GACAoI,EAAA,KAEA,IAAAzI,EAAA,EAAAM,EAAA9/B,KAAAoF,MAAA8lB,EAAAxG,GACA,GAAAhrB,KAAAknC,aAAA,CACA,IAAAC,EAAAnnC,KAAAonC,UAAAjB,GACAgB,IACAjc,EAAAic,EAAAf,GACAA,EAAA,GAAAe,EAAAvnC,SACAkmC,EAAAqB,EAAAE,OACA6yB,EAAA/yB,EAAAf,EAAA,IAAAe,IAAAvnC,OAAA,GACAimC,IAAAngB,UAAAw0C,KAYA,YAPAj5D,IAAAqvC,GAAAtwC,KAAAwwC,aAAAtK,UAAAlb,EAAAob,EAAAD,EAAAC,KACAuzB,EAAA35D,KAAAwwC,aAAAtH,YAAAoH,IAEA4pB,GAAAl6D,KAAAs1D,sBAAAzvB,EAAA8zB,EAAA7zB,GAAA,GACA9lC,KAAAknC,cAAAgzB,GAAAhvC,IACAgvC,EAAAhvC,EAAA,GAEAqjB,EACAA,EAAA2Z,cAAAgS,IAEgBlvC,IAAAmb,EAAAjb,OAAAgvC,IAEhBl6D,KAAAmrC,yBAAA,SAAAhF,EAAA+zB,GACA,YAAAA,EACA,IAAA9zD,EAAApG,KAAAgiD,wBAAA7b,EAAAnb,IAAAmb,EAAAjb,aAEA9kB,EAAApG,KAAAgiD,wBAAA7b,EAAA+zB,GAEA/zB,EAAA//B,EAAA4kB,IACAkvC,EAAA9zD,EAAA8kB,OAEA,IAEA8T,EAFAxN,EAAA,EACAipC,EAAA,MAEAz7B,EAAAh/B,KAAAi/B,UAAAkH,EAAA+zB,EAAA,MAEA/zB,EAAAnH,EAAA94B,MAAA8kB,IACAkvC,EAAAl7B,EAAA94B,MAAAglB,QAGA,IAAAmjB,EAAArjB,EAAA,EAGA2b,EAAA3mC,KAAA8mC,aACAvnC,EAAAS,KAAA6mC,kBAAAF,EAAAR,GACA7kC,EAAAqlC,EAAA/mC,OACA,GAAA0B,GAAA/B,GAAA,EACA,CAAAyrB,EAAA2b,EAAApnC,GACAiyB,EAAAxxB,KAAA4mC,gBAAArnC,GADA,IAEAg7D,EAAAp0B,EAAAQ,EAAArlC,EAAA,QAEAi5D,GAAAj5D,EAMA,IAHA,IAAAitC,EAAAvuC,KAAAqqD,gBAAAr/B,GACAqqC,EAAA9mB,IAAAroC,MAAA8kB,IAAAuzB,IAEAvzB,EAAAmb,GAAA,CACA,GAAAnb,GAAAqqC,EAAA,CAEA,IADAhnB,EAAAE,EAAA1kB,IAAAmB,IAAA,GACAmb,EACA,MAEAkvB,GADA9mB,EAAAvuC,KAAAqqD,gBAAAhc,EAAAE,IACAA,EAAAroC,MAAA8kB,IAAAuzB,SAGAlQ,EAAArjB,EAAA,EAGAwG,GAAAxxB,KAAA45D,aAAA5uC,GACAA,EAAAqjB,EAEAksB,IACAv6D,KAAA8mC,aAAArlC,KAAAupB,GACAhrB,KAAA4mC,gBAAAnlC,KAAA+vB,IAGA,IAAAo6B,EAAA,GACArd,GAAAvjB,GAAAqqC,GACAzJ,EAAA5rD,KAAA2rD,mBAAApd,EAAApI,EAAA+zB,GACAO,EAAAlsB,EAAAroC,MAAA8kB,MAEA4gC,EAAA5rD,KAAAw/B,QAAA2G,GAAAzgB,UAAA,EAAAw0C,GACAO,EAAAt0B,GAEA,IAAAL,EAAA,EACA,GAAA9lC,KAAAknC,aAAA,CACA,IAAAwzB,EAAA16D,KAAAonC,UAAAqzB,GACA,GAAAC,EAAA,CAEA,IADA,IAAAC,EAAA,EACA/O,EAAAhsD,QAAA86D,EAAAC,IACAnpC,IACAmpC,IAEA/O,IAAAlmC,UACAg1C,EAAAC,EAAA,MAAA/O,EAAAhsD,QAEAkmC,EAAA60B,EAAA,EAAAD,EAAArzB,OAAA,GAIA,OACArc,IAAAwG,EACAtG,OAAA4a,EAAA9lC,KAAAs1D,sBAAA1J,GAAA,KAGA5rD,KAAAg6D,uBAAA,SAAAhvC,EAAAkvC,GACA,OAAAl6D,KAAAmrC,yBAAAngB,EAAAkvC,GAAAhvC,QAEAlrB,KAAA2xB,oBAAA,SAAAwU,EAAA+zB,GACA,OAAAl6D,KAAAmrC,yBAAAhF,EAAA+zB,GAAAlvC,KAEAhrB,KAAA46D,gBAAA,WACA,IAAAC,EAAA,EACA77B,EAAA,KACA,GAAAh/B,KAAAknC,aAaA,IALA,IAAA0D,EAAA5qC,KAAAonC,UAAAxnC,OACAorB,EAAA,EAEAqqC,GAFA91D,EAAA,GACAy/B,EAAAh/B,KAAA+pD,UAAAxqD,MACAy/B,EAAA94B,MAAA8kB,IAAAuzB,KAEAvzB,EAAA4f,GAAA,CACA,IAAAzD,EAAAnnC,KAAAonC,UAAApc,GACA6vC,GAAA1zB,IAAAvnC,OAAA,MACAorB,EACAqqC,IACArqC,EAAAgU,EAAAnV,IAAAmB,IAAA,EAEAqqC,GADAr2B,EAAAh/B,KAAA+pD,UAAAxqD,MACAy/B,EAAA94B,MAAA8kB,IAAAuzB,SApBA,CACAsc,EAAA76D,KAAAuxB,YAEA,IADA,IAAAw1B,EAAA/mD,KAAA+pD,UACAxqD,EAAA,EAA2BA,EAAAwnD,EAAAnnD,OAAqBL,IAEhDs7D,IADA77B,EAAA+nB,EAAAxnD,IACAsqB,IAAAmB,IAAAgU,EAAA94B,MAAA8kB,IAsBA,OAHAhrB,KAAA2wC,cACAkqB,GAAA76D,KAAA86D,0BAEAD,GAEA76D,KAAA+6D,gBAAA,SAAAC,GACAh7D,KAAAi7D,iBACAj7D,KAAAs1D,sBAAA,SAAAhyD,EAAAo2D,EAAAC,GACA,OAAAD,EACA,YAKA,IAAA/xC,EAAAuD,EACA,IALAwuC,IACAA,EAAAnb,KACAob,KAAA,EAGAzuC,EAAA,EAA4BA,EAAA5nB,EAAA1D,WAG5B+5D,GADA,QADAhyC,EAAArkB,EAAAvB,OAAAmpB,IAEAlrB,KAAAwnC,iBAAAmyB,GAEAqB,EAAAE,kBAAAvzC,IAEA+xC,GAPiDxuC,KAYjD,OAAAyuC,EAAAzuC,MAIAlrB,KAAAgwB,QAAA,WACAhwB,KAAAsvD,cACAtvD,KAAAsvD,YAAArJ,YAAA,MACAjmD,KAAAsvD,YAAA,MAEAtvD,KAAA2zD,eAGA3zD,KAAAunC,eAsCCnmC,KAAAwtD,EAAA1tD,WAEDM,EAAA,0BAAAmoD,QAAAvoD,KAAAwtD,EAAA1tD,WACAM,EAAA,gCAAAmsD,aAAAvsD,KAAAwtD,EAAA1tD,WAGAi8B,EAAA/C,cAAAw0B,EAAA1tD,UAAA,WACAi6D,MACAjyD,IAAA,SAAApB,GAUA,GATAA,GAAA,OAAAA,EAEA,QAAAA,EACAA,GAAA,EACA,eAAAA,EACAA,GAAA,EACA,iBAAAA,IACAA,EAAA+F,SAAA/F,EAAA,SANAA,GAAA,EAQA9H,KAAAo7D,OAAAtzD,EAGA,GADA9H,KAAAo7D,MAAAtzD,EACAA,EAEa,CACb,IAAAwgC,EAAA,iBAAAxgC,IAAA,KACA9H,KAAAw3D,kBAAAlvB,KACAtoC,KAAAq3D,gBAAA,QAJAr3D,KAAAq3D,gBAAA,IAOApuD,IAAA,WACA,OAAAjJ,KAAAu3D,kBACA,GAAAv3D,KAAAo7D,MACA,cACAp7D,KAAAk4D,oBAAAtxD,IAEA5G,KAAAo7D,MADA,OAGA,OAEAthC,YAAA,GAEAg6B,YACA5qD,IAAA,SAAA6d,IACAA,EAAA,QAAAA,EACA,QAAA/mB,KAAAm6C,MAAAl/B,KACA,QAAA8L,IACA/mB,KAAAi5D,cACAj5D,KAAAi5D,YAAAlyC,EACA/mB,KAAAknC,eACAlnC,KAAA+qD,WAAA,EACA/qD,KAAAwvD,eAAA,GACAxvD,KAAA6qD,gBAAA,EAAA7qD,KAAAuxB,YAAA,MAIA+I,aAAA,QAEA4+B,kBAAuB5+B,cAAA,GACvB+gC,iBACAnyD,IAAA,WAAyBlJ,KAAA8wB,QAAA,qBACzBwJ,aAAA,GAEA84B,WACAlqD,IAAA,SAAAkqD,GACApzD,KAAAszD,WAAAF,EAEApzD,KAAA2zD,cACAP,GACApzD,KAAA4zD,gBAEAt5B,cAAA,GAEAghC,aAAkBhhC,cAAA,GAClBsU,SACA1lC,IAAA,SAAA0lC,GACAylB,MAAAzlB,IAAA5uC,KAAAoxD,WAAAxiB,IAEA5uC,KAAA+qD,WAAA,EACA/qD,KAAA4vD,mBACA5vD,KAAAoxD,SAAAxiB,EACA5uC,KAAA8wB,QAAA,mBAEAwJ,aAAA,EACAR,YAAA,GAEAw3B,wBAA6Bh3B,cAAA,GAC7Bo3B,WACAxoD,IAAA,SAAA6d,GAA4B/mB,KAAA8wB,QAAA,oBAC5BwJ,cAAA,GAEAkpB,aACAt6C,IAAA,SAAA6d,GAA4B/mB,KAAA6L,IAAA03C,eAAAx8B,IAC5B9d,IAAA,WAAyB,OAAAjJ,KAAA6L,IAAA43C,kBACzB3pB,YAAA,GAEAyc,MACArtC,IAAA,SAAA6d,GAA4B/mB,KAAAqvD,QAAAtoC,IAC5B9d,IAAA,WAAyB,OAAAjJ,KAAAwzD,YAIzBr0D,EAAAyvD,gBAGAjsD,IAAAzC,OAAA,8FAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4jB,EAAAthB,EAAA,cACAsP,EAAAtP,EAAA,aACA8nC,EAAA9nC,EAAA,WAAA8nC,MAEAiyB,EAAA,WACAv7D,KAAAy5B,cAGA,WACAz5B,KAAAkJ,IAAA,SAAAmxB,GAEA,OADAvpB,EAAAH,MAAA3Q,KAAAy5B,SAAAY,GACAr6B,MAEAA,KAAAu5B,WAAA,WACA,OAAAzW,EAAA3B,WAAAnhB,KAAAy5B,WAEAz5B,KAAAo5B,WAAA,SAAAiB,GACAr6B,KAAAy5B,SAAAY,GAEAr6B,KAAAw7D,KAAA,SAAAn0C,GACA,IAAAgT,EAAAr6B,KAAAy5B,SACAuhB,EAAAh7C,KAAAy7D,eAAAp0C,EAAAgT,GACA,IAAA2gB,EACA,SAEA,IAAAzb,EAAA,KAaA,OAZAyb,EAAA1zC,QAAA,SAAAo0D,EAAAC,EAAAC,EAAAC,GAEA,OADAt8B,EAAA,IAAA+J,EAAAoyB,EAAAC,EAAAC,EAAAC,KACAF,GAAAE,GAAAxhC,EAAAn0B,OAAAm0B,EAAAn0B,aACA,GAAAm0B,EAAAyhC,aAAAv8B,EAAAoK,QAAAtP,EAAAn0B,UAEAq5B,EAAA,MACA,KAMAA,GAEAv/B,KAAA+7D,QAAA,SAAA10C,GACA,IAAAgT,EAAAr6B,KAAAy5B,SACA,IAAAY,EAAA2hC,OACA,SACAh8D,KAAAi8D,gBAAA5hC,GAEA,IAAA9S,EAAA8S,EAAA9S,MACAkf,EAAAlf,EACAF,EAAAs8B,SAAAp8B,EAAArhB,MAAA8kB,IAAAzD,EAAAsC,IAAAmB,KACA3D,EAAAxb,IAAAo3C,cAEA9R,KACAzU,EAAArC,EAAAqC,GACA,GAAArC,EAAA6hC,aAAA,CACA,IAEAC,EAFAh5B,EAAAzG,EAAA98B,OACA46D,EAAA/zB,EAAA7mC,OAAAujC,EAEA30B,EAAA,QAAAwc,EAAA0R,EAAAza,QAAA,EAAiD+I,GAAAwvC,EAAexvC,IAAA,CAChE,QAAA8Q,EAAA,EAA+BA,EAAAqH,EAASrH,IACxC,OAAA2K,EAAAzb,EAAA8Q,GAAA0T,OAAA9S,EAAAZ,IACA,SAAAttB,EAEA,IAAAo3C,EAAAnf,EAAAzb,GACA6a,EAAAY,EAAAzb,EAAAmY,EAAA,GACAqlB,EAAA5C,EAAAhmD,OAAAgmD,EAAA5iD,MAAA05B,EAAA,OAAA98B,OACA6oD,EAAA5iB,EAAA7iC,MAAA05B,EAAAyG,EAAA,OAAAvjC,OAEAu8D,KAAAtyC,IAAAmB,SACAmxC,EAAAtyC,IAAAqB,OAAAs9B,IAIArX,EAAA1vC,KAAA06D,EAAA,IAAA7yB,EACAte,EAAAw9B,EAAAx9B,EAAAmY,EAAA,EAAAslB,IAEAtlB,EAAA,IACAnY,IAAAmY,EAAA,UAGA,QAAA5jC,EAAA,EAA2BA,EAAAknC,EAAA7mC,OAAkBL,IAC7C,KAAAyiB,EAAAc,EAAAhB,gBAAA2kB,EAAAlnC,GAAAm9B,GACA,IAAAZ,EAAA,EAA+BA,EAAA9Z,EAAApiB,OAAoBk8B,IAAA,CACnD,IAAA94B,EAAAgf,EAAA8Z,GACAqV,EAAA1vC,KAAA,IAAA6nC,EAAA/pC,EAAAyD,EAAAif,OAAA1iB,EAAAyD,EAAAif,OAAAjf,EAAApD,UAKA,GAAA2nB,EAAA,CACA,IAAAiiB,EAAAjiB,EAAArhB,MAAAglB,OACAwe,EAAAniB,EAAArhB,MAAAglB,OAEA,IADA3rB,EAAA,EAAAu8B,EAAAqV,EAAAvxC,OAAA,EACAL,EAAAu8B,GAAAqV,EAAA5xC,GAAA2G,MAAAglB,OAAAse,GAAA2H,EAAA5xC,GAAA2G,MAAA8kB,KAAAzD,EAAArhB,MAAA8kB,KACAzrB,IAEA,KAAAA,EAAAu8B,GAAAqV,EAAArV,GAAAjS,IAAAqB,OAAAwe,GAAAyH,EAAArV,GAAAjS,IAAAmB,KAAAzD,EAAAsC,IAAAmB,KACA8Q,IAGA,IADAqV,IAAAnvC,MAAAzC,EAAAu8B,EAAA,GACAv8B,EAAA,EAAAu8B,EAAAqV,EAAAvxC,OAA0CL,EAAAu8B,EAAOv8B,IACjD4xC,EAAA5xC,GAAA2G,MAAA8kB,KAAAzD,EAAArhB,MAAA8kB,IACAmmB,EAAA5xC,GAAAsqB,IAAAmB,KAAAzD,EAAArhB,MAAA8kB,IAIA,OAAAmmB,GAEAnxC,KAAAmC,QAAA,SAAA89C,EAAAmc,GACA,IAAA/hC,EAAAr6B,KAAAy5B,SAEAiD,EAAA18B,KAAAi8D,gBAAA5hC,GACA,GAAAA,EAAA6hC,aACA,OAAAE,EAEA,GAAA1/B,EAAA,CAGA,IAAA15B,EAAA05B,EAAA75B,KAAAo9C,GACA,IAAAj9C,KAAA,GAAApD,QAAAqgD,EAAArgD,OACA,YAGA,GADAw8D,EAAAnc,EAAA99C,QAAAu6B,EAAA0/B,GACA/hC,EAAAgiC,aAAA,CACAD,IAAAt6D,MAAA,IACA,QAAAvC,EAAA+G,KAAAM,IAAAq5C,EAAArgD,OAAAqgD,EAAArgD,QAA8DL,KAAK,CACnE,IAAAqkC,EAAAqc,EAAA1gD,GACAqkC,KAAA3rB,eAAA2rB,EACAw4B,EAAA78D,GAAA68D,EAAA78D,GAAA68B,cAEAggC,EAAA78D,GAAA68D,EAAA78D,GAAA0Y,cAEAmkD,IAAAn6D,KAAA,IAGA,OAAAm6D,IAGAp8D,KAAAi8D,gBAAA,SAAA5hC,EAAAiiC,GACA,GAAAjiC,EAAA2hC,kBAAAl5D,OACA,OAAAu3B,EAAAqC,GAAArC,EAAA2hC,OAEA,IAAAA,EAAA3hC,EAAA2hC,OAEA,IAAA3hC,EAAA2hC,OACA,OAAA3hC,EAAAqC,IAAA,EAEArC,EAAAtY,SACAi6C,EAAAl5C,EAAAlB,aAAAo6C,IAEA3hC,EAAAkiC,YACAP,EA+IA,SAAAA,EAAA3hC,GACA,SAAAmiC,EAAA70C,GACA,WAAA5kB,KAAA4kB,IAAA0S,EAAAtY,OAAA,MACA,GAEA,OAAAy6C,EAAAR,EAAA,IAAAA,EACAQ,EAAAR,IAAAp8D,OAAA,IArJA68D,CAAAT,EAAA3hC,IAEA,IAAAqiC,EAAAriC,EAAAsiC,cAAA,WAGA,GADAtiC,EAAA6hC,cAAAI,GAAA,SAAAv5D,KAAAi5D,GACA3hC,EAAA6hC,aACA,OAAA7hC,EAAAqC,GAAA18B,KAAA48D,yBAAAZ,EAAAU,GAEA,IACA,IAAAhgC,EAAA,IAAA55B,OAAAk5D,EAAAU,GACS,MAAA/gD,GACT+gB,GAAA,EAEA,OAAArC,EAAAqC,MAGA18B,KAAA48D,yBAAA,SAAAZ,EAAAU,GAGA,IAFA,IAAAlgC,EAAAw/B,EAAA75D,QAAA,sBAAAL,MAAA,MACA46B,KACAn9B,EAAA,EAAuBA,EAAAi9B,EAAA58B,OAAkBL,IAAA,IACzCm9B,EAAAj7B,KAAA,IAAAqB,OAAA05B,EAAAj9B,GAAAm9D,IACS,MAAA/gD,GACT,SAEA,OAAA+gB,GAGA18B,KAAAy7D,eAAA,SAAAp0C,EAAAgT,GACA,IAAAqC,EAAA18B,KAAAi8D,gBAAA5hC,GACA,IAAAqC,EACA,SACA,IAAAmgC,EAAA,GAAAxiC,EAAAwiC,UACAf,EAAA,GAAAzhC,EAAAyhC,YAEAv0C,EAAA8S,EAAA9S,MACArhB,EAAAm0B,EAAAn0B,MACAA,IACAA,EAAAqhB,IAAAs1C,EAAA,eAAAx1C,EAAApC,UAAAmC,YAEAlhB,UACAA,IAAA41D,GAAAe,EAAA,gBAEA,IAAAlyB,EAAApjB,IAAArhB,MAAA8kB,IAAA,EACA4f,EAAArjB,IAAAsC,IAAAmB,IAAA3D,EAAAkK,YAAA,EAEA,GAAAsrC,EACA,IAAAv1D,EAAA,SAAAvG,GACA,IAAAiqB,EAAA9kB,EAAA8kB,IACA,IAAA8xC,EAAA9xC,EAAA9kB,EAAAglB,OAAAnqB,GAAA,CAEA,IAAAiqB,IAA2BA,GAAA2f,EAAiB3f,IAC5C,GAAA8xC,EAAA9xC,EAAA8rC,OAAAC,UAAAh2D,GACA,OACA,MAAAs5B,EAAA8gC,KAEA,IAAAnwC,EAAA4f,EAAAD,EAAAzkC,EAAA8kB,IAAyDA,GAAA2f,EAAiB3f,IAC1E,GAAA8xC,EAAA9xC,EAAA8rC,OAAAC,UAAAh2D,GACA,cAIAuG,EAAA,SAAAvG,GACA,IAAAiqB,EAAA9kB,EAAA8kB,IACA,IAAA8xC,EAAA9xC,EAAA9kB,EAAAglB,OAAAnqB,GAAA,CAEA,IAAAiqB,GAAA,EAAmCA,GAAA4f,EAAgB5f,IACnD,GAAA8xC,EAAA9xC,EAAA,EAAAjqB,GACA,OACA,MAAAs5B,EAAA8gC,KAEA,IAAAnwC,EAAA2f,EAAAC,EAAA1kC,EAAA8kB,IAAyDA,GAAA4f,EAAgB5f,IACzE,GAAA8xC,EAAA9xC,EAAA,EAAAjqB,GACA,SAIA,GAAAs5B,EAAA6hC,aACA,IAAA/4B,EAAAzG,EAAA98B,OACAk9D,EAAA,SAAA9xC,EAAA/I,EAAAlhB,GACA,IAAAwoC,EAAAszB,EAAA7xC,EAAAmY,EAAA,EAAAnY,EACA,KAAAue,EAAA,IACA,IAAA1D,EAAAxe,EAAAmY,QAAA+J,GACAif,EAAA3iB,EAAA2J,OAAA9S,EAAA,IACA,MAAAmgC,GAAArU,EAAAvmC,IAAA,IAAAumC,GAAA,CACA,QAAAjpD,EAAA,EAA+BA,EAAA4jC,EAAS5jC,IAExC,QADAsmC,EAAAxe,EAAAmY,QAAA+J,EAAAhqC,IACAiwC,OAAA9S,EAAAn9B,IACA,OAEA,IAAAkpD,EAAA5iB,EAAA7iC,MAAA05B,EAAAyG,EAAA,OAAAvjC,OACA,KAAAi9D,GAAApU,EAAAxmC,GACA,QAAAlhB,EAAAwoC,EAAAif,EAAAjf,EAAApG,EAAA,EAAAslB,SAAA,UAIA,GAAAoU,EACAC,EAAA,SAAA9xC,EAAAy9B,EAAA1nD,GACA,IAEAk7B,EAFA4J,EAAAxe,EAAAmY,QAAAxU,GACAhJ,KACArB,EAAA,EAEA,IADA+b,EAAAr5B,UAAA,EACA44B,EAAAS,EAAA75B,KAAAgjC,IAAA,CACA,IAAAjmC,EAAAq8B,EAAA,GAAAr8B,OAEA,GADA+gB,EAAAsb,EAAA93B,OACAvE,EAAA,CACA,GAAA+gB,GAAAklB,EAAAjmC,OAAA,MACA88B,EAAAr5B,UAAAsd,GAAA,EAEA,GAAAsb,EAAA93B,MAAAvE,EAAA6oD,EACA,MACAzmC,EAAAvgB,KAAAw6B,EAAA93B,MAAAvE,GAEA,QAAAL,EAAAyiB,EAAApiB,OAAA,EAAgDL,GAAA,EAAQA,GAAA,GACxD,IAAA2rB,EAAAlJ,EAAAziB,EAAA,GAEA,GAAAwB,EAAAiqB,EAAAE,EAAAF,EAAAE,GADAtrB,EAAAoiB,EAAAziB,KAEA,gBAKAu9D,EAAA,SAAA9xC,EAAAw9B,EAAAznD,GACA,IACAk7B,EADA4J,EAAAxe,EAAAmY,QAAAxU,GAEArK,EAAA6nC,EAEA,IADA9rB,EAAAr5B,UAAAmlD,EACAvsB,EAAAS,EAAA75B,KAAAgjC,IAAA,CACA,IAAAjmC,EAAAq8B,EAAA,GAAAr8B,OAEA,GAAAmB,EAAAiqB,EADArK,EAAAsb,EAAA93B,MACA6mB,EAAArK,EAAA/gB,GACA,SACA,IAAAA,IACA88B,EAAAr5B,UAAAsd,GAAA,EACAA,GAAAklB,EAAAjmC,QAAA,WAKA,OAAgB0H,cAGflG,KAAAm6D,EAAAr6D,WAWD/B,EAAAo8D,WAGA54D,IAAAzC,OAAA,uGAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAwgC,EAAAl+B,EAAA,eACAoZ,EAAApZ,EAAA,oBACA8P,EAAAouB,EAAApuB,SAEA,SAAAyrD,EAAA5/B,EAAA9jB,GACArZ,KAAAqZ,aAAAuB,EAAA3B,MAAA,aACAjZ,KAAA+/B,YACA//B,KAAAg9D,qBACAh9D,KAAAi9D,YAAA9/B,GACAn9B,KAAAk9D,gBAAA,EAGA,SAAAC,EAAAhgC,EAAA9jB,GACA0jD,EAAA37D,KAAApB,KAAAm9B,EAAA9jB,GACArZ,KAAAk9D,gBAAA,EAGAC,EAAAj8D,UAAA67D,EAAA77D,UAEA,WAgEA,SAAAirC,EAAAt6B,GACA,uBAAAA,KAAAurD,SACAvrD,EAAAurD,QAAA3uD,WACAoD,EAAAwrD,WAAA,OAhEAr9D,KAAAs9D,WAAA,SAAAzrD,GACA7R,KAAA+/B,SAAAluB,EAAAtO,OACAvD,KAAAu9D,cAAA1rD,GAEA7R,KAAA+/B,SAAAluB,EAAAtO,MAAAsO,EAEAA,EAAAurD,SACAp9D,KAAAw9D,cAAA3rD,IAGA7R,KAAAu9D,cAAA,SAAA1rD,EAAA4rD,GACA,IAAAl6D,EAAAsO,IAAA,iBAAAA,MAAAtO,MACAsO,EAAA7R,KAAA+/B,SAAAx8B,GACAk6D,UACAz9D,KAAA+/B,SAAAx8B,GACA,IAAAm6D,EAAA19D,KAAAg9D,kBACA,QAAAW,KAAAD,EAAA,CACA,IAAAE,EAAAF,EAAAC,GACA,GAAAC,GAAA/rD,SACA6rD,EAAAC,QACa,GAAA/5D,MAAAqD,QAAA22D,GAAA,CACb,IAAAr+D,EAAAq+D,EAAA/9D,QAAAgS,IACA,GAAAtS,IACAq+D,EAAA/3D,OAAAtG,EAAA,GACA,GAAAq+D,EAAAh+D,SACA89D,EAAAC,GAAAC,EAAA,QAMA59D,KAAAo9D,QAAA,SAAA99D,EAAAuS,EAAApD,GAMA,GALA,iBAAAnP,YACA2B,GAAAwN,IACAA,EAAAnP,EAAAmP,UACAnP,IAAAU,KAAAqZ,WAEA/Z,EAEA,yBAAAuS,EACA7R,KAAAs9D,YAAoCz6D,KAAAgP,EAAAurD,QAAA99D,EAAAiE,KAAAsO,EAAAtO,MAAAjE,SAEpCA,EAAAwC,MAAA,KAAAwF,QAAA,SAAAu2D,GACA,IAAAC,EAAA,GACA,OAAAD,EAAAh+D,QAAA,MACA,IAAA28B,EAAAqhC,EAAA/7D,MAAA,OACA+7D,EAAArhC,EAAAzD,MACAyD,EAAAl1B,QAAA,SAAAu2D,GACA,IAAAE,EAAA/9D,KAAAg+D,UAAAH,GACAx7D,EAAAiP,EAAAysD,EAAA3+C,QAAA2+C,EAAAz+D,IACAw+D,MAAA,QAAAz7D,EACArC,KAAAi+D,qBAAAH,EAAA,cACiB99D,MACjB89D,GAAA,IAEA,IAAAC,EAAA/9D,KAAAg+D,UAAAH,GACAx7D,EAAAiP,EAAAysD,EAAA3+C,QAAA2+C,EAAAz+D,IACAU,KAAAi+D,qBAAAH,EAAAz7D,EAAAwP,EAAApD,IACSzO,OAQTA,KAAAi+D,qBAAA,SAAAN,EAAA9rD,EAAApD,GACA,IAAAlP,EAAAm+D,EAAA19D,KAAAg9D,kBACA,GAAAnrD,EAES,IAAA6rD,EAAAC,IAAA39D,KAAAk9D,eACTQ,EAAAC,GAAA9rD,MACS,CACTjO,MAAAqD,QAAAy2D,EAAAC,KAEa,IAAAp+D,EAAAm+D,EAAAC,GAAA99D,QAAAgS,KACb6rD,EAAAC,GAAA93D,OAAAtG,EAAA,GAFAm+D,EAAAC,IAAAD,EAAAC,IAKA,iBAAAlvD,IACAA,EAAA09B,EAAAt6B,IAGA,IAAAkuB,EAAA29B,EAAAC,GACA,IAAAp+D,EAAA,EAAuBA,EAAAwgC,EAAAngC,OAAqBL,IAAA,CAG5C,GADA4sC,EADApM,EAAAxgC,IAEAkP,EACA,MAEAsxB,EAAAl6B,OAAAtG,EAAA,EAAAsS,eArBA6rD,EAAAC,IAyBA39D,KAAAi9D,YAAA,SAAAl9B,GACAA,GAAArgC,OAAAC,KAAAogC,GAAAz4B,QAAA,SAAA/D,GACA,IAAAsO,EAAAkuB,EAAAx8B,GACA,GAAAsO,EAAA,CAGA,oBAAAA,EACA,OAAA7R,KAAAo9D,QAAAvrD,EAAAtO,GAEA,mBAAAsO,IACAA,GAA2BhP,KAAAgP,IAE3B,iBAAAA,IAGAA,EAAAtO,OACAsO,EAAAtO,QAEAvD,KAAAs9D,WAAAzrD,MACS7R,OAGTA,KAAAk+D,eAAA,SAAAn+B,GACArgC,OAAAC,KAAAogC,GAAAz4B,QAAA,SAAA/D,GACAvD,KAAAu9D,cAAAx9B,EAAAx8B,KACSvD,OAGTA,KAAAm+D,SAAA,SAAAC,GACA1+D,OAAAC,KAAAy+D,GAAA92D,QAAA,SAAAhI,GACAU,KAAAo9D,QAAA99D,EAAA8+D,EAAA9+D,KACSU,OAGTA,KAAAw9D,cAAA,SAAA3rD,GACA7R,KAAAo9D,QAAAvrD,EAAAurD,QAAAvrD,IAEA7R,KAAAg+D,UAAA,SAAAr+D,GACA,IAAA68B,EAAA78B,EAAAsY,cAAAnW,MAAA,mBAAA+F,OAAA,SAAAzE,GAAmF,OAAAA,IACnF9D,EAAAk9B,EAAAzD,MAEAtgB,EAAAinB,EAAApgC,GACA,GAAAogC,EAAA3tB,cAAA0G,GACAnZ,EAAAogC,EAAA3tB,cAAA0G,GAAAR,kBACA,KAAAukB,EAAA58B,OACA,OAAoBN,MAAA8f,QAAA,GACpB,MAAAod,EAAA58B,QAAA,SAAA48B,EAAA,GACA,OAAoBl9B,MAAA88B,cAAAhd,QAAA,GAGpB,IADA,IAAAA,EAAA,EACA7f,EAAAi9B,EAAA58B,OAAkCL,KAAK,CACvC,IAAAm9D,EAAAh9B,EAAApuB,SAAAkrB,EAAAj9B,IACA,SAAAm9D,EAGA,MAFA,oBAAAh8D,SACAA,QAAAC,MAAA,oBAAA67B,EAAAj9B,GAAA,OAAAI,IACA,EAEAyf,GAAAs9C,EAEA,OAAgBp9D,MAAA8f,WAGhBpf,KAAAq+D,eAAA,SAAAj/C,EAAA1G,GACA,IAAApZ,EAAAgS,EAAA8N,GAAA1G,EACA,OAAA1Y,KAAAg9D,kBAAA19D,IAGAU,KAAAsgC,eAAA,SAAAlgB,EAAAhB,EAAA1G,EAAAD,GACA,KAAAA,EAAA,IACA,IAAAnZ,EAAAgS,EAAA8N,GAAA1G,EACA7G,EAAA7R,KAAAg9D,kBAAA19D,GAMA,OALA8gB,EAAAk+C,YACAl+C,EAAAk+C,WAAA,IAAAh/D,EACAuS,EAAA7R,KAAAg9D,kBAAA58C,EAAAk+C,YAAAzsD,IAGAA,GACA,aAAAA,GAAA,aAAAA,IAAAjS,OAAA,IAMAwgB,EAAAk+C,YACAl/C,GAAA,GAAAA,GAAA,GAAA1G,EAAA9Y,SAEA,GAAAwf,GAAA3G,EAAA,KACA2H,EAAAk+C,UAAA,IAFAl+C,EAAAk+C,UAAAl+C,EAAAk+C,UAAAt8D,MAAA,GAAA1C,EAAAM,OAAA,KAIgBiS,aAXhBuO,EAAAk+C,UAAAl+C,EAAAk+C,WAAAh/D,GACwBuS,QAAA,WAaxB7R,KAAA0gC,cAAA,SAAAvW,EAAA/J,GACA,OAAAA,EAAAk+C,WAAA,KAGCl9D,KAAA27D,EAAA77D,WAED/B,EAAA49D,cACA59D,EAAAg+D,qBAGAx6D,IAAAzC,OAAA,yIAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,cACA27D,EAAA37D,EAAA,4BAAA27D,iBACAllC,EAAAz2B,EAAA,wBAAAy2B,aAEAsmC,EAAA,SAAAllD,EAAA0mB,GACAo9B,EAAA/7D,KAAApB,KAAA+/B,EAAA1mB,GACArZ,KAAAw+D,OAAAx+D,KAAA+/B,SACA//B,KAAAoqB,kBAAA,gBAAAzO,GACA,OAAAA,EAAA9J,QAAAhP,KAAA8Y,EAAAwO,OAAAxO,EAAAhX,aAIAmM,EAAAR,SAAAiuD,EAAApB,GAEA,WAEArsD,EAAAF,UAAA5Q,KAAAi4B,GAEAj4B,KAAA6C,KAAA,SAAAgP,EAAAsY,EAAAxlB,GACA,GAAAf,MAAAqD,QAAA4K,GAAA,CACA,QAAAtS,EAAAsS,EAAAjS,OAAwCL,KACxC,GAAAS,KAAA6C,KAAAgP,EAAAtS,GAAA4qB,EAAAxlB,GAAA,SAEA,SAMA,GAHA,iBAAAkN,IACAA,EAAA7R,KAAA+/B,SAAAluB,KAEAA,EACA,SAEA,GAAAsY,KAAArD,YAAAjV,EAAAyW,SACA,SAEA,GAAAzW,EAAA4sD,cAAA5sD,EAAA4sD,YAAAt0C,GACA,SAEA,IAAAxO,GAAiBwO,SAAAtY,UAAAlN,QAIjB,OAHAgX,EAAA/Q,YAAA5K,KAAAwoB,MAAA,OAAA7M,GACA3b,KAAA8wB,QAAA,YAAAnV,IAEA,IAAAA,EAAA/Q,aAGA5K,KAAA0+D,gBAAA,SAAAv0C,GACA,IAAAnqB,KAAA2+D,UAIA,OADAx0C,KAAA3B,MAAA,gBACAxoB,KAAA4+D,WACA5+D,KAAA6+D,MAAA9lC,MACA/4B,KAAAwb,oBAAA,OAAAxb,KAAA8+D,oBAEA9+D,KAAA6+D,MAAAj/D,SACAI,KAAA6+D,MAAA7+D,KAAA++D,UAEA/+D,KAAA4+D,WAAA,IAEA5+D,KAAA8+D,qBACA9+D,KAAA8+D,mBAAA,SAAAnjD,GACA3b,KAAA6+D,MAAAp9D,MAAAka,EAAA9J,QAAA8J,EAAAhX,QACaH,KAAAxE,OAGbA,KAAA++D,SAAA/+D,KAAA6+D,MACA7+D,KAAA6+D,SACA7+D,KAAAmoB,GAAA,OAAAnoB,KAAA8+D,oBACA9+D,KAAA4+D,WAAA,IAGA5+D,KAAAg/D,OAAA,SAAA70C,GACA,IAAAnqB,KAAA2+D,WAAA3+D,KAAA6+D,MAAA,CAGA,GAAA7+D,KAAA4+D,UACA,OAAA5+D,KAAA0+D,gBAAAv0C,GAEA,IACAnqB,KAAA2+D,WAAA,EACA3+D,KAAA6+D,MAAAv3D,QAAA,SAAAlE,GACA,iBAAAA,EACApD,KAAA6C,KAAAO,EAAA+mB,GAEAnqB,KAAA6C,KAAAO,EAAA,GAAA+mB,EAAA/mB,EAAA,KACapD,MACJ,QACTA,KAAA2+D,WAAA,KAIA3+D,KAAAi/D,UAAA,SAAAhjC,GACA,OAAAA,EAAAr0B,IAAA,SAAAxE,GAKA,MAJA,iBAAAA,EAAA,KACAA,EAAA,GAAAA,EAAA,GAAAG,MACAH,EAAA,KACAA,IAAA,IACAA,MAIChC,KAAAm9D,EAAAr9D,WAED/B,EAAAo/D,mBAIA57D,IAAAzC,OAAA,gHAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4jB,EAAAthB,EAAA,eACA27B,EAAA37B,EAAA,aACA8nC,EAAA9nC,EAAA,YAAA8nC,MAEA,SAAA8zB,EAAAl9C,EAAAg/C,GACA,OAAYh/C,MAAAg/C,OAEZ//D,EAAA4gC,WACAx8B,KAAA,mBACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GACAgT,EAAAL,WAAA,iCAAA59B,GACAA,EAAAi8B,KAAAhR,GACAA,EAAAg1C,sBAGA72C,UAAA,IAEA/kB,KAAA,gBACA65D,UAAA,cACAv6D,KAAA,SAAAsnB,GACAgT,EAAAL,WAAA,gCAAA59B,GACAA,EAAAkgE,gBAAAj1C,EAAA,MAGAk1C,eAAA,UACA/2C,UAAA,IAEA/kB,KAAA,oBACA65D,UAAA,0BACAv6D,KAAA,SAAAsnB,GACAgT,EAAAL,WAAA,gCAAA59B,GACAA,EAAAkgE,gBAAAj1C,GAAA,MAGAk1C,eAAA,UACA/2C,UAAA,IAEA/kB,KAAA,YACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAxD,aAC5B2B,UAAA,IAEA/kB,KAAA,kBACA65D,UAAA,eACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAm1C,mBAC5Bh3C,UAAA,IAEA/kB,KAAA,WACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GACA,IAAA0b,EAAAh4B,SAAA0xD,OAAA,0BACAlL,MAAAxuB,IACA1b,EAAAq1C,SAAA35B,IAGAvd,UAAA,IAEA/kB,KAAA,OACA65D,UAAA,4CACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA9C,QAAA2kC,YAAA,IAC5ByT,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,SACA65D,UAAA,oEACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA9C,QAAA2kC,YAAA,IAC5ByT,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,mBACA65D,UAAA,WACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA9C,QAAAomC,oBAC5BgS,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,yBACA65D,UAAA,mBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA9C,QAAAomC,kBAAA,IAC5BgS,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,UACA65D,UAAA,8BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA9C,QAAA8jC,WAC5BkU,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,YACA65D,UAAA,4BACAv6D,KAAA,SAAAsnB,GACAA,EAAA9C,QAAA8jC,UACAhhC,EAAA9C,QAAAgkC,OAAAlhC,EAAAlF,UAAAy6C,iBAEAL,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,YACA65D,UAAA,wCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA9C,QAAAgkC,UAC5BgU,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,WACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAw1C,YAC5BF,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,eACA65D,UAAA,kCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAy1C,gBAC5BH,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,mBACA65D,UAAA,kBACAv6D,KAAA,SAAAsnB,GACAA,EAAAlF,UAAAN,UACAwF,EAAAlF,UAAAgpB,aAEA9jB,EAAAw1C,YAEAr3C,UAAA,IAEA/kB,KAAA,uBACA65D,UAAA,8BACAv6D,KAAA,SAAAsnB,GACAA,EAAAlF,UAAAN,UACAwF,EAAAlF,UAAAgpB,aAEA9jB,EAAAy1C,gBAEAt3C,UAAA,IAEA/kB,KAAA,OACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GACAgT,EAAAL,WAAA,6BAAAnhB,GAA4DA,EAAA4/C,OAAApxC,MAE5D7B,UAAA,IAEA/kB,KAAA,YACA65D,QAAA,SACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAynC,mBAC5BtpC,UAAA,IAEA/kB,KAAA,gBACA65D,UAAA,yDACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAA7iB,mBAC5B8xB,kBAAA,UACAn3C,UAAA,EACA+2C,eAAA,UACAQ,gBAAA,aAEAt8D,KAAA,YACA65D,UAAA,uCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA21C,qBAC5BL,kBAAA,UACAn3C,UAAA,EACA+2C,eAAA,UACAQ,gBAAA,aAEAt8D,KAAA,WACA65D,UAAA,oCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAA3jB,YAC5B4yB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,WACA65D,UAAA,kBACAv6D,KAAA,SAAAsnB,EAAAxlB,GAAkCwlB,EAAA41C,WAAAp7D,EAAAq7D,QAClCP,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,cACA65D,UAAA,yDACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAA/iB,iBAC5BgyB,kBAAA,UACAn3C,UAAA,EACA+2C,eAAA,UACAQ,gBAAA,aAEAt8D,KAAA,UACA65D,UAAA,uCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA81C,mBAC5BR,kBAAA,UACAn3C,UAAA,EACA+2C,eAAA,UACAQ,gBAAA,aAEAt8D,KAAA,aACA65D,UAAA,wCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAAzjB,cAC5B0yB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,aACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,EAAAxlB,GAAkCwlB,EAAA+1C,aAAAv7D,EAAAq7D,QAClCP,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,iBACA65D,UAAA,uCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAAziB,kBAC5B0xB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,eACA65D,UAAA,2BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAg2C,oBAC5BV,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,oBACA65D,UAAA,oDACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAAnjB,mBAC5BoyB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,gBACA65D,UAAA,4CACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAi2C,qBAC5BX,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,aACA65D,UAAA,wCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAArjB,cAC5BsyB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,WACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,EAAAxlB,GAAkCwlB,EAAAk2C,aAAA17D,EAAAq7D,QAClCP,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,kBACA65D,UAAA,yCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAA3iB,mBAC5B4xB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,gBACA65D,UAAA,6BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAm2C,qBAC5Bb,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,kBACA65D,UAAA,gEACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAAjjB,iBAC5BkyB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,cACA65D,UAAA,4CACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAo2C,mBAC5Bd,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,cACA65D,UAAA,6BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAAvjB,eAC5BwyB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,YACA65D,UAAA,wBACAv6D,KAAA,SAAAsnB,EAAAxlB,GAAkCwlB,EAAAq2C,cAAA77D,EAAAq7D,QAClCP,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,iBACA65D,QAAA,iBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAs2C,kBAC5Bn4C,UAAA,IAEA/kB,KAAA,WACA65D,UAAA,wBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAu2C,kBAC5Bp4C,UAAA,IAEA/kB,KAAA,eACA65D,UAAA,8BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAw2C,gBAC5Br4C,UAAA,IAEA/kB,KAAA,eACA65D,QAAA,eACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAy2C,gBAC5Bt4C,UAAA,IAEA/kB,KAAA,SACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA02C,gBAC5Bv4C,UAAA,IAEA/kB,KAAA,aACA65D,QAAA,SACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA22C,cAC5Bx4C,UAAA,IAEA/kB,KAAA,WACA65D,UAAA,gBACAv6D,KAAA,SAAA8Y,GAAuBA,EAAAmM,SAAAiH,SAAA,KAAApT,EAAAmM,SAAA0L,YAAAD,aACvBjL,UAAA,IAEA/kB,KAAA,aACA65D,UAAA,kBACAv6D,KAAA,SAAA8Y,GAAuBA,EAAAmM,SAAAiH,SAAA,IAAApT,EAAAmM,SAAA0L,YAAAD,aACvBjL,UAAA,IAEA/kB,KAAA,kBACA65D,QAAA,aACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAAnjB,mBAC5BoyB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,gBACA65D,QAAA,YACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAqmC,eAAAjjB,iBAC5BkyB,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,kBACA65D,UAAA,iCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA4V,SAAA2+B,gBAAAv0C,IAC5B7B,UAAA,IAEA/kB,KAAA,cACA65D,UAAA,kCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA4V,SAAAi/B,OAAA70C,IAC5B7B,UAAA,IAEA/kB,KAAA,iBACA65D,UAAA,mBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA42C,kBAC5BtB,kBAAA,UACAJ,eAAA,UACA/2C,UAAA,IAEA/kB,KAAA,mBACA65D,UAAA,+BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA42C,gBAAA,IAC5BtB,kBAAA,UACAJ,eAAA,UACA/2C,UAAA,IAEA/kB,KAAA,mBACA65D,UAAA,+BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA42C,gBAAA,OAC5BtB,kBAAA,UACAJ,eAAA,UACA/2C,UAAA,IAEA/kB,KAAA,oBACA65D,UAAA,WACAv6D,KAAA,aACAi+B,WAAA,EACAxY,UAAA,IAEA/kB,KAAA,OACAV,KAAA,SAAAsnB,KAEA7B,UAAA,IAGA/kB,KAAA,MACAV,KAAA,SAAAsnB,GACA,IAAA5C,EAAA4C,EAAAsB,oBACAtB,EAAA3B,MAAA,MAAAjB,GAEA4C,EAAAlF,UAAAN,YACAwF,EAAA9C,QAAA1gB,OAAA4gB,GACA4C,EAAA1C,mBAGA43C,eAAA,SACAI,kBAAA,YAEAl8D,KAAA,QACAV,KAAA,SAAAsnB,EAAAxlB,GACAwlB,EAAA62C,aAAAr8D,IAEA06D,eAAA,WAEA97D,KAAA,aACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA45B,eAC5Bsb,eAAA,SACAI,kBAAA,gBAEAl8D,KAAA,qBACA65D,UAAA,kCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA82C,sBAC5B5B,eAAA,SACAI,kBAAA,YAEAl8D,KAAA,YACA65D,UAAA,8BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA+2C,aAC5B7B,eAAA,YACAI,kBAAA,gBAEAl8D,KAAA,gBACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAg0B,sBAC5BshB,kBAAA,cACAJ,eAAA,kBAEA97D,KAAA,qBACA65D,UAAA,kCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAs1B,sBAC5BggB,kBAAA,UACAJ,eAAA,kBAEA97D,KAAA,iBACA65D,UAAA,gCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAg3C,aAAA,IAC5B9B,eAAA,SACAI,kBAAA,YAEAl8D,KAAA,mBACA65D,UAAA,oCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAg3C,cAAA,IAC5B9B,eAAA,SACAI,kBAAA,YAEAl8D,KAAA,UACA65D,UAAA,6BACAv6D,KAAA,SAAAsnB,GACAgT,EAAAL,WAAA,6BAAAnhB,GAA4DA,EAAA4/C,OAAApxC,GAAA,QAG5D5mB,KAAA,OACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAlD,UAE5B1jB,KAAA,OACA65D,UAAA,mDACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA4mC,UAE5BxtD,KAAA,cACA65D,UAAA,oCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAi3C,eAC5B/B,eAAA,WAEA97D,KAAA,cACA65D,UAAA,sBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA6sC,eAC5BqI,eAAA,WAEA97D,KAAA,gBACA65D,UAAA,wCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAk3C,iBAC5BhC,eAAA,WAEA97D,KAAA,gBACA65D,UAAA,0BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA8sC,iBAC5BoI,eAAA,WAEA97D,KAAA,MACA65D,UAAA,uCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAxjB,OAAA,UAC5B84D,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,YACA65D,UACA,4BACA,mDAEAv6D,KAAA,SAAAsnB,GAA4BA,EAAAxjB,OAAA,SAC5B84D,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,gBACA65D,UAAA,qBACAv6D,KAAA,SAAAsnB,GACA,IAAAA,EAAAlF,UAAAN,UAGA,SAFAwF,EAAAxjB,OAAA,SAKA84D,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,oBACA65D,UAAA,qCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAm3C,qBAC5B7B,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,kBACA65D,UAAA,sCACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAo3C,mBAC5B9B,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,wBACA65D,UAAA,6BACAv6D,KAAA,SAAAsnB,GACA,IAAA5C,EAAA4C,EAAAlF,UAAAmC,WACAG,EAAArhB,MAAAglB,OAAA,EACAf,EAAA9C,QAAA1gB,OAAA4gB,IAEAk4C,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,sBACA65D,UAAA,0BACAv6D,KAAA,SAAAsnB,GACA,IAAA5C,EAAA4C,EAAAlF,UAAAmC,WACAG,EAAAsC,IAAAqB,OAAA4rC,OAAAC,UACA5sC,EAAA9C,QAAA1gB,OAAA4gB,IAEAk4C,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,iBACA65D,UAAA,qDACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAq3C,kBAC5B/B,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,kBACA65D,UAAA,4BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAs3C,mBAC5BhC,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,UACA65D,UAAA,yBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAu3C,gBAC5BjC,kBAAA,UACAJ,eAAA,kBAEA97D,KAAA,SACA65D,UAAA,aACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAkd,UAC5Bo4B,kBAAA,UACAJ,eAAA,kBAEA97D,KAAA,eACA65D,UAAA,mBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAu3C,gBAC5BjC,kBAAA,cACAJ,eAAA,kBAEA97D,KAAA,cACA65D,UAAA,mBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAw3C,eAC5BlC,kBAAA,cACAJ,eAAA,kBAEA97D,KAAA,eACAV,KAAA,SAAAsnB,EAAA7mB,GAAiC6mB,EAAA1jB,OAAAnD,IACjCm8D,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,aACAV,KAAA,SAAAsnB,EAAAxlB,GACAwlB,EAAA1jB,OAAAqc,EAAA/B,aAAApc,EAAA0e,MAAA,GAAA1e,EAAAq7D,OAAA,KAEAP,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,YACA65D,UAAA,eACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAy3C,aAC5BnC,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,mBACA65D,UAAA,wBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAA03C,oBAC5BpC,kBAAA,SAAAt1C,GAAyCA,EAAA23C,oBAAA,IACzCzC,eAAA,WAEA97D,KAAA,cACA65D,UAAA,mBACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAiS,eAC5BqjC,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,cACA65D,UAAA,+BACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAlS,eAC5BwnD,kBAAA,UACAJ,eAAA,WAEA97D,KAAA,eACA65D,UAAA,kCACAv6D,KAAA,SAAAsnB,GACA,IAAA5C,EAAA4C,EAAAlF,UAAAmC,WAEAG,EAAArhB,MAAAglB,OAAA3D,EAAAsC,IAAAqB,OAAA,EACA3D,EAAAsC,IAAAmB,MACAb,EAAAlF,UAAAuC,SAAAD,GAAA,IAEAk4C,kBAAA,UACAJ,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,YACA65D,UAAA,WACAv6D,KAAA,SAAAsnB,GASA,IARA,IAAAsiB,EAAAtiB,EAAAlF,UAAAwnB,cACA5nB,EAAA4nB,EAAAtiB,EAAAlF,UAAAonB,mBAAAliB,EAAAlF,UAAAmnB,qBACAtnB,EAAA2nB,EAAAtiB,EAAAlF,UAAAmnB,qBAAAjiB,EAAAlF,UAAAonB,mBACA01B,EAAA53C,EAAA9C,QAAAxb,IAAA2zB,QAAA3a,EAAAmG,KAAAprB,OAEAoiE,EADA73C,EAAA9C,QAAAxb,IAAAypB,aAAAnL,EAAAlF,UAAAmC,YACAjlB,QAAA,aAAAvC,OACAqiE,EAAA93C,EAAA9C,QAAAxb,IAAA2zB,QAAA3a,EAAAmG,KAEAzrB,EAAAslB,EAAAmG,IAAA,EAA4CzrB,GAAAulB,EAAAkG,IAAA,EAA2BzrB,IAAA,CACvE,IAAA2iE,EAAAp/C,EAAA7B,eAAA6B,EAAA5B,gBAAAiJ,EAAA9C,QAAAxb,IAAA2zB,QAAAjgC,KACA,IAAA2iE,EAAAtiE,SACAsiE,EAAA,IAAAA,GAEAD,GAAAC,EAGAp9C,EAAAkG,IAAA,EAAAb,EAAA9C,QAAAxb,IAAA0lB,YAAA,IACA0wC,GAAA93C,EAAA9C,QAAAxb,IAAAq3C,uBAGA/4B,EAAA1C,iBACA0C,EAAA9C,QAAAxb,IAAA1J,QAAA,IAAAmnC,EAAAzkB,EAAAmG,IAAA,EAAAlG,EAAAkG,IAAA,KAAAi3C,GAEAD,EAAA,GACA73C,EAAAlF,UAAAunB,aAAA3nB,EAAAmG,IAAAnG,EAAAqG,QACAf,EAAAlF,UAAAgM,SAAApM,EAAAmG,IAAAnG,EAAAqG,OAAA82C,KAEAD,EAAA53C,EAAA9C,QAAAxb,IAAA2zB,QAAA3a,EAAAmG,KAAAprB,OAAAmiE,IAAA,EAAAA,EACA53C,EAAAlF,UAAAunB,aAAA3nB,EAAAmG,IAAA+2C,KAGAtC,kBAAA,UACAn3C,UAAA,IAEA/kB,KAAA,kBACA65D,UAAA,WACAv6D,KAAA,SAAAsnB,GACA,IAAAsf,EAAAtf,EAAA9C,QAAAxb,IAAA0lB,YAAA,EACAmX,EAAAve,EAAA9C,QAAAxb,IAAA2zB,QAAAiK,GAAA7pC,OACAuxC,EAAAhnB,EAAAlF,UAAAqsB,UAAAH,OACAgxB,KACAhxB,EAAAvxC,OAAA,IACAuxC,GAAAhnB,EAAAlF,UAAAmC,aAGA,QAAA7nB,EAAA,EAAuBA,EAAA4xC,EAAAvxC,OAAmBL,IAC1CA,GAAA4xC,EAAAvxC,OAAA,IACAuxC,EAAA5xC,GAAAsqB,IAAAmB,MAAAye,GAAA0H,EAAA5xC,GAAAsqB,IAAAqB,SAAAwd,GACAy5B,EAAA1gE,KAAA,IAAA6nC,EAAA6H,EAAA5xC,GAAAsqB,IAAAmB,IAAAmmB,EAAA5xC,GAAAsqB,IAAAqB,OAAAue,EAAAf,KAIA,IAAAnpC,EACA,IAAA4xC,EAAA5xC,GAAA2G,MAAA8kB,KAAA,IAAAmmB,EAAA5xC,GAAA2G,MAAAglB,QACAi3C,EAAA1gE,KAAA,IAAA6nC,EAAA,IAAA6H,EAAA5xC,GAAA2G,MAAA8kB,IAAAmmB,EAAA5xC,GAAA2G,MAAAglB,SAGAi3C,EAAA1gE,KAAA,IAAA6nC,EAAA6H,EAAA5xC,EAAA,GAAAsqB,IAAAmB,IAAAmmB,EAAA5xC,EAAA,GAAAsqB,IAAAqB,OAAAimB,EAAA5xC,GAAA2G,MAAA8kB,IAAAmmB,EAAA5xC,GAAA2G,MAAAglB,SAIAf,EAAAi4C,sBACAj4C,EAAA1C,iBAEA,IAAAloB,EAAA,EAAsBA,EAAA4iE,EAAAviE,OAAsBL,IAC5C4qB,EAAAlF,UAAAusB,SAAA2wB,EAAA5iE,IAAA,IAGA+oB,UAAA,EACA+2C,eAAA,WAKA18D,IAAAzC,OAAA,wZAAAsB,EAAArC,EAAAD,GACA,aAEAsC,EAAA,wBAEA,IAAAsP,EAAAtP,EAAA,aACAqhB,EAAArhB,EAAA,aACAshB,EAAAthB,EAAA,cACAoZ,EAAApZ,EAAA,mBACA2hB,EAAA3hB,EAAA,wBAAA2hB,UACAia,EAAA57B,EAAA,yBAAA47B,aACA2B,EAAAv9B,EAAA,wBAAAu9B,YACAY,EAAAn+B,EAAA,yBAAAm+B,WACAivB,EAAAptD,EAAA,kBAAAotD,YACA2M,EAAA/5D,EAAA,YAAA+5D,OACAjyB,EAAA9nC,EAAA,WAAA8nC,MACArR,EAAAz2B,EAAA,uBAAAy2B,aACAsmC,EAAA/8D,EAAA,8BAAA+8D,eACA8D,EAAA7gE,EAAA,+BAAAu+B,SACA5C,EAAA37B,EAAA,YACAi1C,EAAAj1C,EAAA,oBAAAi1C,cACA6rB,EAAA,SAAAx6C,EAAAT,GACA,IAAAwB,EAAAf,EAAAy6C,sBACAviE,KAAA6oB,YACA7oB,KAAA8nB,WACA9nB,KAAAqC,GAAA,YAAAigE,EAAAnT,KAEAnvD,KAAA+/B,SAAA,IAAAw+B,EAAA3jD,EAAA3B,MAAA,YAAAopD,GACA,iBAAAn4D,WACAlK,KAAAqpB,UAAA,IAAAlG,EAAA2E,EAAA06C,uBAAAxiE,MACAA,KAAA8nB,SAAA26C,SAAAziE,KAAAqpB,UAAAjB,aACApoB,KAAA0iE,cAAA,IAAAtlC,EAAAp9B,MACA,IAAA++B,EAAA/+B,OAGAA,KAAA2iE,WAAA,IAAAhjC,EAAA3/B,MAEAA,KAAA0rB,gBAAA,EACA1rB,KAAA4iE,SAAA,IAAArH,GAAAryD,KACAiyD,MAAA,IAGAn7D,KAAA6iE,gBAAA7iE,KAAA6iE,gBAAAr+D,KAAAxE,MACAA,KAAA+/B,SAAA5X,GAAA,OAAAnoB,KAAA6iE,iBAEA7iE,KAAA8iE,0BAEA9iE,KAAA+iE,iBAAAjgD,EAAAL,YAAA,WACAziB,KAAA8wB,QAAA,YACA9wB,KAAAqnB,SAAArnB,KAAAqnB,QAAAioC,aACAtvD,KAAAqnB,QAAAioC,YAAAnJ,iBACK3hD,KAAAxE,OAELA,KAAAmoB,GAAA,kBAAA2P,EAAAnV,GACAA,EAAAogD,iBAAAxgD,SAAA,MAGAviB,KAAAgjE,WAAA37C,GAAA,IAAAunC,EAAA,KACAzxB,EAAA5C,aAAAv6B,MACAm9B,EAAArM,QAAA,SAAA9wB,OAGAsiE,EAAAnT,KAAA,EAEA,WAEAr+C,EAAAF,UAAA5Q,KAAAi4B,GAEAj4B,KAAA8iE,wBAAA,WAGA9iE,KAAA4oC,cACA5oC,KAAA+/B,SAAA5X,GAAA,OAAAnoB,KAAAijE,eAAAz+D,KAAAxE,OAAA,GACAA,KAAA+/B,SAAA5X,GAAA,YAAAnoB,KAAAkjE,aAAA1+D,KAAAxE,OAAA,GAEAA,KAAAmjE,cAAArgD,EAAAL,YAAAziB,KAAAkjE,aAAA1+D,KAAAxE,OAEAA,KAAAmoB,GAAA,oBACAnoB,KAAAojE,OAAApjE,KAAAijE,iBACAjjE,KAAAojE,MAAAC,YAAA,GACS7+D,KAAAxE,OAAA,GAETA,KAAAmoB,GAAA,6BACAnoB,KAAAojE,OAAApjE,KAAAijE,iBACAjjE,KAAAojE,MAAAE,kBAAA,GACS9+D,KAAAxE,OAAA,IAGTA,KAAAojE,MAAA,KACApjE,KAAAujE,UACAvjE,KAAAijE,eAAA,SAAAO,GACA,GAAAxjE,KAAAojE,MAAA,CACA,IAAAI,GAAAxjE,KAAAojE,MAAAvxD,QACA,OACA7R,KAAAujE,OAAAvjE,KAAAojE,MAEAI,IACAxjE,KAAAyjE,gBAAA,KACAD,MAGAxjE,KAAAmjE,cAAA5gD,WACAviB,KAAAojE,OACAvxD,QAAA2xD,EAAA3xD,YACAlN,KAAA6+D,EAAA7+D,KACA0K,UAAArP,KAAA8nB,SAAAzY,WAEArP,KAAAojE,MAAAvxD,QAAAtO,WAAAtC,IAAAjB,KAAAojE,MAAAvxD,QAAAwtD,gBACAr/D,KAAA0rB,mBAGA1rB,KAAAkjE,aAAA,SAAAvnD,GACA,GAAA3b,KAAAojE,MAAA,CACA,GAAAznD,IAAA,IAAAA,EAAA/Q,YACA,OAAA5K,KAAAojE,MAAA,KACApjE,KAAA8wB,QAAA,sBACA,IAAAjf,EAAA7R,KAAAojE,MAAAvxD,QACAA,EAAAtO,MAAAvD,KAAA0rB,gBAAA,GACA1rB,KAAA0rB,kBACA,IAAA2zC,EAAAxtD,KAAAwtD,eACA,GAAAA,EAAA,CACA,OAAAA,GACA,qBACAA,EAAA,UACA,aACAr/D,KAAA8nB,SAAA8E,qBAAA,SACA,MACA,cACA,aACA5sB,KAAA8nB,SAAA8E,uBACA,MACA,oBACA,IAAArF,EAAAvnB,KAAAilB,UAAAmC,WACA+V,EAAAn9B,KAAA8nB,SAAA0L,aACAjM,EAAArhB,MAAA8kB,KAAAmS,EAAAyN,SAAArjB,EAAAsC,IAAAmB,KAAAmS,EAAAwN,WACA3qC,KAAA8nB,SAAA47C,wBAAA1jE,KAAAilB,UAAAkG,OAAAnrB,KAAAilB,UAAA0mB,MAMA,WAAA0zB,GACAr/D,KAAA8nB,SAAA67C,iBAAA3jE,KAAAojE,MAAA/zD,WAGArP,KAAAujE,OAAAvjE,KAAAojE,MACApjE,KAAAojE,MAAA,OAGApjE,KAAA4jE,oBAAA,kCACA5jE,KAAA6iE,gBAAA,SAAAlnD,GACA,GAAA3b,KAAA6jE,iBAAA,CAGA,IAAAC,EAAA9jE,KAAAujE,OACAQ,EAAA/jE,KAAA4jE,mBACAI,EAAAF,EAAAjyD,SAAA8J,EAAA9J,QAAAtO,MAAAugE,EAAAjyD,QAAAtO,KACA,mBAAAoY,EAAA9J,QAAAtO,KAAA,CACA,IAAA8f,EAAA1H,EAAAhX,UACA1D,IAAAjB,KAAAikE,mBACAjkE,KAAAikE,kBAAA,GAEAD,KACAhkE,KAAAikE,oBACA,KAAAlhE,KAAAsgB,IAAA,KAAAtgB,KAAA+gE,EAAAn/D,OAEA3E,KAAAikE,kBAAA,OAEAD,MACA,IAAAD,EAAAlkE,QAAA8b,EAAA9J,QAAAtO,MAIA,UAAAvD,KAAA6jE,kBACA34D,KAAAC,MAAAnL,KAAAkkE,kBAAA,MAEAF,GAAA,GAGAA,EACAhkE,KAAAqnB,QAAAwpC,iBAAA,GACA,IAAAkT,EAAAlkE,QAAA8b,EAAA9J,QAAAtO,QACAvD,KAAAkkE,kBAAAh5D,KAAAC,SAEAnL,KAAAogC,mBAAA,SAAA+jC,EAAAh/C,GACA,GAAAg/C,GAAA,iBAAAA,EAAA,CACAnkE,KAAAokE,cAAAD,EACA,IAAAxhD,EAAA3iB,KACAm9B,EAAAL,YAAA,aAAAqnC,GAAA,SAAAjlE,GACAyjB,EAAAyhD,eAAAD,GACAxhD,EAAAggD,WAAAviC,mBAAAlhC,KAAAmlE,SACAl/C,cAGAnlB,KAAAokE,cAAA,KACApkE,KAAA2iE,WAAAviC,mBAAA+jC,GACAh/C,QAGAnlB,KAAAygC,mBAAA,WACA,OAAAzgC,KAAA2iE,WAAAliC,sBAEAzgC,KAAAgjE,WAAA,SAAA37C,GACA,GAAArnB,KAAAqnB,WAAA,CAEArnB,KAAAojE,OAAApjE,KAAAkjE,eACAljE,KAAAojE,SAEA,IAAAkB,EAAAtkE,KAAAqnB,QACA,GAAAi9C,EAAA,CACAtkE,KAAAqnB,QAAA4R,IAAA,SAAAj5B,KAAAukE,mBACAvkE,KAAAqnB,QAAA4R,IAAA,aAAAj5B,KAAAyzD,eACAzzD,KAAAqnB,QAAA4R,IAAA,kBAAAj5B,KAAAwkE,oBACAxkE,KAAAqnB,QAAA4R,IAAA,gBAAAj5B,KAAAykE,kBACAzkE,KAAAqnB,QAAA4R,IAAA,kBAAAj5B,KAAA0kE,oBACA1kE,KAAAqnB,QAAA4R,IAAA,iBAAAj5B,KAAA2kE,mBACA3kE,KAAAqnB,QAAA4R,IAAA,aAAAj5B,KAAA4kE,eACA5kE,KAAAqnB,QAAA4R,IAAA,oBAAAj5B,KAAA6kE,sBACA7kE,KAAAqnB,QAAA4R,IAAA,mBAAAj5B,KAAA8kE,qBACA9kE,KAAAqnB,QAAA4R,IAAA,mBAAAj5B,KAAA+kE,qBACA/kE,KAAAqnB,QAAA4R,IAAA,mBAAAj5B,KAAAglE,qBACAhlE,KAAAqnB,QAAA4R,IAAA,kBAAAj5B,KAAAilE,iBACAjlE,KAAAqnB,QAAA4R,IAAA,kBAAAj5B,KAAAklE,oBACAllE,KAAAqnB,QAAA4R,IAAA,mBAAAj5B,KAAAmlE,qBAEA,IAAAlgD,EAAAjlB,KAAAqnB,QAAAmpC,eACAvrC,EAAAgU,IAAA,eAAAj5B,KAAAilE,iBACAhgD,EAAAgU,IAAA,kBAAAj5B,KAAAolE,oBAGAplE,KAAAqnB,UACAA,GACArnB,KAAAukE,kBAAAvkE,KAAAqlE,iBAAA7gE,KAAAxE,MACAqnB,EAAAc,GAAA,SAAAnoB,KAAAukE,mBACAvkE,KAAA8nB,SAAAk7C,WAAA37C,GAEArnB,KAAAyzD,cAAAzzD,KAAAslE,aAAA9gE,KAAAxE,MACAqnB,EAAAc,GAAA,aAAAnoB,KAAAyzD,eAEAzzD,KAAAwkE,mBAAAxkE,KAAAulE,kBAAA/gE,KAAAxE,MACAqnB,EAAAc,GAAA,kBAAAnoB,KAAAwkE,oBAEAxkE,KAAAykE,iBAAAzkE,KAAA8nB,SAAA09C,gBAAAhhE,KAAAxE,KAAA8nB,UACAT,EAAAc,GAAA,gBAAAnoB,KAAAykE,kBAEAzkE,KAAA0kE,mBAAA1kE,KAAAylE,kBAAAjhE,KAAAxE,MACAqnB,EAAAc,GAAA,kBAAAnoB,KAAA0kE,oBAEA1kE,KAAA2kE,kBAAA3kE,KAAA0lE,iBAAAlhE,KAAAxE,MACAqnB,EAAAc,GAAA,iBAAAnoB,KAAA2kE,mBAEA3kE,KAAA4kE,cAAA5kE,KAAAovD,aAAA5qD,KAAAxE,MACAqnB,EAAAc,GAAA,aAAAnoB,KAAA4kE,eAEA5kE,KAAA6kE,qBAAA7kE,KAAA2lE,oBAAAnhE,KAAAxE,MACAA,KAAAqnB,QAAAc,GAAA,oBAAAnoB,KAAA6kE,sBAEA7kE,KAAA8kE,oBAAA9kE,KAAA4lE,mBAAAphE,KAAAxE,MACAA,KAAAqnB,QAAAc,GAAA,mBAAAnoB,KAAA8kE,qBAEA9kE,KAAA+kE,oBAAA/kE,KAAA6lE,mBAAArhE,KAAAxE,MACAA,KAAAqnB,QAAAc,GAAA,mBAAAnoB,KAAA+kE,qBAEA/kE,KAAAglE,oBAAAhlE,KAAA8lE,mBAAAthE,KAAAxE,MACAA,KAAAqnB,QAAAc,GAAA,mBAAAnoB,KAAAglE,qBAEAhlE,KAAAilE,gBAAAjlE,KAAA+lE,eAAAvhE,KAAAxE,MACAA,KAAAqnB,QAAAc,GAAA,kBAAAnoB,KAAAilE,iBAEAjlE,KAAAklE,mBAAAllE,KAAAgmE,kBAAAxhE,KAAAxE,MACAA,KAAAqnB,QAAAc,GAAA,kBAAAnoB,KAAAklE,oBAEAllE,KAAAmlE,oBAAAnlE,KAAAimE,mBAAAzhE,KAAAxE,MACAA,KAAAqnB,QAAAc,GAAA,mBAAAnoB,KAAAmlE,qBAEAnlE,KAAAilB,UAAAoC,EAAAmpC,eACAxwD,KAAAilB,UAAAkD,GAAA,eAAAnoB,KAAAilE,iBAEAjlE,KAAAolE,mBAAAplE,KAAAkmE,kBAAA1hE,KAAAxE,MACAA,KAAAilB,UAAAkD,GAAA,kBAAAnoB,KAAAolE,oBAEAplE,KAAAslE,eAEAtlE,KAAA0rB,iBAAA,EACA1rB,KAAA+lE,iBACA/lE,KAAA0rB,iBAAA,EAEA1rB,KAAAgmE,oBACAhmE,KAAAimE,qBACAjmE,KAAAkmE,oBACAlmE,KAAA2lE,sBACA3lE,KAAA4lE,qBACA5lE,KAAA6lE,qBACA7lE,KAAA8lE,qBACA9lE,KAAAqnB,QAAAkwC,kBAAAv3D,KAAA8nB,SAAA2vC,kBACAz3D,KAAA8nB,SAAAq+C,eAEAnmE,KAAAilB,UAAA,KACAjlB,KAAA8nB,SAAAk7C,WAAA37C,IAGArnB,KAAA8wB,QAAA,iBACAzJ,UACAi9C,eAGAtkE,KAAAojE,MAAA,KAEAkB,KAAAxzC,QAAA,gBAA0Ds1C,UAAApmE,OAC1DqnB,KAAAyJ,QAAA,gBAAoD3G,OAAAnqB,OAEpDqnB,KAAAioC,aACAjoC,EAAAioC,YAAAnJ,kBAEAnmD,KAAAqmE,WAAA,WACA,OAAArmE,KAAAqnB,SAEArnB,KAAA+iD,SAAA,SAAAh8B,EAAAu/C,GAUA,OATAtmE,KAAAqnB,QAAAxb,IAAAk3C,SAAAh8B,GAEAu/C,EAEA,GAAAA,EACAtmE,KAAAigE,mBACA,GAAAqG,GACAtmE,KAAA8/D,oBAJA9/D,KAAA2mB,YAMAI,GAEA/mB,KAAAgjD,SAAA,WACA,OAAAhjD,KAAAqnB,QAAA27B,YAEAhjD,KAAAwwD,aAAA,WACA,OAAAxwD,KAAAilB,WAEAjlB,KAAAumE,OAAA,SAAAtR,GACAj1D,KAAA8nB,SAAA0+C,SAAAvR,IAEAj1D,KAAAymE,SAAA,SAAAC,EAAAvhD,GACAnlB,KAAA8nB,SAAA2+C,SAAAC,EAAAvhD,IAEAnlB,KAAA2mE,SAAA,WACA,OAAA3mE,KAAA8nB,SAAA6+C,YAEA3mE,KAAAwsB,SAAA,SAAApf,GACApN,KAAA8nB,SAAA0E,SAAApf,IAEApN,KAAAotB,WAAA,SAAAhgB,GACApN,KAAA8nB,SAAAsF,WAAAhgB,IAEApN,KAAA4mE,YAAA,WACA,OAAA5mE,KAAA05B,UAAA,aACA7W,EAAA/U,cAAA9N,KAAA6oB,UAAA,aAEA7oB,KAAA6mE,YAAA,SAAAv/B,GACAtnC,KAAAs5B,UAAA,WAAAgO,IAGAtnC,KAAA8mE,mBAAA,WAMA,GALA9mE,KAAAqnB,QAAA0/C,oBACA/mE,KAAAqnB,QAAAuN,aAAA50B,KAAAqnB,QAAA0/C,mBACA/mE,KAAAqnB,QAAA0/C,kBAAA,OAGA/mE,KAAAgnE,kBAAA,CAGA,IAAAt/D,EAAA1H,KACAA,KAAAgnE,mBAAA,EACAloD,WAAA,WACApX,EAAAs/D,mBAAA,EACA,IAAA3/C,EAAA3f,EAAA2f,QACA,GAAAA,KAAAioC,YAAA,CACA,IAAAlpD,EAAAihB,EAAAyyB,oBAAApyC,EAAAwxC,qBACA,GAAA9yC,EACA,IAAAmhB,EAAA,IAAA+hB,EAAAljC,EAAA4kB,IAAA5kB,EAAA8kB,OAAA9kB,EAAA4kB,IAAA5kB,EAAA8kB,OAAA,QACa,GAAA7D,EAAA8yB,MAAA8sB,YACb1/C,EAAAF,EAAA8yB,MAAA8sB,YAAAv/D,EAAA2f,SAEAE,IACAF,EAAA0/C,kBAAA1/C,EAAA+M,UAAA7M,EAAA,yBACS,MAETvnB,KAAAknE,eAAA,WACA,IAAAlnE,KAAAmnE,qBAAA,CAEA,IAAAz/D,EAAA1H,KACAA,KAAAmnE,sBAAA,EACAroD,WAAA,WACApX,EAAAy/D,sBAAA,EAEA,IAAA9/C,EAAA3f,EAAA2f,QACA,GAAAA,KAAAioC,YAAA,CAEA,IAAAlpD,EAAAsB,EAAAwxC,oBACA8B,EAAA,IAAAvE,EAAA/uC,EAAA2f,QAAAjhB,EAAA4kB,IAAA5kB,EAAA8kB,QACAunB,EAAAuI,EAAA3D,kBAEA,IAAA5E,IAAA,0BAAA1vC,KAAA0vC,EAAAx3B,MAGA,OAFAoM,EAAAuN,aAAAvN,EAAA+/C,oBACA//C,EAAA+/C,cAAA,MAIA,OAAA30B,EAAAx3B,KAAApb,QAAA,cACA4yC,EAAAuI,EAAA7D,eADA,CAMA,IAAAlrC,EAAAwmC,EAAA3qC,MACAskD,EAAA,EACAib,EAAArsB,EAAA9D,eAEA,QAAAmwB,EAAAv/D,MACA,GACAu/D,EAAA50B,GACAA,EAAAuI,EAAA7D,gBAEA1E,EAAA3qC,QAAAmE,IAAA,IAAAwmC,EAAAx3B,KAAApb,QAAA,cACA,MAAAwnE,EAAAv/D,MACAskD,IACyB,OAAAib,EAAAv/D,OACzBskD,WAIiB3Z,GAAA2Z,GAAA,OACJ,CACb,GACA3Z,EAAA40B,EACAA,EAAArsB,EAAA9D,eAEAzE,KAAA3qC,QAAAmE,IAAA,IAAAwmC,EAAAx3B,KAAApb,QAAA,cACA,MAAAwnE,EAAAv/D,MACAskD,IACyB,OAAAib,EAAAv/D,OACzBskD,WAGiBib,GAAAjb,GAAA,GACjBpR,EAAA7D,cAGA,IAAA1E,EAGA,OAFAprB,EAAAuN,aAAAvN,EAAA+/C,oBACA//C,EAAA+/C,cAAA,MAIA,IAAAp8C,EAAAgwB,EAAA1D,qBACApsB,EAAA8vB,EAAAzD,wBACAhwB,EAAA,IAAA+hB,EAAAte,EAAAE,EAAAF,EAAAE,EAAAunB,EAAA3qC,MAAAlI,QACA0nE,EAAAjgD,EAAA2nC,aAAA3nC,EAAA+/C,eACA//C,EAAA+/C,oBAAAnmE,GAAAqmE,GAAA,IAAA//C,EAAAsiB,aAAAy9B,EAAA//C,SACAF,EAAAuN,aAAAvN,EAAA+/C,eACA//C,EAAA+/C,cAAA,MAGA7/C,IAAAF,EAAA+/C,gBACA//C,EAAA+/C,cAAA//C,EAAA+M,UAAA7M,EAAA,0BACS,MAETvnB,KAAAukB,MAAA,WACA,IAAA5B,EAAA3iB,KACA8e,WAAA,WACA6D,EAAA0G,UAAA9E,UAEAvkB,KAAAqpB,UAAA9E,SAEAvkB,KAAAkkB,UAAA,WACA,OAAAlkB,KAAAqpB,UAAAnF,aAEAlkB,KAAAwkB,KAAA,WACAxkB,KAAAqpB,UAAA7E,QAEAxkB,KAAAqkB,QAAA,SAAA1I,GACA3b,KAAAunE,aAEAvnE,KAAAunE,YAAA,EACAvnE,KAAA8nB,SAAA0/C,aACAxnE,KAAA8nB,SAAA2/C,iBACAznE,KAAAwoB,MAAA,QAAA7M,KAEA3b,KAAAokB,OAAA,SAAAzI,GACA3b,KAAAunE,aAEAvnE,KAAAunE,YAAA,EACAvnE,KAAA8nB,SAAA4/C,aACA1nE,KAAA8nB,SAAA6/C,gBACA3nE,KAAAwoB,MAAA,OAAA7M,KAGA3b,KAAA4nE,cAAA,WACA5nE,KAAA8nB,SAAA+/C,gBAEA7nE,KAAAqlE,iBAAA,SAAA7+B,GACA,IAAA20B,EAAAn7D,KAAAqnB,QAAA6f,aACA0D,EAAApE,EAAAtgC,MAAA8kB,KAAAwb,EAAA3c,IAAAmB,IAAAwb,EAAA3c,IAAAmB,IAAAuzB,IACAv+C,KAAA8nB,SAAAggD,YAAAthC,EAAAtgC,MAAA8kB,IAAA4f,EAAAuwB,GAEAn7D,KAAA8wB,QAAA,SAAA0V,GACAxmC,KAAA4nE,gBACA5nE,KAAA+nE,8BAGA/nE,KAAAulE,kBAAA,SAAA5pD,GACA,IAAA00B,EAAA10B,EAAAyE,KACApgB,KAAA8nB,SAAAggD,YAAAz3B,EAAA6V,MAAA7V,EAAA1vB,OAIA3gB,KAAAgmE,kBAAA,WACAhmE,KAAA8nB,SAAAkgD,UAAAhoE,KAAAqnB,QAAAitC,iBAGAt0D,KAAAimE,mBAAA,WACAjmE,KAAA8nB,SAAAmgD,UAAAjoE,KAAAqnB,QAAAotC,kBAEAz0D,KAAA+lE,eAAA,WACA/lE,KAAA4nE,gBAEA5nE,KAAA0rB,kBACAyR,EAAAvD,KAAA,kEACA,4CACA,iEAEA55B,KAAA8nB,SAAA8E,wBAGA5sB,KAAA8mE,qBACA9mE,KAAAknE,iBACAlnE,KAAA+nE,6BACA/nE,KAAA8wB,QAAA,oBAGA9wB,KAAA+nE,2BAAA,WACA,IAEArV,EAFArrC,EAAArnB,KAAAqmE,aAUA,GAPArmE,KAAAkoE,uBACA,QAAAloE,KAAAmoE,iBAAAnoE,KAAAilB,UAAA+I,gBACA0kC,EAAA1yD,KAAAk5C,sBACAl5C,KAAA8nB,SAAAsgD,WAAA,IAAApoE,KAAAqnB,QAAAkK,aAAAvxB,KAAA8nB,SAAAugD,UAAA,IACA3V,GAAA,IAGArrC,EAAAihD,uBAAA5V,EACArrC,EAAAuN,aAAAvN,EAAAihD,qBAAAjmE,IACAglB,EAAAihD,qBAAA,UACS,IAAAjhD,EAAAihD,sBAAA5V,EAAA,CACT,IAAAnrC,EAAA,IAAA+hB,EAAAopB,EAAA1nC,IAAA0nC,EAAAxnC,OAAAwnC,EAAA1nC,IAAAuzB,KACAh3B,EAAAllB,GAAAglB,EAAA+M,UAAA7M,EAAA,gCACAF,EAAAihD,qBAAA/gD,OACSmrC,IACTrrC,EAAAihD,qBAAApiE,MAAA8kB,IAAA0nC,EAAA1nC,IACA3D,EAAAihD,qBAAAz+C,IAAAmB,IAAA0nC,EAAA1nC,IACA3D,EAAAihD,qBAAApiE,MAAAglB,OAAAwnC,EAAAxnC,OACA7D,EAAAyJ,QAAA,sBAIA9wB,KAAAkmE,kBAAA,SAAAvqD,GACA,IAAA0L,EAAArnB,KAAAqnB,QAOA,GALAA,EAAAkhD,kBACAlhD,EAAAuN,aAAAvN,EAAAkhD,kBAEAlhD,EAAAkhD,iBAAA,KAEAvoE,KAAAilB,UAAAN,UAKA3kB,KAAA+nE,iCALA,CACA,IAAAxgD,EAAAvnB,KAAAilB,UAAAmC,WACAha,EAAApN,KAAAq0B,oBACAhN,EAAAkhD,iBAAAlhD,EAAA+M,UAAA7M,EAAA,gBAAAna,GAKA,IAAAsvB,EAAA18B,KAAAwoE,wBAAAxoE,KAAAyoE,+BACAzoE,KAAAqnB,QAAAqrC,UAAAh2B,GAEA18B,KAAA8wB,QAAA,oBAGA9wB,KAAAyoE,6BAAA,WACA,IAAAphD,EAAArnB,KAAAqnB,QAEApC,EAAAjlB,KAAAyrB,oBACA,IAAAxG,EAAAN,YAAAM,EAAA+I,cAAA,CAGA,IAAA06C,EAAAzjD,EAAA/e,MAAAglB,OAAA,EACAy9C,EAAA1jD,EAAA4E,IAAAqB,OAAA,EACA2a,EAAAxe,EAAAmY,QAAAva,EAAA/e,MAAA8kB,KACA49C,EAAA/iC,EAAAjmC,OACAo8D,EAAAn2B,EAAAngB,UAAApf,KAAAC,IAAAmiE,EAAA,GACApiE,KAAAM,IAAA+hE,EAAAC,IACA,KAAAF,GAAA,aAAA3lE,KAAAi5D,IACA2M,GAAAC,GAAA,UAAA7lE,KAAAi5D,IAIA,GADAA,EAAAn2B,EAAAngB,UAAAT,EAAA/e,MAAAglB,OAAAjG,EAAA4E,IAAAqB,QACA,YAAAnoB,KAAAi5D,GASA,OANAh8D,KAAA4iE,QAAA3G,iBACAM,WAAA,EACAI,eAAA,EACAX,aAOAh8D,KAAA2lE,oBAAA,WACA3lE,KAAA8nB,SAAA+gD,sBAGA7oE,KAAA4lE,mBAAA,WACA5lE,KAAA8nB,SAAAghD,qBAIA9oE,KAAA6lE,mBAAA,WACA7lE,KAAA8nB,SAAAihD,qBAGA/oE,KAAA8lE,mBAAA,WACA9lE,KAAA8nB,SAAA+qC,eAAA7yD,KAAAqnB,QAAA0rC,mBAIA/yD,KAAAslE,aAAA,SAAA3pD,GACA3b,KAAA8nB,SAAAkhD,aACAhpE,KAAAwoB,MAAA,aAAA7M,IAIA3b,KAAAylE,kBAAA,WACAzlE,KAAA8nB,SAAAq+C,cAGAnmE,KAAA0lE,iBAAA,WACA1lE,KAAA8nB,SAAA0+C,UAAA,IAIAxmE,KAAAovD,aAAA,WACApvD,KAAA+nE,6BACA/nE,KAAA8nB,SAAAq+C,cAEAnmE,KAAAipE,gBAAA,WACA,OAAAjpE,KAAAqnB,QAAAiO,aAAAt1B,KAAAyrB,sBAEAzrB,KAAAqmB,YAAA,WACA,IAAAhD,EAAArjB,KAAAipE,kBAEA,OADAjpE,KAAA8wB,QAAA,OAAAzN,GACAA,GAEArjB,KAAAumB,OAAA,WACAvmB,KAAA+/B,SAAAl9B,KAAA,OAAA7C,OAEAA,KAAAsmB,MAAA,WACAtmB,KAAA+/B,SAAAl9B,KAAA,MAAA7C,OAEAA,KAAAulB,QAAA,SAAAlC,EAAAhI,GACA,IAAAM,GAAiB0H,OAAAhI,SACjBrb,KAAA+/B,SAAAl9B,KAAA,QAAA7C,KAAA2b,IAGA3b,KAAAghE,aAAA,SAAArlD,GACA,iBAAAA,IACAA,GAAiB0H,KAAA1H,IACjB3b,KAAA8wB,QAAA,QAAAnV,GACA,IAAA0H,EAAA1H,EAAA0H,KACA,IAAArjB,KAAA8rB,mBAAA9rB,KAAAkpE,uBACAlpE,KAAAyG,OAAA4c,OACS,CACT,IAAAojB,EAAApjB,EAAAvhB,MAAA,cACAqvC,EAAAnxC,KAAAilB,UAAAqsB,UAAAH,OAEA,GAAA1K,EAAA7mC,OAAAuxC,EAAAvxC,QAAA6mC,EAAA7mC,OAAA,IAAA6mC,EAAA,GACA,OAAAzmC,KAAA+/B,SAAAl9B,KAAA,eAAA7C,KAAAqjB,GAEA,QAAA9jB,EAAA4xC,EAAAvxC,OAAuCL,KAAK,CAC5C,IAAAgoB,EAAA4pB,EAAA5xC,GACAgoB,EAAA5C,WACA3kB,KAAAqnB,QAAA1gB,OAAA4gB,GAEAvnB,KAAAqnB,QAAA5gB,OAAA8gB,EAAArhB,MAAAugC,EAAAlnC,OAKAS,KAAAylB,YAAA,SAAA5T,EAAAlN,GACA,OAAA3E,KAAA+/B,SAAAl9B,KAAAgP,EAAA7R,KAAA2E,IAEA3E,KAAAyG,OAAA,SAAA4c,EAAAS,GACA,IAAAuD,EAAArnB,KAAAqnB,QACAkvB,EAAAlvB,EAAA6sC,UACAnpC,EAAA/qB,KAAAk5C,oBAEA,GAAAl5C,KAAAmpE,yBAAArlD,EAAA,CACA,IAAAslD,EAAA7yB,EAAAoK,gBAAAt5B,EAAAg/B,SAAAt7B,EAAAC,KAAA,YAAAhrB,KAAAqnB,EAAAhE,GACA+lD,IACA/lD,IAAA+lD,EAAA/lD,OACArjB,KAAAqnB,QAAAwpC,iBAAA,EACA7wD,KAAAqpE,mBAAA,GAEAhmD,EAAA+lD,EAAA/lD,MAOA,GAFA,MAAAA,IACAA,EAAArjB,KAAAqnB,QAAA4yB,gBACAj6C,KAAAilB,UAAAN,WAKA,GAAA3kB,KAAAqnB,QAAAsqC,iBAAA,GAAAtuC,EAAAxjB,QAAA,QACA0nB,EAAA,IAAA+hB,EAAAuB,WAAA9f,MACAlB,IAAAqB,QAAA7H,EAAAzjB,OACAI,KAAAqnB,QAAA1gB,OAAA4gB,QARA,CACA,IAAAA,EAAAvnB,KAAAyrB,oBACAV,EAAA/qB,KAAAqnB,QAAA1gB,OAAA4gB,GACAvnB,KAAAynB,iBAQA,SAAApE,GAAA,QAAAA,EAAA,CACA,IAAAwiB,EAAAxe,EAAAmY,QAAAzU,EAAAC,KACA,GAAAD,EAAAG,OAAA2a,EAAA2J,OAAA,SACA,IAAA85B,EAAAzjC,EAAArgB,OAAAuF,EAAAG,QAAAskB,OAAA,QACAnoB,EAAAxb,IAAAgzC,aAAA9zB,EAAAC,IAAAD,EAAAG,OAAAH,EAAAG,OAAAo+C,IAGAtpE,KAAAynB,iBAEA,IAAAvhB,EAAA6kB,EAAAG,OACAq+C,EAAAliD,EAAAg/B,SAAAt7B,EAAAC,KAEAw+C,GADA3jC,EAAAxe,EAAAmY,QAAAzU,EAAAC,KACAurB,EAAAyJ,aAAAupB,EAAA1jC,EAAAxiB,IACAgE,EAAA5gB,OAAAskB,EAAA1H,GAgBA,GAdA+lD,KAAAnkD,YACA,GAAAmkD,EAAAnkD,UAAArlB,OACAI,KAAAilB,UAAAF,kBACA,IAAAukB,EAAAve,EAAAC,IAAA9kB,EAAAkjE,EAAAnkD,UAAA,GACA8F,EAAAC,IAAA9kB,EAAAkjE,EAAAnkD,UAAA,KAEAjlB,KAAAilB,UAAAF,kBACA,IAAAukB,EAAAve,EAAAC,IAAAo+C,EAAAnkD,UAAA,GACAmkD,EAAAnkD,UAAA,GACA8F,EAAAC,IAAAo+C,EAAAnkD,UAAA,GACAmkD,EAAAnkD,UAAA,MAIAoC,EAAAqkB,cAAAgY,UAAArgC,GAAA,CACA,IAAAomD,EAAAlzB,EAAAuJ,kBAAAypB,EAAA1jC,EAAA7jC,MAAA,EAAA+oB,EAAAG,QAAA7D,EAAA4yB,gBAEA5yB,EAAA5gB,QAA4BukB,IAAAD,EAAAC,IAAA,EAAAE,OAAA,GAA6Bu+C,GAEzDD,GACAjzB,EAAA2J,YAAAqpB,EAAAliD,EAAA0D,EAAAC,MAGAhrB,KAAA2lB,YAAA,SAAAtC,GACArjB,KAAA2iE,WAAAh9C,YAAAtC,IAGArjB,KAAAymB,aAAA,SAAA9K,EAAAyD,EAAA3G,GACAzY,KAAA2iE,WAAAl8C,aAAA9K,EAAAyD,EAAA3G,IAEAzY,KAAAyxD,aAAA,SAAAC,GACA1xD,KAAAqnB,QAAAoqC,aAAAC,IAEA1xD,KAAA2xD,aAAA,WACA,OAAA3xD,KAAAqnB,QAAAsqC,gBAEA3xD,KAAA4xD,gBAAA,WACA5xD,KAAAqnB,QAAAuqC,mBAEA5xD,KAAA0pE,eAAA,SAAA56C,GACA9uB,KAAAs5B,UAAA,cAAAxK,IAEA9uB,KAAA2pE,eAAA,WACA,OAAA3pE,KAAA05B,UAAA,gBAEA15B,KAAA4pE,aAAA,SAAAjrC,GACA3+B,KAAAs5B,UAAA,YAAAqF,IAEA3+B,KAAAu2B,aAAA,WACA,OAAAv2B,KAAA05B,UAAA,cAEA15B,KAAA6pE,kBAAA,SAAA9iD,GACA/mB,KAAAs5B,UAAA,iBAAAvS,IAEA/mB,KAAAq0B,kBAAA,WACA,OAAAr0B,KAAA05B,UAAA,mBAEA15B,KAAA8pE,uBAAA,SAAAC,GACA/pE,KAAAs5B,UAAA,sBAAAywC,IAEA/pE,KAAAgqE,uBAAA,WACA,OAAAhqE,KAAA05B,UAAA,wBAEA15B,KAAAiqE,uBAAA,SAAAF,GACA/pE,KAAAs5B,UAAA,sBAAAywC,IAGA/pE,KAAAkqE,uBAAA,WACA,OAAAlqE,KAAA05B,UAAA,wBAEA15B,KAAAmqE,yBAAA,SAAAJ,GACA/pE,KAAAs5B,UAAA,wBAAAywC,IAEA/pE,KAAAoqE,yBAAA,WACA,OAAApqE,KAAAwoE,wBAGAxoE,KAAAqqE,kBAAA,SAAAC,GACAtqE,KAAA8nB,SAAAuiD,kBAAAC,IAGAtqE,KAAAuqE,kBAAA,WACA,OAAAvqE,KAAA8nB,SAAAyiD,qBAEAvqE,KAAAioC,kBAAA,SAAAtC,GACA3lC,KAAA8nB,SAAAmgB,kBAAAtC,IAEA3lC,KAAAgoC,kBAAA,WACA,OAAAhoC,KAAA8nB,SAAAkgB,qBAGAhoC,KAAAwqE,uBAAA,SAAAj8D,GACAvO,KAAA8nB,SAAA0iD,uBAAAj8D,IAGAvO,KAAAyqE,uBAAA,WACA,OAAAzqE,KAAA8nB,SAAA2iD,0BAEAzqE,KAAA0qE,mBAAA,SAAAC,GACA3qE,KAAA8nB,SAAA4iD,mBAAAC,IAEA3qE,KAAA4qE,mBAAA,WACA,OAAA5qE,KAAA8nB,SAAA8iD,sBAEA5qE,KAAA6qE,qBAAA,SAAAF,GACA3qE,KAAA8nB,SAAA+iD,qBAAAF,IAEA3qE,KAAA8qE,qBAAA,WACA,OAAA9qE,KAAA8nB,SAAAgjD,wBAEA9qE,KAAAqoB,YAAA,SAAAC,GACAtoB,KAAAs5B,UAAA,WAAAhR,IAEAtoB,KAAA80B,YAAA,WACA,OAAA90B,KAAA05B,UAAA,aAEA15B,KAAA+qE,qBAAA,SAAAC,GACAhrE,KAAAs5B,UAAA,oBAAA0xC,IAEAhrE,KAAAmpE,qBAAA,WACA,OAAAnpE,KAAA05B,UAAA,sBAEA15B,KAAAirE,yBAAA,SAAAD,GACAhrE,KAAAs5B,UAAA,wBAAA0xC,IAEAhrE,KAAAm5C,yBAAA,WACA,OAAAn5C,KAAA05B,UAAA,0BAEA15B,KAAAkrE,mBAAA,SAAAv7C,GACA3vB,KAAAs5B,UAAA,kBAAA3J,IAGA3vB,KAAAmrE,mBAAA,WACA,OAAAnrE,KAAA05B,UAAA,oBAGA15B,KAAAorE,mBAAA,SAAAC,GACArrE,KAAAs5B,UAAA,kBAAA+xC,IAGArrE,KAAAsrE,mBAAA,WACA,OAAAtrE,KAAA05B,UAAA,oBAEA15B,KAAA2G,OAAA,SAAAo6B,GACA/gC,KAAAilB,UAAAN,YACA,QAAAoc,EACA/gC,KAAAilB,UAAAkoB,aAEAntC,KAAAilB,UAAAgoB,eAGA,IAAA1lB,EAAAvnB,KAAAyrB,oBACA,GAAAzrB,KAAAmpE,uBAAA,CACA,IAAA9hD,EAAArnB,KAAAqnB,QACAwP,EAAAxP,EAAAg/B,SAAA9+B,EAAArhB,MAAA8kB,KACAugD,EAAAlkD,EAAA6sC,UAAAvT,gBAAA9pB,EAAA,WAAA72B,KAAAqnB,EAAAE,GAEA,OAAAA,EAAAsC,IAAAqB,OAAA,CACA,IAAA7H,EAAAgE,EAAAiO,aAAA/N,GACA,SAAAlE,IAAAzjB,OAAA,IACA,IAAAimC,EAAAxe,EAAAmY,QAAAjY,EAAAsC,IAAAmB,KACA,QAAAjoB,KAAA8iC,KACAte,EAAAsC,IAAAqB,OAAA2a,EAAAjmC,SAIA2rE,IACAhkD,EAAAgkD,GAGAvrE,KAAAqnB,QAAA1gB,OAAA4gB,GACAvnB,KAAAynB,kBAEAznB,KAAAyhE,gBAAA,WACAzhE,KAAAilB,UAAAN,WACA3kB,KAAAilB,UAAA4oB,kBAEA7tC,KAAAqnB,QAAA1gB,OAAA3G,KAAAyrB,qBACAzrB,KAAAynB,kBAEAznB,KAAAwhE,eAAA,WACAxhE,KAAAilB,UAAAN,WACA3kB,KAAAilB,UAAA8oB,iBAEA/tC,KAAAqnB,QAAA1gB,OAAA3G,KAAAyrB,qBACAzrB,KAAAynB,kBAEAznB,KAAAshE,kBAAA,WACAthE,KAAAilB,UAAAN,WACA3kB,KAAAilB,UAAAooB,kBAEArtC,KAAAqnB,QAAA1gB,OAAA3G,KAAAyrB,qBACAzrB,KAAAynB,kBAEAznB,KAAAuhE,gBAAA,WACAvhE,KAAAilB,UAAAN,WACA3kB,KAAAilB,UAAAsoB,gBAEA,IAAAhmB,EAAAvnB,KAAAyrB,oBACAlE,EAAArhB,MAAAglB,QAAA3D,EAAAsC,IAAAqB,QAAA3D,EAAArhB,MAAA8kB,KAAAzD,EAAAsC,IAAAmB,MACAzD,EAAAsC,IAAAqB,OAAA,EACA3D,EAAAsC,IAAAmB,OAGAhrB,KAAAqnB,QAAA1gB,OAAA4gB,GACAvnB,KAAAynB,kBAEAznB,KAAA4hE,UAAA,WACA5hE,KAAAilB,UAAAN,YACA3kB,KAAAqnB,QAAA1gB,OAAA3G,KAAAyrB,qBACAzrB,KAAAynB,kBAGA,IAAAsD,EAAA/qB,KAAAk5C,oBACAl5C,KAAAyG,OAAA,MACAzG,KAAAszB,qBAAAvI,IAEA/qB,KAAA6hE,iBAAA,WACA,GAAA7hE,KAAAilB,UAAAN,UAAA,CAIA,IAAAoG,EAAA/qB,KAAAk5C,oBACAhuB,EAAAH,EAAAG,OACA,OAAAA,EAAA,CAGA,IACAsgD,EAAAjkD,EADAse,EAAA7lC,KAAAqnB,QAAAmY,QAAAzU,EAAAC,KAEAE,EAAA2a,EAAAjmC,QACA4rE,EAAA3lC,EAAA9jC,OAAAmpB,GAAA2a,EAAA9jC,OAAAmpB,EAAA,GACA3D,EAAA,IAAA+hB,EAAAve,EAAAC,IAAAE,EAAA,EAAAH,EAAAC,IAAAE,EAAA,KAGAsgD,EAAA3lC,EAAA9jC,OAAAmpB,EAAA,GAAA2a,EAAA9jC,OAAAmpB,EAAA,GACA3D,EAAA,IAAA+hB,EAAAve,EAAAC,IAAAE,EAAA,EAAAH,EAAAC,IAAAE,IAEAlrB,KAAAqnB,QAAAllB,QAAAolB,EAAAikD,GACAxrE,KAAAqnB,QAAApC,UAAA0G,eAAApE,EAAAsC,QAEA7pB,KAAAiY,YAAA,WACA,IAAAwzD,EAAAzrE,KAAAyrB,oBACAzrB,KAAAilB,UAAAN,WACA3kB,KAAAilB,UAAAgpB,aAGA,IAAA1mB,EAAAvnB,KAAAyrB,oBACApI,EAAArjB,KAAAqnB,QAAAiO,aAAA/N,GACAvnB,KAAAqnB,QAAAllB,QAAAolB,EAAAlE,EAAApL,eACAjY,KAAAilB,UAAAF,kBAAA0mD,IAEAzrE,KAAAo8B,YAAA,WACA,IAAAqvC,EAAAzrE,KAAAyrB,oBACAzrB,KAAAilB,UAAAN,WACA3kB,KAAAilB,UAAAgpB,aAGA,IAAA1mB,EAAAvnB,KAAAyrB,oBACApI,EAAArjB,KAAAqnB,QAAAiO,aAAA/N,GACAvnB,KAAAqnB,QAAAllB,QAAAolB,EAAAlE,EAAA+Y,eACAp8B,KAAAilB,UAAAF,kBAAA0mD,IAEAzrE,KAAAqnC,OAAA,WACA,IAAAhgB,EAAArnB,KAAAqnB,QACAE,EAAAvnB,KAAAyrB,oBAEA,KAAAlE,EAAArhB,MAAA8kB,IAAAzD,EAAAsC,IAAAmB,KAAA,CAIS,GAAAzD,EAAArhB,MAAAglB,OAAA3D,EAAAsC,IAAAqB,OAAA,CACT,IAAA7H,EAAAgE,EAAAiO,aAAA/N,GACA,YAAAxkB,KAAAsgB,GAAA,CACAgtB,EAAArwC,KAAA0rE,mBAEA,YADArkD,EAAAivC,WAAAjmB,EAAA6V,MAAA7V,EAAA1vB,KAAA,OAKA,IAAAklB,EAAAxe,EAAAmY,QAAAjY,EAAArhB,MAAA8kB,KACAvc,EAAA8Y,EAAArhB,MACAohC,EAAAjgB,EAAAynB,aACA5jB,EAAA7D,EAAA2yC,uBAAAvrD,EAAAuc,IAAAvc,EAAAyc,QAEA,GAAAlrB,KAAAqnB,QAAAq3B,iBACA,IAAA19B,EAAAsmB,EAAApc,EAAAoc,EACAivB,EAAAzzC,EAAA/B,aAAA,IAAAC,OACS,CAET,IADAA,EAAAkK,EAAAoc,EACA,KAAAzB,EAAAte,EAAArhB,MAAAglB,OAAA,IAAAlK,GACAuG,EAAArhB,MAAAglB,SACAlK,IAEAhhB,KAAAilB,UAAAF,kBAAAwC,GACAgvC,EAAA,KAEA,OAAAv2D,KAAAyG,OAAA8vD,GA7BA,IAAAlmB,EAAArwC,KAAA0rE,mBACArkD,EAAAivC,WAAAjmB,EAAA6V,MAAA7V,EAAA1vB,KAAA,OA8BA3gB,KAAA2hE,YAAA,WACA,IAAAtxB,EAAArwC,KAAA0rE,mBACA1rE,KAAAqnB,QAAAivC,WAAAjmB,EAAA6V,MAAA7V,EAAA1vB,KAAA,OAEA3gB,KAAA0hE,aAAA,WACA,IAAAz8C,EAAAjlB,KAAAqnB,QAAAmpC,eACAxwD,KAAAqnB,QAAAmvC,YAAAvxC,EAAAmC,aAEApnB,KAAAkhE,UAAA,WAKA,IAJA,IAAA7wB,EAAArwC,KAAA0rE,mBACArkD,EAAArnB,KAAAqnB,QAEAof,KACAlnC,EAAA8wC,EAAA6V,MAAgC3mD,GAAA8wC,EAAA1vB,KAAgBphB,IAChDknC,EAAAhlC,KAAA4lB,EAAAmY,QAAAjgC,IAEAknC,EAAA2gB,KAAA,SAAArhD,EAAAshD,GACA,OAAAthD,EAAAkS,cAAAovC,EAAApvC,eAAA,EACAlS,EAAAkS,cAAAovC,EAAApvC,cAAA,EACA,IAGA,IAAAy+C,EAAA,IAAAptB,EAAA,SACA,IAAA/pC,EAAA8wC,EAAA6V,MAAgC3mD,GAAA8wC,EAAA1vB,KAAgBphB,IAAA,CAChD,IAAAsmC,EAAAxe,EAAAmY,QAAAjgC,GACAm3D,EAAAxwD,MAAA8kB,IAAAzrB,EACAm3D,EAAA7sC,IAAAmB,IAAAzrB,EACAm3D,EAAA7sC,IAAAqB,OAAA2a,EAAAjmC,OACAynB,EAAAllB,QAAAu0D,EAAAjwB,EAAAlnC,EAAA8wC,EAAA6V,UAGAlmD,KAAAm+C,mBAAA,WACA,IAAAtnB,EAAA72B,KAAAqnB,QAAAg/B,SAAArmD,KAAAk5C,oBAAAluB,KACAqlB,EAAArwC,KAAA0rE,mBACA1rE,KAAAqnB,QAAA6sC,UAAA/V,mBAAAtnB,EAAA72B,KAAAqnB,QAAAgpB,EAAA6V,MAAA7V,EAAA1vB,OAGA3gB,KAAAy/C,mBAAA,WACA,IAAA10B,EAAA/qB,KAAAk5C,oBACAriB,EAAA72B,KAAAqnB,QAAAg/B,SAAAt7B,EAAAC,KACAzD,EAAAvnB,KAAAyrB,oBACAzrB,KAAAqnB,QAAA6sC,UAAAzU,mBAAA5oB,EAAA72B,KAAAqnB,QAAAE,EAAAwD,IAEA/qB,KAAA2rE,YAAA,SAAA3gD,EAAAE,GACA,IAAA0gD,EAAA,4BACAA,EAAAvoE,UAAA,EAGA,IADA,IAAAu0B,EAAA53B,KAAAqnB,QAAAmY,QAAAxU,GACA4gD,EAAAvoE,UAAA6nB,GAAA,CACA,IAAA+Q,EAAA2vC,EAAA/oE,KAAA+0B,GACA,GAAAqE,EAAA93B,OAAA+mB,GAAA+Q,EAAA93B,MAAA83B,EAAA,GAAAr8B,QAAAsrB,EAMA,OAJApjB,MAAAm0B,EAAA,GACA/1B,MAAA+1B,EAAA93B,MACA0lB,IAAAoS,EAAA93B,MAAA83B,EAAA,GAAAr8B,QAKA,aAEAI,KAAAmhE,aAAA,SAAA0K,GACA,IAAA7gD,EAAAhrB,KAAAilB,UAAAinB,YAAAlhB,IACAE,EAAAlrB,KAAAilB,UAAAinB,YAAAhhB,OACA4gD,EAAA,IAAAxiC,EAAAte,EAAAE,EAAA,EAAAF,EAAAE,GAEAvD,EAAA3nB,KAAAqnB,QAAAiO,aAAAw2C,GACA,IAAAzX,MAAA16C,WAAAgO,KAAAokD,SAAApkD,GAAA,CACA,IAAAqkD,EAAAhsE,KAAA2rE,YAAA3gD,EAAAE,GACA,GAAA8gD,EAAA,CACA,IAAAC,EAAAD,EAAAlkE,MAAAjI,QAAA,QAAAmsE,EAAA9lE,MAAA8lE,EAAAlkE,MAAAjI,QAAA,OAAAmsE,EAAAniD,IACAqiD,EAAAF,EAAA9lE,MAAA8lE,EAAAlkE,MAAAlI,OAAAqsE,EAEA59C,EAAA1U,WAAAqyD,EAAAlkE,OACAumB,GAAA/nB,KAAAiS,IAAA,GAAA2zD,GAGAD,IAAAD,EAAAniD,KAAAqB,EAAA+gD,EACAJ,GAAAvlE,KAAAiS,IAAA,GAAAyzD,EAAAniD,IAAAqB,EAAA,GAEA2gD,GAAAvlE,KAAAiS,IAAA,GAAAyzD,EAAAniD,IAAAqB,GAGAmD,GAAAw9C,EAEA,IAAAM,GADA99C,GAAA/nB,KAAAiS,IAAA,GAAA2zD,IACAE,QAAAF,GACAG,EAAA,IAAA/iC,EAAAte,EAAAghD,EAAA9lE,MAAA8kB,EAAAghD,EAAAniD,KACA7pB,KAAAqnB,QAAAllB,QAAAkqE,EAAAF,GACAnsE,KAAAwsC,aAAAxhB,EAAA1kB,KAAAC,IAAAylE,EAAA9lE,MAAA,EAAAglB,EAAAihD,EAAAvsE,OAAAosE,EAAAlkE,MAAAlI,YAKAI,KAAA+jD,YAAA,WACA,IAAA1T,EAAArwC,KAAA0rE,mBACA1rE,KAAAqnB,QAAA28B,gBAAA3T,EAAA6V,MAAA7V,EAAA1vB,MACA3gB,KAAAynB,kBAGAznB,KAAAihE,mBAAA,WACA,IAAAqL,EAAAtsE,KAAAilB,UACApZ,EAAA7L,KAAAqnB,QACAE,EAAA+kD,EAAAllD,WACAtG,EAAAwrD,EAAA7/B,cACA,GAAAllB,EAAA5C,UAAA,CACA,IAAAqG,EAAAzD,EAAArhB,MAAA8kB,IACAnf,EAAAqrD,eAAAlsC,SACS,CACT,IAAAk3B,EAAAphC,EAAAyG,EAAArhB,MAAAqhB,EAAAsC,IACA0iD,EAAA1gE,EAAApF,OAAAy7C,EAAAr2C,EAAAypB,aAAA/N,IAAA,GACAA,EAAArhB,MAAAg8C,EACA36B,EAAAsC,IAAA0iD,EAEAD,EAAAvnD,kBAAAwC,EAAAzG,KAGA9gB,KAAAi3D,cAAA,WACAj3D,KAAA22D,WAAA,OAEA32D,KAAAg3D,YAAA,WACAh3D,KAAA22D,YAAA,OAEA32D,KAAAi2B,SAAA,SAAA1O,EAAA0uC,EAAA70C,GACA,OAAAphB,KAAAqnB,QAAA4O,SAAA1O,EAAA0uC,EAAA70C,IAEAphB,KAAAohE,YAAA,WACAphE,KAAA22D,YAAA,OAEA32D,KAAAqhE,cAAA,WACArhE,KAAA22D,WAAA,OAEA32D,KAAA22D,WAAA,SAAA51B,EAAA3f,GACA,IAAAivB,EAAAm8B,EACAvnD,EAAAjlB,KAAAilB,UACA,IAAAA,EAAA6G,mBAAA9rB,KAAAkpE,uBAAA,CACA,IAAA3hD,EAAAtC,EAAAkP,kBACAkc,EAAArwC,KAAA0rE,iBAAAnkD,GACAilD,EAAAxsE,KAAAqnB,QAAAsvC,WAAAtmB,EAAA6V,MAAA7V,EAAA1vB,KAAAS,EAAA,EAAA2f,GACA3f,IAAA,GAAA2f,IAAAyrC,EAAA,GACAjlD,EAAA8jB,OAAAmhC,EAAA,GACAvnD,EAAA4P,kBAAAtN,OACS,CACT,IAAA4pB,EAAAlsB,EAAAqsB,UAAAH,OACAlsB,EAAAqsB,UAAA9Q,OAAAxgC,KAAAqnB,SACArnB,KAAAkpE,wBAAA,EAKA,IAHA,IAAAtS,EAAA,EACA6V,EAAA,EACAnrE,EAAA6vC,EAAAvxC,OACAL,EAAA,EAA2BA,EAAA+B,EAAO/B,IAAA,CAClC,IAAAmtE,EAAAntE,EACA4xC,EAAA5xC,GAAA8rC,OAAAurB,EAAA,GAIA,IAFA,IAAA1Q,GADA7V,EAAArwC,KAAA0rE,iBAAAv6B,EAAA5xC,KACA2mD,MACAvlC,EAAA0vB,EAAA1vB,OACAphB,EAAA+B,GAAA,CACAmrE,GAAAt7B,EAAA5xC,GAAA8rC,OAAAohC,EAAA,GACA,IAAAE,EAAA3sE,KAAA0rE,iBAAAv6B,EAAA5xC,IACA,GAAA6hB,GAAAurD,EAAAzmB,OAAAvlC,EACA,MACA,IAAAS,GAAAurD,EAAAzmB,MAAAvlC,EAAA,EACA,MACAA,EAAAgsD,EAAAhsD,KAKA,IAHAphB,IACAq3D,EAAA52D,KAAAqnB,QAAAsvC,WAAAzQ,EAAAvlC,EAAAS,EAAA,EAAA2f,GACA3f,IAAA,GAAA2f,IAAA2rC,EAAAntE,EAAA,GACAmtE,GAAAntE,GACA4xC,EAAAu7B,GAAArhC,OAAAurB,EAAA,GACA8V,IAEAtrD,IAAAw1C,EAAA,GACA6V,GAAA7V,EAGA3xC,EAAA4P,kBAAA5P,EAAAksB,OAAA,IACAlsB,EAAAqsB,UAAA/Q,OAAAvgC,KAAAqnB,SACArnB,KAAAkpE,wBAAA,IAGAlpE,KAAA0rE,iBAAA,SAAAnkD,GAGA,OAFAA,MAAAvnB,KAAAyrB,qBAAAuf,gBAGAkb,MAAAlmD,KAAAqnB,QAAAqkC,gBAAAnkC,EAAArhB,MAAA8kB,KACArK,KAAA3gB,KAAAqnB,QAAAokC,cAAAlkC,EAAAsC,IAAAmB,OAIAhrB,KAAAioB,mBAAA,SAAA5E,GACArjB,KAAA8nB,SAAA8kD,gBAAA5sE,KAAAk5C,sBAGAl5C,KAAA6mB,oBAAA,SAAAxD,GACArjB,KAAA8nB,SAAA+kD,mBAAAxpD,IAGArjB,KAAA0nB,iBAAA,WACA1nB,KAAA8nB,SAAAglD,mBAEA9sE,KAAA+sE,mBAAA,WACA,OAAA/sE,KAAA8nB,SAAAilD,sBAEA/sE,KAAAgtE,kBAAA,WACA,OAAAhtE,KAAA8nB,SAAAklD,qBAEAhtE,KAAAitE,aAAA,SAAAjiD,GACA,OAAAA,GAAAhrB,KAAA+sE,sBAAA/hD,GAAAhrB,KAAAgtE,qBAEAhtE,KAAAktE,kBAAA,SAAAliD,GACA,OAAAA,GAAAhrB,KAAA8nB,SAAAqlD,2BAAAniD,GAAAhrB,KAAA8nB,SAAAslD,0BAEAptE,KAAAqtE,oBAAA,WACA,OAAArtE,KAAA8nB,SAAAwlD,qBAAAttE,KAAA8nB,SAAAylD,kBAAA,GAGAvtE,KAAAwtE,YAAA,SAAAzsC,EAAAva,GACA,IAAAsB,EAAA9nB,KAAA8nB,SACAqV,EAAAn9B,KAAA8nB,SAAA0L,YACA6c,EAAAtP,EAAAz6B,KAAAoF,MAAAyxB,EAAA7uB,OAAA6uB,EAAA5J,YAEAvzB,KAAA0rB,mBACA,IAAAlF,EACAxmB,KAAAilB,UAAAynB,eAAA,WACA1sC,KAAA0uC,aAAA2B,EAAA,MAES,IAAA7pB,IACTxmB,KAAAilB,UAAAypB,aAAA2B,EAAA,GACArwC,KAAAilB,UAAAwC,kBAEAznB,KAAA0rB,kBAEA,IAAArc,EAAAyY,EAAAzY,UAEAyY,EAAAiH,SAAA,EAAAshB,EAAAlT,EAAA5J,YACA,MAAA/M,GACAsB,EAAA8E,qBAAA,SAEA9E,EAAA67C,iBAAAt0D,IAEArP,KAAAygE,eAAA,WACAzgE,KAAAwtE,YAAA,OAEAxtE,KAAA4gE,aAAA,WACA5gE,KAAAwtE,aAAA,OAEAxtE,KAAA2gE,aAAA,WACA3gE,KAAAwtE,YAAA,OAEAxtE,KAAA8gE,WAAA,WACA9gE,KAAAwtE,aAAA,OAEAxtE,KAAA0gE,eAAA,WACA1gE,KAAAwtE,YAAA,IAEAxtE,KAAA6gE,aAAA,WACA7gE,KAAAwtE,aAAA,IAEAxtE,KAAAytE,YAAA,SAAAziD,GACAhrB,KAAA8nB,SAAA2lD,YAAAziD,IAEAhrB,KAAA0tE,aAAA,SAAA7nC,EAAA8nC,EAAAC,EAAA7sE,GACAf,KAAA8nB,SAAA4lD,aAAA7nC,EAAA8nC,EAAAC,EAAA7sE,IAEAf,KAAAs/D,gBAAA,WACA,IAAA/3C,EAAAvnB,KAAAyrB,oBACArlB,GACA4kB,IAAA1kB,KAAAoF,MAAA6b,EAAArhB,MAAA8kB,KAAAzD,EAAAsC,IAAAmB,IAAAzD,EAAArhB,MAAA8kB,KAAA,GACAE,OAAA5kB,KAAAoF,MAAA6b,EAAArhB,MAAAglB,QAAA3D,EAAAsC,IAAAqB,OAAA3D,EAAArhB,MAAAglB,QAAA,IAEAlrB,KAAA8nB,SAAA+lD,YAAAznE,EAAA,KAEApG,KAAAk5C,kBAAA,WACA,OAAAl5C,KAAAilB,UAAAinB,aAEAlsC,KAAA8tE,wBAAA,WACA,OAAA9tE,KAAAqnB,QAAA8jB,yBAAAnrC,KAAAk5C,sBAEAl5C,KAAAyrB,kBAAA,WACA,OAAAzrB,KAAAilB,UAAAmC,YAEApnB,KAAA2mB,UAAA,WACA3mB,KAAA0rB,iBAAA,EACA1rB,KAAAilB,UAAA0B,YACA3mB,KAAA0rB,iBAAA,GAEA1rB,KAAAynB,eAAA,WACAznB,KAAAilB,UAAAwC,kBAEAznB,KAAAwsC,aAAA,SAAAxhB,EAAAE,GACAlrB,KAAAilB,UAAAunB,aAAAxhB,EAAAE,IAEAlrB,KAAAszB,qBAAA,SAAAltB,GACApG,KAAAilB,UAAAqO,qBAAAltB,IAEApG,KAAA+gE,eAAA,SAAAv6C,EAAAunD,GACA,IAAAhjD,EAAA/qB,KAAAk5C,oBACA8B,EAAA,IAAAvE,EAAAz2C,KAAAqnB,QAAA0D,EAAAC,IAAAD,EAAAG,QACAm8C,EAAArsB,EAAA3D,kBACA5E,EAAA40B,GAAArsB,EAAA7D,cAEA,GAAA1E,EAAA,CACA,IAAAu7B,EAIAC,EAHAC,GAAA,EACA9hB,KACA7sD,EAAAwrB,EAAAG,OAAAunB,EAAAvsC,MAEAioE,GACAngB,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAc,IACdC,IAAc,KAGd,GACA,GAAA5b,EAAA3qC,MAAA9E,MAAA,gBACA,KAAsBzD,EAAAkzC,EAAA3qC,MAAAlI,SAAAsuE,EAAkC3uE,IACxD,GAAA4uE,EAAA17B,EAAA3qC,MAAAvI,IAUA,OANA0uE,EAAAE,EAAA17B,EAAA3qC,MAAAvI,IAAA,IAAAkzC,EAAAx3B,KAAA9Y,QAAA,mBAEAkyD,MAAAjI,EAAA6hB,MACA7hB,EAAA6hB,GAAA,GAGAx7B,EAAA3qC,MAAAvI,IACA,QACA,QACA,QACA6sD,EAAA6hB,KACA,MACA,QACA,QACA,QACA7hB,EAAA6hB,MAEA,IAAA7hB,EAAA6hB,KACAD,EAAA,UACAE,GAAA,SAMAz7B,IAAA,IAAAA,EAAAx3B,KAAApb,QAAA,cACAw0D,MAAAjI,EAAA3Z,EAAA3qC,UACAskD,EAAA3Z,EAAA3qC,OAAA,GAGA,MAAAu/D,EAAAv/D,MACAskD,EAAA3Z,EAAA3qC,SAEA,OAAAu/D,EAAAv/D,OACAskD,EAAA3Z,EAAA3qC,UAGA,IAAAskD,EAAA3Z,EAAA3qC,SACAkmE,EAAA,MACAE,GAAA,IAIAA,IACA7G,EAAA50B,EACAA,EAAAuI,EAAA7D,cACA53C,EAAA,SAESkzC,IAAAy7B,GACT,GAAAF,EAAA,CAGA,IAAAzmD,EAAAnhB,EACA,eAAA4nE,GACAzmD,EAAAvnB,KAAAqnB,QAAAyG,gBAAA/C,MAQA3kB,GANAmhB,EAAA,IAAA+hB,EACA0R,EAAA1D,qBACA0D,EAAAzD,wBAAAh4C,EAAA,EACAy7C,EAAA1D,qBACA0D,EAAAzD,wBAAAh4C,EAAA,IAEA2G,OACA6nE,GAAA3nE,EAAA4kB,MAAAD,EAAAC,KAAA1kB,KAAAgC,IAAAlC,EAAA8kB,OAAAH,EAAAG,QAAA,KACA3D,EAAAvnB,KAAAqnB,QAAAyG,gBAAA1nB,UAGA,WAAA4nE,EAAA,CACA,IAAAv7B,IAAA,IAAAA,EAAAx3B,KAAApb,QAAA,YAGA,OAFA,IAAAoM,EAAAwmC,EAAA3qC,MAUA,QANAyf,EAAA,IAAA+hB,EACA0R,EAAA1D,qBACA0D,EAAAzD,wBAAA,EACAyD,EAAA1D,qBACA0D,EAAAzD,wBAAA,IAEA3N,QAAA7e,EAAAC,IAAAD,EAAAG,QAAA,CACAgjD,GAAA,EACA,GACAz7B,EAAA40B,GACAA,EAAArsB,EAAA9D,mBAGA,IAAAmwB,EAAApsD,KAAApb,QAAA,cACA0nB,EAAA6iB,OAAA4Q,EAAA1D,qBAAA0D,EAAAzD,wBAAA,GAGA9E,EAAA3qC,QAAAmE,IAAA,IAAAwmC,EAAAx3B,KAAApb,QAAA,cACA,MAAAwnE,EAAAv/D,MACAskD,EAAAngD,KAEA,OAAAo7D,EAAAv/D,OACAskD,EAAAngD,KAGA,IAAAmgD,EAAAngD,KACAiiE,GAAA,WAGiB7G,IAAA6G,GAEjBz7B,KAAAx3B,KAAApb,QAAA,cACAuG,EAAAmhB,EAAArhB,OACA8kB,KAAAD,EAAAC,KAAA1kB,KAAAgC,IAAAlC,EAAA8kB,OAAAH,EAAAG,QAAA,IACA9kB,EAAAmhB,EAAAsC,MAIAzjB,EAAAmhB,KAAAwD,QAAA3kB,KAEAogB,EACAe,GAAAwmD,EACA/tE,KAAAilB,UAAAuC,SAAAD,GACiBA,KAAAoiB,QAAA3pC,KAAAyrB,qBACjBzrB,KAAAynB,iBAEAznB,KAAAilB,UAAAgM,SAAA7qB,EAAA4kB,IAAA5kB,EAAA8kB,QAGAlrB,KAAAilB,UAAA2nB,OAAAxmC,EAAA4kB,IAAA5kB,EAAA8kB,YAIAlrB,KAAAw/D,SAAA,SAAA4O,EAAAljD,EAAA0iD,GACA5tE,KAAAilB,UAAAwC,iBACAznB,KAAAqnB,QAAAgkC,QAA6BrgC,IAAAojD,EAAA,EAAAljD,UAAA,IAE7BlrB,KAAA0rB,iBAAA,EACA1rB,KAAAoiE,qBAAApiE,KAAAoiE,sBACApiE,KAAAwsC,aAAA4hC,EAAA,EAAAljD,GAAA,GACAlrB,KAAA0rB,iBAAA,EAEA1rB,KAAAktE,kBAAAkB,EAAA,IACApuE,KAAA0tE,aAAAU,EAAA,KAAAR,IAEA5tE,KAAAquE,WAAA,SAAArjD,EAAAE,GACAlrB,KAAAilB,UAAA2nB,OAAA5hB,EAAAE,IAEAlrB,KAAA+/D,WAAA,SAAAC,GACA,GAAAhgE,KAAAilB,UAAA+I,gBAAAhuB,KAAAilB,UAAAwnB,cAAA,CACA,IAAA5nB,EAAA7kB,KAAAilB,UAAAkG,OAAAghB,cACA,OAAAnsC,KAAAszB,qBAAAzO,GAEA7kB,KAAAilB,UAAAwC,iBACAznB,KAAAilB,UAAAypB,cAAAsxB,IAAA,MAEAhgE,KAAAkgE,aAAA,SAAAF,GACA,GAAAhgE,KAAAilB,UAAA+I,eAAAhuB,KAAAilB,UAAAwnB,cAAA,CACA,IAAA3nB,EAAA9kB,KAAAilB,UAAAkG,OAAAghB,cACA,OAAAnsC,KAAAszB,qBAAAxO,GAEA9kB,KAAAilB,UAAAwC,iBACAznB,KAAAilB,UAAAypB,aAAAsxB,GAAA,MAEAhgE,KAAAqgE,aAAA,SAAAL,GACA,GAAAhgE,KAAAilB,UAAAN,UAMA,IADAq7C,KAAA,EACAA,KACAhgE,KAAAilB,UAAAmoB,qBAPA,CACA,IAAAvoB,EAAA7kB,KAAAyrB,oBAAAvlB,MACAlG,KAAAszB,qBAAAzO,GAQA7kB,KAAAynB,kBAEAznB,KAAAwgE,cAAA,SAAAR,GACA,GAAAhgE,KAAAilB,UAAAN,UAMA,IADAq7C,KAAA,EACAA,KACAhgE,KAAAilB,UAAAioB,sBAPA,CACA,IAAApoB,EAAA9kB,KAAAyrB,oBAAA5B,IACA7pB,KAAAszB,qBAAAxO,GAQA9kB,KAAAynB,kBAEAznB,KAAAogE,kBAAA,WACApgE,KAAAilB,UAAAqoB,sBACAttC,KAAAynB,kBAEAznB,KAAAugE,gBAAA,WACAvgE,KAAAilB,UAAAuoB,oBACAxtC,KAAAynB,kBAEAznB,KAAAigE,gBAAA,WACAjgE,KAAAilB,UAAAyoB,oBACA1tC,KAAAynB,kBAEAznB,KAAA8/D,kBAAA,WACA9/D,KAAAilB,UAAA2oB,sBACA5tC,KAAAynB,kBAEAznB,KAAAsgE,kBAAA,WACAtgE,KAAAilB,UAAA6oB,sBACA9tC,KAAAynB,kBAEAznB,KAAAmgE,iBAAA,WACAngE,KAAAilB,UAAA+oB,qBACAhuC,KAAAynB,kBAEAznB,KAAAmC,QAAA,SAAAi6D,EAAA/hC,GACAA,GACAr6B,KAAA4iE,QAAA15D,IAAAmxB,GAEA,IAAA9S,EAAAvnB,KAAA4iE,QAAApH,KAAAx7D,KAAAqnB,SACAinD,EAAA,EACA,OAAA/mD,GAGAvnB,KAAAuuE,YAAAhnD,EAAA60C,KACAkS,EAAA,GAEA,OAAA/mD,IACAvnB,KAAAilB,UAAAF,kBAAAwC,GACAvnB,KAAA8nB,SAAA47C,wBAAAn8C,EAAArhB,MAAAqhB,EAAAsC,MAGAykD,GAVAA,GAYAtuE,KAAAwuE,WAAA,SAAApS,EAAA/hC,GACAA,GACAr6B,KAAA4iE,QAAA15D,IAAAmxB,GAGA,IAAA8W,EAAAnxC,KAAA4iE,QAAA7G,QAAA/7D,KAAAqnB,SACAinD,EAAA,EACA,IAAAn9B,EAAAvxC,OACA,OAAA0uE,EAEAtuE,KAAA0rB,iBAAA,EAEA,IAAAzG,EAAAjlB,KAAAyrB,oBACAzrB,KAAAilB,UAAA2nB,OAAA,KAEA,QAAArtC,EAAA4xC,EAAAvxC,OAAA,EAAuCL,GAAA,IAAQA,EAC/CS,KAAAuuE,YAAAp9B,EAAA5xC,GAAA68D,IACAkS,IAOA,OAHAtuE,KAAAilB,UAAAF,kBAAAE,GACAjlB,KAAA0rB,iBAAA,EAEA4iD,GAGAtuE,KAAAuuE,YAAA,SAAAhnD,EAAA60C,GACA,IAAAnc,EAAAjgD,KAAAqnB,QAAAiO,aAAA/N,GAEA,eADA60C,EAAAp8D,KAAA4iE,QAAAzgE,QAAA89C,EAAAmc,KAEA70C,EAAAsC,IAAA7pB,KAAAqnB,QAAAllB,QAAAolB,EAAA60C,GACA70C,GAEA,MAGAvnB,KAAAyuE,qBAAA,WACA,OAAAzuE,KAAA4iE,QAAArpC,cAEAv5B,KAAAw7D,KAAA,SAAAQ,EAAA3hC,EAAAuzC,GACAvzC,IACAA,MAEA,iBAAA2hC,gBAAAl5D,OACAu3B,EAAA2hC,SACA,iBAAAA,GACAlrD,EAAAH,MAAA0pB,EAAA2hC,GAEA,IAAAz0C,EAAAvnB,KAAAilB,UAAAmC,WACA,MAAAiT,EAAA2hC,UACAA,EAAAh8D,KAAAqnB,QAAAiO,aAAA/N,IACAvnB,KAAA4iE,QAAAnpC,SAAAuiC,UAEAz0C,EAAAvnB,KAAAqnB,QAAA0G,aAAAxG,EAAArhB,MAAA8kB,IAAAzD,EAAArhB,MAAAglB,QACA8wC,EAAAh8D,KAAAqnB,QAAAiO,aAAA/N,IAEAvnB,KAAA4iE,QAAA15D,KAA8B8yD,YAG9Bh8D,KAAA4iE,QAAA15D,IAAAmxB,GACAA,EAAAn0B,OACAlG,KAAA4iE,QAAA15D,KAA8BhD,MAAAqhB,IAE9B,IAAAmnD,EAAA1uE,KAAA4iE,QAAApH,KAAAx7D,KAAAqnB,SACA,OAAAgT,EAAAs0C,cACAD,EACAA,GACA1uE,KAAA4uE,YAAAF,EAAAd,GACAc,IAEAr0C,EAAAwiC,UACAt1C,EAAArhB,MAAAqhB,EAAAsC,IAEAtC,EAAAsC,IAAAtC,EAAArhB,WACAlG,KAAAilB,UAAAuC,SAAAD,KAEAvnB,KAAA2/D,SAAA,SAAAtlC,EAAAuzC,GACA5tE,KAAAw7D,MAAmBM,aAAA,EAAAe,WAAA,GAAoCxiC,EAAAuzC,IAEvD5tE,KAAA4/D,aAAA,SAAAvlC,EAAAuzC,GACA5tE,KAAAw7D,KAAAnhC,GAA4ByhC,aAAA,EAAAe,WAAA,GAAmC+Q,IAG/D5tE,KAAA4uE,YAAA,SAAArnD,EAAAqmD,GACA5tE,KAAA0rB,iBAAA,EACA1rB,KAAAqnB,QAAAgkC,OAAA9jC,GACAvnB,KAAAilB,UAAAF,kBAAAwC,GACAvnB,KAAA0rB,iBAAA,EAEA,IAAArc,EAAArP,KAAA8nB,SAAAzY,UACArP,KAAA8nB,SAAA47C,wBAAAn8C,EAAArhB,MAAAqhB,EAAAsC,IAAA,KACA,IAAA+jD,GACA5tE,KAAA8nB,SAAA67C,iBAAAt0D,IAEArP,KAAAinB,KAAA,WACAjnB,KAAA0rB,kBACA1rB,KAAAqnB,QAAAipC,iBAAArpC,OACAjnB,KAAA0rB,kBACA1rB,KAAA8nB,SAAA8E,qBAAA,UAEA5sB,KAAA+wD,KAAA,WACA/wD,KAAA0rB,kBACA1rB,KAAAqnB,QAAAipC,iBAAAS,OACA/wD,KAAA0rB,kBACA1rB,KAAA8nB,SAAA8E,qBAAA,UAEA5sB,KAAAgwB,QAAA,WACAhwB,KAAA8nB,SAAAkI,UACAhwB,KAAA8wB,QAAA,UAAA9wB,MACAA,KAAAqnB,SACArnB,KAAAqnB,QAAA2I,WAGAhwB,KAAA6uE,4BAAA,SAAA/Y,GACA,GAAAA,EAAA,CAEA,IAAAltC,EACAlhB,EAAA1H,KACA8uE,GAAA,EACA9uE,KAAA+uE,gBACA/uE,KAAA+uE,cAAA7kE,SAAAC,cAAA,QACA,IAAA6kE,EAAAhvE,KAAA+uE,cACAC,EAAA5hE,MAAAD,QAAA,oBACAnN,KAAA6oB,UAAApF,aAAAurD,EAAAhvE,KAAA6oB,UAAAnF,YACA,IAAAurD,EAAAjvE,KAAAmoB,GAAA,6BACA2mD,GAAA,IAEAI,EAAAlvE,KAAA8nB,SAAAK,GAAA,0BACA2mD,IACAlmD,EAAAlhB,EAAAogB,SAAAe,UAAAC,2BAEAqmD,EAAAnvE,KAAA8nB,SAAAK,GAAA,yBACA,GAAA2mD,GAAAlmD,IAAAlhB,EAAAwc,aACAxc,EAAA0nE,WAAA1nE,EAAA0nE,UAAAlrD,aACA,CACA,IAAA4D,EAAApgB,EAAAogB,SACA1hB,EAAA0hB,EAAAwM,aAAA+6C,UACAlyC,EAAArV,EAAA0L,YACAzK,EAAA3iB,EAAA2iB,IAAAoU,EAAAlb,OASA,OAPA6sD,EADA1oE,EAAA2iB,KAAA,GAAAA,EAAAH,EAAAG,IAAA,KAEiB3iB,EAAA2iB,IAAAoU,EAAA7uB,QACjBlI,EAAA2iB,IAAAH,EAAAG,IAAAoU,EAAA5J,WAAAtzB,OAAAowB,cAGA,QAGA2+C,EAAA5hE,MAAA2b,MAAA,KACAimD,EAAA5hE,MAAAsB,KAAAtI,EAAAsI,KAAA,KACAsgE,EAAA5hE,MAAAkB,OAAA6uB,EAAA5J,WAAA,KACAy7C,EAAA3P,eAAAyP,IAEAA,EAAAlmD,EAAA,QAGA5oB,KAAA6uE,4BAAA,SAAA/Y,GACAA,WAEA91D,KAAA6uE,4BACA7uE,KAAAi5B,IAAA,kBAAAg2C,GACAjvE,KAAA8nB,SAAAmR,IAAA,cAAAk2C,GACAnvE,KAAA8nB,SAAAmR,IAAA,eAAAi2C,OAKAlvE,KAAAsvE,kBAAA,WACA,IAAAliE,EAAApN,KAAAuvE,cAAA,MACAC,EAAAxvE,KAAA8nB,SAAAwM,aACAk7C,IAEAA,EAAAC,kBAAA,SAAA1sE,KAAAqK,IACAoiE,EAAAE,YAAA1vE,KAAA8mB,WAAA,QAAA1Z,EACAyV,EAAAnW,YAAA8iE,EAAA5hE,QAAA,0BAAA7K,KAAAqK,OAGChM,KAAAkhE,EAAAphE,WAIDi8B,EAAA/C,cAAAkoC,EAAAphE,UAAA,UACAyuE,gBACAzmE,IAAA,SAAAkE,GACApN,KAAAkmE,oBACAlmE,KAAA8wB,QAAA,wBAAkD1Q,KAAAhT,KAElDktB,aAAA,QAEAs1C,qBACA1mE,IAAA,WAAyBlJ,KAAA+nE,8BACzBztC,cAAA,GAEAu1C,uBACA3mE,IAAA,SAAA6gE,GAAwC/pE,KAAAolE,sBACxC9qC,cAAA,GAEAhS,UACApf,IAAA,SAAAof,GACAtoB,KAAAsvE,qBAEAh1C,cAAA,GAEA3D,aACAztB,IAAA,SAAA6d,GAA4B/mB,KAAAsvE,qBAC5Bl8B,QAAA,8BACA9Y,aAAA,OAEAu2B,iBACAzd,SAAA,eACA9Y,cAAA,GAEAw1C,mBAAwBx1C,cAAA,GACxBy1C,uBAA4Bz1C,cAAA,GAC5B01C,0BACA9mE,IAAA,SAAA6d,GAA4B/mB,KAAA6uE,4BAAA9nD,KAE5Bo9C,iBACAj7D,IAAA,SAAA6d,GAA4B/mB,KAAAogC,mBAAArZ,IAC5B9d,IAAA,WAAyB,OAAAjJ,KAAAiwE,cACzBn2C,YAAA,GAGAo2C,wBAAA,WACAC,wBAAA,WACAC,oBAAA,WACAC,eAAA,WACA1qC,eAAA,WACAglC,gBAAA,WACA2F,kBAAA,WACAC,YAAA,WACAC,gBAAA,WACAC,gBAAA,WACAC,gBAAA,WACAC,WAAA,WACAC,oBAAA,WACAC,SAAA,WACAC,WAAA,WACAC,SAAA,WACAC,SAAA,WACAC,cAAA,WACAC,iBAAA,WACAxK,MAAA,WAEAhoC,YAAA,gBACAC,UAAA,gBACAC,YAAA,gBACAC,YAAA,gBACAC,oBAAA,gBAEAu8B,gBAAA,UACA3J,UAAA,UACAlO,YAAA,UACA4P,UAAA,UACAkI,YAAA,UACA1sB,QAAA,UACAusB,KAAA,UACAjC,iBAAA,UACAiY,UAAA,UACA56B,KAAA,YAGAp3C,EAAAmjE,WAGA3/D,IAAAzC,OAAA,0DAAAsB,EAAArC,EAAAD,GACA,aACA,IAAAkyE,EAAA,WACApxE,KAAAuwD,UAGA,WA6DA,SAAA8gB,EAAA7qC,GACA,OACA3B,OAAA2B,EAAA3B,OACA3+B,MAAAsgC,EAAAtgC,MACA2jB,IAAA2c,EAAA3c,IACA4c,MAAA,GAAAD,EAAAC,MAAA7mC,OAAA,KAAA4mC,EAAAC,MACApjB,KAAA,GAAAmjB,EAAAC,MAAA7mC,OAAA4mC,EAAAC,MAAA,SAIA,SAAA6qC,EAAA9qC,GACA,OACA3B,OAAA2B,EAAA3B,OACA3+B,MAAAsgC,EAAAtgC,MACA2jB,IAAA2c,EAAA3c,IACA4c,MAAAD,EAAAC,QAAAD,EAAAnjB,OAIA,SAAAkuD,EAAAC,EAAAC,GAEA,IADA,IAAAC,EAAA,IAAA9tE,MAAA4tE,EAAA5xE,QACAL,EAAA,EAAuBA,EAAAiyE,EAAA5xE,OAA0BL,IAAA,CAIjD,IAHA,IAAAoyE,EAAAH,EAAAjyE,GACAqyE,GAAgCjhB,MAAAghB,EAAAhhB,MAAAjM,OAAA,IAAA9gD,MAAA+tE,EAAA/xE,SAEhCk8B,EAAA,EAA2BA,EAAA61C,EAAAjtB,OAAA9kD,OAAgCk8B,IAAA,CAC3D,IAAA+1C,EAAAF,EAAAjtB,OAAA5oB,GACA81C,EAAAltB,OAAA5oB,GAAA21C,EAAAI,GAGAH,EAAAnyE,GAAAqyE,EAEA,OAAAF,EA5FA1xE,KAAA4wD,QAAA,SAAAv2B,GACA,IAAAy3C,EAAAz3C,EAAA11B,KAAA,GACA3E,KAAA+xE,KAAA13C,EAAA11B,KAAA,GACA01B,EAAA8Z,OAAAn0C,KAAAgyE,YACAhyE,KAAAiyE,eACAH,EAAA9xE,KAAAkyE,WAAAn5C,MAAAj0B,OAAAgtE,IAEA9xE,KAAAkyE,WAAAzwE,KAAAqwE,GACA9xE,KAAAmyE,cACAnyE,KAAAiyE,aAAA,IACAjyE,KAAAiyE,aAAAG,KAEApyE,KAAAiyE,gBAEAjyE,KAAAinB,KAAA,SAAAuuC,GACA,IAAAsc,EAAA9xE,KAAAkyE,WAAAn5C,MACAs5C,EAAA,KAOA,OANAP,IACAO,EAAAryE,KAAA+xE,KAAAxc,YAAAuc,EAAAtc,GACAx1D,KAAAmyE,WAAA1wE,KAAAqwE,GACA9xE,KAAAiyE,gBAGAI,GAEAryE,KAAA+wD,KAAA,SAAAyE,GACA,IAAAsc,EAAA9xE,KAAAmyE,WAAAp5C,MACAu5C,EAAA,KAOA,OANAR,IACAQ,EACAtyE,KAAA+xE,KAAAnc,YAAA51D,KAAAuyE,mBAAAT,GAAAtc,GACAx1D,KAAAkyE,WAAAzwE,KAAAqwE,GACA9xE,KAAAiyE,gBAEAK,GAEAtyE,KAAAuwD,MAAA,WACAvwD,KAAAkyE,cACAlyE,KAAAmyE,cACAnyE,KAAAiyE,aAAA,GAEAjyE,KAAAgyE,QAAA,WACA,OAAAhyE,KAAAkyE,WAAAtyE,OAAA,GAEAI,KAAAwyE,QAAA,WACA,OAAAxyE,KAAAmyE,WAAAvyE,OAAA,GAEAI,KAAAyyE,UAAA,WACAzyE,KAAAiyE,aAAA,GAEAjyE,KAAA0yE,QAAA,WACA,WAAA1yE,KAAAiyE,cAEAjyE,KAAA2yE,iBAAA,SAAAb,GACA,OAAAP,EAAAO,EAAAT,IAEArxE,KAAAuyE,mBAAA,SAAAT,GACA,OAAAP,EAAAO,EAAAR,MAsCClwE,KAAAgwE,EAAAlwE,WAED/B,EAAAiyE,gBAGAzuE,IAAAzC,OAAA,8HAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA2jB,EAAArhB,EAAA,cACAsP,EAAAtP,EAAA,cACAshB,EAAAthB,EAAA,eACAy2B,EAAAz2B,EAAA,wBAAAy2B,aAEA26C,EAAA,SAAAC,GACA7yE,KAAA4N,QAAAiV,EAAA1Y,cAAA,OACAnK,KAAA4N,QAAAvB,UAAA,6BACAwmE,EAAAxlE,YAAArN,KAAA4N,SACA5N,KAAAkrE,mBAAAlrE,KAAA8yE,kBAEA9yE,KAAA+yE,YAAA,EAEA/yE,KAAAsxB,gBACAtxB,KAAAgzE,mBAAAhzE,KAAAgzE,mBAAAxuE,KAAAxE,MAEAA,KAAAizE,YAGA,WAEAniE,EAAAF,UAAA5Q,KAAAi4B,GAEAj4B,KAAAgjE,WAAA,SAAA37C,GACArnB,KAAAqnB,SACArnB,KAAAqnB,QAAA7L,oBAAA,SAAAxb,KAAAgzE,oBACAhzE,KAAAqnB,UACAA,GACAA,EAAAc,GAAA,SAAAnoB,KAAAgzE,qBAGAhzE,KAAA6xD,oBAAA,SAAA7mC,EAAA3e,GACApM,OAAAS,SACAA,QAAAk5B,MAAAl5B,QAAAk5B,KAAA,8CACA55B,KAAAqnB,QAAAwqC,oBAAA7mC,EAAA3e,IAGArM,KAAA8xD,uBAAA,SAAA9mC,EAAA3e,GACApM,OAAAS,SACAA,QAAAk5B,MAAAl5B,QAAAk5B,KAAA,iDACA55B,KAAAqnB,QAAAyqC,uBAAA9mC,EAAA3e,IAGArM,KAAA6yD,eAAA,SAAAC,GACA9yD,KAAAsxB,gBACA,QAAA/xB,EAAA,EAAuBA,EAAAuzD,EAAAlzD,OAAwBL,IAAA,CAC/C,IAAA8xB,EAAAyhC,EAAAvzD,GACAyrB,EAAAqG,EAAArG,IACAkoD,EAAAlzE,KAAAsxB,aAAAtG,GACAkoD,IACAA,EAAAlzE,KAAAsxB,aAAAtG,IAAoD3H,UAEpD,IAAA8vD,EAAA9hD,EAAAhO,KACA8vD,IAAArwD,EAAAjB,WAAAsxD,GAAA9hD,EAAA7B,MAAA,IAEA,IAAA0jD,EAAA7vD,KAAAxjB,QAAAszE,IACAD,EAAA7vD,KAAA5hB,KAAA0xE,GAEA,IAAAl4D,EAAAoW,EAAApW,KACA,SAAAA,EACAi4D,EAAA7mE,UAAA,aACA,WAAA4O,GAAA,cAAAi4D,EAAA7mE,UACA6mE,EAAA7mE,UAAA,eACA,QAAA4O,GAAAi4D,EAAA7mE,YACA6mE,EAAA7mE,UAAA,eAIArM,KAAAgzE,mBAAA,SAAAxsC,GACA,GAAAxmC,KAAAsxB,aAAA1xB,OAAA,CAEA,IAAA+qC,EAAAnE,EAAAtgC,MAAA8kB,IACAmY,EAAAqD,EAAA3c,IAAAmB,IAAA2f,EACA,OAAAxH,QACS,aAAAqD,EAAA3B,OACT7kC,KAAAsxB,aAAAzrB,OAAA8kC,EAAAxH,EAAA,YACS,CACT,IAAAx+B,EAAA,IAAAf,MAAAu/B,EAAA,GACAx+B,EAAAyvC,QAAAzJ,EAAA,GACA3qC,KAAAsxB,aAAAzrB,OAAApF,MAAAT,KAAAsxB,aAAA3sB,MAIA3E,KAAA2mD,OAAA,SAAAxpB,GAkBA,IAjBA,IAAA9V,EAAArnB,KAAAqnB,QACAsjB,EAAAxN,EAAAwN,SACAC,EAAAtkC,KAAAM,IAAAu2B,EAAAyN,QAAAzN,EAAAi2C,aACA/rD,EAAAkK,YAAA,GACAyN,EAAA3X,EAAAgjC,gBAAA1f,GACA0qB,EAAAr2B,IAAA94B,MAAA8kB,IAAAuzB,IACAnf,EAAAp/B,KAAA8yE,kBAAAzrD,EAAA+X,YACAi0C,EAAAhsD,EAAAwnC,aACAykB,EAAAjsD,EAAAynC,aACAuM,EAAAh0C,EAAAksD,iBACAC,EAAA,EAEAC,EAAApsD,EAAAosD,gBAAAzzE,KAAA0zE,UAEAC,EAAA,KACAxvE,GAAA,EACA6mB,EAAA2f,IACA,CAMA,GALA3f,EAAAqqC,IACArqC,EAAAgU,EAAAnV,IAAAmB,IAAA,EAEAqqC,GADAr2B,EAAA3X,EAAAgjC,gBAAAr/B,EAAAgU,IACAA,EAAA94B,MAAA8kB,IAAAuzB,KAEAvzB,EAAA4f,EAAA,CACA,KAAA5qC,KAAAizE,OAAArzE,OAAAuE,EAAA,GACAwvE,EAAA3zE,KAAAizE,OAAAl6C,MACA/4B,KAAA4N,QAAAoB,YAAA2kE,EAAA/lE,SAEA,OAGA+lE,EAAA3zE,KAAAizE,SAAA9uE,OAEAwvE,GAAwB/lE,QAAA,KAAAgmE,SAAA,KAAAC,WAAA,OACxBjmE,QAAAiV,EAAA1Y,cAAA,OACAwpE,EAAAC,SAAA1pE,SAAAoD,eAAA,IACAqmE,EAAA/lE,QAAAP,YAAAsmE,EAAAC,UACA5zE,KAAA4N,QAAAP,YAAAsmE,EAAA/lE,SACA5N,KAAAizE,OAAA9uE,GAAAwvE,GAGA,IAAAtnE,EAAA,mBAcA,GAbAgnE,EAAAroD,KACA3e,GAAAgnE,EAAAroD,IACAsoD,EAAAtoD,KACA3e,GAAAinE,EAAAtoD,IACAhrB,KAAAsxB,aAAAtG,KACA3e,GAAArM,KAAAsxB,aAAAtG,GAAA3e,WACAsnE,EAAA/lE,QAAAvB,eACAsnE,EAAA/lE,QAAAvB,cAEAiC,EAAA+Y,EAAAuyC,aAAA5uC,GAAAmS,EAAA5J,WAAA,OACAogD,EAAA/lE,QAAAR,MAAAkB,SACAqlE,EAAA/lE,QAAAR,MAAAkB,UAEA8wB,EAAA,CACA,IAAAzX,EAAAyX,EAAApU,GACA,MAAArD,IACAA,EAAAyX,EAAApU,GAAA3D,EAAAglC,cAAArhC,IAGA,GAAArD,EAAA,CACAgsD,EAAAE,aACAF,EAAAE,WAAAhxD,EAAA1Y,cAAA,QACAwpE,EAAA/lE,QAAAP,YAAAsmE,EAAAE,aAEAxnE,EAAA,uBAAAsb,EACA,SAAAA,GAAAqD,GAAAqqC,GAAArqC,EAAAgU,EAAAnV,IAAAmB,IACA3e,GAAA,cAEAA,GAAA,YACAsnE,EAAAE,WAAAxnE,eACAsnE,EAAAE,WAAAxnE,aAEA,IAAAiC,EAAA6uB,EAAA5J,WAAA,KACAogD,EAAAE,WAAAzmE,MAAAkB,YACAqlE,EAAAE,WAAAzmE,MAAAkB,eAEAqlE,EAAAE,aACAF,EAAA/lE,QAAAoB,YAAA2kE,EAAAE,YACAF,EAAAE,WAAA,MAIA,IAAAxwD,EAAAmwD,EAAAC,EACAA,EAAAK,QAAAzsD,EAAA2D,GACAA,EAAAqwC,EACAh4C,IAAAswD,EAAAC,SAAAxzD,OACAuzD,EAAAC,SAAAxzD,KAAAiD,GAEA2H,IAGAhrB,KAAA4N,QAAAR,MAAAkB,OAAA6uB,EAAA42C,UAAA,MAEA/zE,KAAAg0E,aAAA3sD,EAAA6f,gBACAssC,EAAAnsD,EAAAkK,YAAA8pC,GAEA,IAAA0X,EAAAU,EACAA,EAAA1jD,SAAA1I,EAAAmsD,EAAAr2C,GACAq2C,EAAAryE,WAAAvB,OAAAu9B,EAAA1J,eAEAwgD,EAAAj0E,KAAAk0E,UAAAl0E,KAAAm0E,mBACApB,GAAAkB,EAAAvlE,KAAAulE,EAAArqD,SACA5pB,KAAA+yE,aAAA1e,MAAA0e,KACA/yE,KAAA+yE,cACA/yE,KAAA4N,QAAAR,MAAAgB,MAAA9H,KAAA8tE,KAAAp0E,KAAA+yE,aAAA,KACA/yE,KAAAwoB,MAAA,oBAAAuqD,KAIA/yE,KAAAg0E,aAAA,EAEAh0E,KAAAq0E,kBAAA,EACAr0E,KAAA0zE,UAAA,GACA1zE,KAAAs0E,mBAAA,SAAA3kD,GACA3vB,KAAA0zE,WAAA/jD,IACAI,SAAA,WAAkC,UAClC+jD,QAAA,WAAiC,YAIjC9zE,KAAAu0E,mBAAA,WACA,OAAAv0E,KAAAq0E,kBAGAr0E,KAAA8yE,kBAAA,EACA9yE,KAAAkrE,mBAAA,SAAAv7C,GACAA,EACA9M,EAAAvW,YAAAtM,KAAA4N,QAAA,uBAEAiV,EAAAtW,eAAAvM,KAAA4N,QAAA,uBAEA5N,KAAA8yE,iBAAAnjD,EACA3vB,KAAAk0E,SAAA,MAGAl0E,KAAAmrE,mBAAA,WACA,OAAAnrE,KAAA8yE,kBAGA9yE,KAAAm0E,gBAAA,WACA,IAAAn0E,KAAA4N,QAAA8V,WACA,OAAoBhV,KAAA,EAAAkb,MAAA,GACpB,IAAAxc,EAAAyV,EAAA/U,cAAA9N,KAAA4N,QAAA8V,YAIA,OAHA1jB,KAAAk0E,YACAl0E,KAAAk0E,SAAAxlE,KAAAb,SAAAT,EAAAonE,aAAA,KACAx0E,KAAAk0E,SAAAtqD,MAAA/b,SAAAT,EAAAqnE,eAAA,EACAz0E,KAAAk0E,UAGAl0E,KAAAgxB,UAAA,SAAAkxB,GACA,IAAA+xB,EAAAj0E,KAAAk0E,UAAAl0E,KAAAm0E,kBACAvrD,EAAA5oB,KAAA4N,QAAAkb,wBACA,OAAAo5B,EAAA9+C,EAAA6wE,EAAAvlE,KAAAka,EAAAla,KACA,UACA1O,KAAA8yE,kBAAA5wB,EAAA9+C,EAAAwlB,EAAAgB,MAAAqqD,EAAArqD,MACA,mBADA,KAICxoB,KAAAwxE,EAAA1xE,WAED/B,EAAAyzE,WAIAjwE,IAAAzC,OAAA,qFAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAoqC,EAAA9nC,EAAA,YAAA8nC,MACAzmB,EAAArhB,EAAA,cAEAkzE,EAAA,SAAA7B,GACA7yE,KAAA4N,QAAAiV,EAAA1Y,cAAA,OACAnK,KAAA4N,QAAAvB,UAAA,6BACAwmE,EAAAxlE,YAAArN,KAAA4N,WAGA,WAgEA,SAAA+mE,EAAAC,EAAAC,EAAAC,EAAAC,GACA,OAAAH,EAAA,MAAAC,EAAA,MAAAC,EAAA,MAAAC,EAAA,KA/DA/0E,KAAAk0E,SAAA,EAEAl0E,KAAAg1E,WAAA,SAAAf,GACAj0E,KAAAk0E,SAAAD,GAEAj0E,KAAAgjE,WAAA,SAAA37C,GACArnB,KAAAqnB,WAGArnB,KAAAi1E,WAAA,SAAAziB,GACAxyD,KAAAwyD,WAGAxyD,KAAA2mD,OAAA,SAAAxpB,GACA,GAAAA,EAAA,CAEAn9B,KAAAm9B,SAGA,IAAA3N,KACA,QAAAlwB,KAAAU,KAAAwyD,QAAA,CACA,IAAAH,EAAAryD,KAAAwyD,QAAAlzD,GAEA,GAAA+yD,EAAA9qC,MAAA,CAKA,IAAAA,EAAA8qC,EAAA9qC,MAAAmjB,SAAAvN,EAAAwN,SAAAxN,EAAAyN,SACA,IAAArjB,EAAA5C,UAGA,GADA4C,IAAA0jB,cAAAjrC,KAAAqnB,SACAgrC,EAAAvqC,SAAA,CACA,IAAAiB,EAAA/oB,KAAAk1E,QAAA3tD,EAAArhB,MAAA8kB,IAAAmS,GACAzuB,EAAA1O,KAAAk0E,UAAAl0E,KAAAqnB,QAAAmpB,aAAAtK,UAAA3e,EAAArhB,MAAA8kB,KACAhrB,KAAAqnB,QAAAmpB,aAAAnI,WAAA9gB,EAAArhB,MAAAglB,QACA3D,EAAArhB,MAAAglB,OAAAiS,EAAA1J,gBACA4+B,EAAAvqC,SAAA0H,EAAAjI,EAAA7Y,EAAAqa,EAAAoU,OACa,YAAAk1B,EAAAp3C,KACbjb,KAAAm1E,mBAAA3lD,EAAAjI,EAAA8qC,EAAA9L,MAAAppB,GACa,cAAAk1B,EAAAp3C,KACbjb,KAAAo1E,qBAAA5lD,EAAAjI,EAAA8qC,EAAA9L,MAAAppB,GACa5V,EAAAyG,cACb,QAAAqkC,EAAAp3C,KACAjb,KAAAq1E,eAAA7lD,EAAAjI,EAAA8qC,EAAA9L,MAAAppB,GAEAn9B,KAAAs1E,oBAAA9lD,EAAAjI,EAAA8qC,EAAA9L,MAAAppB,GAEAn9B,KAAAqnB,QAAAmpB,aAAAtK,UAAA3e,EAAArhB,MAAA8kB,KACAhrB,KAAAu1E,yBAAA/lD,EAAAjI,EAAA8qC,EAAA9L,MAAA,sBAAAppB,GAEAn9B,KAAA6mD,qBAAAr3B,EAAAjI,EAAA8qC,EAAA9L,MAAA,sBAAAppB,QA3BAk1B,EAAA1L,OAAAn3B,EAAAxvB,UAAAqnB,QAAA8V,GA+BAn9B,KAAA4N,QAAAgC,UAAA4f,EAAAvtB,KAAA,MAGAjC,KAAAk1E,QAAA,SAAAlqD,EAAAwI,GACA,OAAAxI,EAAAwI,EAAAgiD,gBAAAhiD,EAAAD,YAMAvzB,KAAAq1E,eAAA,SAAAI,EAAAluD,EAAAg/B,EAAA/yB,EAAAkiD,GAUA,IATA,IAAAruD,EAAArnB,KAAAqnB,QACAnhB,EAAAqhB,EAAArhB,MAAA8kB,IACAnB,EAAAtC,EAAAsC,IAAAmB,IACAA,EAAA9kB,EACA49D,EAAA,EACA6R,EAAA,EACA1hC,EAAA5sB,EAAA0yC,uBAAA/uC,GACA4qD,EAAA,KACAC,EAAA,IAAAvsC,EAAAte,EAAAzD,EAAArhB,MAAAglB,OAAAF,EAAA2qD,GACc3qD,GAAAnB,EAAYmB,IAC1B6qD,EAAA3vE,MAAA8kB,IAAA6qD,EAAAhsD,IAAAmB,MACA6qD,EAAA3vE,MAAAglB,OAAAF,GAAA9kB,EAAAqhB,EAAArhB,MAAAglB,OAAA7D,EAAAyyC,iBAAA9uC,GACA6qD,EAAAhsD,IAAAqB,OAAA+oB,EACA6vB,EAAA6R,EACAA,EAAA1hC,EACAA,EAAAjpB,EAAA,EAAAnB,EAAAxC,EAAA0yC,uBAAA/uC,EAAA,GAAAA,GAAAnB,EAAA,EAAAtC,EAAAsC,IAAAqB,OACA0qD,EAAArvB,GAAAv7B,GAAA9kB,EAAA,2BACAyuE,EAAA3pD,GAAA9kB,GAAA8kB,GAAA9kB,EAAA,GAAAqhB,EAAArhB,MAAAglB,OAAA44C,EAAA6R,IAAA1hC,EAAAjpB,GAAAnB,GAEA7pB,KAAAqnB,QAAAmpB,aAAAtK,UAAAlb,GACAhrB,KAAAu1E,yBAAAE,EAAAI,EAAAD,EACApiD,EAAAxI,GAAAnB,EAAA,IAAA6rD,GAEA11E,KAAA6mD,qBAAA4uB,EAAAI,EAAAD,EACApiD,EAAAxI,GAAAnB,EAAA,IAAA6rD,IAIA11E,KAAAs1E,oBAAA,SAAAG,EAAAluD,EAAAg/B,EAAAppB,EAAAu4C,GACA,IACApnE,EAAAya,EAAAra,EADAulE,EAAAj0E,KAAAk0E,UAEAwB,KAAA,GACA11E,KAAAqnB,QAAAmpB,aAAAtK,UAAA3e,EAAArhB,MAAA8kB,QACA8qD,EAAAvuD,EAAAwjB,SACAlhB,IAAAmB,IAAA8qD,EAAA5vE,MAAA8kB,IACA8qD,EAAAjsD,IAAAqB,OAAAlrB,KAAAqnB,QAAAmY,QAAAs2C,EAAA5vE,MAAA8kB,KAAAprB,OACAI,KAAAu1E,yBAAAE,EAAAK,EAAAvvB,EAAA,qBAAAppB,EAAA,KAAAu4C,KAEApnE,EAAA6uB,EAAA5J,WACAxK,EAAA/oB,KAAAk1E,QAAA3tD,EAAArhB,MAAA8kB,IAAAmS,GACAzuB,EAAAulE,EAAA1sD,EAAArhB,MAAAglB,OAAAiS,EAAA1J,eACAgiD,EAAAh0E,KACA,eAAA8kD,EAAA,8BACA,UAAAj4C,EAAA,MACA,WACA,OAAAya,EAAA,MACA,QAAAra,EAAA,MAAkCgnE,EAAA,aAGlC,GAAA11E,KAAAqnB,QAAAmpB,aAAAtK,UAAA3e,EAAAsC,IAAAmB,KAAA,CACA,IAAA8qD,KAAAvuD,EAAAwjB,SACA7kC,MAAA8kB,IAAA8qD,EAAAjsD,IAAAmB,IACA8qD,EAAA5vE,MAAAglB,OAAA,EACAlrB,KAAAu1E,yBAAAE,EAAAK,EAAAvvB,EAAA,YAAAppB,EAAA,KAAAu4C,OACS,CACT,IAAAtnE,EAAAmZ,EAAAsC,IAAAqB,OAAAiS,EAAA1J,eACAnlB,EAAA6uB,EAAA5J,WACAxK,EAAA/oB,KAAAk1E,QAAA3tD,EAAAsC,IAAAmB,IAAAmS,GACAs4C,EAAAh0E,KACA,eAAA8kD,EAAA,qBACA,UAAAj4C,EAAA,MACA,SAAAF,EAAA,MACA,OAAA2a,EAAA,MACA,QAAAkrD,EAAA,MAAqCyB,EAAA,YAIrC,MADApnE,GAAAiZ,EAAAsC,IAAAmB,IAAAzD,EAAArhB,MAAA8kB,IAAA,GAAAmS,EAAA5J,aACA,IAEAxK,EAAA/oB,KAAAk1E,QAAA3tD,EAAArhB,MAAA8kB,IAAA,EAAAmS,GAEA,IAAA44C,GAAAxuD,EAAArhB,MAAAglB,OAAA,MAAA3D,EAAAsC,IAAAqB,OAAA,KAEAuqD,EAAAh0E,KACA,eAAA8kD,EAAAwvB,EAAA,UAAAA,EAAA,eACA,UAAAznE,EAAA,MACA,WACA,OAAAya,EAAA,MACA,QAAAkrD,EAAA,MAAkCyB,EAAA,cAGlC11E,KAAA6mD,qBAAA,SAAA4uB,EAAAluD,EAAAg/B,EAAAppB,EAAA64C,EAAAN,GACA,IAAApnE,EAAA6uB,EAAA5J,WACAnlB,GAAAmZ,EAAAsC,IAAAqB,QAAA8qD,GAAA,GAAAzuD,EAAArhB,MAAAglB,QAAAiS,EAAA1J,eAEA1K,EAAA/oB,KAAAk1E,QAAA3tD,EAAArhB,MAAA8kB,IAAAmS,GACAzuB,EAAA1O,KAAAk0E,SAAA3sD,EAAArhB,MAAAglB,OAAAiS,EAAA1J,eAEAgiD,EAAAh0E,KACA,eAAA8kD,EAAA,YACA,UAAAj4C,EAAA,MACA,SAAAF,EAAA,MACA,OAAA2a,EAAA,MACA,QAAAra,EAAA,MAA+BgnE,GAAA,gBAG/B11E,KAAAu1E,yBAAA,SAAAE,EAAAluD,EAAAg/B,EAAAppB,EAAA64C,EAAAN,GACA,IAAApnE,EAAA6uB,EAAA5J,WAAAxK,EAAA/oB,KAAAk1E,QAAA3tD,EAAArhB,MAAA8kB,IAAAmS,GAAA82C,EAAAj0E,KAAAk0E,SACAl0E,KAAAqnB,QAAAmpB,aAAAhI,cAAAjhB,EAAArhB,MAAAglB,OAAA3D,EAAAsC,IAAAqB,QAEA5jB,QAAA,SAAA2d,GACAwwD,EAAAh0E,KACA,eAAA8kD,EAAA,YACA,UAAAj4C,EAAA,MACA,SAAA2W,EAAA7W,OAAA4nE,GAAA,SACA,OAAAjtD,EAAA,MACA,QAAAkrD,EAAAhvD,EAAAvW,KAAA,MAAuDgnE,GAAA,kBAKvD11E,KAAAm1E,mBAAA,SAAAM,EAAAluD,EAAAg/B,EAAAppB,EAAAu4C,GACA,IAAA3sD,EAAA/oB,KAAAk1E,QAAA3tD,EAAArhB,MAAA8kB,IAAAmS,GACA7uB,EAAA6uB,EAAA5J,WACAhM,EAAArhB,MAAA8kB,KAAAzD,EAAAsC,IAAAmB,MACA1c,GAAAtO,KAAAk1E,QAAA3tD,EAAAsC,IAAAmB,IAAAmS,GAAApU,GAEA0sD,EAAAh0E,KACA,eAAA8kD,EAAA,YACA,UAAAj4C,EAAA,MACA,OAAAya,EAAA,MACA,kBAA4B2sD,GAAA,gBAI5B11E,KAAAo1E,qBAAA,SAAAK,EAAAluD,EAAAg/B,EAAAppB,EAAAu4C,GACA,IAAA3sD,EAAA/oB,KAAAk1E,QAAA3tD,EAAArhB,MAAA8kB,IAAAmS,GACA7uB,EAAA6uB,EAAA5J,WAEAkiD,EAAAh0E,KACA,eAAA8kD,EAAA,YACA,UAAAj4C,EAAA,MACA,OAAAya,EAAA,MACA,kBAA4B2sD,GAAA,kBAI3Bt0E,KAAAszE,EAAAxzE,WAED/B,EAAAu1E,WAIA/xE,IAAAzC,OAAA,gJAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,cACAqhB,EAAArhB,EAAA,cACAshB,EAAAthB,EAAA,eAEAy2B,GADAz2B,EAAA,oBACAA,EAAA,wBAAAy2B,cAEAg+C,EAAA,SAAApD,GACA7yE,KAAA4N,QAAAiV,EAAA1Y,cAAA,OACAnK,KAAA4N,QAAAvB,UAAA,2BACAwmE,EAAAxlE,YAAArN,KAAA4N,SACA5N,KAAAk2E,eAAAl2E,KAAAk2E,eAAA1xE,KAAAxE,QAGA,WAEA8Q,EAAAF,UAAA5Q,KAAAi4B,GAEAj4B,KAAAm2E,SAAA,IACAn2E,KAAAo2E,YAAA,IACAp2E,KAAAq2E,cAAA,IACAr2E,KAAAs2E,SAAAt2E,KAAAo2E,YACAp2E,KAAAu2E,SAAA,IACAv2E,KAAAw2E,WAAA,IACAx2E,KAAAk0E,SAAA,EAEAl0E,KAAAk2E,eAAA,WACA,IAAAI,EAAA,MAAAt2E,KAAAqnB,QAAAxb,IAAAq3C,sBACAljD,KAAAo2E,YACAp2E,KAAAq2E,cACA,GAAAr2E,KAAAs2E,YAEA,OADAt2E,KAAAs2E,YACA,GAIAt2E,KAAAg1E,WAAA,SAAAf,GACAj0E,KAAAk0E,SAAAD,EACAj0E,KAAA4N,QAAAR,MAAA6mE,QAAA,KAAAA,EAAA,MAGAj0E,KAAAy2E,cAAA,WACA,OAAAz2E,KAAA02E,aAAA7uC,eAAAv5B,QAAA,GAGAtO,KAAAk7D,kBAAA,WACA,OAAAl7D,KAAA02E,aAAA7uC,eAAAz5B,OAAA,GAGApO,KAAA+6D,gBAAA,SAAA4b,GACA32E,KAAA02E,aAAAC,EACA32E,KAAA02E,aAAAvuD,GAAA,+BAAAxM,GACA3b,KAAA8wB,QAAA,sBAAAnV,IACSnX,KAAAxE,OACTA,KAAA42E,oBAGA52E,KAAA62E,oBAAA,WACA72E,KAAA02E,aAAAG,uBAEA72E,KAAA42E,iBAAA,WACA,OAAA52E,KAAA82E,sBAAA92E,KAAA02E,aAAAE,oBAEA52E,KAAAgjE,WAAA,SAAA37C,GACArnB,KAAAqnB,UACAA,GACArnB,KAAA+2E,qBAGA/2E,KAAA2lC,gBAAA,EACA3lC,KAAAioC,kBAAA,SAAAtC,GACA,OAAA3lC,KAAA2lC,oBAGA3lC,KAAA2lC,iBACA3lC,KAAA+2E,qBACA,IAGA/2E,KAAA4wE,qBAAA,EACA5wE,KAAAwqE,uBAAA,SAAAj8D,GACA,OAAAvO,KAAA4wE,qBAAAriE,IAGAvO,KAAA4wE,oBAAAriE,EACAvO,KAAA+2E,qBACA,IAGA/2E,KAAAg3E,eACAh3E,KAAAwlE,gBACAxlE,KAAA+2E,kBAAA,WACA,IAAAnoC,EAAA5uC,KAAAqnB,QAAAynB,aACA9uC,KAAA4uC,UAEA,IADA,IAAAqoC,EAAAj3E,KAAAg3E,aAAA,GACAz3E,EAAA,EAAuBA,EAAAqvC,EAAA,EAAiBrvC,IACxCS,KAAA2lC,eACAsxC,EAAAx1E,KAAA,iDACAqhB,EAAA/B,aAAA/gB,KAAAu2E,SAAAh3E,GACA,WAEA03E,EAAAx1E,KAAAqhB,EAAA/B,aAAA,IAAAxhB,IAGA,GAAAS,KAAA4wE,oBAAA,CACA5wE,KAAAk3E,eAAA,mBACA,IAAA7qE,EAAA,mBACA8qE,EAAA,GACAC,EAAA,GACA,GAAAp3E,KAAA2lC,eAAA,CACAt5B,GAAA,iBACA8qE,EAAA,uBACAC,EAAA,qBACA,IAAAC,EAAAv0D,EAAA/B,aAAA/gB,KAAAw2E,WAAAx2E,KAAA4uC,SACA0oC,EAAAx0D,EAAA/B,aAAA/gB,KAAAu2E,SAAAv2E,KAAA4uC,cAGA0oC,EADAD,EAAAv0D,EAAA/B,aAAA,IAAA/gB,KAAA4uC,SAIA5uC,KAAAg3E,YAAA,qBAAA3qE,EAAA8qE,EAAA,KAAAE,EAAA,UACAr3E,KAAAg3E,YAAA,sBAAA3qE,EAAA+qE,EAAA,KAAAE,EAAA,YAIAt3E,KAAA8nE,YAAA,SAAA3qC,EAAAwN,EAAAC,GACA5qC,KAAAm9B,OAAAyN,SAAAzN,EAAAyN,SACA5qC,KAAAm9B,OAAAwN,UAAAxN,EAAAwN,UACA3qC,KAAAu3E,YAAAp6C,GAEAn9B,KAAAm9B,SAQA,IANA,IAAA+oB,EAAA5/C,KAAAC,IAAAokC,EAAAxN,EAAAwN,UACAhqB,EAAAra,KAAAM,IAAAgkC,EAAAzN,EAAAyN,SAEA4sC,EAAAx3E,KAAA4N,QAAA6pE,WACAC,EAAA,EAEA1sD,EAAAmS,EAAAwN,SAAuC3f,EAAAk7B,EAAal7B,IAAA,CAEpD,GADAujB,EAAAvuC,KAAAqnB,QAAAmnB,YAAAxjB,GACA,CACA,GAAAujB,EAAA+Y,YAAApB,GAAA,CACAA,EAAA3X,EAAAroC,MAAA8kB,IACA,MAEAA,EAAAujB,EAAA1kB,IAAAmB,IAGA0sD,IAGA1sD,EAAAk7B,EAIA,IAJA,IACA3X,EACA8mB,GADA9mB,EAAAvuC,KAAAqnB,QAAAgjC,gBAAAr/B,IACAujB,EAAAroC,MAAA8kB,IAAAuzB,IAGAvzB,EAAAqqC,IACArqC,EAAAujB,EAAA1kB,IAAAmB,IAAA,EAEAqqC,GADA9mB,EAAAvuC,KAAAqnB,QAAAgjC,gBAAAr/B,EAAAujB,IACAA,EAAAroC,MAAA8kB,IAAAuzB,OAEAvzB,EAAArK,IANA,CASA,IAAAg3D,EAAAH,EAAAE,KACA,GAAAC,EAAA,CACA,IAAAnoD,KACAxvB,KAAA43E,YACApoD,EAAAxE,GAAAhrB,KAAA63E,iBAAA7sD,GAAAqqC,GAAA9mB,GAEAopC,EAAAvqE,MAAAkB,OAAA6uB,EAAA5J,WAAAvzB,KAAAqnB,QAAAuyC,aAAA5uC,GAAA,KACA2sD,EAAA/nE,UAAA4f,EAAAvtB,KAAA,IAEA+oB,MAIAhrB,KAAAu3E,YAAA,SAAAp6C,GACA,IAAA26C,EAAA93E,KAAAm9B,OAGA,GAFAn9B,KAAAm9B,UAEA26C,KAAAltC,QAAAzN,EAAAwN,SACA,OAAA3qC,KAAA2mD,OAAAxpB,GAEA,GAAAA,EAAAyN,QAAAktC,EAAAntC,SACA,OAAA3qC,KAAA2mD,OAAAxpB,GAEA,IAAA/wB,EAAApM,KAAA4N,QACA,GAAAkqE,EAAAntC,SAAAxN,EAAAwN,SACA,QAAA3f,EAAAhrB,KAAAqnB,QAAAijC,kBAAAwtB,EAAAntC,SAAAxN,EAAAwN,SAAA,GAAiG3f,EAAA,EAAOA,IACxG5e,EAAA4C,YAAA5C,EAAAsX,YAEA,GAAAo0D,EAAAltC,QAAAzN,EAAAyN,QACA,IAAA5f,EAAAhrB,KAAAqnB,QAAAijC,kBAAAntB,EAAAyN,QAAA,EAAAktC,EAAAltC,SAA+F5f,EAAA,EAAOA,IACtG5e,EAAA4C,YAAA5C,EAAA2rE,WAEA,GAAA56C,EAAAwN,SAAAmtC,EAAAntC,SAAA,CACA,IAAAqtC,EAAAh4E,KAAAi4E,qBAAA96C,IAAAwN,SAAAmtC,EAAAntC,SAAA,GACAv+B,EAAAsX,WACAtX,EAAAqX,aAAAu0D,EAAA5rE,EAAAsX,YAEAtX,EAAAiB,YAAA2qE,GAGA,GAAA76C,EAAAyN,QAAAktC,EAAAltC,QAAA,CACAotC,EAAAh4E,KAAAi4E,qBAAA96C,EAAA26C,EAAAltC,QAAA,EAAAzN,EAAAyN,SACAx+B,EAAAiB,YAAA2qE,KAIAh4E,KAAAi4E,qBAAA,SAAA96C,EAAAwN,EAAAC,GAMA,IALA,IAAAotC,EAAAh4E,KAAA4N,QAAA8tB,cAAAw8C,yBACAltD,EAAA2f,EACA4D,EAAAvuC,KAAAqnB,QAAAgjC,gBAAAr/B,GACAqqC,EAAA9mB,IAAAroC,MAAA8kB,IAAAuzB,IAGAvzB,EAAAqqC,IACArqC,EAAAujB,EAAA1kB,IAAAmB,IAAA,EAEAqqC,GADA9mB,EAAAvuC,KAAAqnB,QAAAgjC,gBAAAr/B,EAAAujB,IACAA,EAAAroC,MAAA8kB,IAAAuzB,OAEAvzB,EAAA4f,IANA,CASA,IAAA/hB,EAAAhG,EAAA1Y,cAAA,OAEAqlB,KAGA,GAFAxvB,KAAA43E,YAAApoD,EAAAxE,GAAA,EAAAA,GAAAqqC,GAAA9mB,GACA1lB,EAAAjZ,UAAA4f,EAAAvtB,KAAA,IACAjC,KAAA63E,iBACAhvD,EAAAxc,UAAA,iBACA2rE,EAAA3qE,YAAAwb,GACAA,EAAAzb,MAAAkB,OAAA6uB,EAAA5J,WAAAvzB,KAAAqnB,QAAAuyC,aAAA5uC,GAAA,UAGA,KAAAnC,EAAAnF,YACAs0D,EAAA3qE,YAAAwb,EAAAnF,YAGAsH,IAEA,OAAAgtD,GAGAh4E,KAAA2mD,OAAA,SAAAxpB,GACAn9B,KAAAm9B,SASA,IAPA,IAAA3N,KACAmb,EAAAxN,EAAAwN,SAAAC,EAAAzN,EAAAyN,QAEA5f,EAAA2f,EACA4D,EAAAvuC,KAAAqnB,QAAAgjC,gBAAAr/B,GACAqqC,EAAA9mB,IAAAroC,MAAA8kB,IAAAuzB,IAGAvzB,EAAAqqC,IACArqC,EAAAujB,EAAA1kB,IAAAmB,IAAA,EAEAqqC,GADA9mB,EAAAvuC,KAAAqnB,QAAAgjC,gBAAAr/B,EAAAujB,IACAA,EAAAroC,MAAA8kB,IAAAuzB,OAEAvzB,EAAA4f,IAGA5qC,KAAA63E,kBACAroD,EAAA/tB,KAAA,6CAAA07B,EAAA5J,WAAAvzB,KAAAqnB,QAAAuyC,aAAA5uC,GAAA,QAEAhrB,KAAA43E,YAAApoD,EAAAxE,GAAA,EAAAA,GAAAqqC,GAAA9mB,GAEAvuC,KAAA63E,kBACAroD,EAAA/tB,KAAA,UAEAupB,IAEAhrB,KAAA4N,QAAAgC,UAAA4f,EAAAvtB,KAAA,KAGAjC,KAAAm4E,YACA90D,MAAA,EACA+0D,QAAA,EACAC,QAAA,GAGAr4E,KAAAs4E,aAAA,SAAA7C,EAAA9b,EAAAlnB,EAAA3qC,GACA,IAAAJ,EAAA1H,KAkCAu4E,EAAAzwE,EAAA3F,QAjCA,wjBACA,SAAAwlB,EAAA5hB,EAAAshD,EAAAmxB,EAAAC,GACA,GAAA1yE,EACA,OAAA2B,EAAAi+B,eACA,mDAAA7iB,EAAA/B,aAAArZ,EAAA8uE,WAAA7uD,EAAA/nB,QAAA,UACA+nB,EACa,QAAAA,EACb,cACa,QAAAA,EACb,cACa,QAAAA,EACb,cACa,SAAAA,EAAA,CACb,IAAAinB,EAAAlnC,EAAA2f,QAAAmgB,iBAAAmyB,EAAA6e,GAEA,OADA7e,GAAA/qB,EAAA,EACAlnC,EAAAsvE,YAAApoC,GACa,QAAAjnB,EAAA,CACb,IAAA+wD,EAAAhxE,EAAAi+B,eAAA,sDACAgzC,EAAAjxE,EAAAi+B,eAAAj+B,EAAA8uE,WAAA,GAEA,OADA7c,GAAA,EACA,gBAAA+e,EAAA,kBACA,EAAAhxE,EAAAy1B,OAAA1J,eACA,OAAAklD,EAAA,UACa,OAAAtxB,EACb,+DAAA3/C,EAAA8uE,WAAA,WAEA7c,GAAA,EACA,sCACA,EAAAjyD,EAAAy1B,OAAA1J,eACA,OAAA9L,EAAA,aAMA,GAAA3nB,KAAAm4E,WAAA1lC,EAAAx3B,MAQAw6D,EAAAh0E,KAAA82E,OARA,CACA,IAAA/rE,EAAA,OAAAimC,EAAAx3B,KAAA9Y,QAAA,eACAiL,EAAA,GACA,QAAAqlC,EAAAx3B,OACA7N,EAAA,iBAAAqlC,EAAA3qC,MAAAlI,OAAAI,KAAAm9B,OAAA1J,eAAA,SACAgiD,EAAAh0E,KAAA,gBAAA+K,EAAA,IAAAY,EAAA,IAAAmrE,EAAA,WAKA,OAAA5e,EAAA7xD,EAAAlI,QAGAI,KAAA44E,kBAAA,SAAAnD,EAAA3tE,EAAAvB,GACA,IAAAsyE,EAAA/wE,EAAA0nC,OAAAxvC,KAAAk3E,gBACA,OAAA2B,GAAA,GAAAA,GAAAtyE,EACAuB,EACA,KAAAA,EAAA,IACA+wE,KAAA74E,KAAA4uC,QACA6mC,EAAAh0E,KAAAqhB,EAAA/B,aAAA/gB,KAAAg3E,YAAA,KAAA6B,EAAA74E,KAAA4uC,UACA9mC,EAAA0d,OAAAqzD,IACS,MAAA/wE,EAAA,IACT2tE,EAAAh0E,KAAAqhB,EAAA/B,aAAA/gB,KAAAg3E,YAAA,MAAA6B,IACA/wE,EAAA0d,OAAAqzD,IAEA/wE,GAGA9H,KAAA84E,mBAAA,SAAArD,EAAApiC,EAAAlM,EAAA4xC,GAMA,IALA,IAAA11C,EAAA,EACAvhC,EAAA,EACAk3E,EAAA7xC,EAAA,GACAwyB,EAAA,EAEAp6D,EAAA,EAAuBA,EAAA8zC,EAAAzzC,OAAmBL,IAAA,CAC1C,IAAAkzC,EAAAY,EAAA9zC,GACAuI,EAAA2qC,EAAA3qC,MACA,MAAAvI,GAAAS,KAAA4wE,oBAAA,CAGA,GAFAvtC,EAAAv7B,EAAAlI,SACAkI,EAAA9H,KAAA44E,kBAAAnD,EAAA3tE,EAAAkxE,IAEA,SACA31C,GAAAv7B,EAAAlI,OAGA,GAAAyjC,EAAAv7B,EAAAlI,OAAAo5E,EACArf,EAAA35D,KAAAs4E,aAAA7C,EAAA9b,EAAAlnB,EAAA3qC,GACAu7B,GAAAv7B,EAAAlI,WACa,CACb,KAAAyjC,EAAAv7B,EAAAlI,QAAAo5E,GACArf,EAAA35D,KAAAs4E,aACA7C,EAAA9b,EACAlnB,EAAA3qC,EAAA4d,UAAA,EAAAszD,EAAA31C,IAEAv7B,IAAA4d,UAAAszD,EAAA31C,GACAA,EAAA21C,EAEAD,GACAtD,EAAAh0E,KAAA,SACA,uCACAzB,KAAAm9B,OAAA5J,WAAA,QAIAkiD,EAAAh0E,KAAAqhB,EAAA/B,aAAA,IAAAomB,EAAAE,SAGAsyB,EAAA,EACAqf,EAAA7xC,IAFArlC,IAEAg1D,OAAAC,UAEA,GAAAjvD,EAAAlI,SACAyjC,GAAAv7B,EAAAlI,OACA+5D,EAAA35D,KAAAs4E,aACA7C,EAAA9b,EAAAlnB,EAAA3qC,OAOA9H,KAAAi5E,kBAAA,SAAAxD,EAAApiC,GACA,IAAAsmB,EAAA,EACAlnB,EAAAY,EAAA,GACAvrC,EAAA2qC,EAAA3qC,MACA9H,KAAA4wE,sBACA9oE,EAAA9H,KAAA44E,kBAAAnD,EAAA3tE,IACAA,IACA6xD,EAAA35D,KAAAs4E,aAAA7C,EAAA9b,EAAAlnB,EAAA3qC,IACA,QAAAvI,EAAA,EAAuBA,EAAA8zC,EAAAzzC,OAAmBL,IAE1CuI,GADA2qC,EAAAY,EAAA9zC,IACAuI,MACA6xD,EAAA35D,KAAAs4E,aAAA7C,EAAA9b,EAAAlnB,EAAA3qC,IAGA9H,KAAA43E,YAAA,SAAAnC,EAAAzqD,EAAA+tD,EAAAxqC,GAIA,GAHAA,GAAA,GAAAA,IACAA,EAAAvuC,KAAAqnB,QAAAmnB,YAAAxjB,IAEAujB,EACA,IAAA8E,EAAArzC,KAAAk5E,mBAAAluD,EAAAujB,QAEA8E,EAAArzC,KAAAqnB,QAAA0vB,UAAA/rB,GAYA,GATA+tD,GACAtD,EAAAh0E,KACA,uCACAzB,KAAAm9B,OAAA5J,YACAvzB,KAAA63E,iBAAA,EAAA73E,KAAAqnB,QAAAuyC,aAAA5uC,IACA,QAIAqoB,EAAAzzC,OAAA,CACA,IAAAunC,EAAAnnC,KAAAqnB,QAAA8yC,gBAAAnvC,GACAmc,KAAAvnC,OACAI,KAAA84E,mBAAArD,EAAApiC,EAAAlM,EAAA4xC,GAEA/4E,KAAAi5E,kBAAAxD,EAAApiC,GAGArzC,KAAA2lC,iBACA4I,IACAvjB,EAAAujB,EAAA1kB,IAAAmB,KAEAyqD,EAAAh0E,KACA,iDACAupB,GAAAhrB,KAAAqnB,QAAAkK,YAAA,EAAAvxB,KAAAm2E,SAAAn2E,KAAAs2E,SACA,YAGAyC,GACAtD,EAAAh0E,KAAA,WAGAzB,KAAAk5E,mBAAA,SAAAluD,EAAAujB,GACA,IAAAlnB,EAAArnB,KAAAqnB,QACA8xD,KAuCA,IAAA9lC,EAAAhsB,EAAA0vB,UAAA/rB,GAgBA,OAfAujB,EAAAgZ,KAAA,SAAAG,EAAA18B,EAAAE,EAAA2gC,EAAApE,GACA,MAAAC,EACAyxB,EAAA13E,MACAwZ,KAAA,OACAnT,MAAA4/C,KAGAD,IACApU,EAAAhsB,EAAA0vB,UAAA/rB,IAEAqoB,EAAAzzC,QAhDA,SAAAyzC,EAAA1vC,EAAAqhD,GAEA,IADA,IAAAmD,EAAA,EAAA7f,EAAA,EACAA,EAAA+K,EAAA8U,GAAArgD,MAAAlI,OAAA+D,GAIA,GAHA2kC,GAAA+K,EAAA8U,GAAArgD,MAAAlI,SACAuoD,GAEA9U,EAAAzzC,OACA,OAgBA,IAdA0oC,GAAA3kC,KACAmE,EAAAurC,EAAA8U,GAAArgD,MAAA4d,UAAA/hB,EAAA2kC,IACA1oC,OAAAolD,EAAArhD,IACAmE,IAAA4d,UAAA,EAAAs/B,EAAArhD,IAEAw1E,EAAA13E,MACAwZ,KAAAo4B,EAAA8U,GAAAltC,KACAnT,UAGAwgC,EAAA3kC,EAAAmE,EAAAlI,OACAuoD,GAAA,GAGA7f,EAAA0c,GAAAmD,EAAA9U,EAAAzzC,QAAA,CACA,IAAAkI,KAAAurC,EAAA8U,GAAArgD,OACAlI,OAAA0oC,EAAA0c,EACAm0B,EAAA13E,MACAwZ,KAAAo4B,EAAA8U,GAAAltC,KACAnT,QAAA4d,UAAA,EAAAs/B,EAAA1c,KAGA6wC,EAAA13E,KAAA4xC,EAAA8U,IACA7f,GAAAxgC,EAAAlI,OACAuoD,GAAA,GAgBAixB,CAAA/lC,EAAAwY,EAAA3gC,KAESqjB,EAAA1kB,IAAAmB,IAAAhrB,KAAAqnB,QAAAmY,QAAA+O,EAAA1kB,IAAAmB,KAAAprB,QAETu5E,GAGAn5E,KAAA63E,eAAA,WACA,OAAA73E,KAAAqnB,QAAAkwC,kBAGAv3D,KAAAgwB,QAAA,WACAwE,cAAAx0B,KAAA82E,uBACA92E,KAAAq5E,cACAr5E,KAAAq5E,aAAAxpE,WAAAb,YAAAhP,KAAAq5E,qBACAr5E,KAAAq5E,gBAGCj4E,KAAA60E,EAAA/0E,WAED/B,EAAA82E,SAIAtzE,IAAAzC,OAAA,yEAAAsB,EAAArC,EAAAD,GACA,aAEA,IACAo6E,EADAz2D,EAAArhB,EAAA,cAGA+3E,EAAA,SAAA1G,GACA7yE,KAAA4N,QAAAiV,EAAA1Y,cAAA,OACAnK,KAAA4N,QAAAvB,UAAA,6BACAwmE,EAAAxlE,YAAArN,KAAA4N,cAEA3M,IAAAq4E,IACAA,IAAA,YAAAt5E,KAAA4N,QAAAR,QAEApN,KAAAw5E,WAAA,EACAx5E,KAAA0vE,YAAA,EACA1vE,KAAAy5E,cAAA,IACAz5E,KAAA05E,gBAAA,EAEA15E,KAAA25E,WACA35E,KAAA+qB,OAAA/qB,KAAA45E,YACA/2D,EAAAvW,YAAAtM,KAAA4N,QAAA,sBACA5N,KAAA65E,gBAAAP,EACAt5E,KAAA85E,kBACA95E,KAAA+5E,gBAAAv1E,KAAAxE,QAGA,WAEAA,KAAA85E,kBAAA,SAAA/yD,GAEA,IADA,IAAA4yD,EAAA35E,KAAA25E,QACAp6E,EAAAo6E,EAAA/5E,OAAoCL,KACpCo6E,EAAAp6E,GAAA6N,MAAA4sE,WAAAjzD,EAAA,aAEA/mB,KAAA+5E,eAAA,SAAAhzD,GAEA,IADA,IAAA4yD,EAAA35E,KAAA25E,QACAp6E,EAAAo6E,EAAA/5E,OAAoCL,KACpCo6E,EAAAp6E,GAAA6N,MAAAoW,QAAAuD,EAAA,QAIA/mB,KAAAk0E,SAAA,EACAl0E,KAAAg1E,WAAA,SAAAf,GACAj0E,KAAAk0E,SAAAD,GAGAj0E,KAAAgjE,WAAA,SAAA37C,GACArnB,KAAAqnB,WAGArnB,KAAAu0B,YAAA,SAAA0lD,GACAA,GAAAj6E,KAAA0vE,aACA1vE,KAAA0vE,WAAAuK,EACAj6E,KAAAk6E,iBAIAl6E,KAAAm6E,iBAAA,SAAAV,GACAA,GAAAz5E,KAAAy5E,gBACAz5E,KAAAy5E,gBACAz5E,KAAAk6E,iBAIAl6E,KAAAyvE,kBAAA,SAAAiK,GACAA,GAAA15E,KAAA05E,gBAAAJ,IACAt5E,KAAA05E,iBACA72D,EAAAnW,YAAA1M,KAAA4N,QAAA,sBAAA8rE,GACA15E,KAAA65E,gBAAA,GACA75E,KAAA65E,eAAA75E,KAAA,eAAAwE,KAAAxE,MACAA,KAAAk6E,iBAIAl6E,KAAA45E,UAAA,WACA,IAAAxtE,EAAAyW,EAAA1Y,cAAA,OAIA,OAHAiC,EAAAC,UAAA,aACArM,KAAA4N,QAAAP,YAAAjB,GACApM,KAAA25E,QAAAl4E,KAAA2K,GACAA,GAGApM,KAAAo6E,aAAA,WACA,GAAAp6E,KAAA25E,QAAA/5E,OAAA,GACA,IAAAwM,EAAApM,KAAA25E,QAAA5gD,MAEA,OADA3sB,EAAAyD,WAAAb,YAAA5C,GACAA,IAIApM,KAAA0nE,WAAA,WACA1nE,KAAAw5E,WAAA,EACA32D,EAAAvW,YAAAtM,KAAA4N,QAAA,sBACA5N,KAAAk6E,gBAGAl6E,KAAAwnE,WAAA,WACAxnE,KAAAw5E,WAAA,EACA32D,EAAAtW,eAAAvM,KAAA4N,QAAA,sBACA5N,KAAAk6E,gBAGAl6E,KAAAk6E,aAAA,WACA,IAAAvzB,EAAA3mD,KAAA65E,eASA,GARArlD,cAAAx0B,KAAAq6E,YACAx7D,aAAA7e,KAAAs6E,WACAt6E,KAAA05E,gBACA72D,EAAAtW,eAAAvM,KAAA4N,QAAA,uBAGA+4C,GAAA,GAEA3mD,KAAA0vE,YAAA1vE,KAAAy5E,eAAAz5E,KAAAw5E,UAAA,CAGAx5E,KAAA05E,gBACA56D,WAAA,WACA+D,EAAAvW,YAAAtM,KAAA4N,QAAA,wBACapJ,KAAAxE,OAGb,IAAAu6E,EAAA,WACAv6E,KAAAs6E,UAAAx7D,WAAA,WACA6nC,GAAA,IACa,GAAA3mD,KAAAy5E,gBACJj1E,KAAAxE,MAETA,KAAAq6E,WAAA5lD,YAAA,WACAkyB,GAAA,GACA4zB,KACSv6E,KAAAy5E,eAETc,MAGAv6E,KAAAw6E,iBAAA,SAAA/rE,EAAAgsE,GACA,IAAAz6E,KAAAm9B,SAAAn9B,KAAAqnB,QACA,OAAoB3Y,KAAA,EAAAqa,IAAA,GAEpBta,IACAA,EAAAzO,KAAAqnB,QAAApC,UAAAinB,aACA,IAAA9lC,EAAApG,KAAAqnB,QAAA8jB,yBAAA18B,GAQA,OAAgBC,KAPhB1O,KAAAk0E,UAAAl0E,KAAAqnB,QAAAmpB,aAAAtK,UAAA9/B,EAAA4kB,IAAAvc,EAAAuc,KACAhrB,KAAAqnB,QAAAmpB,aAAAnI,WAAAjiC,EAAA8kB,QACA9kB,EAAA8kB,OAAAlrB,KAAAm9B,OAAA1J,gBAKgB1K,KAHhB3iB,EAAA4kB,KAAAyvD,EAAAz6E,KAAAm9B,OAAAq4C,eAAA,IACAx1E,KAAAm9B,OAAA5J,aAKAvzB,KAAA2mD,OAAA,SAAAxpB,GACAn9B,KAAAm9B,SAEA,IAAAyL,EAAA5oC,KAAAqnB,QAAAqzD,kBACAn7E,EAAA,EAAAo7E,EAAA,OAEA15E,IAAA2nC,GAAA,IAAAA,EAAAhpC,SACAgpC,IAA2B7d,OAAA,QAG3BxrB,EAAA,UAAAkM,EAAAm9B,EAAAhpC,OAA8CL,EAAAkM,EAAOlM,IAAA,CACrD,IAAAq7E,EAAA56E,KAAAw6E,iBAAA5xC,EAAArpC,GAAAwrB,QAAA,GACA,MAAA6vD,EAAA7xD,IAAAoU,EAAA7uB,OAAA6uB,EAAAlb,QACA24D,EAAA7xD,IAAA,IAAAxpB,EAAA,GADA,CAKA,IAAA6N,GAAApN,KAAA25E,QAAAgB,MAAA36E,KAAA45E,aAAAxsE,MAEApN,KAAA66E,WAMA76E,KAAA66E,WAAAztE,EAAAwtE,EAAAz9C,EAAAyL,EAAArpC,GAAAS,KAAAqnB,UALAja,EAAAsB,KAAAksE,EAAAlsE,KAAA,KACAtB,EAAA2b,IAAA6xD,EAAA7xD,IAAA,KACA3b,EAAAgB,MAAA+uB,EAAA1J,eAAA,KACArmB,EAAAkB,OAAA6uB,EAAA5J,WAAA,OAKA,KAAAvzB,KAAA25E,QAAA/5E,OAAA+6E,GACA36E,KAAAo6E,eAEA,IAAA1oB,EAAA1xD,KAAAqnB,QAAAsqC,eACA3xD,KAAA86E,cAAAppB,GACA1xD,KAAAqvE,UAAAuL,EACA56E,KAAAk6E,gBAGAl6E,KAAA66E,WAAA,KAEA76E,KAAA86E,cAAA,SAAAppB,GACAA,GAAA1xD,KAAA0xD,YACA1xD,KAAA0xD,YACAA,EACA7uC,EAAAvW,YAAAtM,KAAA4N,QAAA,yBAEAiV,EAAAtW,eAAAvM,KAAA4N,QAAA,2BAIA5N,KAAAgwB,QAAA,WACAwE,cAAAx0B,KAAAq6E,YACAx7D,aAAA7e,KAAAs6E,cAGCl5E,KAAAm4E,EAAAr4E,WAED/B,EAAAo6E,WAIA52E,IAAAzC,OAAA,4HAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,aACAqhB,EAAArhB,EAAA,aACA6Z,EAAA7Z,EAAA,eACAy2B,EAAAz2B,EAAA,uBAAAy2B,aAEA8iD,EAAA,SAAAC,GACAh7E,KAAA4N,QAAAiV,EAAA1Y,cAAA,OACAnK,KAAA4N,QAAAvB,UAAA,8BAAArM,KAAAi7E,YAEAj7E,KAAAmO,MAAA0U,EAAA1Y,cAAA,OACAnK,KAAAmO,MAAA9B,UAAA,sBACArM,KAAA4N,QAAAP,YAAArN,KAAAmO,OAEA6sE,EAAA3tE,YAAArN,KAAA4N,SAEA5N,KAAAk7E,YAAA,GACAl7E,KAAAm7E,WAAA,EAEA9/D,EAAAN,YAAA/a,KAAA4N,QAAA,SAAA5N,KAAAo7E,SAAA52E,KAAAxE,OACAqb,EAAAN,YAAA/a,KAAA4N,QAAA,YAAAyN,EAAAQ,kBAGA,WACA/K,EAAAF,UAAA5Q,KAAAi4B,GAEAj4B,KAAAk7E,WAAA,SAAA1B,GACAx5E,KAAA4N,QAAAR,MAAAmB,QAAAirE,EAAA,UACAx5E,KAAAw5E,YACAx5E,KAAAq7E,MAAA,KAECj6E,KAAA25E,EAAA75E,WACD,IAAAo6E,EAAA,SAAAN,EAAAlzD,GACAizD,EAAA35E,KAAApB,KAAAg7E,GACAh7E,KAAAqP,UAAA,EACArP,KAAAu7E,aAAA,EACAzzD,EAAA0zD,gBACAx7E,KAAAoO,MAAAyU,EAAA3U,eAAA8sE,EAAAt/C,eACA17B,KAAAmO,MAAAf,MAAAgB,MACApO,KAAA4N,QAAAR,MAAAgB,OAAApO,KAAAoO,OAAA,WACApO,KAAAy7E,UAAA,GAGA3qE,EAAAR,SAAAgrE,EAAAP,GAEA,WAEA/6E,KAAAi7E,YAAA,KACAj7E,KAAAo7E,SAAA,WACA,IAAAp7E,KAAAm7E,UAAA,CAEA,GADAn7E,KAAAqP,UAAArP,KAAA4N,QAAAyB,UACA,GAAArP,KAAAq7E,MAAA,CACA,IAAAh7C,EAAArgC,KAAA4N,QAAAK,aAAAjO,KAAAu7E,aACAv7E,KAAAqP,UAAArP,KAAAqP,WAAA,EAAAgxB,IAAArgC,KAAAq7E,MAAAh7C,GAEArgC,KAAAwoB,MAAA,UAAkCpI,KAAApgB,KAAAqP,YAElCrP,KAAAm7E,WAAA,GAEAn7E,KAAA+vB,SAAA,WACA,OAAAzpB,KAAAC,IAAAvG,KAAAw5E,UAAAx5E,KAAAoO,MAAA,EAAApO,KAAAy7E,WAAA,IAEAz7E,KAAA07E,UAAA,SAAAptE,GACAtO,KAAA4N,QAAAR,MAAAkB,SAAA,MAEAtO,KAAA27E,eACA37E,KAAA47E,gBAAA,SAAAttE,GACAtO,KAAAu7E,aAAAjtE,EACAA,EA/DA,OAgEAtO,KAAAq7E,MAhEA,MAgEA/sE,EACAA,EAjEA,OAkES,GAAAtO,KAAAq7E,QACTr7E,KAAAq7E,MAAA,GAEAr7E,KAAAmO,MAAAf,MAAAkB,SAAA,MAEAtO,KAAAo0D,aAAA,SAAA/kD,GACArP,KAAAqP,eACArP,KAAAm7E,WAAA,EACAn7E,KAAAqP,YACArP,KAAA4N,QAAAyB,YAAArP,KAAAq7E,SAICj6E,KAAAk6E,EAAAp6E,WACD,IAAA26E,EAAA,SAAAb,EAAAlzD,GACAizD,EAAA35E,KAAApB,KAAAg7E,GACAh7E,KAAAsP,WAAA,EACAtP,KAAAsO,OAAAwZ,EAAA0zD,gBACAx7E,KAAAmO,MAAAf,MAAAkB,OACAtO,KAAA4N,QAAAR,MAAAkB,QAAAtO,KAAAsO,QAAA,YAGAwC,EAAAR,SAAAurE,EAAAd,GAEA,WAEA/6E,KAAAi7E,YAAA,KACAj7E,KAAAo7E,SAAA,WACAp7E,KAAAm7E,YACAn7E,KAAAsP,WAAAtP,KAAA4N,QAAA0B,WACAtP,KAAAwoB,MAAA,UAAkCpI,KAAApgB,KAAAsP,cAElCtP,KAAAm7E,WAAA,GAEAn7E,KAAA6vB,UAAA,WACA,OAAA7vB,KAAAw5E,UAAAx5E,KAAAsO,OAAA,GAEAtO,KAAA87E,SAAA,SAAA1tE,GACApO,KAAA4N,QAAAR,MAAAgB,QAAA,MAEApO,KAAA+7E,cAAA,SAAA3tE,GACApO,KAAAmO,MAAAf,MAAAgB,QAAA,MAEApO,KAAAg8E,eAAA,SAAA5tE,GACApO,KAAAmO,MAAAf,MAAAgB,QAAA,MAEApO,KAAAw0D,cAAA,SAAAllD,GACAtP,KAAAsP,gBACAtP,KAAAm7E,WAAA,EACAn7E,KAAAsP,WAAAtP,KAAA4N,QAAA0B,gBAIClO,KAAAy6E,EAAA36E,WAGD/B,EAAA47E,UAAAO,EACAn8E,EAAA88E,WAAAX,EACAn8E,EAAA+8E,WAAAL,EAEA18E,EAAAm8E,aACAn8E,EAAA08E,eAGAl5E,IAAAzC,OAAA,yEAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAmc,EAAA7Z,EAAA,eAGA26E,EAAA,SAAAC,EAAAl8D,GACAlgB,KAAAo8E,WACAp8E,KAAAq8E,SAAA,EACAr8E,KAAAs8E,QAAA,EACAt8E,KAAAC,OAAAigB,GAAAjgB,SAGA,WAGAD,KAAAuiB,SAAA,SAAAg6D,GAEA,GADAv8E,KAAAs8E,QAAAt8E,KAAAs8E,QAAAC,GACAv8E,KAAAq8E,SAAAr8E,KAAAs8E,QAAA,CACAt8E,KAAAq8E,SAAA,EACA,IAAA15D,EAAA3iB,KACAqb,EAAAgF,UAAA,WAEA,IAAAi8D,EACA,IAFA35D,EAAA05D,SAAA,EAEAC,EAAA35D,EAAA25D,SACA35D,EAAA25D,QAAA,EACA35D,EAAAy5D,SAAAE,IAEat8E,KAAAC,YAIZmB,KAAA+6E,EAAAj7E,WAED/B,EAAAg9E,eAGAx5E,IAAAzC,OAAA,wJAAAsB,EAAArC,EAAAD,GAEA,IAAA4R,EAAAtP,EAAA,cACAqhB,EAAArhB,EAAA,cACAshB,EAAAthB,EAAA,eACAoZ,EAAApZ,EAAA,oBACAy2B,EAAAz2B,EAAA,wBAAAy2B,aAEAukD,EAAA,EAEAC,EAAAt9E,EAAAs9E,YAAA,SAAA5J,GACA7yE,KAAAoM,GAAAyW,EAAA1Y,cAAA,OACAnK,KAAA08E,sBAAA18E,KAAAoM,GAAAgB,OAAA,GAEApN,KAAA28E,MAAA95D,EAAA1Y,cAAA,OACAnK,KAAA08E,sBAAA18E,KAAA28E,MAAAvvE,OAEApN,KAAAq5E,aAAAx2D,EAAA1Y,cAAA,OACAnK,KAAA08E,sBAAA18E,KAAAq5E,aAAAjsE,OAGApN,KAAAoM,GAAAiB,YAAArN,KAAA28E,OACA38E,KAAAoM,GAAAiB,YAAArN,KAAAq5E,cACAxG,EAAAxlE,YAAArN,KAAAoM,IAEAowE,GACAx8E,KAAA48E,sBACA58E,KAAAq5E,aAAAzpE,UAAAkT,EAAA/B,aAAA,IAAAy7D,GAEAx8E,KAAA6nC,gBAA2Bz5B,MAAA,EAAAE,OAAA,GAC3BtO,KAAA62E,wBAGA,WAEA/lE,EAAAF,UAAA5Q,KAAAi4B,GAEAj4B,KAAA6nC,gBAA2Bz5B,MAAA,EAAAE,OAAA,GAE3BtO,KAAA48E,oBAAA,WACA,IAAAxwE,EAAAyW,EAAA1Y,cAAA,OACAnK,KAAA08E,sBAAAtwE,EAAAgB,OACAhB,EAAAgB,MAAAgB,MAAA,QACAlE,SAAA8B,gBAAAqB,YAAAjB,GACA,IAAA2oD,EAAA3oD,EAAA0c,wBAAA1a,MAEAouE,EADAznB,EAAA,GAAAA,EAAA,EACA,GAEA,IACA3oD,EAAAyD,WAAAb,YAAA5C,IAGApM,KAAA08E,sBAAA,SAAAtvE,EAAAyvE,GACAzvE,EAAAgB,MAAAhB,EAAAkB,OAAA,OACAlB,EAAAsB,KAAAtB,EAAA2b,IAAA,MACA3b,EAAA4sE,WAAA,SACA5sE,EAAAqB,SAAA,WACArB,EAAA0vE,WAAA,MAEAliE,EAAAnB,KAAA,EACArM,EAAA,yBAEAA,EAAA2vE,KAAA,UAEA3vE,EAAAuB,SAAAkuE,EAAA,oBAGA78E,KAAA62E,oBAAA,WACA,IAAAvvC,EAAAtnC,KAAAg9E,gBACA,GAAA11C,IAAAtnC,KAAA6nC,eAAAz5B,QAAAk5B,EAAAl5B,OAAApO,KAAA6nC,eAAAv5B,SAAAg5B,EAAAh5B,QAAA,CACAtO,KAAAq5E,aAAAjsE,MAAA6vE,WAAA,OACA,IAAAC,EAAAl9E,KAAAg9E,gBACAh9E,KAAAq5E,aAAAjsE,MAAA6vE,WAAA,GACAj9E,KAAA6nC,eAAAP,EACAtnC,KAAAm9E,UAAAz9E,OAAA0J,OAAA,MACApJ,KAAAo9E,eAAAF,KAAA9uE,QAAAk5B,EAAAl5B,OAAA8uE,EAAA5uE,SAAAg5B,EAAAh5B,OACAtO,KAAAwoB,MAAA,uBAA+CpI,KAAAknB,MAI/CtnC,KAAA42E,iBAAA,WACA,GAAA52E,KAAA82E,sBACA,OAAA92E,KAAA82E,sBACA,IAAApvE,EAAA1H,KACA,OAAAA,KAAA82E,sBAAAriD,YAAA,WACA/sB,EAAAmvE,uBACS,MAGT72E,KAAAq9E,WAAA,SAAAt2D,GACAA,EACA/mB,KAAA42E,mBACS52E,KAAA82E,wBACTtiD,cAAAx0B,KAAA82E,uBACA92E,KAAA82E,sBAAA,IAIA92E,KAAAg9E,cAAA,WACA,QAAAR,EAAA,CACA,IAAA5zD,EAAA,KACA,IACAA,EAAA5oB,KAAAq5E,aAAAvwD,wBACa,MAAAnN,GACbiN,GAAuBxa,MAAA,EAAAE,OAAA,GAEvB,IAAAg5B,GACAh5B,OAAAsa,EAAAta,OACAF,MAAAwa,EAAAxa,MAAAouE,QAGAl1C,GACAh5B,OAAAtO,KAAAq5E,aAAAprE,aACAG,MAAApO,KAAAq5E,aAAAtrE,YAAAyuE,GAGA,WAAAl1C,EAAAl5B,OAAA,IAAAk5B,EAAAh5B,OACA,KACAg5B,GAGAtnC,KAAA+nC,kBAAA,SAAAnE,GAGA,OAFA5jC,KAAA28E,MAAA/sE,UAAAkT,EAAA/B,aAAA6iB,EAAA44C,GACAx8E,KAAA28E,MAAA7zD,wBACA1a,MAAAouE,GAGAx8E,KAAAk7D,kBAAA,SAAAt3B,GACA,IAAAmxB,EAAA/0D,KAAAm9E,UAAAv5C,GAIA,YAHA3iC,IAAA8zD,IACAA,EAAA/0D,KAAAm9E,UAAAv5C,GAAA5jC,KAAA+nC,kBAAAnE,GAAA5jC,KAAA6nC,eAAAz5B,OAEA2mD,GAGA/0D,KAAAgwB,QAAA,WACAwE,cAAAx0B,KAAA82E,uBACA92E,KAAAoM,IAAApM,KAAAoM,GAAAyD,YACA7P,KAAAoM,GAAAyD,WAAAb,YAAAhP,KAAAoM,OAGChL,KAAAq7E,EAAAv7E,aAIDyB,IAAAzC,OAAA,wSAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,aACAqhB,EAAArhB,EAAA,aACA27B,EAAA37B,EAAA,YACAoZ,EAAApZ,EAAA,mBACA87E,EAAA97E,EAAA,kBAAAoxE,OACA2K,EAAA/7E,EAAA,kBAAAkzE,OACA8I,EAAAh8E,EAAA,gBAAAy0E,KACAwH,EAAAj8E,EAAA,kBAAA+3E,OACAsC,EAAAr6E,EAAA,eAAAq6E,WACAP,EAAA95E,EAAA,eAAA85E,WACAa,EAAA36E,EAAA,gBAAA26E,WACAM,EAAAj7E,EAAA,wBAAAi7E,YACAxkD,EAAAz2B,EAAA,uBAAAy2B,aA8XApV,EAAA3V,gBA7XA,s6XA6XA,kBAEA,IAAAwwE,EAAA,SAAA70D,EAAA69C,GACA,IAAA/jD,EAAA3iB,KAEAA,KAAA6oB,aAAAhG,EAAA1Y,cAAA,OACAnK,KAAA+nB,uBAAAnN,EAAAhB,QAEAiJ,EAAAvW,YAAAtM,KAAA6oB,UAAA,cAEA7oB,KAAAymE,SAAAC,GAEA1mE,KAAA6xB,QAAAhP,EAAA1Y,cAAA,OACAnK,KAAA6xB,QAAAxlB,UAAA,aACArM,KAAA6oB,UAAAxb,YAAArN,KAAA6xB,SACA7xB,KAAA6xB,QAAAtO,aAAA,kBAEAvjB,KAAAspB,SAAAzG,EAAA1Y,cAAA,OACAnK,KAAAspB,SAAAjd,UAAA,eACArM,KAAA6oB,UAAAxb,YAAArN,KAAAspB,UAEAtpB,KAAA29E,QAAA96D,EAAA1Y,cAAA,OACAnK,KAAA29E,QAAAtxE,UAAA,cACArM,KAAAspB,SAAAjc,YAAArN,KAAA29E,SAEA39E,KAAA2wB,aAAA,IAAA2sD,EAAAt9E,KAAA6xB,SACA7xB,KAAA2wB,aAAAxI,GAAA,oBAAAnoB,KAAA49E,eAAAp5E,KAAAxE,OAEAA,KAAA69E,YAAA,IAAAN,EAAAv9E,KAAA29E,SAEA,IAAAG,EAAA99E,KAAA+9E,WAAA,IAAAP,EAAAx9E,KAAA29E,SACA39E,KAAAg+E,OAAAF,EAAAlwE,QAEA5N,KAAAi+E,aAAA,IAAAV,EAAAv9E,KAAA29E,SAEA39E,KAAAs0B,aAAA,IAAAmpD,EAAAz9E,KAAA29E,SACA39E,KAAAk+E,cAAA,EACAl+E,KAAAm+E,UAAA,EAEAn+E,KAAAo+E,UACAp+E,KAAAy9B,WAAA,IAAA69C,EAAAt7E,KAAA6oB,UAAA7oB,MACAA,KAAA09B,WAAA,IAAAm+C,EAAA77E,KAAA6oB,UAAA7oB,MACAA,KAAAy9B,WAAAviB,iBAAA,kBAAAS,GACAgH,EAAA07D,kBACA17D,EAAA0E,QAAA+sC,aAAAz4C,EAAAyE,KAAAuC,EAAA27D,aAAAv1D,OAEA/oB,KAAA09B,WAAAxiB,iBAAA,kBAAAS,GACAgH,EAAA07D,kBACA17D,EAAA0E,QAAAmtC,cAAA74C,EAAAyE,KAAAuC,EAAA27D,aAAA5vE,QAGA1O,KAAAqP,UAAA,EACArP,KAAAsP,WAAA,EAEAtP,KAAAsmE,WACAt7C,IAAA,EACAE,OAAA,GAGAlrB,KAAA02E,aAAA,IAAA+F,EAAAz8E,KAAA6oB,WACA7oB,KAAA+9E,WAAAhjB,gBAAA/6D,KAAA02E,cACA12E,KAAA+9E,WAAA7iE,iBAAA,+BAAAS,GACAgH,EAAA47D,sBACA57D,EAAA6jD,UAAA,EAAA7jD,EAAAowD,YAAApwD,EAAA67D,MAAApwE,MAAAuU,EAAA67D,MAAAlwE,QACAqU,EAAAmO,QAAA,sBAAAnV,KAGA3b,KAAAw+E,OACApwE,MAAA,EACAE,OAAA,EACAmwE,eAAA,EACAC,cAAA,EACAC,QAAA,GAGA3+E,KAAAwzB,aACAplB,MAAA,EACA6lE,QAAA,EACAtpC,SAAA,EACA6qC,eAAA,EACA5qC,QAAA,EACArX,WAAA,EACAE,eAAA,EACAsgD,UAAA,EACA6K,UAAA,EACA38D,OAAA,EACA3T,OAAA,EACA8kE,aAAA,GAGApzE,KAAAs+E,cACA5vE,KAAA,EACAkb,MAAA,EACAb,IAAA,EACAI,OAAA,EACA01D,EAAA,EACAx+C,EAAA,GAGArgC,KAAA8+E,MAAA,IAAA3C,EACAn8E,KAAA++E,eAAAv6E,KAAAxE,MACAA,KAAA6oB,UAAA6S,cAAAtrB,aAEApQ,KAAA8+E,MAAAv8D,SAAAviB,KAAAg/E,aAEAh/E,KAAAu+E,sBACAv+E,KAAAg1E,WAAA,GACA73C,EAAA5C,aAAAv6B,MACAm9B,EAAA3U,MAAA,WAAAxoB,QAGA,WAEAA,KAAAi/E,cAAA,EACAj/E,KAAAk/E,cAAA,EACAl/E,KAAAm/E,cAAA,EACAn/E,KAAAo/E,cAAA,EACAp/E,KAAAq/E,aAAA,GACAr/E,KAAAs/E,YAAA,GACAt/E,KAAAu/E,YAAA,GACAv/E,KAAAw/E,mBAAA,IACAx/E,KAAAy/E,oBAAA,IACAz/E,KAAAg/E,YAAA,IACAh/E,KAAA0/E,gBAAA,KAEA5uE,EAAAF,UAAA5Q,KAAAi4B,GAEAj4B,KAAAu+E,oBAAA,WACAv+E,KAAA+9E,WAAAX,gBAAAp9E,KAAA2/E,kBACA3/E,KAAA2/E,gBAAA3/E,KAAA+9E,WAAAX,eACAp9E,KAAAwsB,SAAA,cAAAxsB,KAAA2/E,kBAGA3/E,KAAAwzB,YAAAC,eACAzzB,KAAAyzB,eAAAzzB,KAAA+9E,WAAA7iB,oBACAl7D,KAAAwzB,YAAAD,WACAvzB,KAAAuzB,WAAAvzB,KAAA+9E,WAAAtH,gBACAz2E,KAAA4/E,sBAEA5/E,KAAAgjE,WAAA,SAAA37C,GACArnB,KAAAqnB,SACArnB,KAAAqnB,QAAAxb,IAAAotB,IAAA,oBAAAj5B,KAAA6/E,qBAEA7/E,KAAAqnB,UACAA,GAAArnB,KAAAs+E,aAAAv1D,KAAA1B,EAAAitC,gBAAA,GACAjtC,EAAA+sC,cAAAp0D,KAAAs+E,aAAAv1D,KAEA/oB,KAAAs0B,aAAA0uC,WAAA37C,GACArnB,KAAA69E,YAAA7a,WAAA37C,GACArnB,KAAAi+E,aAAAjb,WAAA37C,GACArnB,KAAA2wB,aAAAqyC,WAAA37C,GACArnB,KAAA+9E,WAAA/a,WAAA37C,GACAA,IAGArnB,KAAA8+E,MAAAv8D,SAAAviB,KAAAg/E,aACAh/E,KAAAqnB,QAAA0zC,gBAAA/6D,KAAA02E,cACA12E,KAAA09B,WAAApuB,WAAAtP,KAAAy9B,WAAApuB,UAAA,KAEArP,KAAA6/E,oBAAA7/E,KAAA6/E,oBAAAr7E,KAAAxE,MACAA,KAAA6/E,sBACA7/E,KAAAqnB,QAAAxb,IAAAsc,GAAA,oBAAAnoB,KAAA6/E,uBAEA7/E,KAAA8nE,YAAA,SAAAn9B,EAAAC,EAAAqqB,GAiBA,QAhBAh0D,IAAA2pC,IACAA,EAAA2T,KAEAv+C,KAAA8/E,eAOA9/E,KAAA8/E,cAAAn1C,aACA3qC,KAAA8/E,cAAAn1C,YAEA3qC,KAAA8/E,cAAAl1C,YACA5qC,KAAA8/E,cAAAl1C,YAVA5qC,KAAA8/E,eACAn1C,WACAC,WAUA5qC,KAAA8/E,cAAAl1C,QAAA5qC,KAAAwzB,YAAAmX,SAAA,CACA,IAAAsqB,EAGA,OAFAj1D,KAAA8/E,cAAAl1C,QAAA5qC,KAAAwzB,YAAAoX,QAIA5qC,KAAA8/E,cAAAn1C,SAAA3qC,KAAAwzB,YAAAoX,SAEA5qC,KAAA8+E,MAAAv8D,SAAAviB,KAAAq/E,eAGAr/E,KAAA6/E,oBAAA,WACA7/E,KAAA8+E,MAAAv8D,SAAAviB,KAAAs/E,aACAt/E,KAAA+9E,WAAA7H,iBACAl2E,KAAAqnB,QAAAmpB,aAAAtI,WAAAloC,KAAA+9E,WAAAzH,WAGAt2E,KAAAwlE,gBAAA,WACAxlE,KAAA8+E,MAAAv8D,SAAAviB,KAAAs/E,YAAAt/E,KAAAk/E,eACAl/E,KAAA+9E,WAAAvY,mBAEAxlE,KAAAgpE,WAAA,WACAhpE,KAAA8+E,MAAAv8D,SAAAviB,KAAAs/E,cAEAt/E,KAAAmmE,WAAA,SAAAlR,GACAA,EACAj1D,KAAA++E,eAAA/+E,KAAAg/E,aAAA,GAEAh/E,KAAA8+E,MAAAv8D,SAAAviB,KAAAg/E,cAEAh/E,KAAA+/E,eAAA,WACA//E,KAAA+9E,WAAAlH,uBAGA72E,KAAAggF,SAAA,EACAhgF,KAAAigF,iBAAA,WACAjgF,KAAA8+E,MAAAzC,QACAr8E,KAAAw+E,MAAAG,QAAA,EAEA3+E,KAAAwmE,YAEAxmE,KAAAwmE,SAAA,SAAAvR,EAAA8d,EAAA3kE,EAAAE,GACA,KAAAtO,KAAAkgF,SAAA,IAEAlgF,KAAAkgF,SAAA,EACAlgF,KAAAkgF,WAEAlgF,KAAAkgF,SAAAjrB,EAAA,IACA,IAAA7oD,EAAApM,KAAA6oB,UACAva,IACAA,EAAAlC,EAAA6B,cAAA7B,EAAAmvE,cACAntE,IACAA,EAAAhC,EAAA2B,aAAA3B,EAAA+zE,aACA,IAAA7D,EAAAt8E,KAAAogF,kBAAAnrB,EAAA8d,EAAA3kE,EAAAE,GAGA,IAAAtO,KAAAw+E,MAAAC,iBAAArwE,IAAAE,EACA,OAAAtO,KAAAkgF,SAAA,EAEAjrB,IACAj1D,KAAA2wB,aAAAujD,SAAA,MAEAjf,EACAj1D,KAAA++E,eAAAzC,EAAAt8E,KAAAggF,UAAA,GAEAhgF,KAAA8+E,MAAAv8D,SAAA+5D,EAAAt8E,KAAAggF,UAEAhgF,KAAAkgF,WACAlgF,KAAAkgF,SAAA,GACAlgF,KAAAy9B,WAAAnuB,WAAAtP,KAAAy9B,WAAApuB,UAAA,OAGArP,KAAAogF,kBAAA,SAAAnrB,EAAA8d,EAAA3kE,EAAAE,GACAA,GAAAtO,KAAAqgF,cAAA,EACA,IAAA/D,EAAA,EACAh1C,EAAAtnC,KAAAw+E,MACA8B,GACAlyE,MAAAk5B,EAAAl5B,MACAE,OAAAg5B,EAAAh5B,OACAmwE,eAAAn3C,EAAAm3C,eACAC,cAAAp3C,EAAAo3C,eAwCA,OAtCApwE,IAAA2mD,GAAA3tB,EAAAh5B,aACAg5B,EAAAh5B,SACAguE,GAAAt8E,KAAAu/E,YAEAj4C,EAAAm3C,eAAAn3C,EAAAh5B,OACAtO,KAAAk+E,eACA52C,EAAAm3C,gBAAAz+E,KAAA09B,WAAA7N,aACA7vB,KAAAy9B,WAAA7vB,QAAAR,MAAA+b,OAAAnpB,KAAA09B,WAAA7N,YAAA,KAEAysD,GAAAt8E,KAAAo/E,eAGAhxE,IAAA6mD,GAAA3tB,EAAAl5B,YACAkuE,GAAAt8E,KAAAu/E,YACAj4C,EAAAl5B,QAEA,MAAA2kE,IACAA,EAAA/yE,KAAAugF,YAAAvgF,KAAA6xB,QAAA/iB,YAAA,GAEA9O,KAAA+yE,cAEA/yE,KAAA09B,WAAA9vB,QAAAR,MAAAsB,KACA1O,KAAAspB,SAAAlc,MAAAsB,KAAAqkE,EAAA,KACAzrC,EAAAo3C,cAAAp4E,KAAAC,IAAA,EAAA6H,EAAA2kE,EAAA/yE,KAAAy9B,WAAA1N,YAEA/vB,KAAA09B,WAAA9vB,QAAAR,MAAAwc,MACA5pB,KAAAspB,SAAAlc,MAAAwc,MAAA5pB,KAAAy9B,WAAA1N,WAAA,KACA/vB,KAAAspB,SAAAlc,MAAA+b,OAAAnpB,KAAA09B,WAAA7N,YAAA,MAEA7vB,KAAAqnB,SAAArnB,KAAAqnB,QAAAkwC,kBAAAv3D,KAAAy3D,mBAAAxC,KACAqnB,GAAAt8E,KAAAg/E,cAGA13C,EAAAq3C,QAAAvwE,IAAAE,EAEAguE,GACAt8E,KAAA8wB,QAAA,SAAAwvD,GAEAhE,GAGAt8E,KAAA49E,eAAA,WACA,IAAA7K,EAAA/yE,KAAAugF,YAAAvgF,KAAA6xB,QAAA/iB,YAAA,EACAikE,GAAA/yE,KAAA+yE,cACA/yE,KAAAggF,UAAAhgF,KAAAogF,mBAAA,EAAArN,EAAA/yE,KAAAw+E,MAAApwE,MAAApO,KAAAw+E,MAAAlwE,SAEAtO,KAAAqnB,QAAAkwC,kBAAAv3D,KAAAy3D,kBACAz3D,KAAA8+E,MAAAv8D,SAAAviB,KAAAg/E,aACSh/E,KAAAw+E,MAAAG,OACT3+E,KAAA8+E,MAAAv8D,SAAAviB,KAAAg/E,cAEAh/E,KAAAwgF,sBACAxgF,KAAA8+E,MAAAv8D,SAAAviB,KAAAk/E,iBAGAl/E,KAAAy3D,gBAAA,WACA,IAAAgpB,EAAAzgF,KAAAw+E,MAAAE,cAAA,EAAA1+E,KAAAk0E,SACAjc,EAAA3xD,KAAAoF,MAAA+0E,EAAAzgF,KAAAyzB,gBACA,OAAAzzB,KAAAqnB,QAAAowC,gBAAAQ,EAAAj4D,KAAA0gF,kBAAA1gF,KAAA2gF,qBAEA3gF,KAAAqqE,kBAAA,SAAAC,GACAtqE,KAAAs5B,UAAA,iBAAAgxC,IAEAtqE,KAAAuqE,kBAAA,WACA,OAAAvqE,KAAA4gF,iBAEA5gF,KAAAioC,kBAAA,SAAAtC,GACA3lC,KAAAs5B,UAAA,iBAAAqM,GACA3lC,KAAAqnB,QAAAmpB,aAAAvI,kBAAAtC,IAEA3lC,KAAAgoC,kBAAA,WACA,OAAAhoC,KAAA05B,UAAA,mBAEA15B,KAAAyqE,uBAAA,WACA,OAAAzqE,KAAA05B,UAAA,wBAGA15B,KAAAwqE,uBAAA,SAAAj8D,GACAvO,KAAAs5B,UAAA,sBAAA/qB,IAEAvO,KAAA0qE,mBAAA,SAAAC,GACA3qE,KAAAs5B,UAAA,kBAAAqxC,IAEA3qE,KAAA4qE,mBAAA,WACA,OAAA5qE,KAAA05B,UAAA,oBAEA15B,KAAA6qE,qBAAA,SAAAF,GACA3qE,KAAAs5B,UAAA,oBAAAqxC,IAEA3qE,KAAA8qE,qBAAA,WACA,OAAA9qE,KAAA05B,UAAA,sBAEA15B,KAAA6gF,cAAA,WACA,OAAA7gF,KAAA05B,UAAA,eAEA15B,KAAA8gF,cAAA,SAAAnxD,GACA,OAAA3vB,KAAAs5B,UAAA,aAAA3J,IAGA3vB,KAAAsrE,mBAAA,WACA,OAAAtrE,KAAA05B,UAAA,oBAGA15B,KAAAorE,mBAAA,SAAAz7C,GACA3vB,KAAAs5B,UAAA,kBAAA3J,IAGA3vB,KAAAiqE,uBAAA,SAAAF,GACA/pE,KAAAs5B,UAAA,sBAAAywC,IAGA/pE,KAAAkqE,uBAAA,WACA,OAAAlqE,KAAA05B,UAAA,wBAGA15B,KAAA+gF,2BAAA,WACA,IAAA36E,EAAApG,KAAAs0B,aAAA+6C,UACA/gE,EAAAtO,KAAAwzB,YAAAD,WACA,GAAAvzB,KAAAqnB,QAAAkwC,iBAAA,CACA,IAAAxsC,EAAA/qB,KAAAqnB,QAAApC,UAAAinB,YACAnhB,EAAAG,OAAA,EACA9kB,EAAApG,KAAAs0B,aAAAkmD,iBAAAzvD,GAAA,GACAzc,GAAAtO,KAAAqnB,QAAAuyC,aAAA7uC,EAAAC,KAEAhrB,KAAAghF,qBAAA5zE,MAAA2b,IAAA3iB,EAAA2iB,IAAA/oB,KAAAwzB,YAAAvR,OAAA,KACAjiB,KAAAghF,qBAAA5zE,MAAAkB,SAAA,MAGAtO,KAAA4/E,mBAAA,WACA,GAAA5/E,KAAA0gF,kBAAA1gF,KAAAihF,eAAA,CAGA,IAAAjhF,KAAAihF,eAAA,CACA,IAAAC,EAAAr+D,EAAA1Y,cAAA,OACA+2E,EAAA70E,UAAA,mCACArM,KAAAihF,eAAAp+D,EAAA1Y,cAAA,OACAnK,KAAAihF,eAAA50E,UAAA,mBACA60E,EAAA7zE,YAAArN,KAAAihF,gBACAjhF,KAAA29E,QAAAl6D,aAAAy9D,EAAAlhF,KAAA29E,QAAAj6D,YAGA,IAAAtW,EAAApN,KAAAihF,eAAA7zE,MACAA,EAAAsB,KAAA1O,KAAAyzB,eAAAzzB,KAAA2gF,mBAAA3gF,KAAAk0E,SAAA,KACA9mE,EAAA4sE,WAAAh6E,KAAA0gF,iBAAA,mBAEA1gF,KAAAqnB,UAAA,GAAArnB,KAAAqnB,QAAA+zC,OACAp7D,KAAAy3D,oBAEAz3D,KAAAuiE,oBAAA,WACA,OAAAviE,KAAA6oB,WAEA7oB,KAAAu9B,oBAAA,WACA,OAAAv9B,KAAAspB,UAEAtpB,KAAAwiE,qBAAA,WACA,OAAAxiE,KAAA6oB,WAEA7oB,KAAAgoB,sBAAA,WACA,GAAAhoB,KAAA+nB,sBAAA,CAEA,IAAAoV,EAAAn9B,KAAAwzB,YACA2tD,EAAAnhF,KAAAs0B,aAAA+6C,UAAAtmD,IACAq4D,EAAAphF,KAAAs0B,aAAA+6C,UAAA3gE,KACAyyE,GAAAhkD,EAAAlb,OAEA,IAAA7U,EAAApN,KAAAyiE,SAAAr1D,MACAizB,EAAArgC,KAAAuzB,WACA,GAAA4tD,EAAA,GAAAA,EAAAhkD,EAAA7uB,OAAA+xB,EACAjzB,EAAA2b,IAAA3b,EAAAsB,KAAA,QADA,CAKA,IAAAqmD,EAAA/0D,KAAAyzB,eACA,GAAAzzB,KAAAqhF,aAAA,CACA,IAAAt6D,EAAA/mB,KAAAyiE,SAAA36D,MAAA3F,QAAA,aACA4yD,GAAA/0D,KAAAqnB,QAAAiuC,sBAAAvuC,GAAA,KACAsZ,GAAA,GAEA+gD,GAAAphF,KAAAsP,YACAtP,KAAAw+E,MAAAE,cAAA3pB,IACAqsB,EAAAphF,KAAAw+E,MAAAE,cAAA3pB,GAEAqsB,GAAAphF,KAAA+yE,YACA3lE,EAAAkB,OAAA+xB,EAAA,KACAjzB,EAAAgB,MAAA2mD,EAAA,KACA3nD,EAAAsB,KAAApI,KAAAM,IAAAw6E,EAAAphF,KAAAw+E,MAAAE,cAAA3pB,GAAA,KACA3nD,EAAA2b,IAAAziB,KAAAM,IAAAu6E,EAAAnhF,KAAAw+E,MAAAlwE,OAAA+xB,GAAA,QAEArgC,KAAA+sE,mBAAA,WACA,OAAA/sE,KAAAwzB,YAAAmX,UAEA3qC,KAAAmtE,wBAAA,WACA,OAAAntE,KAAAwzB,YAAAmX,UAAA,IAAA3qC,KAAAwzB,YAAAvR,OAAA,MAEAjiB,KAAAotE,uBAAA,WACA,IAAAjwC,EAAAn9B,KAAAwzB,YACAoX,EAAAzN,EAAAyN,QAEA,OADA5qC,KAAAqnB,QAAAsK,oBAAAiZ,EAAA,GAAAzN,EAAA5J,WACAvzB,KAAAqnB,QAAAitC,eAAAn3B,EAAA7uB,OAAA6uB,EAAA5J,WACAqX,EAAA,EACAA,GAEA5qC,KAAAgtE,kBAAA,WACA,OAAAhtE,KAAAwzB,YAAAoX,SAGA5qC,KAAAk0E,SAAA,KACAl0E,KAAAg1E,WAAA,SAAAf,GACAj0E,KAAAk0E,SAAAD,EACAj0E,KAAA+9E,WAAA/I,WAAAf,GACAj0E,KAAAs0B,aAAA0gD,WAAAf,GACAj0E,KAAAi+E,aAAAjJ,WAAAf,GACAj0E,KAAA69E,YAAA7I,WAAAf,GACAj0E,KAAA8+E,MAAAv8D,SAAAviB,KAAAg/E,aACAh/E,KAAA4/E,sBAGA5/E,KAAAshF,gBAAA,SAAAv4D,EAAAI,EAAAza,EAAAkb,GACA,IAAA23D,EAAAvhF,KAAAs+E,aACAiD,EAAAx4D,IAAA,EAAAA,EACAw4D,EAAAp4D,OAAA,EAAAA,EACAo4D,EAAA33D,MAAA,EAAAA,EACA23D,EAAA7yE,KAAA,EAAAA,EACA6yE,EAAA1C,EAAA0C,EAAAx4D,IAAAw4D,EAAAp4D,OACAo4D,EAAAlhD,EAAAkhD,EAAA7yE,KAAA6yE,EAAA33D,MACA23D,EAAAx4D,KAAA/oB,KAAAqP,WAAA,GAAArP,KAAAqnB,SACArnB,KAAAqnB,QAAA+sC,cAAAmtB,EAAAx4D,KACA/oB,KAAAmmE,cAEAnmE,KAAAwhF,2BAAA,WACA,OAAAxhF,KAAAyhF,0BAEAzhF,KAAA0hF,2BAAA,SAAAC,GACA3hF,KAAAs5B,UAAA,0BAAAqoD,IAEA3hF,KAAA4hF,2BAAA,WACA,OAAA5hF,KAAA6hF,0BAEA7hF,KAAA8hF,2BAAA,SAAAH,GACA3hF,KAAAs5B,UAAA,0BAAAqoD,IAGA3hF,KAAA+hF,kBAAA,WACA,IAAAxG,EAAAv7E,KAAAwzB,YAAAorD,UACAH,EAAAz+E,KAAAw+E,MAAAC,gBACAz+E,KAAAooE,WAAApoE,KAAAgiF,iBACAzG,IAAAkD,EAAAz+E,KAAAuzB,YAAAvzB,KAAAgiF,eACAhiF,KAAAqP,UAAAksE,EAAAkD,IACAlD,EAAAv7E,KAAAqP,UAAAovE,EACAz+E,KAAAy9B,WAAApuB,UAAA,OAGArP,KAAAy9B,WAAAm+C,gBAAAL,EAAAv7E,KAAAs+E,aAAAO,GACA7+E,KAAAy9B,WAAA22B,aAAAp0D,KAAAqP,UAAArP,KAAAs+E,aAAAv1D,MAEA/oB,KAAAiiF,kBAAA,WACAjiF,KAAA09B,WAAAs+C,eAAAh8E,KAAAwzB,YAAAplB,MAAA,EAAApO,KAAAk0E,SAAAl0E,KAAAs+E,aAAAj+C,GACArgC,KAAA09B,WAAA82B,cAAAx0D,KAAAsP,WAAAtP,KAAAs+E,aAAA5vE,OAGA1O,KAAAkiF,SAAA,EACAliF,KAAAsK,OAAA,WACAtK,KAAAkiF,SAAA,GAGAliF,KAAAmiF,SAAA,WACAniF,KAAAkiF,SAAA,GAGAliF,KAAA++E,eAAA,SAAAzC,EAAArnB,GAKA,GAJAj1D,KAAAggF,WACA1D,GAAAt8E,KAAAggF,SACAhgF,KAAAggF,SAAA,GAEAhgF,KAAAqnB,SAAArnB,KAAA6oB,UAAA/Z,cAAA9O,KAAAkiF,UAAA5F,GAAArnB,GAAA,CAIA,GAAAj1D,KAAAw+E,MAAAG,OAEA,OADA3+E,KAAAggF,UAAA1D,EACAt8E,KAAAwmE,UAAA,GAEAxmE,KAAAuzB,YACAvzB,KAAA+9E,WAAAlH,sBAGA72E,KAAA8wB,QAAA,gBAEA9wB,KAAAqnB,SAAArnB,KAAAqnB,QAAAmpB,cACAxwC,KAAAqnB,QAAAmpB,aAAA7I,sBAAA3nC,KAAA02E,cAEA,IAAAv5C,EAAAn9B,KAAAwzB,YACA,GAAA8oD,EAAAt8E,KAAAg/E,aACA1C,EAAAt8E,KAAAu/E,aACAjD,EAAAt8E,KAAAs/E,aACAhD,EAAAt8E,KAAAq/E,cACA/C,EAAAt8E,KAAAo/E,eACA9C,EAAAt8E,KAAA0/E,gBACA,CAEA,GADApD,GAAAt8E,KAAAwgF,sBACArjD,EAAAwN,UAAA3qC,KAAAwzB,YAAAmX,UAAAxN,EAAAq4C,gBAAAx1E,KAAAwzB,YAAAgiD,eAAA,CACA,IAAA4M,EAAApiF,KAAAqP,WAAA8tB,EAAAwN,SAAA3qC,KAAAwzB,YAAAmX,UAAA3qC,KAAAuzB,WACA6uD,EAAA,IACApiF,KAAAqP,UAAA+yE,EACA9F,GAAAt8E,KAAAo/E,cACA9C,GAAAt8E,KAAAwgF,uBAGArjD,EAAAn9B,KAAAwzB,YACAxzB,KAAA+hF,oBACAzF,EAAAt8E,KAAA0/E,iBACA1/E,KAAAiiF,oBACAjiF,KAAA2wB,aAAA/iB,QAAAR,MAAAi1E,WAAAllD,EAAAlb,OAAA,KACAjiB,KAAA29E,QAAAvwE,MAAAi1E,WAAAllD,EAAAlb,OAAA,KACAjiB,KAAA29E,QAAAvwE,MAAAgB,MAAA+uB,EAAA/uB,MAAA,EAAApO,KAAAk0E,SAAA,KACAl0E,KAAA29E,QAAAvwE,MAAAkB,OAAA6uB,EAAA42C,UAAA,KAMA,GAJAuI,EAAAt8E,KAAA0/E,kBACA1/E,KAAA29E,QAAAvwE,MAAAk1E,YAAAtiF,KAAAsP,WAAA,KACAtP,KAAAspB,SAAAjd,UAAArM,KAAAsP,YAAA,iDAEAgtE,EAAAt8E,KAAAg/E,YAUA,OATAh/E,KAAA+9E,WAAAp3B,OAAAxpB,GACAn9B,KAAAugF,aACAvgF,KAAA2wB,aAAAg2B,OAAAxpB,GACAn9B,KAAA69E,YAAAl3B,OAAAxpB,GACAn9B,KAAAi+E,aAAAt3B,OAAAxpB,GACAn9B,KAAAs0B,aAAAqyB,OAAAxpB,GACAn9B,KAAAgoB,wBACAhoB,KAAAuiF,sBAAAviF,KAAA+gF,kCACA/gF,KAAA8wB,QAAA,eAGA,GAAAwrD,EAAAt8E,KAAAo/E,cAcA,OAbA9C,EAAAt8E,KAAAs/E,aAAAhD,EAAAt8E,KAAAq/E,aACAr/E,KAAA+9E,WAAAp3B,OAAAxpB,GAEAn9B,KAAA+9E,WAAAxG,YAAAp6C,GAEAn9B,KAAAugF,aACAvgF,KAAA2wB,aAAAg2B,OAAAxpB,GACAn9B,KAAA69E,YAAAl3B,OAAAxpB,GACAn9B,KAAAi+E,aAAAt3B,OAAAxpB,GACAn9B,KAAAs0B,aAAAqyB,OAAAxpB,GACAn9B,KAAAuiF,sBAAAviF,KAAA+gF,6BACA/gF,KAAAgoB,6BACAhoB,KAAA8wB,QAAA,eAIAwrD,EAAAt8E,KAAAs/E,aACAt/E,KAAA+9E,WAAAp3B,OAAAxpB,GACAn9B,KAAAugF,aACAvgF,KAAA2wB,aAAAg2B,OAAAxpB,IAEAm/C,EAAAt8E,KAAAq/E,cACAr/E,KAAAwiF,gBAAAlG,EAAAt8E,KAAAm/E,eAAAn/E,KAAAugF,cACAvgF,KAAA2wB,aAAAg2B,OAAAxpB,IAEAm/C,EAAAt8E,KAAAs/E,aAAAhD,EAAAt8E,KAAAm/E,gBACAn/E,KAAAugF,aACAvgF,KAAA2wB,aAAAg2B,OAAAxpB,GAGAm/C,EAAAt8E,KAAAi/E,gBACAj/E,KAAAs0B,aAAAqyB,OAAAxpB,GACAn9B,KAAAgoB,wBACAhoB,KAAAuiF,sBAAAviF,KAAA+gF,8BAGAzE,GAAAt8E,KAAAk/E,cAAAl/E,KAAAy/E,sBACAz/E,KAAAi+E,aAAAt3B,OAAAxpB,GAGAm/C,GAAAt8E,KAAAk/E,cAAAl/E,KAAAw/E,qBACAx/E,KAAA69E,YAAAl3B,OAAAxpB,GAGAn9B,KAAA8wB,QAAA,oBAvGA9wB,KAAAggF,UAAA1D,GA2GAt8E,KAAAyiF,UAAA,WACA,IAAAn0E,EAAAtO,KAAAqnB,QAAAuzC,kBAAA56D,KAAAuzB,WACAqrD,EAAA5+E,KAAAooE,UAAApoE,KAAAuzB,WACAmvD,EAAAp8E,KAAAM,IAAAg4E,EACAt4E,KAAAC,KAAAvG,KAAAqoE,WAAA,GAAAroE,KAAAuzB,WAAAjlB,IACAtO,KAAAs+E,aAAAO,GAAA7+E,KAAAqgF,cAAA,GACArgF,KAAAk+E,eACAwE,GAAA1iF,KAAA09B,WAAA7N,aACA7vB,KAAA2iF,iBAAAD,EAAA1iF,KAAA2iF,kBACAD,EAAA1iF,KAAA2iF,iBACA,IAAA5uD,EAAAzlB,EAAAswE,EAEA,GAAA8D,GAAA1iF,KAAA0iF,eACA1iF,KAAAw+E,MAAAlwE,QAAAtO,KAAA0iF,eAAA3uD,GAAA/zB,KAAAm+E,SAAA,CACApqD,GAAA/zB,KAAAm+E,WACAn+E,KAAAm+E,SAAApqD,EACA/zB,KAAAy9B,WAAAy9C,WAAAnnD,IAGA,IAAAghC,EAAA/0D,KAAA6oB,UAAA9a,YACA/N,KAAA6oB,UAAAzb,MAAAkB,OAAAo0E,EAAA,KACA1iF,KAAAogF,mBAAA,EAAApgF,KAAA4iF,aAAA7tB,EAAA2tB,GACA1iF,KAAA0iF,gBAEA1iF,KAAA8wB,QAAA,cAIA9wB,KAAAwgF,oBAAA,WACA,IAAAn5D,EAAArnB,KAAAqnB,QACAigB,EAAAtnC,KAAAw+E,MAEAqE,EAAAv7C,EAAAh5B,QAAA,EAAAtO,KAAAuzB,WAEAqrD,EADA5+E,KAAAqnB,QAAAuzC,kBACA56D,KAAAuzB,WAEAuvD,EAAA9iF,KAAA+iF,kBAEAC,GAAAH,IAAA7iF,KAAAyhF,0BACAn6C,EAAAo3C,cAAAoE,EAAA,EAAA9iF,KAAAk0E,SAAA,GAEA+O,EAAAjjF,KAAAk+E,eAAA8E,EACAC,IACAjjF,KAAAk+E,aAAA8E,EACAhjF,KAAA09B,WAAAw9C,WAAA8H,IAEA,IAAAE,EAAAljF,KAAAm+E,SACAn+E,KAAAooE,WAAApoE,KAAAuzB,WAAA,GACAvzB,KAAAyiF,YAEA,IAAAxgE,EAAAjiB,KAAAqP,UAAArP,KAAAuzB,WACAwgD,EAAAzsC,EAAAm3C,eAAAz+E,KAAAuzB,WAEA09C,GAAAjxE,KAAAooE,WAAApoE,KAAAgiF,gBACA16C,EAAAm3C,eAAAz+E,KAAAuzB,YAAAvzB,KAAAgiF,eACA,EACApD,GAAA3N,EAEA,IAAAsQ,EAAAvhF,KAAAs+E,aACAt+E,KAAAqnB,QAAA+sC,aAAA9tD,KAAAC,KAAAg7E,EAAAx4D,IACAziB,KAAAM,IAAA5G,KAAAqP,UAAAuvE,EAAAt3C,EAAAm3C,eAAA8C,EAAAp4D,UAEAnpB,KAAAqnB,QAAAmtC,cAAAluD,KAAAC,KAAAg7E,EAAA7yE,KAAApI,KAAAM,IAAA5G,KAAAsP,WACAwzE,EAAA,EAAA9iF,KAAAk0E,SAAA5sC,EAAAo3C,cAAA6C,EAAA33D,SAEA,IAAAmK,GAAA8uD,IAAA7iF,KAAA6hF,0BACAv6C,EAAAm3C,eAAAG,EAAA3N,EAAA,GAAAjxE,KAAAqP,UAAAkyE,EAAAx4D,KACAo6D,EAAAD,IAAAnvD,EACAovD,IACAnjF,KAAAm+E,SAAApqD,EACA/zB,KAAAy9B,WAAAy9C,WAAAnnD,IAGA,IAGAyhD,EAAA4N,EAHAC,EAAA/8E,KAAA8tE,KAAAL,EAAA/zE,KAAAuzB,YAAA,EACAoX,EAAArkC,KAAAC,IAAA,EAAAD,KAAAmqC,OAAAzwC,KAAAqP,UAAA4S,GAAAjiB,KAAAuzB,aACAqX,EAAAD,EAAA04C,EAEA9vD,EAAAvzB,KAAAuzB,WACAoX,EAAAtjB,EAAA+yC,oBAAAzvB,EAAA,GACA,IAAA4D,EAAAlnB,EAAAmnB,YAAA7D,GACA4D,IACA5D,EAAA4D,EAAAroC,MAAA8kB,KAGAwqD,EAAAnuD,EAAAsK,oBAAAgZ,EAAA,GACAy4C,EAAA/7D,EAAAuyC,aAAAjvB,GAAApX,EAEAqX,EAAAtkC,KAAAM,IAAAygB,EAAA+yC,oBAAAxvB,EAAA,GAAAvjB,EAAAkK,YAAA,GACAwiD,EAAAzsC,EAAAm3C,eAAAp3D,EAAAuyC,aAAAhvB,GAAArX,EACA6vD,EAEAnhE,EAAAjiB,KAAAqP,UAAAmmE,EAAAjiD,EAEA,IAAA+oD,EAAA,EAyBA,OAxBAt8E,KAAAwzB,YAAAplB,OAAA00E,IACAxG,EAAAt8E,KAAA0/E,kBACAuD,GAAAE,KACA7G,EAAAt8E,KAAAogF,mBAAA,EAAApgF,KAAA+yE,YAAAzrC,EAAAl5B,MAAAk5B,EAAAh5B,QACAtO,KAAA8wB,QAAA,8BACAqyD,IACAL,EAAA9iF,KAAA+iF,oBAGA/iF,KAAAwzB,aACAplB,MAAA00E,EACA7O,QAAAj0E,KAAAk0E,SACAvpC,WACA6qC,iBACA5qC,UACArX,aACAE,eAAAzzB,KAAAyzB,eACAsgD,YACA6K,YACA38D,SACAmxD,aAAA7/C,EAAAjtB,KAAAC,IAAA,EAAAD,KAAA8tE,MAAAnyD,EAAAqlB,EAAAh5B,OAAAg5B,EAAAm3C,gBAAAlrD,IAAA,EACAjlB,OAAAtO,KAAAw+E,MAAAC,gBAGAnC,GAGAt8E,KAAAwiF,aAAA,WACA,GAAAxiF,KAAA8/E,cAAA,CACA,IAAAn1C,EAAA3qC,KAAA8/E,cAAAn1C,SACAC,EAAA5qC,KAAA8/E,cAAAl1C,QACA5qC,KAAA8/E,cAAA,KAEA,IAAAtsD,EAAAxzB,KAAAwzB,YAEA,KAAAmX,EAAAnX,EAAAoX,QAAA,GACAA,EAAApX,EAAAmX,UACA,OAAAC,IAAA2T,KACAv+C,KAAAugF,aACAvgF,KAAA2wB,aAAAg2B,OAAAnzB,QACAxzB,KAAA+9E,WAAAp3B,OAAAnzB,KAGAxzB,KAAA+9E,WAAAjW,YAAAt0C,EAAAmX,EAAAC,IACA,KAGA5qC,KAAA+iF,gBAAA,WACA,IAAAO,EAAAtjF,KAAAqnB,QAAAqtC,iBAIA,OAHA10D,KAAA2lC,iBAAA3lC,KAAAqnB,QAAA6f,eACAo8C,GAAA,GAEAh9E,KAAAC,IAAAvG,KAAAw+E,MAAAE,cAAA,EAAA1+E,KAAAk0E,SAAA5tE,KAAAmqC,MAAA6yC,EAAAtjF,KAAAyzB,kBAEAzzB,KAAA6oE,mBAAA,WACA7oE,KAAAi+E,aAAAhJ,WAAAj1E,KAAAqnB,QAAAorC,YAAA,IACAzyD,KAAA8+E,MAAAv8D,SAAAviB,KAAAy/E,sBAEAz/E,KAAA8oE,kBAAA,WACA9oE,KAAA69E,YAAA5I,WAAAj1E,KAAAqnB,QAAAorC,cACAzyD,KAAA8+E,MAAAv8D,SAAAviB,KAAAw/E,qBAEAx/E,KAAA6xD,oBAAA,SAAA7mC,EAAA3e,GACArM,KAAA2wB,aAAAkhC,oBAAA7mC,EAAA3e,IAEArM,KAAA8xD,uBAAA,SAAA9mC,EAAA3e,GACArM,KAAA2wB,aAAAmhC,uBAAA9mC,EAAA3e,IAEArM,KAAA+oE,kBAAA,SAAA14B,GACArwC,KAAA8+E,MAAAv8D,SAAAviB,KAAAm/E,gBAEAn/E,KAAA6yD,eAAA,SAAAC,GACA9yD,KAAA2wB,aAAAkiC,eAAAC,GACA9yD,KAAA8+E,MAAAv8D,SAAAviB,KAAAm/E,gBAEAn/E,KAAA6nE,aAAA,WACA7nE,KAAA8+E,MAAAv8D,SAAAviB,KAAAi/E,gBAEAj/E,KAAA0nE,WAAA,WACA1nE,KAAAs0B,aAAAozC,cAEA1nE,KAAAwnE,WAAA,WACAxnE,KAAAs0B,aAAAkzC,cAGAxnE,KAAA0jE,wBAAA,SAAAv4C,EAAAwgB,EAAA1pB,GACAjiB,KAAA4sB,qBAAAzB,EAAAlJ,GACAjiB,KAAA4sB,qBAAA+e,EAAA1pB,IAEAjiB,KAAA4sB,qBAAA,SAAA7B,EAAA9I,EAAAshE,GACA,OAAAvjF,KAAAw+E,MAAAC,eAAA,CAGA,IAAAr4E,EAAApG,KAAAs0B,aAAAkmD,iBAAAzvD,GAEArc,EAAAtI,EAAAsI,KACAqa,EAAA3iB,EAAA2iB,IAEAy6D,EAAAD,KAAAx6D,KAAA,EACA06D,EAAAF,KAAAp6D,QAAA,EAEA9Z,EAAArP,KAAAq+E,iBAAAr+E,KAAAqnB,QAAAitC,eAAAt0D,KAAAqP,UAEAA,EAAAm0E,EAAAz6D,GACA9G,GAAA5S,EAAAm0E,EAAAz6D,EAAA/oB,KAAAuzB,aACAxK,GAAA9G,EAAAjiB,KAAAw+E,MAAAC,gBACA,IAAA11D,IACAA,GAAA/oB,KAAAs+E,aAAAv1D,KACA/oB,KAAAqnB,QAAA+sC,aAAArrC,IACS1Z,EAAArP,KAAAw+E,MAAAC,eAAAgF,EAAA16D,EAAA/oB,KAAAuzB,aACTtR,GAAA5S,EAAArP,KAAAw+E,MAAAC,eAAAgF,EAAA16D,EAAA/oB,KAAAuzB,aACAxK,GAAA9G,EAAAjiB,KAAAw+E,MAAAC,gBACAz+E,KAAAqnB,QAAA+sC,aAAArrC,EAAA/oB,KAAAuzB,WAAAvzB,KAAAw+E,MAAAC,iBAGA,IAAAnvE,EAAAtP,KAAAsP,WAEAA,EAAAZ,GACAA,EAAA1O,KAAAk0E,SAAA,EAAAl0E,KAAAwzB,YAAAC,iBACA/kB,GAAA1O,KAAAs+E,aAAA5vE,MACA1O,KAAAqnB,QAAAmtC,cAAA9lD,IACSY,EAAAtP,KAAAw+E,MAAAE,cAAAhwE,EAAA1O,KAAAyzB,eACTzzB,KAAAqnB,QAAAmtC,cAAAluD,KAAAmqC,MAAA/hC,EAAA1O,KAAAyzB,eAAAzzB,KAAAw+E,MAAAE,gBACSpvE,GAAAtP,KAAAk0E,UAAAxlE,EAAAY,EAAAtP,KAAAyzB,gBACTzzB,KAAAqnB,QAAAmtC,cAAA,KAGAx0D,KAAAs0D,aAAA,WACA,OAAAt0D,KAAAqnB,QAAAitC,gBAEAt0D,KAAAy0D,cAAA,WACA,OAAAz0D,KAAAqnB,QAAAotC,iBAEAz0D,KAAAutE,gBAAA,WACA,OAAAvtE,KAAAqP,UAAArP,KAAAuzB,YAEAvzB,KAAAstE,mBAAA,WACA,OAAAhnE,KAAAC,IAAA,EAAAD,KAAAoF,OAAA1L,KAAAqP,UAAArP,KAAAw+E,MAAAC,gBAAAz+E,KAAAuzB,YAAA,IAEAvzB,KAAAytE,YAAA,SAAAziD,GACAhrB,KAAAqnB,QAAA+sC,aAAAppC,EAAAhrB,KAAAuzB,aAGAvzB,KAAA6tE,YAAA,SAAA9iD,EAAA24D,GACA,iBAAA34D,IACAA,GAAsBC,IAAAD,EAAAG,OAAA,IAEtB,IAAA9kB,EAAApG,KAAAs0B,aAAAkmD,iBAAAzvD,GACAsV,EAAArgC,KAAAw+E,MAAAC,eAAAz+E,KAAAuzB,WACAtR,EAAA7b,EAAA2iB,IAAAsX,GAAAqjD,GAAA,GAGA,OADA1jF,KAAAqnB,QAAA+sC,aAAAnyC,GACAA,GAGAjiB,KAAA2jF,MAAA,EACA3jF,KAAA4jF,WAAA,SAAAC,EAAAC,GACA,IAAAvkF,EAAA,EACA+B,EAAAtB,KAAA2jF,MACAI,KAEA/yC,EAAA,SAAA3iB,EAAA21D,EAAAC,GACA,OAAAA,GAAA39E,KAAAiS,IAAA8V,EAAA,QAAA21D,GAGA,IAAAzkF,EAAA,EAAmBA,EAAA+B,IAAO/B,EAC1BwkF,EAAAtiF,KAAAuvC,EAAAzxC,EAAAS,KAAA2jF,MAAAE,EAAAC,EAAAD,IAEA,OAAAE,GAEA/jF,KAAA0tE,aAAA,SAAA7nC,EAAA8nC,EAAAC,EAAA7sE,GACA,IACAkhB,EADAjiB,KAAAs0B,aAAAkmD,kBAAsDxvD,IAAA6a,EAAA3a,OAAA,IACtDnC,IACA4kD,IACA1rD,GAAAjiB,KAAAw+E,MAAAC,eAAA,GAEA,IAAAyF,EAAAlkF,KAAAqP,UACArP,KAAAqnB,QAAA+sC,aAAAnyC,IACA,IAAA2rD,GACA5tE,KAAA2jE,iBAAAugB,EAAAnjF,IAGAf,KAAA2jE,iBAAA,SAAAkgB,EAAA9iF,GACA,IAAA+iF,EAAA9jF,KAAAqP,UACA,GAAArP,KAAA4gF,gBAAA,CAEA,IAAAj+D,EAAA3iB,KAEA,GAAA6jF,GAAAC,EAAA,CAGA,GAAA9jF,KAAAq+E,iBAAA,CACA,IAAA8F,EAAAnkF,KAAAq+E,iBAAA0F,MACA,GAAAI,EAAAvkF,SACAikF,EAAAM,EAAA,KACAL,EACA,OAIA,IAAAC,EAAAphE,EAAAihE,WAAAC,EAAAC,GACA9jF,KAAAq+E,kBAAiC16E,KAAAkgF,EAAA7+B,GAAA8+B,EAAAC,SAEjCvvD,cAAAx0B,KAAAokF,QAEAzhE,EAAA0E,QAAA+sC,aAAA2vB,EAAAryE,SACAiR,EAAA0E,QAAA8sC,WAAA2vB,EACA9jF,KAAAokF,OAAA3vD,YAAA,WACAsvD,EAAAnkF,QACA+iB,EAAA0E,QAAA+sC,aAAA2vB,EAAAryE,SACAiR,EAAA0E,QAAA8sC,WAAA2vB,GACa,MAAAA,GACbnhE,EAAA0E,QAAA8sC,YAAA,EACAxxC,EAAA0E,QAAA+sC,aAAA0vB,GACAA,EAAA,OAEAnhE,EAAAyhE,OAAA5vD,cAAA7R,EAAAyhE,QACAzhE,EAAA07D,iBAAA,KACAt9E,SAES,OAETf,KAAAgoE,UAAA,SAAA34D,GACArP,KAAAqP,gBACArP,KAAA8+E,MAAAv8D,SAAAviB,KAAAo/E,eACAp/E,KAAAqP,cAGArP,KAAAioE,UAAA,SAAA34D,GACAtP,KAAAsP,iBACAtP,KAAAsP,cACAtP,KAAA8+E,MAAAv8D,SAAAviB,KAAA0/E,kBAEA1/E,KAAAqkF,SAAA,SAAAjhF,EAAAgpB,GACApsB,KAAAqnB,QAAA+sC,aAAAhoC,GACApsB,KAAAqnB,QAAAmtC,cAAApoC,IAEApsB,KAAA+uB,SAAA,SAAArR,EAAAC,GACAA,GAAA3d,KAAAqnB,QAAA+sC,aAAAp0D,KAAAqnB,QAAAitC,eAAA32C,GACAD,GAAA1d,KAAAqnB,QAAAmtC,cAAAx0D,KAAAqnB,QAAAotC,gBAAA/2C,IAEA1d,KAAA6uB,eAAA,SAAAnR,EAAAC,GACA,OAAAA,EAAA,GAAA3d,KAAAqnB,QAAAitC,gBAAA,EAAAt0D,KAAAs+E,aAAAv1D,MAEApL,EAAA,GAAA3d,KAAAqnB,QAAAitC,eAAAt0D,KAAAw+E,MAAAC,eACAz+E,KAAAwzB,YAAAorD,WAAA,EAAA5+E,KAAAs+E,aAAAn1D,SAEAzL,EAAA,GAAA1d,KAAAqnB,QAAAotC,iBAAA,EAAAz0D,KAAAs+E,aAAA5vE,OAEAgP,EAAA,GAAA1d,KAAAqnB,QAAAotC,gBAAAz0D,KAAAw+E,MAAAE,cACA1+E,KAAAwzB,YAAAplB,OAAA,EAAApO,KAAAs+E,aAAA10D,YADA,MAKA5pB,KAAAyxB,yBAAA,SAAAruB,EAAAgpB,GACA,IAAAk4D,EAAAtkF,KAAAspB,SAAAR,wBAEAwnB,EAAAltC,EAAApD,KAAAsP,WAAAg1E,EAAA51E,KAAA1O,KAAAk0E,SACAjyD,EAAAquB,EAAAtwC,KAAAyzB,eACAzI,EAAA1kB,KAAAoF,OAAA0gB,EAAApsB,KAAAqP,UAAAi1E,EAAAv7D,KAAA/oB,KAAAuzB,YACA+U,EAAAhiC,KAAAmqC,MAAAxuB,GAEA,OAAgB+I,MAAAE,OAAAod,EAAAshB,KAAA3nC,EAAAqmB,EAAA,OAAAgI,YAGhBtwC,KAAAmsB,wBAAA,SAAA/oB,EAAAgpB,GACA,IAAAk4D,EAAAtkF,KAAAspB,SAAAR,wBACAwnB,EAAAltC,EAAApD,KAAAsP,WAAAg1E,EAAA51E,KAAA1O,KAAAk0E,SAEA5rC,EAAAhiC,KAAAmqC,MAAAH,EAAAtwC,KAAAyzB,gBAEAzI,GAAAoB,EAAApsB,KAAAqP,UAAAi1E,EAAAv7D,KAAA/oB,KAAAuzB,WAEA,OAAAvzB,KAAAqnB,QAAA4nB,yBAAAjkB,EAAA1kB,KAAAC,IAAA+hC,EAAA,GAAAgI,IAEAtwC,KAAAukF,wBAAA,SAAAv5D,EAAAE,GACA,IAAAo5D,EAAAtkF,KAAAspB,SAAAR,wBACA1iB,EAAApG,KAAAqnB,QAAA8jB,yBAAAngB,EAAAE,GAEA9nB,EAAApD,KAAAk0E,UAAAl0E,KAAAqnB,QAAAmpB,aAAAtK,UAAA9/B,EAAA4kB,OACAhrB,KAAAqnB,QAAAmpB,aAAAnI,WAAAjiC,EAAA8kB,QACA5kB,KAAAmqC,MAAArqC,EAAA8kB,OAAAlrB,KAAAyzB,iBAEArH,EAAAhmB,EAAA4kB,IAAAhrB,KAAAuzB,WAEA,OACAixD,MAAAF,EAAA51E,KAAAtL,EAAApD,KAAAsP,WACAm1E,MAAAH,EAAAv7D,IAAAqD,EAAApsB,KAAAqP,YAGArP,KAAAynE,eAAA,WACA5kD,EAAAvW,YAAAtM,KAAA6oB,UAAA,cAEA7oB,KAAA2nE,cAAA,WACA9kD,EAAAtW,eAAAvM,KAAA6oB,UAAA,cAEA7oB,KAAA4sE,gBAAA,SAAAn+D,GACAzO,KAAAqhF,eACArhF,KAAAqhF,cACAqD,qBAAA1kF,KAAA+nB,sBACA5a,QAAAnN,KAAAyiE,SAAAr1D,MAAAD,UAGAnN,KAAA+nB,uBAAA,EACAlF,EAAAvW,YAAAtM,KAAAyiE,SAAA,mBACAziE,KAAAyiE,SAAAr1D,MAAAD,QAAA,GACAnN,KAAAgoB,yBAEAhoB,KAAA6sE,mBAAA,SAAAxpD,GACArjB,KAAAgoB,yBAEAhoB,KAAA8sE,gBAAA,WACA9sE,KAAAqhF,eAGAx+D,EAAAtW,eAAAvM,KAAAyiE,SAAA,mBACAziE,KAAA+nB,sBAAA/nB,KAAAqhF,aAAAqD,qBACA1kF,KAAAyiE,SAAAr1D,MAAAD,QAAAnN,KAAAqhF,aAAAl0E,QACAnN,KAAAqhF,aAAA,OAEArhF,KAAAymE,SAAA,SAAAC,EAAAvhD,GACA,IAAAxC,EAAA3iB,KAIA,GAHAA,KAAA2kF,SAAAje,EACA/jD,EAAAuV,eAAA,eAA4CwuC,UAE5CA,GAAA,iBAAAA,EAIAzpC,EAAAypC,OAJA,CACA,IAAA9kE,EAAA8kE,GAAA1mE,KAAAy5B,SAAAitC,MAAApsC,aACA6C,EAAAL,YAAA,QAAAl7B,GAAAq7B,GAKA,SAAAA,EAAA/9B,GACA,GAAAyjB,EAAAgiE,UAAAje,EACA,OAAAvhD,OACA,IAAAjmB,MAAA0lF,SACA,UAAA9kF,MAAA,wBAAA4mE,EAAA,6BACA7jD,EAAA3V,gBACAhO,EAAAiO,QACAjO,EAAA0lF,SACAjiE,EAAAkG,UAAA6S,eAGA/Y,EAAA+jD,OACA7jD,EAAAtW,eAAAoW,EAAAkG,UAAAlG,EAAA+jD,MAAAke,UAEA,IAAA3Q,EAAA,YAAA/0E,IAAA+0E,QACA,YAAAtxD,EAAA+jD,WAAiD,EAAA/jD,EAAAuxD,SACjDvxD,EAAAuxD,UAAAD,GAAAtxD,EAAAuxD,UACAvxD,EAAAqyD,WAAAf,GACAtxD,EAAAkiE,OAAA3lF,EAAA0lF,SAEAjiE,EAAA+jD,MAAAxnE,EACA2jB,EAAAvW,YAAAqW,EAAAkG,UAAA3pB,EAAA0lF,UACA/hE,EAAAnW,YAAAiW,EAAAkG,UAAA,WAAA3pB,EAAA4lF,QACAniE,EAAA67D,QACA77D,EAAA67D,MAAApwE,MAAA,EACAuU,EAAAs9D,oBAGAt9D,EAAAuV,eAAA,eAAiDwuC,MAAAxnE,IACjDimB,SAGAnlB,KAAA2mE,SAAA,WACA,OAAA3mE,KAAA2kF,UAEA3kF,KAAAwsB,SAAA,SAAApf,EAAAR,GACAiW,EAAAnW,YAAA1M,KAAA6oB,UAAAzb,GAAA,IAAAR,IAEA5M,KAAAotB,WAAA,SAAAhgB,GACAyV,EAAAtW,eAAAvM,KAAA6oB,UAAAzb,IAGApN,KAAAy1B,eAAA,SAAAroB,GACApN,KAAAspB,SAAAlc,MAAA2d,QAAA3d,IACApN,KAAAspB,SAAAlc,MAAA2d,OAAA3d,IAEApN,KAAA+kF,eAAA,SAAApuD,GACA32B,KAAAspB,SAAAlc,MAAA2d,OAAA4L,GAEA32B,KAAAgwB,QAAA,WACAhwB,KAAA+9E,WAAA/tD,UACAhwB,KAAAs0B,aAAAtE,aAGC5uB,KAAAs8E,EAAAx8E,WAGDi8B,EAAA/C,cAAAsjD,EAAAx8E,UAAA,YACAmvE,gBAAqB/1C,cAAA,GACrBqL,gBACAz8B,IAAA,SAAApB,GACA9H,KAAA+9E,WAAA91C,kBAAAngC,IACA9H,KAAA8+E,MAAAv8D,SAAAviB,KAAAs/E,cAEAhlD,cAAA,GAEAqwC,iBACAzhE,IAAA,WAAyBlJ,KAAA4/E,sBACzBtlD,cAAA,GAEAg2C,mBACApnE,IAAA,WAAyBlJ,KAAA4/E,sBACzBtlD,aAAA,IAEAi2C,aACArnE,IAAA,SAAA6d,GACA,iBAAAA,IACA/mB,KAAA2gF,mBAAA55D,GACA/mB,KAAA0gF,mBAAA35D,EACA/mB,KAAA4/E,sBAEA32E,IAAA,WACA,OAAAjJ,KAAA0gF,kBAAA1gF,KAAA2gF,qBAGAhQ,YACAznE,IAAA,SAAAymB,GACA3vB,KAAA6xB,QAAAzkB,MAAAmB,QAAAohB,EAAA,eACA3vB,KAAA8+E,MAAAv8D,SAAAviB,KAAAg/E,aACAh/E,KAAA49E,kBAEAtjD,cAAA,GAEAk2C,iBACAtnE,IAAA,SAAAymB,GACA9M,EAAAnW,YAAA1M,KAAA6xB,QAAA,wBAAAlC,IAEA2K,cAAA,GAEAm2C,iBACAvnE,IAAA,SAAAymB,GAA6B3vB,KAAA2wB,aAAAu6C,mBAAAv7C,IAC7B2K,cAAA,GAEAo2C,iBACAxnE,IAAA,SAAAymB,GACA3vB,KAAA2wB,aAAA2jD,mBAAA3kD,GACA3vB,KAAA8+E,MAAAv8D,SAAAviB,KAAAm/E,gBAEA7kD,cAAA,GAEAs2C,qBACA1nE,IAAA,SAAAymB,GACA3vB,KAAA+9E,WAAAvT,uBAAA76C,IACA3vB,KAAA8+E,MAAAv8D,SAAAviB,KAAAs/E,cAEAhlD,cAAA,GAEA81C,qBACAlnE,IAAA,SAAA6gE,GACA,IAAA/pE,KAAAghF,qBAIA,OAHAhhF,KAAAghF,qBAAAn+D,EAAA1Y,cAAA,OACAnK,KAAAghF,qBAAA30E,UAAA,8BACArM,KAAA6xB,QAAAxkB,YAAArN,KAAAghF,sBAIAhhF,KAAAghF,qBAAA5zE,MAAAmB,QAAAw7D,EAAA,UACA/pE,KAAAs0B,aAAA+6C,WACArvE,KAAA+gF,8BAEAzmD,cAAA,EACAxyB,OAAA,GAEAooE,yBACAhnE,IAAA,SAAA6d,GACA/mB,KAAAyhF,0BAAAzhF,KAAAk+E,cACAl+E,KAAA8+E,MAAAv8D,SAAAviB,KAAAo/E,gBAEA9kD,cAAA,GAEA61C,yBACAjnE,IAAA,SAAA6d,GACA/mB,KAAA6hF,0BAAA7hF,KAAAm+E,UACAn+E,KAAA8+E,MAAAv8D,SAAAviB,KAAAo/E,gBAEA9kD,cAAA,GAEAu2C,UACA3nE,IAAA,SAAAo+B,GACA,iBAAAA,IACAA,GAAA,MACAtnC,KAAA6oB,UAAAzb,MAAAyjE,SAAAvpC,EACAtnC,KAAA+/E,kBAEAzlD,aAAA,IAEAw2C,YACA5nE,IAAA,SAAA3F,GACAvD,KAAA6oB,UAAAzb,MAAA0jE,WAAAvtE,EACAvD,KAAA+/E,mBAGAhP,UACA7nE,IAAA,SAAA6d,GACA/mB,KAAAmmE,eAGA6K,UACA9nE,IAAA,SAAA6d,GACA/mB,KAAAmmE,eAGA6e,gBACA97E,IAAA,SAAA6d,GACA/mB,KAAAmmE,cAEA7rC,aAAA,GAEA22C,eACA/nE,IAAA,SAAA6d,GACAA,MAAA,EACA/mB,KAAAgiF,gBAAAj7D,IAEA/mB,KAAAgiF,eAAAj7D,EACA/mB,KAAA8+E,MAAAv8D,SAAAviB,KAAAo/E,iBAEA9kD,aAAA,EACAR,YAAA,GAEAo3C,kBACAhoE,IAAA,SAAA6d,GACA/mB,KAAA2wB,aAAAqjD,cAAAjtD,EACA/mB,KAAA8+E,MAAAv8D,SAAAviB,KAAAm/E,iBAGAzY,OACAx9D,IAAA,SAAA6d,GAA4B/mB,KAAAymE,SAAA1/C,IAC5B9d,IAAA,WAAyB,OAAAjJ,KAAA2kF,UAAA3kF,KAAA0mE,OACzBpsC,aAAA,mBACAR,YAAA,KAIA36B,EAAAu+E,oBAGA/6E,IAAAzC,OAAA,oIAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,cACAo5B,EAAAp5B,EAAA,cACAy2B,EAAAz2B,EAAA,wBAAAy2B,aACAkF,EAAA37B,EAAA,aAcA,SAAA2+C,EAAA8kC,EAAA7iF,GACA,IAAA8iF,EAbA,SAAAD,EAAA7iF,GACA,IAAAu5B,EAAAv5B,EAAAmwB,IAAyBqI,EAAA5C,WAAAitD,GACzB,IACA,WAAAE,MAAAxpD,IAAmC1gB,KAAA,2BAC9B,MAAAU,GACL,IACAypE,EAAA,IADAnlF,OAAAolF,aAAAplF,OAAAqlF,mBAAArlF,OAAAslF,gBAGA,OADAH,EAAAtwC,OAAAnZ,GACAypD,EAAAI,QAAA,2BAKAC,CAAAR,EAAA7iF,GAEAsjF,GADAzlF,OAAA0lF,KAAA1lF,OAAA2lF,WACAC,gBAAAX,GACA,WAAAY,OAAAJ,GAGA,IAAAK,EAAA,SAAAC,EAAA5jF,EAAA6jF,EAAAhB,EAAAiB,GAOA,GANAlmF,KAAAmmF,gBAAAnmF,KAAAmmF,gBAAA3hF,KAAAxE,MACAA,KAAAomF,eAAApmF,KAAAomF,eAAA5hF,KAAAxE,MACAA,KAAAqmF,UAAArmF,KAAAqmF,UAAA7hF,KAAAxE,MACAwB,EAAA8kF,YAAA9kF,EAAA+kF,QACA/kF,EAAA+kF,MAAA/kF,EAAA8kF,WAEAnpD,EAAAl0B,IAAA,cAAAzH,EAAA+kF,MACAtB,KAAA9nD,EAAAb,UAAAl6B,EAAAC,GAAA,cACK,CACL,IAAAmkF,EAAAxmF,KAAAymF,eACAxB,KAAAuB,EAAAhlF,EAAA+kF,MAAA,kCAEA,IAAAG,KACAV,EAAA1+E,QAAA,SAAA9E,GACAkkF,EAAAlkF,GAAAgkF,EAAAhlF,EAAA+kF,MAAA/jF,EAAA,UAAAL,QAAA,yBAIAnC,KAAAylD,QAAAtF,EAAA8kC,EAAA7iF,GACA8jF,GACAlmF,KAAAy3B,KAAA,gBAAAyuD,GAEAlmF,KAAAylD,QAAAzlC,aACAmb,MAAA,EACAurD,OACAxnF,OAAAkD,EAAAC,GACA4jF,cAGAjmF,KAAA2mF,WAAA,EACA3mF,KAAA4mF,aAEA5mF,KAAAylD,QAAAohC,UAAA7mF,KAAAqmF,YAGA,WAEAv1E,EAAAF,UAAA5Q,KAAAi4B,GAEAj4B,KAAAqmF,UAAA,SAAA1qE,GACA,IAAAse,EAAAte,EAAAyE,KACA,OAAA6Z,EAAAhf,MACA,YACAjb,KAAA8wB,QAAAmJ,EAAA12B,MAAwC6c,KAAA6Z,EAAA7Z,OACxC,MACA,WACA,IAAArf,EAAAf,KAAA4mF,UAAA3sD,EAAA53B,IACAtB,IACAA,EAAAk5B,EAAA7Z,aACApgB,KAAA4mF,UAAA3sD,EAAA53B,KAEA,MACA,YACArC,KAAAg6B,YAAAC,EAAA7Z,MACA,MACA,UACAngB,OAAAS,iBAAAonD,KAAApnD,QAAAonD,IAAArnD,MAAAC,QAAAu5B,EAAA7Z,QAKApgB,KAAAg6B,YAAA,SAAA8sD,GACA7mF,OAAAS,iBAAAC,OAAAD,QAAAC,MAAAmmF,IAGA9mF,KAAAymF,eAAA,SAAA9uD,GACA,OAAAiD,EAAA5C,WAAAL,IAGA33B,KAAAi0D,UAAA,WACAj0D,KAAA8wB,QAAA,gBACA9wB,KAAA+mF,WAAA,KACA/mF,KAAAylD,QAAAwO,YACAj0D,KAAAylD,QAAA,KACAzlD,KAAA+xE,MACA/xE,KAAA+xE,KAAA94C,IAAA,SAAAj5B,KAAAomF,gBACApmF,KAAA+xE,KAAA,MAGA/xE,KAAAy3B,KAAA,SAAA3lB,EAAAnN,GACA3E,KAAAylD,QAAAzlC,aAAkCnO,QAAAC,EAAAnN,UAGlC3E,KAAAoB,KAAA,SAAA0Q,EAAAnN,EAAA5D,GACA,GAAAA,EAAA,CACA,IAAAsB,EAAArC,KAAA2mF,aACA3mF,KAAA4mF,UAAAvkF,GAAAtB,EACA4D,EAAAlD,KAAAY,GAEArC,KAAAy3B,KAAA3lB,EAAAnN,IAGA3E,KAAAgnF,KAAA,SAAA3rE,EAAA+E,GACA,IACApgB,KAAAylD,QAAAzlC,aAAsC3E,QAAA+E,MAAqBA,eAE3D,MAAA6mE,GACAvmF,QAAAC,MAAAsmF,EAAA3zC,SAIAtzC,KAAAknF,iBAAA,SAAAr7E,GACA7L,KAAA+xE,MACA/xE,KAAAi0D,YAEAj0D,KAAA+xE,KAAAlmE,EACA7L,KAAAoB,KAAA,YAAAyK,EAAAm3C,aACAn3C,EAAAsc,GAAA,SAAAnoB,KAAAomF,iBAGApmF,KAAAomF,eAAA,SAAA5/C,GACAxmC,KAAA+mF,aACA/mF,KAAA+mF,cACAjoE,WAAA9e,KAAAmmF,gBAAA,IAEA,UAAA3/C,EAAA3B,OACA7kC,KAAA+mF,WAAAtlF,KAAA+kC,EAAAtgC,MAAAsgC,EAAAC,OAEAzmC,KAAA+mF,WAAAtlF,KAAA+kC,EAAAtgC,MAAAsgC,EAAA3c,MAGA7pB,KAAAmmF,gBAAA,WACA,IAAAgB,EAAAnnF,KAAA+mF,WACAI,IACAnnF,KAAA+mF,WAAA,KACAI,EAAAvnF,OAAA,IAAAunF,EAAAvnF,OAAAI,KAAA+xE,KAAAxgD,aAAA,EACAvxB,KAAAoB,KAAA,YAAApB,KAAA+xE,KAAA/uB,aAEAhjD,KAAAgnF,KAAA,UAAiC5mE,KAAA+mE,QAGhC/lF,KAAA2kF,EAAA7kF,WAGD,IAAAkmF,EAAA,SAAApB,EAAA5jF,EAAA6jF,GACAjmF,KAAAmmF,gBAAAnmF,KAAAmmF,gBAAA3hF,KAAAxE,MACAA,KAAAomF,eAAApmF,KAAAomF,eAAA5hF,KAAAxE,MACAA,KAAA2mF,WAAA,EACA3mF,KAAA4mF,aACA5mF,KAAAqnF,iBAEA,IAAAC,EAAA,KACAC,GAAA,EACAC,EAAA9nF,OAAA0J,OAAA6uB,GACAtV,EAAA3iB,KAEAA,KAAAylD,WACAzlD,KAAAylD,QAAAwO,UAAA,aACAj0D,KAAAylD,QAAAzlC,YAAA,SAAArE,GACAgH,EAAA0kE,cAAA5lF,KAAAka,GACA2rE,IACAC,EACAzoE,WAAA2oE,GAEAA,MAGAznF,KAAA0nF,YAAA,SAAA3gE,GAAsCwgE,EAAAxgE,GAEtC,IAAA0gE,EAAA,WACA,IAAAxtD,EAAAtX,EAAA0kE,cAAA31E,QACAuoB,EAAApoB,QACAy1E,EAAArtD,EAAApoB,SAAApR,MAAA6mF,EAAArtD,EAAAt1B,MACAs1B,EAAA5e,OACAmsE,EAAA12D,QAAAmJ,EAAA5e,MAAA4e,EAAA7Z,OAGAonE,EAAAxnE,YAAA,SAAAia,GACAtX,EAAA0jE,WAAyBjmE,KAAA6Z,KAEzButD,EAAAzmF,SAAA,SAAAqf,EAAAumE,GACA3mF,KAAAggB,aAA0B/E,KAAA,OAAA5Y,GAAAskF,EAAAvmE,UAE1BonE,EAAAR,KAAA,SAAAzjF,EAAA6c,GACApgB,KAAAggB,aAA0B/E,KAAA,QAAA1X,OAAA6c,UAG1B+c,EAAAL,YAAA,SAAA16B,GAAA,SAAAulF,GAEA,IADAL,EAAA,IAAAK,EAAA1B,GAAAuB,GACA7kE,EAAA0kE,cAAAznF,QACA6nF,OAIAL,EAAAlmF,UAAA6kF,EAAA7kF,UAEA/B,EAAAioF,iBACAjoF,EAAA4mF,eACA5mF,EAAAghD,iBAKAx9C,IAAAzC,OAAA,4GAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAoqC,EAAA9nC,EAAA,WAAA8nC,MACArR,EAAAz2B,EAAA,uBAAAy2B,aACAnnB,EAAAtP,EAAA,aAEAomF,EAAA,SAAAvgE,EAAAznB,EAAAwG,EAAAyhF,EAAAC,EAAAC,GACA,IAAAplE,EAAA3iB,KACAA,KAAAJ,SACAI,KAAAqnB,UACArnB,KAAA6L,IAAAwb,EAAAqkB,cACA1rC,KAAA8nF,YACA9nF,KAAA+nF,cACA/nF,KAAAgoF,UAAAhoF,KAAAioF,SAAAzjF,KAAAxE,MACAA,KAAA6L,IAAAsc,GAAA,SAAAnoB,KAAAgoF,WACAhoF,KAAAkoF,QAAAL,EAEA7nF,KAAAilE,gBAAA,WACAnmD,WAAA,WACA6D,EAAAojD,oBAIA/lE,KAAA0xB,KAAAtrB,EACA,IAAA+hF,EAAA9gE,EAAAipC,iBAAA4hB,YAAA7qD,EAAAipC,iBAAA83B,aAAmGxoF,QAAA,GACnGI,KAAAqoF,gBAAAF,EAAAvoF,OACAI,KAAAsoF,QAEAjhE,EAAApC,UAAAkD,GAAA,eAAAnoB,KAAAilE,mBAGA,WAEAn0D,EAAAF,UAAA5Q,KAAAi4B,GACAj4B,KAAAsoF,MAAA,WACA,IAAA3lE,EAAA3iB,KACA6L,EAAA7L,KAAA6L,IACAwb,EAAArnB,KAAAqnB,QAEArnB,KAAAuoF,gBAAAlhE,EAAApC,UAAAgsB,SACA5pB,EAAApC,UAAA6G,mBACAzE,EAAApC,UAAAssB,gBAEAvxC,KAAAoG,IAAAyF,EAAAggC,aAAA7rC,KAAA0xB,KAAA1G,IAAAhrB,KAAA0xB,KAAAxG,QACA,IAAA9kB,EAAApG,KAAAoG,IACAA,EAAA67C,cAAA,EACA77C,EAAAo6B,SACAp6B,EAAAmsD,SAAAlrC,EAAA+M,UAAA,IAAAkV,EAAAljC,EAAA4kB,IAAA5kB,EAAA8kB,OAAA9kB,EAAA4kB,IAAA5kB,EAAA8kB,OAAAlrB,KAAAJ,QAAAI,KAAA8nF,UAAA,SACA9nF,KAAA6nF,UACA7nF,KAAAkoF,QAAA5gF,QAAA,SAAAkhF,GACA,IAAAr9D,EAAAtf,EAAAggC,aAAA28C,EAAAx9D,IAAAw9D,EAAAt9D,QACAC,EAAA82B,cAAA,EACA92B,EAAAqV,SACA7d,EAAAklE,OAAApmF,KAAA0pB,KAEA9D,EAAAwuC,eAAA,IAEA71D,KAAAyoF,iBAAA,WACA,IAAAzoF,KAAA0oF,aAAA,CACA,IAAArhE,EAAArnB,KAAAqnB,QACA1E,EAAA3iB,KACAA,KAAA0oF,cAAA,EACA1oF,KAAA6nF,OAAAvgF,QAAA,SAAA6jB,GACAA,EAAAonC,SAAAlrC,EAAA+M,UAAA,IAAAkV,EAAAne,EAAAH,IAAAG,EAAAD,OAAAC,EAAAH,IAAAG,EAAAD,OAAAvI,EAAA/iB,QAAA+iB,EAAAolE,YAAA,aAGA/nF,KAAA2oF,iBAAA,WACA,GAAA3oF,KAAA0oF,aAAA,CACA1oF,KAAA0oF,cAAA,EACA,QAAAnpF,EAAA,EAAuBA,EAAAS,KAAA6nF,OAAAjoF,OAAwBL,IAC/CS,KAAAqnB,QAAAuN,aAAA50B,KAAA6nF,OAAAtoF,GAAAgzD,YAGAvyD,KAAAioF,SAAA,SAAAzhD,GACA,GAAAxmC,KAAAirD,UACA,OAAAjrD,KAAA4oF,cAAApiD,GAEA,IAAAjf,EAAAif,EACA,GAAAjf,EAAArhB,MAAA8kB,MAAAzD,EAAAsC,IAAAmB,KACAzD,EAAArhB,MAAA8kB,MAAAhrB,KAAAoG,IAAA4kB,IAAA,CACAhrB,KAAAirD,WAAA,EACA,IAAA49B,EAAA,WAAAriD,EAAA3B,OAAAtd,EAAAsC,IAAAqB,OAAA3D,EAAArhB,MAAAglB,OAAA3D,EAAArhB,MAAAglB,OAAA3D,EAAAsC,IAAAqB,OACA49D,EAAAvhE,EAAArhB,MAAAglB,QAAAlrB,KAAAoG,IAAA8kB,QAAA3D,EAAArhB,MAAAglB,QAAAlrB,KAAAoG,IAAA8kB,OAAAlrB,KAAAJ,OAAA,EACAmpF,EAAAxhE,EAAArhB,MAAAglB,OAAAlrB,KAAAoG,IAAA8kB,OAOA,GALAlrB,KAAA4oF,cAAApiD,GAEAsiD,IACA9oF,KAAAJ,QAAAipF,GAEAC,IAAA9oF,KAAAqnB,QAAA0oC,UACA,cAAAvpB,EAAA3B,OACA,QAAAtlC,EAAAS,KAAA6nF,OAAAjoF,OAAA,EAAoDL,GAAA,EAAQA,IAAA,CAC5D,IACAypF,GAAkCh+D,KADlCi+D,EAAAjpF,KAAA6nF,OAAAtoF,IACkCyrB,IAAAE,OAAA+9D,EAAA/9D,OAAA69D,GAClC/oF,KAAA6L,IAAAi3C,kBAAAkmC,EAAAxiD,EAAAC,YAEa,cAAAD,EAAA3B,OACb,IAAAtlC,EAAAS,KAAA6nF,OAAAjoF,OAAA,EAAoDL,GAAA,EAAQA,IAAA,CAC5D,IAAA0pF,EACAD,GAAkCh+D,KADlCi+D,EAAAjpF,KAAA6nF,OAAAtoF,IACkCyrB,IAAAE,OAAA+9D,EAAA/9D,OAAA69D,GAClC/oF,KAAA6L,IAAAlF,OAAA,IAAA2iC,EAAA0/C,EAAAh+D,IAAAg+D,EAAA99D,OAAA89D,EAAAh+D,IAAAg+D,EAAA99D,OAAA29D,IAKA7oF,KAAAirD,WAAA,EACAjrD,KAAAkpF,kBAGAlpF,KAAA4oF,cAAA,SAAApiD,GACAxmC,KAAAoG,IAAAmgC,SAAAC,GACA,QAAAjnC,EAAAS,KAAA6nF,OAAAjoF,OAAwCL,KACxCS,KAAA6nF,OAAAtoF,GAAAgnC,SAAAC,GACAxmC,KAAAkpF,iBAGAlpF,KAAAkpF,cAAA,WACA,IAAAlpF,KAAAirD,UAAA,CAEA,IAAAtoC,EAAA3iB,KACAqnB,EAAArnB,KAAAqnB,QACA8hE,EAAA,SAAA/iF,EAAAiG,GACAgb,EAAAuN,aAAAxuB,EAAAmsD,UACAnsD,EAAAmsD,SAAAlrC,EAAA+M,UAAA,IAAAkV,EAAAljC,EAAA4kB,IAAA5kB,EAAA8kB,OAAA9kB,EAAA4kB,IAAA5kB,EAAA8kB,OAAAvI,EAAA/iB,QAAAyM,EAAA,UAEA88E,EAAAnpF,KAAAoG,IAAApG,KAAA8nF,WACA,QAAAvoF,EAAAS,KAAA6nF,OAAAjoF,OAAwCL,KACxC4pF,EAAAnpF,KAAA6nF,OAAAtoF,GAAAS,KAAA+nF,eAGA/nF,KAAA+lE,eAAA,SAAA1qD,GACA,IAAArb,KAAAirD,WAAAjrD,KAAAqnB,QAAA,CACA,IAAAjhB,EAAApG,KAAAqnB,QAAApC,UAAAinB,YACA9lC,EAAA4kB,MAAAhrB,KAAAoG,IAAA4kB,KAAA5kB,EAAA8kB,QAAAlrB,KAAAoG,IAAA8kB,QAAA9kB,EAAA8kB,QAAAlrB,KAAAoG,IAAA8kB,OAAAlrB,KAAAJ,QACAI,KAAAyoF,mBACAzoF,KAAAwoB,MAAA,cAAAnN,KAEArb,KAAA2oF,mBACA3oF,KAAAwoB,MAAA,cAAAnN,MAGArb,KAAAwgC,OAAA,WACAxgC,KAAAqnB,QAAAuN,aAAA50B,KAAAoG,KAAApG,KAAAoG,IAAAmsD,UACAvyD,KAAA2oF,mBACA3oF,KAAA6L,IAAA2P,oBAAA,SAAAxb,KAAAgoF,WACAhoF,KAAAqnB,QAAApC,UAAAzJ,oBAAA,eAAAxb,KAAAilE,iBACAjlE,KAAAqnB,QAAAwuC,eAAA,GACA71D,KAAAqnB,QAAA,MAEArnB,KAAAsiB,OAAA,WACA,QAAAtiB,KAAAqoF,gBAAA,CAIA,IAFA,IAAA53B,EAAAzwD,KAAAqnB,QAAAipC,iBACA84B,GAAA34B,EAAAyhB,YAAAzhB,EAAA23B,YAAAxoF,OAAAI,KAAAqoF,gBACA9oF,EAAA,EAAuBA,EAAA6pF,EAAmB7pF,IAC1CkxD,EAAAxpC,MAAA,GAEAjnB,KAAAuoF,iBACAvoF,KAAAqnB,QAAApC,UAAAosB,SAAArxC,KAAAuoF,qBAECnnF,KAAAwmF,EAAA1mF,WAGD/B,EAAAyoF,gBAGAjlF,IAAAzC,OAAA,6GAAAsB,EAAArC,EAAAD,GAEA,IAAAmc,EAAA7Z,EAAA,gBACAoZ,EAAApZ,EAAA,oBACA,SAAA6nF,EAAA99C,EAAAC,GACA,OAAAD,EAAAvgB,KAAAwgB,EAAAxgB,KAAAugB,EAAArgB,QAAAsgB,EAAAtgB,OA2KA/rB,EAAAkrB,YAxKA,SAAA1O,GACA,IAAAyP,EAAAzP,EAAA8M,SACAjX,EAAA4Z,EAAAnP,OACAvK,EAAA0Z,EAAAlP,SACA3K,EAAA6Z,EAAApP,QACAstE,EAAA3tE,EAAAwS,cACAhS,EAAAR,EAAAI,YAKA,GAHAxK,GAAAqJ,EAAA3B,QACAkD,EAAAiP,EAAAjP,QAEAR,EAAAwO,OAAA2B,mBAAA,GAAA3P,EACAR,EAAAwO,OAAAd,UAAAd,cAAA5M,EAAA8M,eAIA,GAAAlX,GAAAC,GAAA83E,GAMA,OAAAntE,EAAA,CAGA,IAiBAotE,EAjBAp/D,EAAAxO,EAAAwO,OACAlF,EAAAkF,EAAAlF,UACAukE,EAAAr/D,EAAA2B,kBACA1lB,EAAAuV,EAAA2P,sBACAP,EAAA9F,EAAAinB,YACA7gB,EAAA1P,EAAA0P,eAAApG,EAAAN,WAAA0kE,EAAAjjF,EAAA2kB,GAEA0+D,EAAA9tE,EAAAvY,EAAAsmF,EAAA/tE,EAAAyQ,EAMA/E,EAAA8C,EAAA9C,QACAsiE,EAAAx/D,EAAArC,SAAA2J,yBAAAg4D,EAAAC,GACAE,EAAAD,EAGA,GAAAx/D,EAAAu4C,cAAAmnB,iBACAt4E,GAAAC,GAAA83E,GAAA93E,EACA+3E,EAAA73E,EAAA,cACAF,GAAA2Y,EAAA2/D,sBACAP,EAAA,cAEA,GAAAD,IAAA93E,GAEA,GADA+3E,EAAA,OACAC,GAAA93E,EACA,YACSF,GAAA2Y,EAAA2/D,sBACTP,EAAA,SAQA,GAJAA,GAAA3uE,EAAA3B,OAAAmS,EAAApP,SACAmO,EAAAu4C,cAAAjkC,oBAGA,OAAA8qD,EAAA,CACA,IAAAC,GAAAn+D,EACA,OAEA,IAAAm+D,EAAA,CACA,IAAAjiE,EAAAtC,EAAAkP,kBACAhK,EAAA4/D,mBAAAxiE,GAGA,IAAAyiE,EAAA/kE,EAAAqsB,UAAAuX,aAAAziD,GAGA+jB,EAAAuB,kBACAvB,EAAA++C,wBAAA,EAEAx3D,IACAs4E,EAAA,KACAziE,EAAAtC,EAAAksB,OAAA,IAAA5pB,EACA4C,EAAA8/D,sBAAA1iE,IAEA4C,EAAAqO,KAAA,qBACA,IAAA0xD,EAAAjlE,EAAAkP,kBAEA61D,GAAAE,EAAAvlE,WAAA0kE,EAAAW,EAAAj/D,OAAAm/D,EAAAn/D,QACA9F,EAAA0jC,eAAAuhC,EAAAn/D,SAEArZ,EACAuT,EAAA0jC,eAAAphC,EAAAwD,QACiBxD,IACjB4C,EAAA8/D,sBAAA1iE,GACAtC,EAAAusB,SAAAjqB,IAEAtC,EAAAusB,SAAA04C,IAEA//D,EAAAuB,kBACAvB,EAAA++C,wBAAA,SAGK,YAAAqgB,EAAA,CAGL,IAAA5pC,EAFAhkC,EAAAqT,OACA7E,EAAA++C,wBAAA,EAEA,IAAAihB,KAqBAhgE,EAAAuB,kBACA89D,IAAAF,EACArkE,EAAAssB,iBACSi4C,GAAAF,IACT3pC,EAAA16B,EAAAkP,kBACAhK,EAAA4/D,mBAAApqC,IAGAjuC,EACAi4E,EAAAtiE,EAAA8jB,yBAAAlmB,EAAA0mB,MAEA1mB,EAAA0G,eAAAvlB,GACA+jB,EAAAuB,kBAEAk+D,GAAwB5+D,KAAA,EAAAE,QAAA,GAExB,IAiBAk/D,EArDA,WACA,IAAAC,EAAAlgE,EAAArC,SAAA2J,yBAAAg4D,EAAAC,GACA3+D,EAAA1D,EAAA4nB,yBAAAo7C,EAAAr/D,IAAAq/D,EAAAn/D,OAAAm/D,EAAA/5C,SAEA+4C,EAAAO,EAAAS,IAAAhB,EAAAt+D,EAAA9F,EAAA0mB,QAEAi+C,EAAAS,EAEAlgE,EAAAuB,kBACAvB,EAAAlF,UAAA0G,eAAAZ,GACAZ,EAAArC,SAAA8E,uBAEAzC,EAAAmgE,uBAAAH,GACAA,EAAAllE,EAAAslE,sBAAAX,EAAAD,GACAx/D,EAAAu4C,cAAAx4C,iBAAA,GAAAigE,EAAAvqF,QAAAuqF,EAAA,GAAAxlE,YACAwlE,EAAA,GAAAhgE,EAAAu4C,cAAAx4C,gBAAA6gB,SACAo/C,EAAA7iF,QAAA6iB,EAAA4/D,mBAAA5/D,GACAA,EAAAqgE,yBACArgE,EAAAuB,oBAqCArQ,EAAAkB,QAAA4N,EAAAtB,UA/HA,SAAAlN,GACA8tE,EAAA9tE,EAAAqB,QACA0sE,EAAA/tE,EAAAsB,SA0GA,SAAAtB,GACA6Y,cAAA/B,GACAtI,EAAAmgE,uBAAAH,GACAA,EAAAvqF,SACAuqF,GAAAllE,EAAAkP,oBACAhK,EAAAuB,kBACAi0B,IACAx1B,EAAA8/D,sBAAAtqC,GACA16B,EAAAssB,cAAAoO,IAEA,QAAApgD,EAAA,EAA2BA,EAAA4qF,EAAAvqF,OAAoBL,IAC/C0lB,EAAAusB,SAAA24C,EAAA5qF,IACA4qB,EAAA++C,wBAAA,EACA/+C,EAAAu4C,cAAAx4C,gBAAA,KACAC,EAAAuB,oBAMA,IAAA+G,EAAAgC,YAAA,WAA8C21D,KAAuB,IAErE,OAAAzuE,EAAAE,wBAlJA,IAAAM,GAAAR,EAAAwO,OAAA2B,mBACAnQ,EAAAwO,OAAAi4C,yBA0JAz/D,IAAAzC,OAAA,yGAAAsB,EAAArC,EAAAD,GACAC,EAAAkjE,kBACA9+D,KAAA,iBACAV,KAAA,SAAAsnB,GAA4BA,EAAAsgE,iBAAA,IAC5BrtB,SAAcl9C,IAAA,cAAAg/C,IAAA,eACdG,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,iBACAV,KAAA,SAAAsnB,GAA4BA,EAAAsgE,gBAAA,IAC5BrtB,SAAcl9C,IAAA,gBAAAg/C,IAAA,iBACdG,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,4BACAV,KAAA,SAAAsnB,GAA4BA,EAAAsgE,iBAAA,OAC5BrtB,SAAcl9C,IAAA,oBAAAg/C,IAAA,qBACdG,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,4BACAV,KAAA,SAAAsnB,GAA4BA,EAAAsgE,gBAAA,OAC5BrtB,SAAcl9C,IAAA,sBAAAg/C,IAAA,uBACdG,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,mBACAV,KAAA,SAAAsnB,GAA4BA,EAAAugE,YAAA,IAC5BttB,SAAcl9C,IAAA,gBAAAg/C,IAAA,iBACdG,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,kBACAV,KAAA,SAAAsnB,GAA4BA,EAAAugE,WAAA,IAC5BttB,SAAcl9C,IAAA,iBAAAg/C,IAAA,kBACdG,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,mBACAV,KAAA,SAAAsnB,GAA4BA,EAAAugE,YAAA,OAC5BttB,SAAcl9C,IAAA,sBAAAg/C,IAAA,uBACdG,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,kBACAV,KAAA,SAAAsnB,GAA4BA,EAAAugE,WAAA,OAC5BttB,SAAcl9C,IAAA,uBAAAg/C,IAAA,wBACdG,eAAA,SACA/2C,UAAA,IAEA/kB,KAAA,iBACAV,KAAA,SAAAsnB,GAA4BA,EAAAiuB,YAAAuyC,kBAC5BvtB,SAAcl9C,IAAA,aAAAg/C,IAAA,cACd52C,UAAA,IAEA/kB,KAAA,eACAV,KAAA,SAAAsnB,GAA4BA,EAAAygE,gBAC5BxtB,SAAcl9C,IAAA,aAAAg/C,IAAA,cACdG,eAAA,WAEA97D,KAAA,UACAV,KAAA,SAAAsnB,GAA4BA,EAAA4xC,WAC5BqB,SAAcl9C,IAAA,aAAAg/C,IAAA,cACdG,eAAA,SACA/2C,UAAA,IAEAnpB,EAAA0rF,sBACAtnF,KAAA,kBACA65D,QAAA,MACAv6D,KAAA,SAAAsnB,GAA4BA,EAAAi4C,uBAC5B/C,eAAA,SACA/2C,UAAA,EACAm2C,YAAA,SAAAt0C,GAAmC,OAAAA,KAAA2B,qBAGnC,IAAAixC,EAAAv7D,EAAA,4BAAAu7D,YACA59D,EAAAglE,gBAAA,IAAApH,EAAA59D,EAAA0rF,uBAIAloF,IAAAzC,OAAA,uQAAAsB,EAAArC,EAAAD,GAEA,IAAAmpD,EAAA7mD,EAAA,gBAAA6mD,UACA/e,EAAA9nC,EAAA,WAAA8nC,MACAmC,EAAAjqC,EAAA,eAAAiqC,UACAphB,EAAA7oB,EAAA,gCAAA6oB,YACAhP,EAAA7Z,EAAA,eACAshB,EAAAthB,EAAA,cACAu+B,EAAAv+B,EAAA,oCACArC,EAAA4gC,WAAAsiC,gBAAAv9D,OAAAi7B,EAAA8qD,qBACA,IACAr7C,EAAA,IAAA+rB,EADA/5D,EAAA,YAAA+5D,QASA,IAAA3M,EAAAptD,EAAA,kBAAAotD,aACA,WACA5uD,KAAA8qF,oBAAA,WACA,OAAA9qF,KAAA06E,qBAECt5E,KAAAwtD,EAAA1tD,WACD,WACAlB,KAAAmxC,OAAA,KACAnxC,KAAAsxC,UAAA,KACAtxC,KAAAwxC,SAAA,SAAAjqB,EAAAwjE,GACA,GAAAxjE,EAAA,CAGA,IAAAvnB,KAAA8rB,mBAAA,IAAA9rB,KAAAkxC,WAAA,CACA,IAAA84C,EAAAhqF,KAAAm0B,kBAGA,GAFAn0B,KAAAsxC,UAAA5qC,IAAAsjF,GACAhqF,KAAAsxC,UAAA5qC,IAAA6gB,GACA,GAAAvnB,KAAAsxC,UAAAH,OAAAvxC,OAEA,OADAI,KAAAsxC,UAAAyX,YACAgiC,GAAA/qF,KAAA60B,kBAAAtN,GAEAvnB,KAAAsxC,UAAAyX,YACA/oD,KAAAsxC,UAAA5qC,IAAAsjF,GACAhqF,KAAAgrF,YAAAhB,GAGAziE,EAAAwD,SACAxD,EAAAwD,OAAAxD,EAAAsC,KAEA,IAAArjB,EAAAxG,KAAAsxC,UAAA5qC,IAAA6gB,GAcA,OAZAvnB,KAAAgrF,YAAAzjE,GAEA/gB,EAAA5G,QACAI,KAAAirF,eAAAzkF,GAEAxG,KAAAkxC,WAAA,IAAAlxC,KAAA8rB,oBACA9rB,KAAA8wB,QAAA,eACA9wB,KAAA8rB,mBAAA,EACA9rB,KAAAqnB,QAAA6nC,aAAA,EACAlvD,KAAAsxC,UAAA/Q,OAAAvgC,KAAAqnB,UAGA0jE,GAAA/qF,KAAA60B,kBAAAtN,KAGAvnB,KAAAuxC,cAAA,SAAAhqB,GACAA,KAAAvnB,KAAAmxC,OAAA,GACA,IAAA3qC,EAAAxG,KAAAsxC,UAAAyX,YACAviD,EAAA5G,QACAI,KAAAirF,eAAAzkF,GAEA+gB,GAAAvnB,KAAA60B,kBAAAtN,IAEAvnB,KAAA2oD,eAAA,SAAAviD,GACA,IAAAI,EAAAxG,KAAAsxC,UAAAqX,eAAAviD,GACA,GAAAI,EAEA,OADAxG,KAAAirF,eAAAzkF,GACAA,EAAA,IAGAxG,KAAAkrF,uBAAA,WACA,IAAA1kF,EAAAxG,KAAAsxC,UAAA6C,QACA3tC,EAAA5G,OACAI,KAAAirF,eAAAzkF,GACAxG,KAAAmxC,OAAA,IACAnxC,KAAA60B,kBAAA70B,KAAAmxC,OAAA,KAGAnxC,KAAAgrF,YAAA,SAAAzjE,GACAvnB,KAAAkxC,WAAAlxC,KAAAsxC,UAAAH,OAAAvxC,OACAI,KAAAmxC,OAAAiD,QAAA7sB,GACAvnB,KAAA8wB,QAAA,YAAkCvJ,WAGlCvnB,KAAAirF,eAAA,SAAAzkF,GAEA,GADAxG,KAAAkxC,WAAAlxC,KAAAsxC,UAAAH,OAAAvxC,OACA,GAAAI,KAAAkxC,YAAAlxC,KAAA8rB,kBAAA,CACA,IAAAq/D,EAAAnrF,KAAAsxC,UAAAH,OAAApY,MACAvyB,EAAA/E,KAAA0pF,GACAnrF,KAAAkxC,WAAA,EAGA,QAAA3xC,EAAAiH,EAAA5G,OAAoCL,KAAK,CACzC,IAAA4E,EAAAnE,KAAAmxC,OAAAtxC,QAAA2G,EAAAjH,IACAS,KAAAmxC,OAAAtrC,OAAA1B,EAAA,GAGAnE,KAAA8wB,QAAA,eAAqCqgB,OAAA3qC,IAErC,IAAAxG,KAAAkxC,YAAAlxC,KAAA8rB,oBACA9rB,KAAA8rB,mBAAA,EACA9rB,KAAA8wB,QAAA,gBACA9wB,KAAAqnB,QAAA6nC,aAAA,EACAlvD,KAAAsxC,UAAA9Q,OAAAxgC,KAAAqnB,WAGA8jE,KAAAnrF,KAAAmxC,OAAA,MACAg6C,EAAAxhD,QAAA3pC,KAAAonB,aACApnB,KAAA60B,kBAAAs2D,IAEAnrF,KAAAorF,eAAA,WACAprF,KAAAsxC,YAGAtxC,KAAAsxC,UAAA,IAAA+W,EACAroD,KAAAmxC,UACAnxC,KAAAkxC,WAAA,IAEAlxC,KAAA0/D,aAAA,WACA,OAAA1/D,KAAAkxC,WAAAlxC,KAAAsxC,UAAAH,OAAArsC,UAAA9E,KAAAonB,aAGApnB,KAAA2qF,eAAA,WACA,GAAA3qF,KAAAkxC,WAAA,GACA,IAAAC,EAAAnxC,KAAAsxC,UAAAH,OACAg6C,EAAAh6C,IAAAvxC,OAAA,GACA2nB,EAAA+hB,EAAAuB,WAAAsG,EAAA,GAAAjrC,MAAAilF,EAAAthE,KAEA7pB,KAAAuxC,gBACAvxC,KAAA+kB,kBAAAwC,EAAA4jE,EAAApgE,QAAAogE,EAAAjlF,WACS,CACTqhB,EAAAvnB,KAAAonB,WAAA,IACAqlB,EAAAzsC,KAAAysC,cACAlD,EAAAhiB,EAAArhB,MAAA8kB,IACAye,EAAAliB,EAAAsC,IAAAmB,IACA,GAAAue,GAAAE,EAAA,CACA,GAAAgD,EACA,IAAAvmC,EAAAqhB,EAAAsC,MAAAtC,EAAArhB,WAEAA,EAAAqhB,EAAArhB,MAAA2jB,EAAAtC,EAAAsC,IAIA,OAFA7pB,KAAAwxC,SAAAlI,EAAAuB,WAAAhhB,WACA7pB,KAAAwxC,SAAAlI,EAAAuB,WAAA3kC,MAIA,IAAAikF,KACAhjE,EAAAnnB,KAAAkuB,aAAAqb,GAAA,GACApiB,EAAAjhB,MAAAglB,OAAA3D,EAAArhB,MAAAglB,OACAi/D,EAAA1oF,KAAA0lB,GAEA,QAAA5nB,EAAAgqC,EAAA,EAAsChqC,EAAAkqC,EAAYlqC,IAClD4qF,EAAA1oF,KAAAzB,KAAAkuB,aAAA3uB,GAAA,KAEA4nB,EAAAnnB,KAAAkuB,aAAAub,GAAA,IACA5f,IAAAqB,OAAA3D,EAAAsC,IAAAqB,OACAi/D,EAAA1oF,KAAA0lB,GAEAgjE,EAAA7iF,QAAAtH,KAAAwxC,SAAAxxC,QAGAA,KAAAqrF,qBAAA,WACA,GAAArrF,KAAAkxC,WAAA,GACA,IAAAC,EAAAnxC,KAAAsxC,UAAAH,OACAg6C,EAAAh6C,IAAAvxC,OAAA,GACA2nB,EAAA+hB,EAAAuB,WAAAsG,EAAA,GAAAjrC,MAAAilF,EAAAthE,KAEA7pB,KAAAuxC,gBACAvxC,KAAA+kB,kBAAAwC,EAAA4jE,EAAApgE,QAAAogE,EAAAjlF,WACS,CACT,IAAA6kB,EAAA/qB,KAAAqnB,QAAA8jB,yBAAAnrC,KAAA4rC,eACAzgB,EAAAnrB,KAAAqnB,QAAA8jB,yBAAAnrC,KAAA8rC,iBAEA9rC,KAAAuqF,sBAAAx/D,EAAAI,GACA7jB,QAAAtH,KAAAwxC,SAAAxxC,QAGAA,KAAAuqF,sBAAA,SAAAX,EAAAD,EAAA2B,GACA,IAAAnB,KAEAoB,EAAA3B,EAAA1+D,OAAAy+D,EAAAz+D,OACA,GAAAqgE,EACA,IAAA/hD,EAAAogD,EAAA1+D,OACAwe,EAAAigD,EAAAz+D,OACAsgE,EAAA5B,EAAAt5C,QACAm7C,EAAA9B,EAAAr5C,aAEA9G,EAAAmgD,EAAAz+D,OACAwe,EAAAkgD,EAAA1+D,OACAsgE,EAAA7B,EAAAr5C,QACAm7C,EAAA7B,EAAAt5C,QAGA,IAAAo7C,EAAA9B,EAAA5+D,IAAA2+D,EAAA3+D,IACA,GAAA0gE,EACA,IAAAniD,EAAAqgD,EAAA5+D,IACAye,EAAAkgD,EAAA3+D,SAEAue,EAAAogD,EAAA3+D,IACAye,EAAAmgD,EAAA5+D,IAGAwe,EAAA,IACAA,EAAA,GACAD,EAAA,IACAA,EAAA,GAEAA,GAAAE,IACA6hD,GAAA,GAEA,QAAAtgE,EAAAue,EAAgCve,GAAAye,EAAeze,IAAA,CAC/C,IAAAzD,EAAA+hB,EAAAuB,WACA7qC,KAAAqnB,QAAA4nB,yBAAAjkB,EAAAwe,EAAAgiD,GACAxrF,KAAAqnB,QAAA4nB,yBAAAjkB,EAAA0e,EAAA+hD,IAEA,GAAAlkE,EAAA5C,UAAA,CACA,GAAAgnE,GAAAtC,EAAA9hE,EAAAsC,IAAA8hE,GACA,MACA,IAAAA,EAAApkE,EAAAsC,IAEAtC,EAAAwD,OAAAwgE,EAAAhkE,EAAArhB,MAAAqhB,EAAAsC,IACAsgE,EAAA1oF,KAAA8lB,GAMA,GAHAmkE,GACAvB,EAAArpE,WAEAwqE,EAAA,CAEA,IADA,IAAAzhE,EAAAsgE,EAAAvqF,OAAA,EACAuqF,EAAAtgE,GAAAlF,WAAAkF,EAAA,GACAA,IACA,GAAAA,EAAA,EAEA,IADA,IAAA3jB,EAAA,EACAikF,EAAAjkF,GAAAye,WACAze,IAEA,QAAA3G,EAAAsqB,EAA6BtqB,GAAA2G,EAAY3G,IACzC4qF,EAAA5qF,GAAAolB,WACAwlE,EAAAtkF,OAAAtG,EAAA,GAIA,OAAA4qF,IAEC/oF,KAAAqqC,EAAAvqC,WACD,IAAAohE,EAAA9gE,EAAA,YAAA8gE,OA4bA,SAAA+mB,EAAA99C,EAAAC,GACA,OAAAD,EAAAvgB,KAAAwgB,EAAAxgB,KAAAugB,EAAArgB,QAAAsgB,EAAAtgB,OAqCA,SAAA0gE,EAAAzhE,GACAA,EAAA0hE,8BAEA1hE,EAAA6gE,YAAA7gE,EAAA6gE,YAAAxmF,KAAA2lB,GACAA,EAAA8gE,eAAA9gE,EAAA8gE,eAAAzmF,KAAA2lB,GACAA,EAAA2hE,eAAA3hE,EAAA2hE,eAAAtnF,KAAA2lB,GACAA,EAAA4hE,gBAAA5hE,EAAA4hE,gBAAAvnF,KAAA2lB,GACAA,EAAA0hE,4BAAA1sF,EAAA6sF,gBAAAxnF,KAAA2lB,GACAA,EAAA8hE,wBAAA9hE,EAAA8hE,wBAAAznF,KAAA2lB,GAEAA,EAAA0hE,4BAAA1hE,GACAA,EAAAhC,GAAA,gBAAAgC,EAAA0hE,6BAEA1hE,EAAAhC,GAAA,YAAAkC,GACAF,EAAA4V,SAAAk9B,YAAAl9B,EAAAsiC,iBAKA,SAAAl4C,GACA,IAAA/d,EAAA+d,EAAAd,UAAAjB,aACA8jE,GAAA,EAeA,SAAA37B,EAAA50C,GACAuwE,IACA/hE,EAAArC,SAAAi9D,eAAA,IACAmH,GAAA,GAjBA7wE,EAAAN,YAAA3O,EAAA,mBAAAuP,GACA,IAAAwwE,EAAA,IAAAxwE,EAAAlD,WAAAkD,EAAAK,SAAAL,EAAAO,UAAAP,EAAAuD,SACAiL,EAAA2/D,qBAAAqC,EACAD,IACA/hE,EAAArC,SAAAi9D,eAAA,aACAmH,GAAA,GAESA,GACT37B,MAIAl1C,EAAAN,YAAA3O,EAAA,QAAAmkD,GACAl1C,EAAAN,YAAA3O,EAAA,OAAAmkD,GAnBA67B,CAAAjiE,KAjfA,WACAnqB,KAAAwqF,uBAAA,WACAxqF,KAAA8nB,SAAA+/C,eACA7nE,KAAA8nB,SAAAghD,qBAEA9oE,KAAA+pF,mBAAA,SAAAr9D,GACAA,EAAA3B,SACA2B,EAAA3B,OAAA2B,EAAA7C,KAEA,IAAAzc,EAAApN,KAAAq0B,oBAKA,OAJA3H,EAAA2lC,OAAAryD,KAAAqnB,QAAA+M,UAAA1H,EAAA,gBAAAtf,GAEApN,KAAAqnB,QAAAqzD,kBAAAj5E,KAAAirB,GACA1sB,KAAAqnB,QAAAglE,qBAAArsF,KAAAqnB,QAAAqzD,kBAAA96E,OACA8sB,GAEA1sB,KAAAiqF,sBAAA,SAAA1iE,GACA,GAAAA,EAAA8qC,OAAA,CAEAryD,KAAAqnB,QAAAuN,aAAArN,EAAA8qC,QACA,IAAAluD,EAAAnE,KAAAqnB,QAAAqzD,kBAAA76E,QAAA0nB,IACA,GAAApjB,GACAnE,KAAAqnB,QAAAqzD,kBAAA70E,OAAA1B,EAAA,GACAnE,KAAAqnB,QAAAglE,qBAAArsF,KAAAqnB,QAAAqzD,kBAAA96E,SAGAI,KAAAsqF,uBAAA,SAAAn5C,GAEA,IADA,IAAAm7C,EAAAtsF,KAAAqnB,QAAAqzD,kBACAn7E,EAAA4xC,EAAAvxC,OAAmCL,KAAK,CACxC,IAAAgoB,EAAA4pB,EAAA5xC,GACA,GAAAgoB,EAAA8qC,OAAA,CAEAryD,KAAAqnB,QAAAuN,aAAArN,EAAA8qC,QACA,IAAAluD,EAAAmoF,EAAAzsF,QAAA0nB,IACA,GAAApjB,GACAmoF,EAAAzmF,OAAA1B,EAAA,IAEAnE,KAAAqnB,QAAAglE,qBAAAC,EAAA1sF,QAGAI,KAAAgrF,YAAA,SAAArvE,GACA3b,KAAA+pF,mBAAApuE,EAAA4L,OACAvnB,KAAA8nB,SAAA+/C,eACA7nE,KAAA8nB,SAAAghD,qBAGA9oE,KAAAirF,eAAA,SAAAtvE,GACA3b,KAAAsqF,uBAAA3uE,EAAAw1B,QACAnxC,KAAA8nB,SAAA+/C,eACA7nE,KAAA8nB,SAAAghD,qBAGA9oE,KAAA8rF,eAAA,SAAAnwE,GACA3b,KAAA8rB,oBAEA9rB,KAAA8rB,mBAAA,EAEA9rB,KAAAwsB,SAAA,mBACAxsB,KAAA2iE,WAAAxiC,mBAAAJ,EAAAokC,iBACAnkE,KAAA+/B,SAAA3V,kBAAA,OAAApqB,KAAAusF,oBAEAvsF,KAAA8nB,SAAA+/C,eACA7nE,KAAA8nB,SAAAghD,sBAGA9oE,KAAA+rF,gBAAA,SAAApwE,GACA3b,KAAAqnB,QAAA+wB,YAAAo0C,gBAEAxsF,KAAA8rB,mBAAA,EAEA9rB,KAAAotB,WAAA,mBACAptB,KAAA2iE,WAAA1iC,sBAAAF,EAAAokC,iBAEAnkE,KAAA+/B,SAAAjH,qBAAA,OAAA94B,KAAAusF,oBACAvsF,KAAA8nB,SAAA+/C,eACA7nE,KAAA8nB,SAAAghD,oBACA9oE,KAAAwoB,MAAA,qBAGAxoB,KAAAusF,mBAAA,SAAA5wE,GACA,IAAA9J,EAAA8J,EAAA9J,QACAsY,EAAAxO,EAAAwO,OACA,GAAAA,EAAAiuB,YAAA,CAEA,GAAAvmC,EAAA4tD,kBAIS,WAAA5tD,EAAA4tD,kBACT56D,EAAAslB,EAAAsiE,iBAAA56E,EAAA8J,EAAAhX,MACS,eAAAkN,EAAA4tD,kBACT56D,EAAAslB,EAAAsiE,iBAAA56E,EAAA8J,EAAAhX,MAAA,GACS,UAAAkN,EAAA4tD,mBACTt1C,EAAAi4C,sBACAv9D,EAAAgN,EAAAhP,KAAAsnB,EAAAxO,EAAAhX,WAEAE,EAAAgN,EAAA4tD,kBAAAt1C,EAAAxO,EAAAhX,cAZA,CACA,IAAAE,EAAAgN,EAAAhP,KAAAsnB,EAAAxO,EAAAhX,UACAwlB,EAAAiuB,YAAA5G,SAAArnB,EAAAiuB,YAAAjkB,mBACAhK,EAAAiuB,YAAA8yC,yBAWA,OAAArmF,IAEA7E,KAAAysF,iBAAA,SAAA36E,EAAAnN,EAAA01B,GACA,IAAAr6B,KAAAkpE,uBAAA,CAEA,IAMArkE,EANA6nF,EAAAryD,KAAAqyD,UACAC,EAAA,GAAAtyD,QAAAsyD,SACAtlE,EAAArnB,KAAAqnB,QACApC,EAAAjlB,KAAAilB,UACAqsB,EAAArsB,EAAAqsB,UACAH,GAAAu7C,EAAAznE,EAAAqsB,GAAAH,OAGA,IAAAA,EAAAvxC,OACA,OAAAkS,EAAAjP,KAAAiP,EAAAjP,KAAA7C,KAAA2E,OAAuDmN,EAAA9R,KAAA2E,OAEvD,IAAAioF,EAAA3nE,EAAAmT,eACAnT,EAAAmT,kBAEA,IAAA8xD,EAAA,IAAAz+C,EAAApkB,GACArnB,KAAAkpE,wBAAA,EACA,QAAA3pE,EAAA4xC,EAAAvxC,OAAmCL,KAAK,CACxC,GAAAotF,EACA,KAAAptF,EAAA,GAAA4xC,EAAA5xC,GAAA2G,MAAA8kB,KAAAmmB,EAAA5xC,EAAA,GAAAsqB,IAAAmB,KACAzrB,IAEA2qF,EAAAr1D,kBAAAsc,EAAA5xC,IACA2qF,EAAA/lF,MAAA5E,EACAS,KAAAilB,UAAAoC,EAAApC,UAAAilE,EACA,IAAA2C,EAAA/6E,EAAAjP,KAAAiP,EAAAjP,KAAA7C,KAAA2E,OAAgEmN,EAAA9R,KAAA2E,OAChEE,QAAA5D,IAAA4rF,IACAhoF,EAAAgoF,GACA3C,EAAA/1D,gBAAAgd,EAAA5xC,IAEA2qF,EAAA1pD,SAEAxgC,KAAAilB,UAAAoC,EAAApC,YACAjlB,KAAAkpE,wBAAA,EACAjkD,EAAAmT,eAAAw0D,EACA3nE,EAAAimE,yBAEA,IAAA4B,EAAA9sF,KAAA8nB,SAAAu2D,iBAMA,OALAr+E,KAAA+lE,iBACA/lE,KAAAkmE,oBACA4mB,KAAAnpF,MAAAmpF,EAAA9nC,IACAhlD,KAAA8nB,SAAA67C,iBAAAmpB,EAAAnpF,MAEAkB,IAEA7E,KAAAoiE,oBAAA,WACApiE,KAAA8rB,oBAAA9rB,KAAAkpE,wBAEAlpE,KAAAo4C,YAAA7G,iBAGAvxC,KAAAipE,gBAAA,WACA,IAAA5lD,EAAA,GACA,GAAArjB,KAAA8rB,oBAAA9rB,KAAAkpE,uBAAA,CAGA,IAFA,IAAA/3B,EAAAnxC,KAAAo4C,YAAA9G,UAAAH,OACA47C,KACAxtF,EAAA,EAA2BA,EAAA4xC,EAAAvxC,OAAmBL,IAC9CwtF,EAAAtrF,KAAAzB,KAAAqnB,QAAAiO,aAAA6b,EAAA5xC,KAEA,IAAAytF,EAAAhtF,KAAAqnB,QAAAqkB,cAAAwX,uBACA7/B,EAAA0pE,EAAA9qF,KAAA+qF,IACAptF,SAAAmtF,EAAAntF,OAAA,GAAAotF,EAAAptF,SACAyjB,EAAA,SACSrjB,KAAAilB,UAAAN,YACTtB,EAAArjB,KAAAqnB,QAAAiO,aAAAt1B,KAAAyrB,sBAEA,OAAApI,GAGArjB,KAAAisF,wBAAA,SAAAtwE,EAAAwP,GACA,GAAAnrB,KAAA8rB,oBAAA9rB,KAAAkpE,uBAAA,CACA,IAAA3hD,EAAAvnB,KAAAo4C,YAAAjH,OAAA,GACA,GAAAnxC,KAAAo4C,YAAAzzB,WAAAwG,GAAAnrB,KAAAo4C,YAAAjtB,OACA,OACA,IAAA/kB,EAAA+kB,GAAAnrB,KAAAo4C,YAAAjtB,OACA5D,EAAAwD,QAAAxD,EAAArhB,MAAAqhB,EAAAsC,IAAAtC,EAAArhB,MACAqhB,EAAAwD,OACA3kB,EAAA4kB,KAAAG,EAAAH,KACAhrB,KAAAqnB,QAAA26B,wBAAA57C,EAAA4kB,IAAA5kB,EAAA8kB,gBAAAC,EAAAD,QACAlrB,KAAAo4C,YAAA7G,cAAAvxC,KAAAo4C,YAAAjkB,qBAGAn0B,KAAA+7D,QAAA,SAAAC,EAAA3hC,EAAA4yD,GAGA,IAFA5yD,SACA2hC,UAAA3hC,EAAA2hC,YACA/6D,GAAAo5B,EAAA2hC,OAAA,CACA,IAAAz0C,EAAAvnB,KAAAilB,UAAAN,UACA3kB,KAAAilB,UAAA8I,eACA/tB,KAAAilB,UAAAmC,WACAiT,EAAA2hC,OAAAh8D,KAAAqnB,QAAAiO,aAAA/N,GAEAvnB,KAAA4iE,QAAA15D,IAAAmxB,GAEA,IAAA8W,EAAAnxC,KAAA4iE,QAAA7G,QAAA/7D,KAAAqnB,SACA,IAAA8pB,EAAAvxC,OACA,SAEAI,KAAA0rB,iBAAA,EACA,IAAAzG,EAAAjlB,KAAAo4C,YAEA60C,GACAhoE,EAAAssB,cAAAJ,EAAA,IAEA,QAAA5xC,EAAA4xC,EAAAvxC,OAAmCL,KACnC0lB,EAAAusB,SAAAL,EAAA5xC,IAAA,GAMA,OALAgoB,GAAAtC,EAAAqsB,UAAAuX,aAAAthC,EAAArhB,QACA+e,EAAAusB,SAAAjqB,GAAA,GAEAvnB,KAAA0rB,iBAAA,EAEAylB,EAAAvxC,QAEAI,KAAAyqF,gBAAA,SAAA1pD,EAAAmsD,GACA,IAAA3lE,EAAAvnB,KAAAilB,UAAAkP,kBACAsY,EAAAllB,EAAAwD,QAAAxD,EAAAsC,IAEAsjE,EAAAntF,KAAAqnB,QAAA8jB,yBAAA5jB,EAAAwD,QACA/qB,KAAAilB,UAAAgnB,iBACAkhD,EAAAjiE,OAAAlrB,KAAAilB,UAAAgnB,gBAEA,IAaAyiC,EAbA/iC,EAAA3rC,KAAAqnB,QAAA4nB,yBAAAk+C,EAAAniE,IAAA+V,EAAAosD,EAAAjiE,QAEA,GAAA3D,EAAA5C,UAIAwG,EAAAwgB,OAHA,IAAAg+C,EAAA3pF,KAAAqnB,QAAA8jB,yBAAAsB,EAAAllB,EAAAsC,IAAAtC,EAAArhB,OACAilB,EAAAnrB,KAAAqnB,QAAA4nB,yBAAA06C,EAAA3+D,IAAA+V,EAAA4oD,EAAAz+D,QAKAuhB,GACAiiC,EAAAplC,EAAAuB,WAAAc,EAAAxgB,IACAJ,OAAA2jD,EAAAxoE,OAEAwoE,EAAAplC,EAAAuB,WAAA1f,EAAAwgB,IACA5gB,OAAA2jD,EAAA7kD,IAIA,GADA6kD,EAAA59B,cAAAq8C,EAAAjiE,OACAlrB,KAAAilB,UAAA6G,mBAGA,GAAAohE,EACA,IAAAE,EAAA7lE,EAAAwD,YAHA/qB,KAAAilB,UAAAusB,SAAAjqB,GAMAvnB,KAAAilB,UAAAusB,SAAAk9B,GACA0e,GACAptF,KAAAilB,UAAA0jC,eAAAykC,IAEAptF,KAAA8hE,oBAAA,SAAA/gC,GAKA,IAJA,IAAA1Z,EAAArnB,KAAAqnB,QACAilD,EAAAjlD,EAAA+wB,YACA/b,EAAAiwC,EAAAn7B,OAEA5xC,EAAA88B,EAAAz8B,OAAgCL,KAAK,CAErC,IADAgoB,EAAA8U,EAAA98B,IACAolB,UAAA,CACA,IAAAue,EAAA7b,EAAA0G,aAAAxG,EAAArhB,MAAA8kB,IAAAzD,EAAArhB,MAAAglB,QACA3D,EAAArhB,MAAA8kB,IAAAkY,EAAAh9B,MAAA8kB,IACAzD,EAAArhB,MAAAglB,OAAAgY,EAAAh9B,MAAAglB,OACA3D,EAAAsC,IAAAmB,IAAAkY,EAAArZ,IAAAmB,IACAzD,EAAAsC,IAAAqB,OAAAgY,EAAArZ,IAAAqB,QAGAohD,EAAA4e,yBAEA,IAAAmC,KACA,IAAA9tF,EAAA88B,EAAAz8B,OAAgCL,KAAK,CACrC,IAAAgoB,EAAA8U,EAAA98B,GACA8tF,EAAAj5C,QAAA/sB,EAAAiO,aAAA/N,IAGAwZ,EAAA,EACAssD,EAAAj5C,QAAAi5C,EAAAt0D,OAEAs0D,EAAA5rF,KAAA4rF,EAAA37E,SAEA,IAAAnS,EAAA88B,EAAAz8B,OAAgCL,KAAK,CAErC2jC,GADA3b,EAAA8U,EAAA98B,IACAwrC,QACA1jB,EAAAllB,QAAAolB,EAAA8lE,EAAA9tF,IACAgoB,EAAArhB,MAAA8kB,IAAAkY,EAAAh9B,MAAA8kB,IACAzD,EAAArhB,MAAAglB,OAAAgY,EAAAh9B,MAAAglB,SAGAlrB,KAAA0qF,WAAA,SAAA3pD,EAAAmsD,EAAAI,GACA,IAAAjmE,EAAArnB,KAAAqnB,QAGAE,EAFAF,EAAA+wB,YAEAjkB,kBACA,IAAA5M,EAAA5C,aACA4C,EAAAF,EAAA0G,aAAAxG,EAAArhB,MAAA8kB,IAAAzD,EAAArhB,MAAAglB,SACAH,QAAA,GAAAgW,EAAAxZ,EAAArhB,MAAAqhB,EAAAsC,IACA7pB,KAAAo4C,YAAA5G,SAAAjqB,IACA+lE,GAJA,CAOA,IAEA5e,EAhiBA,SAAArnD,EAAA20C,EAAAj7B,GAIA,OAHAyO,EAAA/V,SAAA0hC,MAAA,EACA3rB,EAAA/V,SAAAuiC,SACAxsB,EAAA/V,SAAAojC,WAAA,GAAA97B,EACAyO,EAAAgsB,KAAAn0C,GA4hBAm0C,CAAAn0C,EAFAA,EAAAiO,aAAA/N,GAEAwZ,GACA2tC,IACAA,EAAA3jD,QAAA,GAAAgW,EAAA2tC,EAAAxoE,MAAAwoE,EAAA7kD,IACA7pB,KAAA0rB,iBAAA,EACA1rB,KAAAqnB,QAAAgkC,OAAAqjB,GACA1uE,KAAAo4C,YAAA5G,SAAAk9B,GACA1uE,KAAA0rB,iBAAA,EACA1rB,KAAA8nB,SAAA8E,qBAAA,UAEAsgE,GACAltF,KAAAo4C,YAAAuQ,eAAAphC,EAAAwD,UAEA/qB,KAAA4qF,aAAA,WACA,IAAAvjE,EAAArnB,KAAAqnB,QACAilD,EAAAjlD,EAAA+wB,YACAjH,EAAAm7B,EAAAn7B,OACAnmB,GAAA,EACAuiE,EAAAp8C,EAAAtpC,OAAA,SAAAsf,GACA,GAAAA,EAAA4D,OAAAC,OACA,SACAA,EAAA7D,EAAA4D,OAAAC,MAGA,GAAAmmB,EAAAvxC,QAAA2tF,EAAA3tF,QAAAuxC,EAAAvxC,OAAA,EAyBS,CACT2tF,EAAAjmF,QAAA,SAAA6f,GACAmlD,EAAA3jB,eAAAxhC,EAAA4D,UAGA,IAAAyiE,EAAA,EACAC,EAAAlvC,IACAmvC,EAAAv8C,EAAAvpC,IAAA,SAAAuf,GACA,IAAA2iB,EAAA3iB,EAAA4D,OAEA4iE,EADAtmE,EAAAmY,QAAAsK,EAAA9e,KACAxF,OAAAskB,EAAA5e,QAAAskB,OAAA,OAQA,OAPA,GAAAm+C,IACAA,EAAA,GAEA7jD,EAAA5e,OAAAsiE,IACAA,EAAA1jD,EAAA5e,QACAyiE,EAAAF,IACAA,EAAAE,GACAA,IAEAx8C,EAAA7pC,QAAA,SAAA6f,EAAA5nB,GACA,IAAAuqC,EAAA3iB,EAAA4D,OACAzpB,EAAAksF,EAAA1jD,EAAA5e,OACAo+C,EAAAokB,EAAAnuF,GAAAkuF,EACAnsF,EAAAgoE,EACAjiD,EAAA5gB,OAAAqjC,EAAAhnB,EAAA/B,aAAA,IAAAzf,EAAAgoE,IAEAjiD,EAAA1gB,OAAA,IAAA2iC,EAAAQ,EAAA9e,IAAA8e,EAAA5e,OAAA4e,EAAA9e,IAAA8e,EAAA5e,OAAA5pB,EAAAgoE,IAEAniD,EAAAjhB,MAAAglB,OAAA/D,EAAA0C,IAAAqB,OAAAsiE,EACArmE,EAAAjhB,MAAA8kB,IAAA7D,EAAA0C,IAAAmB,IAAA8e,EAAA9e,IACA7D,EAAA4D,OAAA5D,EAAA0C,MAEAyiD,EAAAz3C,kBAAAsc,EAAA,IACAnxC,KAAA8nB,SAAA+/C,eACA7nE,KAAA8nB,SAAAghD,wBA5DA,CACA,IAAAvhD,EAAAvnB,KAAAilB,UAAAmC,WACAwmE,EAAArmE,EAAArhB,MAAA8kB,IAAA6iE,EAAAtmE,EAAAsC,IAAAmB,IACA8iE,EAAAF,GAAAC,EACA,GAAAC,EAAA,CACA,IACAjoD,EADAt/B,EAAAvG,KAAAqnB,QAAAkK,YAEA,GACAsU,EAAA7lC,KAAAqnB,QAAAmY,QAAAquD,SACiB,OAAA9qF,KAAA8iC,MAAAgoD,EAAAtnF,GACjB,GACAs/B,EAAA7lC,KAAAqnB,QAAAmY,QAAAouD,SACiB,OAAA7qF,KAAA8iC,MAAA+nD,EAAA,GAEjBA,EAAA,IAAAA,EAAA,GACAC,GAAAtnF,IAAAsnF,EAAAtnF,EAAA,GAEA,IAAAkgC,EAAAzmC,KAAAqnB,QAAA28B,gBAAA4pC,EAAAC,GACApnD,EAAAzmC,KAAA+tF,aAAAtnD,EAAAqnD,GACA9tF,KAAAqnB,QAAA5gB,QAAiCukB,IAAA4iE,EAAA1iE,OAAA,GAAmBub,EAAAxkC,KAAA,YACpD6rF,IACAvmE,EAAArhB,MAAAglB,OAAA,EACA3D,EAAAsC,IAAAqB,OAAAub,IAAA7mC,OAAA,GAAAA,QAEAI,KAAAilB,UAAAuC,SAAAD,KAwCAvnB,KAAA+tF,aAAA,SAAAtnD,EAAAunD,GACA,IACAC,EAAAC,EAAAC,EADAC,GAAA,EAAAC,GAAA,EAGA,OAAA5nD,EAAA7+B,IAAA,SAAAi+B,GACA,IAAA5J,EAAA4J,EAAA7iC,MAAA,2BACA,OAAAi5B,EAGA,MAAAgyD,GACAA,EAAAhyD,EAAA,GAAAr8B,OACAsuF,EAAAjyD,EAAA,GAAAr8B,OACAuuF,EAAAlyD,EAAA,GAAAr8B,OACAq8B,IAGAgyD,EAAAC,EAAAC,GAAAlyD,EAAA,GAAAr8B,OAAAq8B,EAAA,GAAAr8B,OAAAq8B,EAAA,GAAAr8B,SACAyuF,GAAA,GACAJ,GAAAhyD,EAAA,GAAAr8B,SACAwuF,GAAA,GAEAH,EAAAhyD,EAAA,GAAAr8B,SACAquF,EAAAhyD,EAAA,GAAAr8B,QACAsuF,EAAAjyD,EAAA,GAAAr8B,SACAsuF,EAAAjyD,EAAA,GAAAr8B,QACAuuF,EAAAlyD,EAAA,GAAAr8B,SACAuuF,EAAAlyD,EAAA,GAAAr8B,QAEAq8B,IArBA4J,KAsBSj+B,IAAAomF,EAAAM,EACTF,EAAAC,EAWA,SAAApyD,GACA,OAAAA,EAAA,GAAAmjB,EAAA6uC,EAAAC,EAAAjyD,EAAA,GAAAr8B,QAAAq8B,EAAA,GACAmjB,EAAA+uC,GACAlyD,EAAA,GAAA95B,QAAA,oBAFA85B,EAAA,IAZAqyD,EAgBA,SAAAryD,GACA,OAAAA,EAAA,GAAAmjB,EAAA6uC,GAAAhyD,EAAA,GACAmjB,EAAA+uC,GACAlyD,EAAA,GAAA95B,QAAA,oBAFA85B,EAAA,KAfA,SAAAmjB,EAAA3zC,GACA,OAAAqX,EAAA/B,aAAA,IAAAtV,GAGA,SAAA6iF,EAAAryD,GACA,OAAAA,EAAA,GAAAmjB,EAAA6uC,GAAAhyD,EAAA,GACAmjB,EAAA8uC,EAAAjyD,EAAA,GAAAr8B,OAAAuuF,GACAlyD,EAAA,GAAA95B,QAAA,oBAFA85B,EAAA,OAeC76B,KAAAkhE,EAAAphE,WAMD/B,EAAA6sF,gBAAA,SAAArwE,GACA,IAAA0L,EAAA1L,EAAA0L,QACAA,MAAA+wB,cACA/wB,EAAAqzD,qBACArzD,EAAApC,UAAAmmE,iBACA/jE,EAAA+wB,YAAA/wB,EAAApC,WAEAjlB,KAAAo4C,YAAA/wB,KAAA+wB,YAEA,IAAAksB,EAAA3oD,EAAA2oD,WACAA,IACAA,EAAAlsB,YAAAnf,IAAA,WAAAj5B,KAAAgrF,aACA1mB,EAAAlsB,YAAAnf,IAAA,cAAAj5B,KAAAirF,gBACA3mB,EAAAlsB,YAAAnf,IAAA,cAAAj5B,KAAA8rF,gBACAxnB,EAAAlsB,YAAAnf,IAAA,eAAAj5B,KAAA+rF,iBACAznB,EAAAlsB,YAAAzM,KAAA1S,IAAA,SAAAj5B,KAAAisF,yBACA3nB,EAAAlsB,YAAAjtB,OAAA8N,IAAA,SAAAj5B,KAAAisF,0BAGA5kE,IACAA,EAAA+wB,YAAAjwB,GAAA,WAAAnoB,KAAAgrF,aACA3jE,EAAA+wB,YAAAjwB,GAAA,cAAAnoB,KAAAirF,gBACA5jE,EAAA+wB,YAAAjwB,GAAA,cAAAnoB,KAAA8rF,gBACAzkE,EAAA+wB,YAAAjwB,GAAA,eAAAnoB,KAAA+rF,iBACA1kE,EAAA+wB,YAAAzM,KAAAxjB,GAAA,SAAAnoB,KAAAisF,yBACA5kE,EAAA+wB,YAAAjtB,OAAAhD,GAAA,SAAAnoB,KAAAisF,0BAGA5kE,GAAArnB,KAAA8rB,mBAAAzE,EAAApC,UAAA6G,oBACAzE,EAAApC,UAAA6G,kBACA9rB,KAAA8rF,iBAEA9rF,KAAA+rF,oBA+CA5sF,EAAAysF,cAGApqF,EAAA,YAAA44B,cAAAkoC,EAAAphE,UAAA,UACAqtF,mBACArlF,IAAA,SAAA6d,GACA6kE,EAAA5rF,MACA+mB,GACA/mB,KAAAmoB,GAAA,gBAAAnoB,KAAA6rF,6BACA7rF,KAAAmoB,GAAA,YAAAkC,KAEArqB,KAAAi5B,IAAA,gBAAAj5B,KAAA6rF,6BACA7rF,KAAAi5B,IAAA,YAAA5O,KAGAviB,OAAA,GAEA0mF,mBACAtlF,IAAA,SAAA6d,GACA/mB,KAAA8pF,oBAAA/iE,GAEAjf,OAAA,OAQAnF,IAAAzC,OAAA,iFAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAAoqC,EAAA9nC,EAAA,eAAA8nC,MAEAmlD,EAAAtvF,EAAAsvF,SAAA,cAEA,WAEAzuF,KAAA0uF,mBAAA,KACA1uF,KAAA2uF,kBAAA,KACA3uF,KAAAqsD,cAAA,SAAAhlC,EAAA8pD,EAAAnmD,GACA,IAAA6a,EAAAxe,EAAAmY,QAAAxU,GACA,OAAAhrB,KAAA0uF,mBAAA3rF,KAAA8iC,GACA,QACA,gBAAAsrC,GACAnxE,KAAA2uF,mBACA3uF,KAAA2uF,kBAAA5rF,KAAA8iC,GACA,MACA,IAGA7lC,KAAAssD,mBAAA,SAAAjlC,EAAA8pD,EAAAnmD,GACA,aAGAhrB,KAAA4uF,iBAAA,SAAAvnE,EAAA2D,EAAAE,GACA,IAAAwR,EAAA,KACAmJ,EAAAxe,EAAAmY,QAAAxU,GACA6jE,EAAAhpD,EAAA2J,OAAA9S,GACA,OAAAmyD,EAAA,CAQA,IALA,IAAArlD,EAAAte,GAAA2a,EAAAjmC,OACA46D,EAAAnzC,EAAAkK,YACAgY,EAAAve,EACAye,EAAAze,IAEAA,EAAAwvC,GAAA,CACA,IAAA7xB,EAAAthB,EAAAmY,QAAAxU,GAAAwkB,OAAA9S,GAEA,OAAAiM,EAAA,CAGA,GAAAA,GAAAkmD,EACA,MAEAplD,EAAAze,GAGA,GAAAye,EAAAF,EAAA,CACA,IAAAG,EAAAriB,EAAAmY,QAAAiK,GAAA7pC,OACA,WAAA0pC,EAAAC,EAAAC,EAAAC,EAAAC,MAIA1pC,KAAA8uF,oBAAA,SAAAznE,EAAA8zB,EAAAnwB,EAAAE,EAAAojC,GACA,IAAApoD,GAAqB8kB,MAAAE,SAAA,GACrBrB,EAAAxC,EAAAymC,oBAAA3S,EAAAj1C,EAAAooD,GACA,GAAAzkC,EAAA,CAGA,IAAAwjC,EAAAhmC,EAAA+X,YAAAvV,EAAAmB,KAQA,OAPA,MAAAqiC,IACAA,EAAAhmC,EAAAglC,cAAAxiC,EAAAmB,MAEA,SAAAqiC,GAAAxjC,EAAAmB,IAAA9kB,EAAA8kB,MACAnB,EAAAmB,MACAnB,EAAAqB,OAAA7D,EAAAmY,QAAA3V,EAAAmB,KAAAprB,QAEA0pC,EAAAuB,WAAA3kC,EAAA2jB,KAGA7pB,KAAA+uF,oBAAA,SAAA1nE,EAAA8zB,EAAAnwB,EAAAE,EAAAojC,GACA,IAAAzkC,GAAmBmB,MAAAE,UACnBhlB,EAAAmhB,EAAAmyB,oBAAA2B,EAAAtxB,GAEA,GAAA3jB,EAMA,OAHAA,EAAAglB,SACArB,EAAAqB,SAEAoe,EAAAuB,WAAA3kC,EAAA2jB,MAECzoB,KAAAqtF,EAAAvtF,aAIDyB,IAAAzC,OAAA,2EAAAsB,EAAArC,EAAAD,GACA,aAEAC,EAAA2lF,QAAA,EACA3lF,EAAAylF,SAAA,SACAzlF,EAAAgO,QAAA,s0EAyHA3L,EAAA,cACA0L,gBAAA/N,EAAAgO,QAAAhO,EAAAylF,YAGAjiF,IAAAzC,OAAA,mGAAAsB,EAAArC,EAAAD,GACA,aAEAsC,EAAA,iBACAqhB,EAAArhB,EAAA,aACAA,EAAA,WAAA8nC,MAGA,SAAA0lD,EAAA3nE,GACArnB,KAAAqnB,UACArnB,KAAAqnB,QAAA4nE,cAAAjvF,KACAA,KAAAqnB,QAAAuyC,aAAA55D,KAAA45D,aACA55D,KAAAqnB,QAAAyzC,uBAAA96D,KAAA86D,uBACA96D,KAAAkvF,eAAAlvF,KAAAkvF,eAAA1qF,KAAAxE,MACAA,KAAAmvF,cAAAnvF,KAAAmvF,cAAA3qF,KAAAxE,MACAA,KAAAovF,eAAApvF,KAAAovF,eAAA5qF,KAAAxE,MACAA,KAAAqnB,QAAAgoE,mBACArvF,KAAAsvF,gBAAAtvF,KAAAsvF,gBAAA9qF,KAAAxE,MAEAA,KAAAqnB,QAAAc,GAAA,SAAAnoB,KAAAkvF,gBACAlvF,KAAAqnB,QAAAc,GAAA,aAAAnoB,KAAAuvF,cACAvvF,KAAAqnB,QAAAc,GAAA,eAAAnoB,KAAAsvF,kBAGA,WACAtvF,KAAA45D,aAAA,SAAA5uC,GACA,IAAAqV,EAKA,OAHAA,EADArgC,KAAA2wC,aACA3wC,KAAA2wC,YAAA3lB,IAAAhrB,KAAA2wC,YAAA3lB,GAAAosB,UAEA,EACAp3C,KAAAknC,cAAAlnC,KAAAonC,UAAApc,GAGAhrB,KAAAonC,UAAApc,GAAAprB,OAAA,EAAAygC,EAFA,EAAAA,GAMArgC,KAAA86D,uBAAA,WACA,IAAAD,EAAA,EAKA,OAJA76D,KAAA2wC,YAAArpC,QAAA,SAAAytD,GACAA,KAAA3d,WAAA2d,EAAAy6B,SACA30B,GAAA9F,EAAA3d,YAEAyjB,GAGA76D,KAAAsvF,gBAAA,SAAA3zE,GACA3b,KAAAugC,OAAA5kB,EAAAwO,SAGAnqB,KAAAugC,OAAA,SAAApW,GACAA,KAAA8kE,eAAA9kE,EAAA8kE,eAAAjvF,MACAmqB,EAAA8kE,cAAAzuD,SAEAxgC,KAAAmqB,YAGAnqB,KAAAwgC,SACAxgC,KAAAmqB,SAEAA,IACAA,EAAA8kE,cAAAjvF,KACAmqB,EAAArC,SAAAK,GAAA,eAAAnoB,KAAAovF,gBACAjlE,EAAArC,SAAAK,GAAA,cAAAnoB,KAAAmvF,kBAGAnvF,KAAAwgC,OAAA,SAAA7kB,GACA,IAAAwO,EAAAnqB,KAAAmqB,OACA,GAAAA,EAAA,CAGAnqB,KAAAmqB,OAAA,KACAA,EAAA8kE,cAAA,KAEA9kE,EAAArC,SAAAmR,IAAA,eAAAj5B,KAAAovF,gBACAjlE,EAAArC,SAAAmR,IAAA,cAAAj5B,KAAAmvF,eACA,IAAAx+C,EAAA3wC,KAAAqnB,QAAAspB,YACAA,KAAArpC,QAAA,SAAAytD,GACAA,KAAA3oD,IAAA2oD,EAAA3oD,GAAAyD,aACAklD,EAAA06B,aAAA,EACA16B,EAAA3oD,GAAAyD,WAAAb,YAAA+lD,EAAA3oD,SAKApM,KAAAuvF,aAAA,SAAA5zE,EAAA0L,GACA,IAAAspB,EAAAtpB,EAAAspB,YACA,GAAAA,GAAAh1B,EAAAkpB,OAAA,CAMA,IAJA,IAAA7F,EAAArjB,EAAAyE,KACAla,EAAA84B,EAAA94B,MAAA8kB,IACAnB,EAAAmV,EAAAnV,IAAAmB,IACA4E,EAAA,OAAAjU,EAAAkpB,OACAtlC,EAAA2G,EAAA,EAA+B3G,EAAAsqB,EAAStqB,IACxCoxC,EAAApxC,KACAoxC,EAAApxC,GAAAiwF,OAAA5/D,GAEA+gB,EAAA9mB,KACA+F,EACA+gB,EAAAzqC,GAGAyqC,EAAA9mB,GAAA2lE,OAAA5/D,EAFA+gB,EAAAzqC,GAAAyqC,EAAA9mB,IAIA8mB,EAAAzqC,IAAAyqC,EAAA9mB,KACA8mB,EAAAzqC,QAAAjF,GACA0vC,EAAA9mB,GAAA2lE,OAAA5/D,MAKA5vB,KAAAkvF,eAAA,SAAA1oD,GACA,IAAAmK,EAAA3wC,KAAAqnB,QAAAspB,YACA,GAAAA,EAAA,CAEA,IAAApH,EAAA/C,EAAAtgC,MAAA8kB,IACAmY,EAAAqD,EAAA3c,IAAAmB,IAAAue,EAEA,OAAApG,QACS,aAAAqD,EAAA3B,OAAA,CACT8L,EAAA9qC,OAAA0jC,EAAA,EAAApG,GACA77B,QAAA,SAAAytD,GACAA,GAAA/0D,KAAA0vF,iBAAA36B,IACa/0D,MACbA,KAAA2vF,kBACS,CACT,IAAAhrF,EAAA,IAAAf,MAAAu/B,GACAx+B,EAAAyvC,QAAA7K,EAAA,GACAoH,EAAA9qC,OAAApF,MAAAkwC,EAAAhsC,GACA3E,KAAA2vF,iBAIA3vF,KAAA2vF,YAAA,WACA,IAAAh/C,EAAA3wC,KAAAqnB,QAAAspB,YACA,GAAAA,EAAA,CACA,IAAAi/C,GAAA,EACAj/C,EAAArpC,QAAA,SAAAytD,EAAAx1D,GACA,GAAAw1D,EAGA,IAFA66B,GAAA,EACA76B,EAAA/pC,IAAAzrB,EACAw1D,EAAA86B,YACA96B,EAAA86B,WAAA7kE,IAAAzrB,EACAw1D,IAAA86B,aAIAD,IACA5vF,KAAAqnB,QAAAspB,YAAA,QAGA3wC,KAAA8vF,cAAA,SAAA/6B,GACA/0D,KAAAqnB,QAAAspB,cACA3wC,KAAAqnB,QAAAspB,YAAA,IAAA/sC,MAAA5D,KAAAqnB,QAAAkK,cAEA,IAAAqH,EAAA54B,KAAAqnB,QAAAspB,YAAAokB,EAAA/pC,KACA4N,IACAm8B,EAAA86B,WAAAj3D,EACAA,EAAAxsB,IAAAwsB,EAAAxsB,GAAAyD,aACA+oB,EAAAxsB,GAAAyD,WAAAb,YAAA4pB,EAAAxsB,IACAwsB,EAAA62D,aAAA,IAIAzvF,KAAAqnB,QAAAspB,YAAAokB,EAAA/pC,KAAA+pC,EAEAA,EAAA1tC,QAAArnB,KAAAqnB,QAEA,IAAAS,EAAA9nB,KAAAmqB,OAAArC,SACAitC,EAAAvlC,OAAAulC,EAAA3oD,KACA2oD,EAAA3oD,GAAAyW,EAAA1Y,cAAA,OACA4qD,EAAA3oD,GAAAwD,UAAAmlD,EAAAvlC,MAEAulC,EAAA3oD,KACAyW,EAAAvW,YAAAyoD,EAAA3oD,GAAA,2BACA2oD,EAAA3oD,GAAAgB,MAAAqB,SAAA,WACAsmD,EAAA3oD,GAAAgB,MAAA2iF,OAAA,EACAjoE,EAAAe,UAAAxb,YAAA0nD,EAAA3oD,IACA2oD,EAAA06B,aAAA,GAGA16B,EAAAi7B,cACAj7B,EAAA3oD,GAAAgB,MAAA2iF,OAAA,GAEA,MAAAh7B,EAAAk7B,cACAl7B,EAAAk7B,YAAAl7B,EAAA3oD,GAAA0jB,cAEA,MAAAilC,EAAA3d,WACA2d,EAAA3d,SAAA2d,EAAAk7B,YAAAnoE,EAAA0L,YAAAD,YAGA,IAAAyL,EAAAh/B,KAAAqnB,QAAA4X,UAAA81B,EAAA/pC,IAAA,GAEA,GADA+pC,EAAAm7B,MAAAlxD,EACAA,EAAA,CACA,IAAA2R,EAAA3wC,KAAAqnB,QAAAspB,YACAokB,EAAA/pC,KAAAgU,EAAAnV,IAAAmB,KAAA2lB,EAAA3R,EAAA94B,MAAA8kB,KAGA+pC,EAAAy6B,QAAA,EAFA7+C,EAAA3R,EAAA94B,MAAA8kB,KAAA+pC,EAUA,OALA/0D,KAAAqnB,QAAAmB,MAAA,cAA0CpI,MAAMla,OAAO8kB,IAAA+pC,EAAA/pC,QAEvDhrB,KAAA2vF,cACA3vF,KAAAmvF,cAAA,KAAArnE,GACA9nB,KAAAmwF,gBAAAp7B,GACAA,GAGA/0D,KAAA0vF,iBAAA,SAAA36B,GAKA,GAJAA,EAAA06B,aAAA,EACA16B,EAAA1tC,QAAA,KACA0tC,EAAA3oD,IAAA2oD,EAAA3oD,GAAAyD,YACAklD,EAAA3oD,GAAAyD,WAAAb,YAAA+lD,EAAA3oD,IACA2oD,EAAA5qC,QAAA4qC,EAAA5qC,OAAA6F,QAAA,IACA+kC,EAAA5qC,OAAA6F,UACS,MAAArU,IACT,GAAA3b,KAAAqnB,QAAAspB,YAAA,CACA,IAAAy/C,EAAApwF,KAAAqnB,QAAAspB,YAAAokB,EAAA/pC,KACA,GAAAolE,GAAAr7B,EACA/0D,KAAAqnB,QAAAspB,YAAAokB,EAAA/pC,KAAA+pC,EAAA86B,WACA96B,EAAA86B,YACA7vF,KAAAmwF,gBAAAp7B,EAAA86B,iBAEA,KAAAO,GAAA,CACA,GAAAA,EAAAP,YAAA96B,EAAA,CACAq7B,EAAAP,WAAA96B,EAAA86B,WACA,MAEAO,IAAAP,YAIA7vF,KAAAqnB,QAAAmB,MAAA,cAA0CpI,MAAMla,OAAO8kB,IAAA+pC,EAAA/pC,QACvDhrB,KAAA2vF,eAGA3vF,KAAAqwF,gBAAA,SAAArlE,GAIA,IAHA,IAAA2lB,EAAA3wC,KAAAqnB,QAAAspB,YACAokB,EAAApkB,KAAA3lB,GACA8qB,KACAif,GACAjf,EAAAr0C,KAAAszD,GACAA,IAAA86B,WAEA,OAAA/5C,GAGA91C,KAAAmwF,gBAAA,SAAAp7B,GACA/0D,KAAAqnB,QAAAgoE,gBAAA5tF,KAAAszD,GACA/0D,KAAAmqB,QAAAnqB,KAAAmqB,OAAArC,SAAAq+C,cAGAnmE,KAAAovF,eAAA,SAAAzzE,EAAAmM,GACA,IAAAwoE,EAAAtwF,KAAAqnB,QAAAgoE,gBACAlyD,EAAArV,EAAA0L,YAEA,GAAA88D,KAAA1wF,OAAA,CAEA,IADA,IAAAgH,EAAA23C,IACAh/C,EAAA,EAAuBA,EAAA+wF,EAAA1wF,OAA2BL,IAAA,CAClD,IAAAw1D,EAAAu7B,EAAA/wF,GACA,GAAAw1D,KAAA3oD,IACA2oD,EAAA1tC,SAAArnB,KAAAqnB,QAAA,CACA,IAAA0tC,EAAA06B,YAAA,CACA,GAAAzvF,KAAAqnB,QAAAspB,YAAAokB,EAAA/pC,MAAA+pC,EACA,SACAA,EAAA06B,aAAA,EACA3nE,EAAAe,UAAAxb,YAAA0nD,EAAA3oD,IAGA2oD,EAAA10B,EAAA00B,EAAA3oD,GAAA0jB,aAEAilC,EAAAw7B,aACAx7B,MAAA3oD,GAAA0C,YACAimD,EAAAF,YAAAvuD,KAAA8tE,KAAArf,IAAA53B,EAAA1J,iBAGA,IAAA2jB,EAAA2d,EAAA10B,EAAAlD,EAAA5J,WACAwhC,EAAAy7B,YACAp5C,GAAAp3C,KAAAqnB,QAAAwyC,gBAAA9E,EAAA/pC,MACA,IACAosB,EAAA,GAEA2d,EAAA3d,cACA2d,EAAA3d,WACA2d,EAAA/pC,IAAApkB,IACAA,EAAAmuD,EAAA/pC,OAGApkB,GAAA23C,MACAv+C,KAAAqnB,QAAAmB,MAAA,cAA8CpI,MAAMla,OAAO8kB,IAAApkB,MAC3D5G,KAAAqnB,QAAA2tC,gBAAA,MAEAh1D,KAAAqnB,QAAAgoE,qBAGArvF,KAAAmvF,cAAA,SAAAxzE,EAAAmM,GACA,IAAAqV,EAAArV,EAAA0L,YACAmd,EAAA3wC,KAAAqnB,QAAAspB,YACA,GAAAA,EAAA,CAKA,IAHA,IAAAuV,EAAA5/C,KAAAM,IAAA5G,KAAA2qC,SAAAxN,EAAAwN,UACAhqB,EAAAra,KAAAC,IAAAvG,KAAA4qC,QAAAzN,EAAAyN,QAAA+F,EAAA/wC,QAEAsmD,EAAA,IAAAvV,EAAAuV,IACAA,IAEAlmD,KAAA2qC,SAAAxN,EAAAwN,SACA3qC,KAAA4qC,QAAAzN,EAAAyN,QAEA9iB,EAAAwM,aAAA6I,SACA,QAAA59B,EAAA2mD,EAA2B3mD,GAAAohB,EAAWphB,IAAA,CACtC,IAAAw1D,EAAApkB,EAAApxC,GACA,GAAAw1D,KAAA3oD,GACA,GAAA2oD,EAAAy6B,OACAz6B,EAAA3oD,GAAAgB,MAAA2b,KAAA,KAAAgsC,EAAAk7B,aAAA,YADA,CAIAl7B,EAAA06B,cACA16B,EAAA06B,aAAA,EACA3nE,EAAAe,UAAAxb,YAAA0nD,EAAA3oD,KAEA,IAAA2c,EAAAjB,EAAAwM,aAAAkmD,kBAA8DxvD,IAAAzrB,EAAA2rB,OAAA,IAAiB,GAAAnC,IAC/EgsC,EAAAy7B,YACAznE,GAAAoU,EAAA5J,WAAAvzB,KAAAqnB,QAAAwyC,gBAAA9E,EAAA/pC,MACA+pC,EAAA3oD,GAAAgB,MAAA2b,MAAAoU,EAAAlb,OAAA,KAEA,IAAAvT,EAAAqmD,EAAAi7B,YAAA,EAAAloE,EAAAirD,YACAhe,EAAAw7B,aACA7hF,GAAAoZ,EAAAxY,YACAylD,EAAA3oD,GAAAgB,MAAAsB,OAAA,KAEAqmD,EAAA07B,WAAA17B,EAAAF,cACAE,EAAA3oD,GAAAgB,MAAAiB,SAAA8uB,EAAA/uB,MAAA,EAAA+uB,EAAA82C,QAAA,MAGAlf,EAAAw7B,WACAx7B,EAAA3oD,GAAAgB,MAAAwc,MAAA9B,EAAAs2D,UAAAruD,WAAA,KAEAglC,EAAA3oD,GAAAgB,MAAAwc,MAAA,SAKCxoB,KAAA4tF,EAAA9tF,WAGD/B,EAAA6vF,gBAIArsF,IAAAzC,OAAA,4GAAAsB,EAAArC,EAAAD,GACA,aACA,IAAA8vF,EAAAxtF,EAAA,mBAAAwtF,YACAnsE,EAAArhB,EAAA,cACA8nC,EAAA9nC,EAAA,YAAA8nC,MAuDAnqC,EAAAigE,gBAAA,SAAAj1C,EAAA4W,GACA,IAAA1Z,EAAA8C,EAAA9C,QACAA,EAAA4nE,gBACA5nE,EAAA4nE,cAAA,IAAAD,EAAA3nE,GACAA,EAAA4nE,cAAA1uD,OAAApW,IAGA,IAAA/jB,EAAA+jB,EAAA+uB,oBACAluB,EAAA5kB,EAAA4kB,IACA0lE,EAAArpE,EAAA4nE,cAAAoB,gBAAArlE,GAAAnjB,OAAA,SAAAktD,GACA,qBAAAA,EAAA95C,OACK,GACLy1E,EACAA,EAAA1gE,UAEAhF,GAAA+V,EAEA,IACA4vD,EADA79B,EArDA,SAAAzrC,EAAA2D,EAAA+V,GACA,IAAA+xB,EAAAzrC,EAAA0rC,iBAAA3L,KAAA9d,EAAAgC,eACA,GAAAwnB,EAAAlzD,OAAA,CAGA,IAAAL,EAtBA,SAAAkE,EAAAu4D,EAAA40B,GAIA,IAHA,IAAA1qC,EAAA,EACAvlC,EAAAld,EAAA7D,OAAA,EAEAsmD,GAAAvlC,GAAA,CACA,IAAAgvC,EAAAzJ,EAAAvlC,GAAA,EACAgH,EAAAipE,EAAA50B,EAAAv4D,EAAAksD,IACA,GAAAhoC,EAAA,EACAu+B,EAAAyJ,EAAA,MACA,MAAAhoC,EAAA,GAGA,OAAAgoC,EAFAhvC,EAAAgvC,EAAA,GAIA,QAAAzJ,EAAA,GAQA2qC,CAAA/9B,GAAuC9nC,MAAAE,QAAA,GAAqBoe,EAAAgC,eAC5D/rC,EAAA,IACAA,KAAA,GAEAA,GAAAuzD,EAAAlzD,OACAL,EAAAwhC,EAAA,IAAA+xB,EAAAlzD,OAAA,EACA,IAAAL,GAAAwhC,EAAA,IACAxhC,EAAAuzD,EAAAlzD,OAAA,GAEA,IAAAyxB,EAAAyhC,EAAAvzD,GACA,GAAA8xB,GAAA0P,EAAA,CAGA,GAAA1P,EAAArG,QAAA,CACA,GACAqG,EAAAyhC,EAAAvzD,GAAAwhC,SACS1P,KAAArG,SACT,IAAAqG,EACA,OAAAyhC,EAAA9wD,QAIA,IAAA8uF,KACA9lE,EAAAqG,EAAArG,IACA,GACA8lE,EAAA/vD,EAAA,oBAAA1P,GACAA,EAAAyhC,EAAAvzD,GAAAwhC,SACK1P,KAAArG,QACL,OAAA8lE,EAAAlxF,QAAAkxF,IAoBAC,CAAA1pE,EAAA2D,EAAA+V,GAEA,GAAA+xB,EAAA,CACA,IAAAzhC,EAAAyhC,EAAA,GACA1sD,EAAA8kB,QAAAmG,EAAAjrB,KAAA,iBAAAirB,EAAAnG,OACAmG,EAAAjrB,IAAAu1D,GACAtqC,EAAAnG,SAAA,EACA9kB,EAAA4kB,IAAAqG,EAAArG,IACA2lE,EAAAxmE,EAAArC,SAAA6I,aAAAW,aAAAlrB,EAAA4kB,SACK,IAAA0lE,EACL,OAEAC,GACAttE,MAAA,eACAhX,UAAA,UAGA8d,EAAA9C,QAAAgkC,OAAAjlD,EAAA4kB,KACAb,EAAAlF,UAAA0G,eAAAvlB,GAEA,IAAA2uD,GACA/pC,IAAA5kB,EAAA4kB,IACAulE,YAAA,EACAP,aAAA,EACA5jF,GAAAyW,EAAA1Y,cAAA,OACA8Q,KAAA,eAEA7O,EAAA2oD,EAAA3oD,GAAAiB,YAAAwV,EAAA1Y,cAAA,QACA6mF,EAAAj8B,EAAA3oD,GAAAiB,YAAAwV,EAAA1Y,cAAA,QACA6mF,EAAA3kF,UAAA,sBAAAskF,EAAAtkF,UAEA,IAAAqC,EAAAyb,EAAArC,SAAAwM,aACAkmD,iBAAAp0E,GAAAsI,KACAsiF,EAAA5jF,MAAAsB,OAAAyb,EAAArC,SAAAirD,YAAA,OAEAhe,EAAA3oD,GAAAC,UAAA,uBACAD,EAAAC,UAAA,gBAAAskF,EAAAtkF,UACAD,EAAAwD,UAAA+gF,EAAAttE,KAAAphB,KAAA,QAEAmK,EAAAiB,YAAAwV,EAAA1Y,cAAA,QAEA,IAAA61B,EAAA,SAAAlI,EAAA1Y,EAAA1G,GACA,OAAA0G,IAAA,QAAA1G,GAAA,WAAAA,GAEA,OADAq8C,EAAA/kC,WACoBne,QAAA,SAIpBkjD,EAAA/kC,QAAA,WACA7F,EAAAu4C,cAAAtxC,iBAEAjH,EAAAw4C,WAAA1iC,sBAAAD,GACA3Y,EAAA4nE,cAAAS,iBAAA36B,GACA5qC,EAAA8O,IAAA,kBAAA87B,EAAA/kC,SACA7F,EAAA8O,IAAA,gBAAA87B,EAAA/kC,SACA7F,EAAA8O,IAAA,UAAA87B,EAAA/kC,SACA7F,EAAA8O,IAAA,SAAA87B,EAAA/kC,WAGA7F,EAAAw4C,WAAAxiC,mBAAAH,GACA7V,EAAAhC,GAAA,kBAAA4sC,EAAA/kC,SACA7F,EAAAhC,GAAA,gBAAA4sC,EAAA/kC,SACA7F,EAAAhC,GAAA,UAAA4sC,EAAA/kC,SACA7F,EAAAhC,GAAA,SAAA4sC,EAAA/kC,SAEA7F,EAAA9C,QAAA4nE,cAAAa,cAAA/6B,GAEAA,EAAA3oD,GAAA6kF,YAAA9mE,EAAA5F,MAAA/f,KAAA2lB,GAEAA,EAAArC,SAAA8E,qBAAA,SAAqDzD,OAAA4rC,EAAA3oD,GAAA0jB,gBAIrDjN,EAAA3V,gBAAA,u3BAiCA,MAIAvK,IAAAzC,OAAA,oWAAAsB,EAAArC,EAAAD,GACA,aAEAsC,EAAA,wBAEA,IAAAqhB,EAAArhB,EAAA,aACA6Z,EAAA7Z,EAAA,eAEA8gE,EAAA9gE,EAAA,YAAA8gE,OACA1T,EAAAptD,EAAA,kBAAAotD,YACAwiB,EAAA5vE,EAAA,iBAAA4vE,YACA8f,EAAA1vF,EAAA,sBAAAk8E,gBACAl8E,EAAA,0BACAA,EAAA,2BACAA,EAAA,iBACAA,EAAA,kBACAA,EAAA,4BACAA,EAAA,oBACAA,EAAA,sBAEArC,EAAAg+B,OAAA37B,EAAA,YACArC,EAAAqC,WAGArC,EAAAe,OAAqBk7B,EAAA,QACrBj8B,EAAAgyF,KAAA,SAAA/kF,GACA,oBAAAA,EAAA,CACA,IAAAglF,EAAAhlF,EAEA,KADAA,EAAAlC,SAAAmnF,eAAAD,IAEA,UAAAtxF,MAAA,4BAAAsxF,GAGA,GAAAhlF,KAAAklF,KAAAllF,EAAAklF,IAAAnnE,kBAAAm4C,EACA,OAAAl2D,EAAAklF,IAAAnnE,OAEA,IAAAriB,EAAA,GACA,GAAAsE,GAAA,kBAAArJ,KAAAqJ,EAAAmlF,SAAA,CACA,IAAAC,EAAAplF,EACAtE,EAAA0pF,EAAA1pF,MACAsE,EAAAyW,EAAA1Y,cAAA,OACAqnF,EAAA3hF,WAAAC,aAAA1D,EAAAolF,QACKplF,IACLtE,EAAA+a,EAAA3S,aAAA9D,GACAA,EAAAwD,UAAA,IAGA,IAAA/D,EAAA1M,EAAAsyF,kBAAA3pF,GAEAqiB,EAAA,IAAAm4C,EAAA,IAAA4uB,EAAA9kF,IACA+d,EAAA64C,WAAAn3D,GAEA,IAAAylF,GACApnF,SAAA2B,EACAse,SACAq8C,SAAAr8C,EAAAo8C,OAAA/hE,KAAA2lB,EAAA,OASA,OAPAqnE,IAAAF,EAAA7uB,SAAA+uB,GACAn2E,EAAAN,YAAA9a,OAAA,SAAAqxF,EAAA9qB,UACAr8C,EAAAhC,GAAA,qBACA9M,EAAAE,eAAAtb,OAAA,SAAAqxF,EAAA9qB,UACA8qB,EAAAnnE,OAAAtB,UAAAyoE,IAAA,OAEAnnE,EAAAtB,UAAAyoE,IAAAnnE,EAAAmnE,MACAnnE,GAEAhrB,EAAAsyF,kBAAA,SAAApuE,EAAAkzB,GACA,IAAA1qC,EAAA,IAAA+iD,EAAAvrC,EAAAkzB,GAEA,OADA1qC,EAAAwkD,eAAA,IAAA+gB,GACAvlE,GAEA1M,EAAAyvD,cACAzvD,EAAAiyE,cACAjyE,EAAAuyF,QAAA,UAGA/uF,IAAAnB,UAAA,oBAAAuE,GAOA,QAAAzG,KANAyG,IACAA,EAAAo3B,OAAAhC,MAAA,GACAp1B,EAAA7F,OAAAyC,IAAAzC,QAEAD,OAAA0C,MACA1C,OAAA0C,IAAAoD,GACAA,IAAAP,eAAAlG,KACAW,OAAA0C,IAAArD,GAAAyG,EAAAzG,MAIAJ,EAAAC,QAAAc,OAAA0C,IAAAnB,SAAA,gCC/ynBA,SAAAma,GAAa,SAAA0S,EAAA5iB,GAAc,GAAAE,EAAAF,GAAA,OAAAE,EAAAF,GAAAtM,QAA4B,IAAAgoB,EAAAxb,EAAAF,IAAYlM,EAAAkM,EAAAnK,GAAA,EAAAnC,YAAqB,OAAAwc,EAAAlQ,GAAArK,KAAA+lB,EAAAhoB,QAAAgoB,IAAAhoB,QAAAkvB,GAAAlH,EAAA7lB,GAAA,EAAA6lB,EAAAhoB,QAA2D,IAAAwM,KAAS0iB,EAAA4N,EAAAtgB,EAAA0S,EAAA1G,EAAAhc,EAAA0iB,EAAAi7C,EAAA,SAAA3tD,EAAAhQ,EAAAF,GAAgC4iB,EAAA1iB,EAAAgQ,EAAAhQ,IAAAjM,OAAAoK,eAAA6R,EAAAhQ,GAAqC7C,cAAA,EAAAD,YAAA,EAAAI,IAAAwC,KAAsC4iB,EAAA5iB,EAAA,SAAAkQ,GAAiB,IAAAhQ,EAAAgQ,KAAAg2E,WAAA,WAAiC,OAAAh2E,EAAAi2E,SAAiB,WAAY,OAAAj2E,GAAU,OAAA0S,EAAAi7C,EAAA39D,EAAA,IAAAA,MAAsB0iB,EAAA1iB,EAAA,SAAAgQ,EAAA0S,GAAmB,OAAA3uB,OAAAwB,UAAAsE,eAAApE,KAAAua,EAAA0S,IAAiDA,EAAAyb,EAAA,GAAAzb,IAAAuJ,EAAA,GAA1b,EAA2c,SAAAjc,EAAA0S,EAAA1iB,GAAkB,aAAa,IAAAF,EAAA,mBAAAomF,QAAA,iBAAAA,OAAA72C,SAAA,SAAAr/B,GAA8E,cAAAA,GAAgB,SAAAA,GAAa,OAAAA,GAAA,mBAAAk2E,QAAAl2E,EAAAlT,cAAAopF,QAAAl2E,IAAAk2E,OAAA3wF,UAAA,gBAAAya,GAAoGm2E,GAAW,EAAXA,GAAW,EAAsBvyF,GAAA,gLAAAq4B,EAAA,SAAAjc,EAAA0S,GAAoM,gBAAA1S,KAAA,IAAApc,EAAAM,QAAAwuB,IAAAyjE,IAAoL,EAAzZnmF,EAAA,GAAyZomF,kCAAuF,SAAAp2E,GAAaq2E,YAAA9wF,UAAAga,iBAAA,SAAAmT,EAAA1iB,EAAAwb,GAAuD,IAAA5nB,EAAA,qBAAA4nB,EAAA,YAAA1b,EAAA0b,KAAA,OAAAA,EAAA2iB,EAAAvqC,EAAA4nB,EAAA5K,QAAA4K,GAAyEA,EAAA5nB,EAAvW,SAAAoc,GAAe,IAAA0S,EAAA3uB,OAAAgJ,yBAAAiT,EAAA,WAAmD,OAAA0S,IAAA,IAAAA,EAAA3d,eAAA,IAAA2d,EAAAnlB,IAAAxJ,OAAAuyF,UAA0Dt2E,KAA2OgM,CAAAR,OAAW+qE,QAAAt6D,EAAAzQ,EAAA+qE,QAAA7jE,GAAAlH,EAAA5K,aAAA,IAAAutB,EAAAgoD,EAAAhoD,EAAAnuB,EAAAva,KAAApB,KAAAquB,EAAA1iB,EAAAwb,IAA8E6qE,YAAA9wF,UAAAga,iBAAAi3E,UAAAx2E,EAAtO,CAA7Cq2E,YAAA9wF,UAAAga,mBAA4U,SAAAS,EAAA0S,EAAA1iB,GAAiB,aAAajM,OAAAoK,eAAAukB,EAAA,cAAsCvmB,OAAA,IAAWumB,EAAA0jE,8BAAA,WAA2C,IAAAp2E,GAAA,EAAS,IAAI,IAAA0S,EAAA3uB,OAAAoK,kBAA8B,WAAYb,IAAA,WAAe0S,GAAA,KAAQ1b,OAAAib,iBAAA,YAAAmT,GAAApuB,OAAAub,oBAAA,YAAA6S,GAAiF,MAAA1S,IAAU,OAAAA,4BCA3uD,IAAAy2E,EAAmCh3D,EAAQ,QAqB3Cl8B,EAAAC,QAnBA,SAAAC,EAAAC,GACA,SAAAD,EAAA,SACA,IACAE,EAAAC,EADAC,EAAA4yF,EAAAhzF,EAAAC,GAGA,GAAAK,OAAA2yF,sBAAA,CACA,IAAAC,EAAA5yF,OAAA2yF,sBAAAjzF,GAEA,IAAAG,EAAA,EAAeA,EAAA+yF,EAAA1yF,OAA6BL,IAC5CD,EAAAgzF,EAAA/yF,GACAF,EAAAQ,QAAAP,IAAA,GACAI,OAAAwB,UAAAoI,qBAAAlI,KAAAhC,EAAAE,KACAE,EAAAF,GAAAF,EAAAE,IAIA,OAAAE,yBClBA,IAAAmD,EAAUy4B,EAAQ,QAElBl8B,EAAAC,SACAozF,OAAA,SAAAlyD,GAGA,OAAAA,EAAA,OACAmyD,OACAplF,MAAA,YAJApN,KAAAsO,OAAAtO,KAAAyyF,GAAAzyF,KAAAsO,QAAA,QAIA,aAHAtO,KAAAoO,MAAApO,KAAAyyF,GAAAzyF,KAAAoO,OAAA,YAOAsT,OACA5Z,OACAmT,KAAAhY,OACAyvF,UAAA,GAEA5vE,KAAA7f,OACAyjE,MAAAzjE,OACAqL,QAAA,EACAF,OAAA,EACAisB,QAAA36B,QAEA0gB,KAAA,WACA,OACA+J,OAAA,KACAwoE,cAAA,KAGAC,SACAH,GAAA,SAAAhnF,GACA,cAAA1I,KAAA0I,GACAA,EAAA,KAEAA,IAGAonF,OACA/qF,MAAA,SAAAif,GACA/mB,KAAA2yF,gBAAA5rE,IACA/mB,KAAAmqB,OAAA9C,QAAA07B,SAAAh8B,EAAA,GACA/mB,KAAA2yF,cAAA5rE,IAGA2/C,MAAA,SAAAosB,GACA9yF,KAAAmqB,OAAAs8C,SAAA,aAAAqsB,IAEAhwE,KAAA,SAAAiwE,GACA/yF,KAAAmqB,OAAAk8C,aAAAhX,QAAA,YAAA0jC,IAEA14D,QAAA,SAAA24D,GACAhzF,KAAAmqB,OAAAiP,WAAA45D,IAEA1kF,OAAA,WACAtO,KAAAizF,UAAA,WACAjzF,KAAAmqB,OAAAo8C,YAGAn4D,MAAA,WACApO,KAAAizF,UAAA,WACAjzF,KAAAmqB,OAAAo8C,aAIA2sB,cAAA,WACAlzF,KAAAmqB,OAAA6F,UACAhwB,KAAAmqB,OAAAtB,UAAAliB,UAEAwsF,QAAA,WACA,IAAAC,EAAApzF,KACA8iB,EAAA9iB,KAAA8iB,MAAA,OACA4jD,EAAA1mE,KAAA0mE,OAAA,SAEQtrC,EAAQ,QAEhB,IAAAjR,EAAAipE,EAAAjpE,OAAAxnB,EAAAwuF,KAAAnxF,KAAAqzF,KAEArzF,KAAAszF,MAAA,OAAAnpE,GAEAA,EAAAuB,gBAAA6yB,IAEAp0B,EAAAk8C,aAAAhX,QAAA,YAAAvsC,GACAqH,EAAAs8C,SAAA,aAAAC,GACAv8C,EAAA44B,SAAA/iD,KAAA8H,MAAA,GACA9H,KAAA2yF,cAAA3yF,KAAA8H,MAEAqiB,EAAAhC,GAAA,oBACA,IAAAw1D,EAAAxzD,EAAA64B,WACAowC,EAAAE,MAAA,QAAA3V,GACAyV,EAAAT,cAAAhV,IAEAyV,EAAA/4D,SACAlQ,EAAAiP,WAAAg6D,EAAA/4D,+BC5FA13B,IAAAzC,OAAA,wHAAAsB,EAAArC,EAAAD,GACA,aAEA,IAAA4R,EAAAtP,EAAA,cACA6yC,EAAA7yC,EAAA,0BAAA6yC,mBAEAk/C,EAAA,WAEAvzF,KAAAs0C,QAAmBpuC,QACTusC,OACV,qBACA,gCACA,qBACA,kCACA5uC,MAAA,iEACU4uC,MAAA,gCACV5uC,MAAA,sCACApC,OACegxC,MAAA,gCACf5uC,MAAA,UACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,kCACf6M,QAAA,mDACUtM,MAAA,gCACV5uC,MAAA,iCACApC,OACegxC,MAAA,gCACf5uC,MAAA,UACAowC,KAAA,QACe/B,aAAA,kCACf6M,QAAA,mDACUtM,MAAA,gCACV5uC,MAAA,sCACApC,OACegxC,MAAA,gCACf5uC,MAAA,UACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,kCACf6M,QAAA,mDACUtM,MAAA,gCACV5uC,MAAA,iCACApC,OACegxC,MAAA,gCACf5uC,MAAA,UACAowC,KAAA,QACe/B,aAAA,kCACf6M,QAAA,mDACUtM,MAAA,8BACV5uC,MAAA,6BACAk7C,QAAA,2CACUtM,MAAA,+BACV5uC,MAAA,yBACApC,OACegxC,MAAA,+BACf5uC,MAAA,IACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,iCACf6M,QAAA,iDACUtM,MAAA,yBACV5uC,MAAA,uSACA2vF,KAAA,2CACAC,cAAA,+SACUhhD,MAAA,0BACV5uC,MAAA,iDACA2vF,KAAA,2CACAC,cAAA,uDACA10C,QAAA,oEACUtM,MAAA,2BACV5uC,MAAA,qCACU4uC,MAAA,2BACV5uC,MAAA,gDACU4uC,OACV,yCACA,0CACA5uC,MAAA,uBACU4uC,OACV,yCACA,mCACA5uC,MAAA,cACU4uC,MAAA,iCACV5uC,MAAA,oBACU4uC,MAAA,0BACV5uC,MAAA,iJACA2vF,KAAA,2CACAC,cAAA,6HACUhhD,MAAA,yCACV5uC,MAAA,KACApC,OACegxC,MAAA,yCACf5uC,MAAA,IACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,iDACLO,MAAA,yCACV5uC,MAAA,KACApC,OACegxC,MAAA,yCACf5uC,MAAA,IACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,iDACLO,MAAA,6CACV5uC,MAAA,UACA2vF,KAAA,2CACAC,cAAA,UACAhyF,OACegxC,MAAA,2CACf5uC,MAAA,WACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,2DACf6M,QAAA,2BACUtM,MAAA,6CACV5uC,MAAA,IACApC,OACegxC,MAAA,2CACf5uC,MAAA,IACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,mDACf6M,QAAA,oDACUtM,MAAA,6CACV5uC,MAAA,UACA2vF,KAAA,2CACAC,cAAA,UACAhyF,OACegxC,MAAA,2CACf5uC,MAAA,WACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,wCACf6M,QAAA,2BACUtM,MAAA,6CACV5uC,MAAA,IACApC,OACegxC,MAAA,2CACf5uC,MAAA,IACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,gCACf6M,QAAA,oDACUtM,MAAA,6CACV5uC,MAAA,gBACA2vF,KAAA,2CACAC,cAAA,gBACAhyF,OACegxC,MAAA,2CACf5uC,MAAA,WACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,wCACf6M,QAAA,kCACUtM,MAAA,6CACV5uC,MAAA,YACApC,OACegxC,MAAA,2CACf5uC,MAAA,YACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,+BACf6M,QAAA,oCACUtM,MAAA,6CACV5uC,MAAA,YACApC,OACegxC,MAAA,2CACf5uC,MAAA,YACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,+BACf6M,QAAA,oCACUtM,MAAA,6CACV5uC,MAAA,YACApC,OACegxC,MAAA,2CACf5uC,MAAA,YACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,+BACf6M,QAAA,oCACUtM,MAAA,6CACV5uC,MAAA,YACApC,OACegxC,MAAA,2CACf5uC,MAAA,YACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAslC,aAAA,+BACf6M,QAAA,oCACUtM,MAAA,6CACV5uC,MAAA,eACApC,OACegxC,MAAA,2CACf5uC,MAAA,eACAowC,KAAA,QACernC,QAAA,yBACAA,QAAA,kBACAA,QAAA,kBACAslC,aAAA,+BACf6M,QAAA,oCACUtM,MAAA,6CACV5uC,MAAA,gBACA2vF,KAAA,2CACAC,cAAA,gBACAhyF,OACegxC,MAAA,2CACf5uC,MAAA,WACAowC,KAAA,QACe/B,aAAA,6CACf6M,QAAA,kCACUtM,MAAA,6CACV5uC,MAAA,YACApC,OACegxC,MAAA,2CACf5uC,MAAA,YACAowC,KAAA,QACe/B,aAAA,6CACf6M,QAAA,kCACUtM,MAAA,6CACV5uC,MAAA,YACApC,OACegxC,MAAA,2CACf5uC,MAAA,YACAowC,KAAA,QACe/B,aAAA,6CACf6M,QAAA,kCACUtM,MAAA,6CACV5uC,MAAA,YACApC,OACegxC,MAAA,2CACf5uC,MAAA,YACAowC,KAAA,QACe/B,aAAA,6CACf6M,QAAA,kCACUtM,MAAA,6CACV5uC,MAAA,YACApC,OACegxC,MAAA,2CACf5uC,MAAA,YACAowC,KAAA,QACe/B,aAAA,6CACf6M,QAAA,kCACUtM,MAAA,6CACV5uC,MAAA,eACApC,OACegxC,MAAA,2CACf5uC,MAAA,eACAowC,KAAA,QACe/B,aAAA,6CACf6M,QAAA,kCACUtM,OAAA,yEACV5uC,MAAA,sNACA2vF,KAAA,2CACAC,cAAA,4NACA10C,QAAA,YACUtM,MAAA,yCACV5uC,MAAA,sCACA2vF,KAAA,2CACAC,cAAA,wCACA10C,QAAA,YACUtM,OACV,wCACA,mCACA5uC,MAAA,YACU4uC,MAAA,0BACV5uC,MAAA,uEACA2vF,KAAA,2CACAC,cAAA,2DACA10C,QAAA,4YACUtM,MAAA,+CACV5uC,MAAA,6BACU4uC,MAAA,qCACV5uC,MAAA,sBACU4uC,MAAA,kCACV5uC,MAAA,sCACU4uC,MAAA,kCACV5uC,MAAA,sDACA4vF,cAAA,mEACUhhD,MAAA,qCACV5uC,MAAA,kBACU4uC,MAAA,gCACV5uC,MAAA,0FACU4uC,MAAA,qCAAA5uC,MAAA,MACA4uC,MAAA,qCAAA5uC,MAAA,MACA4uC,MAAA,yCACV5uC,MAAA,QACU4uC,MAAA,sCAAA5uC,MAAA,MACA4uC,MAAA,sCAAA5uC,MAAA,QACA4uC,MAAA,mCAAA5uC,MAAA,YACA4uC,MAAA,mCAAA5uC,MAAA,YACA4uC,MAAA,sCACV5uC,MAAA,YACA6vF,kBACUjhD,MAAA,mCACV5uC,MAAA,gCACA8vF,yBACUlhD,OACV,gCACA,uCACA5uC,MAAA,gBACU+vF,MACGnhD,MAAA,sCACb5uC,MAAA,OACApC,OACkBgxC,MAAA,sCAClB5uC,MAAA,MACAowC,KAAA,QACkBrnC,QAAA,yBACAA,QAAA,UACAslC,aAAA,qCAClB2hD,yBACUphD,MAAA,mCACV5uC,MAAA,MACApC,OACegxC,MAAA,mCACf5uC,MAAA,MACAowC,KAAA,QACernC,QAAA,2BACLA,QAAA,UACVknF,eACUlnF,QAAA,yBACAA,QAAA,kBACA6lC,OACV,qDACA,4CACA,4CACA,sDACA5uC,MAAA,iCACU4uC,MAAA,gDACV5uC,MAAA,kBACApC,OACegxC,MAAA,gDACf5uC,MAAA,MACAowC,KAAA,QACernC,QAAA,kBACAslC,aAAA,2CACLO,MAAA,sCACV5uC,MAAA,MACApC,OACegxC,MAAA,sCACf5uC,MAAA,MACAowC,KAAA,QACernC,QAAA,eACAslC,aAAA,iCACLO,OACV,wC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","file":"static/js/chunk-2561.93a05adb.js","sourcesContent":["function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (acequire, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _acequire = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && acequire.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar acequire = function(module, callback) {\n var packagedModule = _acequire(\"\", module, callback);\n if (packagedModule == undefined && acequire.original)\n return acequire.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin acequires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative acequires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _acequire(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.acequire || !root.acequire.packaged) {\n acequire.original = root.acequire;\n root.acequire = acequire;\n root.acequire.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n\n if (compliantLastIndexIncrement && compliantExecNpcg)\n return;\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name, r2;\n if ( typeof(str) == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined)\n match[i] = undefined;\n }\n });\n }\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name)\n match[name] = match[i];\n }\n }\n if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n }\n return match;\n };\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags (regex) {\n return (regex.global ? \"g\" : \"\") +\n (regex.ignoreCase ? \"i\" : \"\") +\n (regex.multiline ? \"m\" : \"\") +\n (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n (regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf (array, item, from) {\n if (Array.prototype.indexOf) // Use the native array method if available\n return array.indexOf(item, from);\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item)\n return i;\n }\n return -1;\n }\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) { // .length is 1\n var target = this;\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n var args = slice.call(arguments, 1); // for normal call\n var bound = function () {\n\n if (this instanceof bound) {\n\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n\n }\n\n };\n if(target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n return bound;\n };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n if(function() { // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l+2);\n a[0] = a[1] = 0;\n return a;\n }\n var array = [], lengthBefore;\n \n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n\n lengthBefore = array.length; //46\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length\n\n if (lengthBefore + 1 == array.length) {\n return true;// has right splice implementation without bugs\n }\n }()) {//IE 6/7\n var array_splice = Array.prototype.splice;\n Array.prototype.splice = function(start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [\n start === void 0 ? 0 : start,\n deleteCount === void 0 ? (this.length - start) : deleteCount\n ].concat(slice.call(arguments, 2)))\n }\n };\n } else {//IE8\n Array.prototype.splice = function(pos, removeCount){\n var length = this.length;\n if (pos > 0) {\n if (pos > length)\n pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n\n if (!(pos+removeCount < length))\n removeCount = length - pos;\n\n var removed = this.slice(pos, pos+removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length; \n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n\n if (tailNewPos < tailOldPos) { // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } else if (tailNewPos > tailOldPos) { // case B\n for (i = tailCount; i--; ) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } // else, add == remove (nothing to do)\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n for (i = 0; i < add; ++i) {\n this[pos+i] = insert[i];\n }\n }\n }\n return removed;\n };\n }\n}\nif (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n}\nvar boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n}\nif (!Array.prototype.map) {\n Array.prototype.map = function map(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self)\n result[i] = fun.call(thisp, self[i], i, object);\n }\n return result;\n };\n}\nif (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n return result;\n };\n}\nif (!Array.prototype.every) {\n Array.prototype.every = function every(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n return true;\n };\n}\nif (!Array.prototype.some) {\n Array.prototype.some = function some(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n return false;\n };\n}\nif (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n}\nif (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n\n var result, i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n i = i >= 0 ? i : Math.max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (\n object.constructor ?\n object.constructor.prototype :\n prototypeOfObject\n );\n };\n}\nif (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n \"non-object: \";\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property))\n return;\n\n var descriptor, getter, setter;\n descriptor = { enumerable: true, configurable: true };\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n descriptor.value = object[property];\n return descriptor;\n };\n}\nif (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n}\nif (!Object.create) {\n var createEmpty;\n if (Object.prototype.__proto__ === null) {\n createEmpty = function () {\n return { \"__proto__\": null };\n };\n } else {\n createEmpty = function () {\n var empty = {};\n for (var i in empty)\n empty[i] = null;\n empty.constructor =\n empty.hasOwnProperty =\n empty.propertyIsEnumerable =\n empty.isPrototypeOf =\n empty.toLocaleString =\n empty.toString =\n empty.valueOf =\n empty.__proto__ = null;\n return empty;\n }\n }\n\n Object.create = function create(prototype, properties) {\n var object;\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (typeof prototype != \"object\")\n throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n var Type = function () {};\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n if (properties !== void 0)\n Object.defineProperties(object, properties);\n return object;\n };\n}\n\nfunction doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {\n }\n}\nif (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n doesDefinePropertyWork(document.createElement(\"div\"));\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {\n }\n }\n if (owns(descriptor, \"value\")) {\n\n if (supportsAccessors && (lookupGetter(object, property) ||\n lookupSetter(object, property)))\n {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors)\n throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\"))\n defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\"))\n defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n}\nif (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property))\n Object.defineProperty(object, property, properties[property]);\n }\n return object;\n };\n}\nif (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n}\nif (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n}\ntry {\n Object.freeze(function () {});\n} catch (exception) {\n Object.freeze = (function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n}\nif (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n}\nif (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n}\nif (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n var name = '';\n while (owns(object, name)) {\n name += '?';\n }\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n}\nif (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\n \"toString\",\n \"toLocaleString\",\n \"valueOf\",\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"constructor\"\n ],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\"toString\": null}) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n\n if (\n (typeof object != \"object\" && typeof object != \"function\") ||\n object === null\n ) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n return keys;\n };\n\n}\nif (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n}\n\nfunction toInteger(n) {\n n = +n;\n if (n !== n) { // isNaN\n n = 0;\n } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n}\n\nfunction isPrimitive(input) {\n var type = typeof input;\n return (\n input === null ||\n type === \"undefined\" ||\n type === \"boolean\" ||\n type === \"number\" ||\n type === \"string\"\n );\n}\n\nfunction toPrimitive(input) {\n var val, valueOf, toString;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toString = input.toString;\n if (typeof toString === \"function\") {\n val = toString.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n}\nvar toObject = function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \"+o+\" to object\");\n }\n return Object(o);\n};\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./regexp\");\nacequire(\"./es5-shim\");\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.hasCssClass = function(el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n};\n\nexports.hasCssString = function(id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n\n if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n while (index < sheets.length)\n if (sheets[index++].owningElement.id === id) return true;\n } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\n while (index < sheets.length)\n if (sheets[index++].id === id) return true;\n }\n\n return false;\n};\n\nexports.importCssString = function importCssString(cssText, id, doc) {\n doc = doc || document;\n if (id && exports.hasCssString(id, doc))\n return null;\n \n var style;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n if (doc.createStyleSheet) {\n style = doc.createStyleSheet();\n style.cssText = cssText;\n if (id)\n style.owningElement.id = id;\n } else {\n style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n exports.getDocumentHead(doc).appendChild(style);\n }\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n if (doc.createStyleSheet) {\n doc.createStyleSheet(uri);\n } else {\n var link = exports.createElement('link');\n link.rel = 'stylesheet';\n link.href = uri;\n\n exports.getDocumentHead(doc).appendChild(link);\n }\n};\n\nexports.getInnerWidth = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \n element.clientWidth\n );\n};\n\nexports.getInnerHeight = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\n element.clientHeight\n );\n};\n\nexports.scrollbarWidth = function(document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n exports.importCssString = function() {};\n return;\n}\n\nif (window.pageYOffset !== undefined) {\n exports.getPageScrollTop = function() {\n return window.pageYOffset;\n };\n\n exports.getPageScrollLeft = function() {\n return window.pageXOffset;\n };\n}\nelse {\n exports.getPageScrollTop = function() {\n return document.body.scrollTop;\n };\n\n exports.getPageScrollLeft = function() {\n return document.body.scrollLeft;\n };\n}\n\nif (window.getComputedStyle)\n exports.computedStyle = function(element, style) {\n if (style)\n return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n return window.getComputedStyle(element, \"\") || {};\n };\nelse\n exports.computedStyle = function(element, style) {\n if (style)\n return element.currentStyle[style];\n return element.currentStyle;\n };\nexports.setInnerHtml = function(el, innerHtml) {\n var element = el.cloneNode(false);//document.createElement(\"div\");\n element.innerHTML = innerHtml;\n el.parentNode.replaceChild(element, el);\n return element;\n};\n\nif (\"textContent\" in document.documentElement) {\n exports.setInnerText = function(el, innerText) {\n el.textContent = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.textContent;\n };\n}\nelse {\n exports.setInnerText = function(el, innerText) {\n el.innerText = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.innerText;\n };\n}\n\nexports.getParentWindow = function(document) {\n return document.defaultView || document.parentWindow;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./fixoldbrowsers\");\n\nvar oop = acequire(\"./oop\");\nvar Keys = (function() {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n },\n\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n },\n\n FUNCTION_KEYS : {\n 8 : \"Backspace\",\n 9 : \"Tab\",\n 13 : \"Return\",\n 19 : \"Pause\",\n 27 : \"Esc\",\n 32 : \"Space\",\n 33 : \"PageUp\",\n 34 : \"PageDown\",\n 35 : \"End\",\n 36 : \"Home\",\n 37 : \"Left\",\n 38 : \"Up\",\n 39 : \"Right\",\n 40 : \"Down\",\n 44 : \"Print\",\n 45 : \"Insert\",\n 46 : \"Delete\",\n 96 : \"Numpad0\",\n 97 : \"Numpad1\",\n 98 : \"Numpad2\",\n 99 : \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n \n (function() {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) { \n ret.KEY_MODS[i] = mods.filter(function(x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nif (typeof navigator != \"object\")\n return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\nexports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/)||[])[1], 10) < 4;\nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keys = acequire(\"./keys\");\nvar useragent = acequire(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.addListener = function(elem, type, callback) {\n if (elem.addEventListener) {\n return elem.addEventListener(type, callback, false);\n }\n if (elem.attachEvent) {\n var wrapper = function() {\n callback.call(elem, window.event);\n };\n callback._wrapper = wrapper;\n elem.attachEvent(\"on\" + type, wrapper);\n }\n};\n\nexports.removeListener = function(elem, type, callback) {\n if (elem.removeEventListener) {\n return elem.removeEventListener(type, callback, false);\n }\n if (elem.detachEvent) {\n elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n }\n};\nexports.stopEvent = function(e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n else\n e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n if (e.preventDefault)\n e.preventDefault();\n else\n e.returnValue = false;\n};\nexports.getButton = function(e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n if (e.preventDefault) {\n return e.button;\n }\n else {\n return {1:0, 2:2, 4:1}[e.button];\n }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n \n return onMouseUp;\n};\n\nexports.addTouchMoveListener = function (el, callback) {\n var startx, starty;\n exports.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n var touchObj = touches[0];\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n });\n exports.addListener(el, \"touchmove\", function (e) {\n var touches = e.touches;\n if (touches.length > 1) return;\n\n var touchObj = touches[0];\n\n e.wheelX = startx - touchObj.clientX;\n e.wheelY = starty - touchObj.clientY;\n\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n\n callback(e);\n });\n};\n\nexports.addMouseWheelListener = function(el, callback) {\n if (\"onmousewheel\" in el) {\n exports.addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n });\n } else if (\"onwheel\" in el) {\n exports.addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n });\n } else {\n exports.addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n });\n }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\n var clicks = 0;\n var startX, startY, timer; \n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n } else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n function onDblclick(e) {\n clicks = 2;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function(el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE)\n exports.addListener(el, \"dblclick\", onDblclick);\n });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n ? function(e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n }\n : function(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n keyCode = -1;\n }\n \n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n \n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n \n return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\n var addListener = exports.addListener;\n if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function(e) {\n lastKeyDownKeyCode = e.keyCode;\n });\n addListener(el, \"keypress\", function(e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n });\n } else {\n var lastDefaultPrevented = null;\n\n addListener(el, \"keydown\", function(e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n });\n\n addListener(el, \"keypress\", function(e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n });\n\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n });\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function(callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId;\n exports.addListener(win, \"message\", function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n exports.removeListener(win, \"message\", listener);\n callback();\n }\n });\n win.postMessage(messageName, \"*\");\n };\n}\n\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i<l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else \n copy[i] = array[i];\n }\n return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n \n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\nexports.arrayToMap = function(arr) {\n var map = {};\n for (var i=0; i<arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n\n};\n\nexports.createMap = function(props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function(array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\n\nexports.escapeRegExp = function(str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n return str.replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n var matches = [];\n\n string.replace(regExp, function(str) {\n matches.push({\n offset: arguments[arguments.length-2],\n length: str.length\n });\n });\n\n return matches;\n};\nexports.deferredCall = function(fcn) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var deferred = function(timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n\n deferred.schedule = deferred;\n\n deferred.call = function() {\n this.cancel();\n fcn();\n return deferred;\n };\n\n deferred.cancel = function() {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n \n deferred.isPending = function() {\n return timer;\n };\n\n return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var _self = function(timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n\n _self.delay = function(timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n\n _self.call = function() {\n this.cancel();\n fcn();\n };\n\n _self.cancel = function() {\n timer && clearTimeout(timer);\n timer = null;\n };\n\n _self.isPending = function() {\n return timer;\n };\n\n return _self;\n};\n});\n\nace.define(\"ace/keyboard/textinput_ios\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/keys\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar KEYS = acequire(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\n\nvar TextInput = function(parentNode, host) {\n var self = this;\n var text = dom.createElement(\"textarea\");\n text.className = useragent.isIOS ? \"ace_text-input ace_text-input-ios\" : \"ace_text-input\";\n\n if (useragent.isTouchPad)\n text.setAttribute(\"x-palm-disable-auto-cap\", true);\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var PLACEHOLDER = \"\\n aaaa a\\n\";\n\n var copied = false;\n var cut = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n\n event.addListener(text, \"blur\", function(e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function(e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n this.focus = function() {\n if (tempStyle) return text.focus();\n text.style.position = \"fixed\";\n text.focus();\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n var syncSelection = lang.delayedCall(function() {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function() {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n\n function resetSelection(isEmpty) {\n if (inComposition)\n return;\n inComposition = true;\n\n if (inputHandler) {\n selectionStart = 0;\n selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = 4;\n var selectionEnd = 5;\n }\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch(e) {}\n\n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition)\n return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit)\n syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function() {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n\n resetValue();\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n\n var onSelect = function(e) {\n if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n\n var sendText = function(data) {\n if (text.selectionStart === 4 && text.selectionEnd === 5) {\n return;\n }\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n if (pasted) {\n resetSelection();\n if (data)\n host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.substr(0) && text.selectionStart === 4) {\n if (afterContextMenu)\n host.execCommand(\"del\", {source: \"ace\"});\n else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {source: \"ace\"});\n } else if (!copied) {\n if (data.substring(0, 9) == PLACEHOLDER && data.length > PLACEHOLDER.length)\n data = data.substr(9);\n else if (data.substr(0, 4) == PLACEHOLDER.substr(0, 4))\n data = data.substr(4, data.length - PLACEHOLDER.length + 1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data == PLACEHOLDER.charAt(0)) {\n } else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n\n if (data)\n host.onTextInput(data);\n }\n if (copied) {\n copied = false;\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n\n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (useragent.isIOS) {\n cut = isCut;\n text.value = \"\\n aa\" + data + \"a a\\n\";\n text.setSelectionRange(4, 4 + data.length);\n copied = {\n value: data\n };\n }\n isCut ? host.onCut() : host.onCopy();\n if (!useragent.isIOS) event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function(e) {\n doCopy(e, true);\n };\n\n var onCopy = function(e) {\n doCopy(e, false);\n };\n\n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly)\n return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\x01/g, \"\");\n if (inComposition.lastValue === val) return;\n\n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function() {\n timer = null;\n var str = text.value.replace(/\\x01/g, \"\");\n if (inComposition)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\x01/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n var needsOnInput =\n (!!useragent.isChrome && useragent.isChrome >= 53) ||\n (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n if (needsOnInput) {\n onInput();\n }\n };\n\n\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule();});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n\n if (useragent.isIOS) {\n var typingResetTimeout = null;\n var typing = false;\n\n parentNode.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n });\n\n parentNode.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n });\n var detectArrowKeys = function(e) {\n if (document.activeElement !== text) return;\n if (typing) return;\n\n if (cut) {\n return setTimeout(function () {\n cut = false;\n }, 100);\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n text.setSelectionRange(4, 5);\n if (selectionStart == selectionEnd) {\n switch (selectionStart) {\n case 0: host.onCommandKey(null, 0, KEYS.up); break;\n case 1: host.onCommandKey(null, 0, KEYS.home); break;\n case 2: host.onCommandKey(null, MODS.option, KEYS.left); break;\n case 4: host.onCommandKey(null, 0, KEYS.left); break;\n case 5: host.onCommandKey(null, 0, KEYS.right); break;\n case 7: host.onCommandKey(null, MODS.option, KEYS.right); break;\n case 8: host.onCommandKey(null, 0, KEYS.end); break;\n case 9: host.onCommandKey(null, 0, KEYS.down); break;\n }\n } else {\n switch (selectionEnd) {\n case 6: host.onCommandKey(null, MODS.shift, KEYS.right); break;\n case 7: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.right); break;\n case 8: host.onCommandKey(null, MODS.shift, KEYS.end); break;\n case 9: host.onCommandKey(null, MODS.shift, KEYS.down); break;\n }\n switch (selectionStart) {\n case 0: host.onCommandKey(null, MODS.shift, KEYS.up); break;\n case 1: host.onCommandKey(null, MODS.shift, KEYS.home); break;\n case 2: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.left); break;\n case 3: host.onCommandKey(null, MODS.shift, KEYS.left); break;\n }\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function() {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/keyboard/textinput_ios\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\n\nvar TextInputIOS = acequire(\"./textinput_ios\").TextInput;\nvar TextInput = function(parentNode, host) {\n if (useragent.isIOS)\n return TextInputIOS.call(this, parentNode, host);\n\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var PLACEHOLDER = \"\\u2028\\u2028\";\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function(e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n this.focus = function() {\n if (tempStyle) return text.focus();\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n text.focus();\n setTimeout(function() {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n var syncSelection = lang.delayedCall(function() {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function() {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n\n function resetSelection(isEmpty) {\n if (inComposition)\n return;\n inComposition = true;\n \n if (inputHandler) {\n var selectionStart = 0;\n var selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = isEmpty ? 2 : 1;\n var selectionEnd = 2;\n }\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch(e){}\n \n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition)\n return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit)\n syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function() {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n\n resetValue();\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n\n var onSelect = function(e) {\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \n var sendText = function(data) {\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n if (pasted) {\n resetSelection();\n if (data)\n host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu)\n host.execCommand(\"del\", {source: \"ace\"});\n else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {source: \"ace\"});\n } else {\n if (data.substring(0, 2) == PLACEHOLDER)\n data = data.substr(2);\n else if (data.charAt(0) == PLACEHOLDER.charAt(0))\n data = data.substr(1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n \n if (data)\n host.onTextInput(data);\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n \n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\n \n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function(e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n });\n }\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) \n return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\u2028/g, \"\");\n if (inComposition.lastValue === val) return;\n \n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function() {\n timer = null;\n var str = text.value.replace(/\\u2028/g, \"\");\n if (inComposition)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\u2028/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n var needsOnInput =\n (!!useragent.isChrome && useragent.isChrome >= 53) ||\n (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n if (needsOnInput) {\n onInput();\n }\n };\n \n \n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule();});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n \n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n }; \n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 250; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n editor.$blockScrolling++;\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n editor.$blockScrolling--;\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n editor.$blockScrolling++;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n editor.$blockScrolling--;\n };\n\n this.select = function() {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function(unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function(ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n \n var editor = this.editor;\n\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = ev.wheelX / dt;\n var vy = ev.wheelY / dt;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n\n var direction = Math.abs(vx / vy);\n\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n\n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.1 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.1 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n this.onTouchMove = function(ev) {\n this.editor._emit(\"mousewheel\", ev);\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n if (cmp < 0)\n return {cursor: range.start, anchor: range.end};\n else\n return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n dom.setInnerText(this.getElement(), text);\n };\n this.setHtml = function(html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function(x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function(className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.show = function(text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n\n this.destroy = function() {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar event = acequire(\"../lib/event\");\nvar Tooltip = acequire(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.removeEventListener(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.setPosition = function(x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera)\n blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function(e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function(){\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function(e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.renderer.$cursorLayer.setBlinking(true);\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function(e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.$blockScrolling += 1;\n editor.moveCursorToPosition(cursor);\n editor.$blockScrolling -= 1;\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {x: x, y: y};\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {row: cursor.row, column: cursor.column};\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n editor.$blockScrolling -= 1;\n if (editor.isFocused() && !isInternal)\n editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function() {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function(type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n\n this.dragWaitEnd = function() {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function(e) {\n this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function(){\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function(e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"./dom\");\n\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function(_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function(url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n\n listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n \n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++)\n listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n var _self = this;\n callback && this.addEventListener(eventName, function newCallback() {\n _self.removeEventListener(eventName, newCallback);\n callback.apply(null, arguments);\n });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = {_disabled_: {}};\n \n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) \n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n \n if (handlers[eventName] == callback) {\n var old = handlers[eventName];\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"no use strict\";\n\nvar oop = acequire(\"./oop\");\nvar EventEmitter = acequire(\"./event_emitter\").EventEmitter;\n\nvar optionsProvider = {\n setOptions: function(optList) {\n Object.keys(optList).forEach(function(key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function(optionNames) {\n var result = {};\n if (!optionNames) {\n optionNames = Object.keys(this.$options);\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function(key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function(name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function(name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\n\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\n\nfunction reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function() { throw e; });\n}\n\nvar AppConfig = function() {\n this.$defaultOptions = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n this.defineOptions = function(obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n\n Object.keys(options).forEach(function(key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = {forwardTo: opt};\n\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n\n return this;\n };\n\n this.resetOptions = function(obj) {\n Object.keys(obj.$options).forEach(function(key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n\n this.setDefaultValue = function(path, name, value) {\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n\n this.setDefaultValues = function(path, optionHash) {\n Object.keys(optionHash).forEach(function(key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n \n this.warn = warn;\n this.reportError = reportError;\n \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"], function(acequire, exports, module) {\n\"no use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar net = acequire(\"./lib/net\");\nvar AppConfig = acequire(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {}\n};\n\nexports.get = function(key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n\n return options[key];\n};\n\nexports.set = function(key, value) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n\n options[key] = value;\n};\n\nexports.all = function() {\n return lang.copyObject(options);\n};\nexports.moduleUrl = function(name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = acequire(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n acequire([moduleName], function(module) {\n exports._emit(\"load.module\", {name: moduleName, module: module});\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function(onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.packaged = packaged || acequire.packaged || module.packaged || (global.define && define.packaged);\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar DefaultHandlers = acequire(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = acequire(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = acequire(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = acequire(\"./dragdrop_handler\").DragdropHandler;\nvar config = acequire(\"../config\");\n\nvar MouseHandler = function(editor) {\n var _self = this;\n this.editor = editor;\n\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\n var focusEditor = function(e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n };\n\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n\n event.addListener(mouseTarget, \"mousedown\", focusEditor);\n event.addListener(gutterEl, \"mousedown\", focusEditor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n }\n\n editor.on(\"mousemove\", function(e){\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n });\n};\n\n(function() {\n this.onMouseEvent = function(name, e) {\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function(name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseWheel = function(name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n \n this.onTouchMove = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = 1;//this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n\n this.setState = function(state) {\n this.state = state;\n };\n\n this.captureMouse = function(ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n\n this.isMousePressed = true;\n var renderer = this.editor.renderer;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$keepTextAreaAtCursor = null;\n\n var self = this;\n var onMouseMove = function(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n\n var onCaptureEnd = function(e) {\n clearInterval(timerId);\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n if (renderer.$keepTextAreaAtCursor == null) {\n renderer.$keepTextAreaAtCursor = true;\n renderer.$moveTextAreaToCursor();\n }\n self.isMousePressed = false;\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n };\n\n var onCaptureInterval = function() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function() {onCaptureEnd(ev);});\n }\n\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n this.releaseMouse = null;\n this.cancelContextMenu = function() {\n var stop = function(e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n}).call(MouseHandler.prototype);\n\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {initialValue: 2},\n dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\n dragEnabled: {initialValue: true},\n focusTimout: {initialValue: 0},\n tooltipFollowsMouse: {initialValue: true}\n});\n\n\nexports.MouseHandler = MouseHandler;\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nfunction FoldHandler(editor) {\n\n editor.on(\"click\", function(e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n\n e.stop();\n }\n });\n\n editor.on(\"gutterclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n\n editor.on(\"gutterdblclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\n }\n }\n e.stop();\n }\n });\n}\n\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keyUtil = acequire(\"../lib/keys\");\nvar event = acequire(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n this.$editor = editor;\n this.$data = {editor: editor};\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n this.setDefaultHandler = function(kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function(kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.addKeyboardHandler = function(kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n\n this.removeKeyboardHandler = function(kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n\n this.getKeyboardHandler = function() {\n return this.$handlers[this.$handlers.length - 1];\n };\n \n this.getStatusText = function() {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function(h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n\n this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e\n );\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 && \n toExecute.passEvent != true && toExecute.command.passEvent != true\n ) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n \n if (!success && hashId == -1) {\n toExecute = {command: \"insertstring\"};\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n \n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n \n return success;\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function(text) {\n this.$callKeyboardHandlers(-1, text);\n };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\n\nvar impTab_LTR = [\t[\t0,\t\t3,\t\t0,\t\t1,\t\t0,\t\t0,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t1,\t\t2,\t\t2,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t0x11,\t\t2,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t1,\t\t0\t],\t[\t0,\t\t3,\t\t0x15,\t\t0x15,\t\t4,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t2,\t\t0\t]\n];\n\nvar impTab_RTL = [\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t1,\t\t0\t],\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t1,\t\t3,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t0x21,\t\t3,\t\t1,\t\t1\t]\n];\n\nvar LTR = 0, RTL = 1;\n\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\n\nvar UnicodeTBL00 = [\nBN,BN,BN,BN,BN,BN,BN,BN,BN,S,B,S,WS,B,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,B,B,B,S,\nWS,ON,ON,ET,ET,ET,ON,ON,ON,ON,ON,ES,CS,ES,CS,CS,\nEN,EN,EN,EN,EN,EN,EN,EN,EN,EN,CS,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,BN,\nBN,BN,BN,BN,BN,B,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nCS,ON,ET,ET,ET,ET,ON,ON,ON,ON,L,ON,ON,BN,ON,ON,\nET,ET,EN,EN,ON,L,ON,ON,ON,EN,L,ON,ON,ON,ON,ON\n];\n\nvar UnicodeTBL20 = [\nWS,WS,WS,WS,WS,WS,WS,WS,WS,WS,WS,BN,BN,BN,L,R\t,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,WS,B,LRE,RLE,PDF,LRO,RLO,CS,\nET,ET,ET,ET,ET,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,CS,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,WS\n];\n\nfunction _computeLevels(chars, levels, len, charTypes) {\n\tvar impTab = dir ? impTab_RTL : impTab_LTR\n\t\t, prevState = null, newClass = null, newLevel = null, newState = 0\n\t\t, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n\n\tif (!charTypes) {\n\t\tfor (i = 0, charTypes = []; i < len; i++) {\n\t\t\tcharTypes[i] = _getCharacterType(chars[i]);\n\t\t}\n\t}\n\thiLevel = dir;\n\tlastArabic = false;\n\thasUBAT_AL = false;\n\thasUBAT_B = false;\n\thasUBAT_S = false;\n\tfor (ix = 0; ix < len; ix++){\n\t\tprevState = newState;\n\t\tclasses[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n\t\tnewState = impTab[prevState][newClass];\n\t\taction = newState & 0xF0;\n\t\tnewState &= 0x0F;\n\t\tlevels[ix] = newLevel = impTab[newState][5];\n\t\tif (action > 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\n\tif (hi == 0) {\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\n\treturn ON;\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = [];\n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar bidiUtil = acequire(\"./lib/bidiutil\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\nvar BidiHandler = function(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.isLastRow = false;\n this.EOF = \"\\xB6\";\n this.seenBidi = false;\n};\n\n(function() {\n this.isBidiRow = function(screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function(delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function() {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function() {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function(docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n\n this.wrapIndent = 0;\n this.isLastRow = (docRow === this.session.getLength() - 1);\n this.line = this.session.getLine(docRow);\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n\n if(splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splits.length - 1]) :\n this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n };\n\n this.updateBidiMap = function() {\n var textCharTypes = [], endOfLine = this.isLastRow ? this.EOF : this.EOL;\n var line = this.line + (this.showInvisibles ? endOfLine : bidiUtil.DOT);\n if (bidiUtil.hasBidiCharacters(line, textCharTypes)) {\n this.bidiMap = bidiUtil.doBidiReorder(line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n this.markAsDirty = function() {\n this.currentRow = null;\n };\n this.updateCharacterWidths = function(fontMetrics) {\n if (!this.seenBidi)\n return;\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = useragent.isChrome ? bidiCharWidth : bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = 0;\n\n this.currentRow = null;\n };\n\n this.getShowInvisibles = function() {\n return this.showInvisibles;\n };\n\n this.setShowInvisibles = function(showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function(eolChar) {\n this.EOL = eolChar;\n };\n\n this.setTextDir = function(isRtlDir) {\n this.isRtlDir = isRtlDir;\n };\n this.getPosLeft = function(col) {\n col -= this.wrapIndent;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(col > 0 ? col - 1 : 0, this.bidiMap),\n levels = this.bidiMap.bidiLevels, left = 0;\n\n if (col === 0 && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (col !== 0 && levels[visualIdx] % 2 === 0)\n left += this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n left += this.wrapIndent * this.charWidths[bidiUtil.L];\n\n return left;\n };\n this.getSelections = function(startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, offset = this.wrapIndent * this.charWidths[bidiUtil.L], selections = [],\n selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false, isSelectedPrev = false, selectionStart = 0;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && (visIdx === levels.length)) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n\n return selections;\n };\n this.offsetToCol = function(posX) {\n var logicalIdx = 0, posX = Math.max(posX, 0),\n offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent) {\n posX -= this.wrapIndent * this.charWidths[bidiUtil.L];\n }\n\n while(posX > offset + charWidth/2) {\n offset += charWidth;\n if(visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n if(posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n return (logicalIdx + this.wrapIndent);\n };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.isEqual = function(range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.inside = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.compare = function(row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.clipRows = function(firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = {row: lastRow + 1, column: 0};\n else if (this.end.row < firstRow)\n var end = {row: firstRow, column: 0};\n\n if (this.start.row > lastRow)\n var start = {row: lastRow + 1, column: 0};\n else if (this.start.row < firstRow)\n var start = {row: firstRow, column: 0};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = {row: row, column: column};\n else\n var end = {row: row, column: column};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.collapseRows = function() {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.moveBy = function(row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Selection = function(session) {\n this.session = session;\n this.doc = session.getDocument();\n\n this.clearSelection();\n this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n\n var self = this;\n this.lead.on(\"change\", function(e) {\n self._emit(\"changeCursor\");\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n\n this.selectionAnchor.on(\"change\", function() {\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return (this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n ));\n };\n this.isMultiLine = function() {\n if (this.isEmpty()) {\n return false;\n }\n\n return this.getRange().isMultiLine();\n };\n this.getCursor = function() {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function(row, column) {\n this.anchor.setPosition(row, column);\n\n if (this.$isEmpty) {\n this.$isEmpty = false;\n this._emit(\"changeSelection\");\n }\n };\n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n else\n return this.anchor.getPosition();\n };\n this.getSelectionLead = function() {\n return this.lead.getPosition();\n };\n this.shiftSelection = function(columns) {\n if (this.$isEmpty) {\n this.moveCursorTo(this.lead.row, this.lead.column + columns);\n return;\n }\n\n var anchor = this.getSelectionAnchor();\n var lead = this.getSelectionLead();\n\n var isBackwards = this.isBackwards();\n\n if (!isBackwards || anchor.column !== 0)\n this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\n if (isBackwards || lead.column !== 0) {\n this.$moveSelection(function() {\n this.moveCursorTo(lead.row, lead.column + columns);\n });\n }\n };\n this.isBackwards = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n this.getRange = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n\n if (this.isEmpty())\n return Range.fromPoints(lead, lead);\n\n if (this.isBackwards()) {\n return Range.fromPoints(lead, anchor);\n }\n else {\n return Range.fromPoints(anchor, lead);\n }\n };\n this.clearSelection = function() {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function() {\n var lastRow = this.doc.getLength() - 1;\n this.setSelectionAnchor(0, 0);\n this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n };\n this.setRange =\n this.setSelectionRange = function(range, reverse) {\n if (reverse) {\n this.setSelectionAnchor(range.end.row, range.end.column);\n this.selectTo(range.start.row, range.start.column);\n } else {\n this.setSelectionAnchor(range.start.row, range.start.column);\n this.selectTo(range.end.row, range.end.column);\n }\n if (this.getRange().isEmpty())\n this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\n mover.call(this);\n };\n this.selectTo = function(row, column) {\n this.$moveSelection(function() {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function(pos) {\n this.$moveSelection(function() {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function(row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function(pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function() {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function() {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function() {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function() {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function() {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function() {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function() {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function() {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function() {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function() {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function(row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function() {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function() {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function() {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function() {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function() {\n this.moveCursorBy(1, 0);\n };\n this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n };\n this.moveCursorLeft = function() {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n this.moveCursorLineStart = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function() {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function() {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function() {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (match = this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var match, index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\n tokenRe.lastIndex = 0;\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index ++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n\n return index;\n };\n\n this.moveCursorShortWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function(rows, chars) {\n var screenPos = this.session.documentToScreenPosition(\n this.lead.row,\n this.lead.column\n );\n\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0)\n docPos.row++;\n }\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n this.moveCursorToPosition = function(position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.moveCursorTo = function(row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function() {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function(range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function(func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start,end);\n } catch(e) {\n return Range.fromPoints(start,start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function() {\n if (this.rangeCount) {\n var data = this.ranges.map(function(r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n\n this.fromJSON = function(data) {\n if (data.start == undefined) {\n if (this.rangeList) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--; ) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else\n data = data[0];\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function(data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--; ) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar config = acequire(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n var flag = \"g\";\n\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", { \n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{type: types, value: str}];\n\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n\n this.$arrayTokens = function(str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.createSplitterRegexp = function(src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\n } else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function(line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else\n var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n \n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\n }\n } else if (type) {\n if (token.type)\n tokens.push(token);\n token = {type: null, value: \"\"};\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 2000),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type)\n tokens.push(token);\n \n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens : tokens,\n state : stack.length ? stack : currentState\n };\n };\n \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\n this.addRules = function(rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function() {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\n\n var pushState = function(currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function() {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function(x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function(x) {return !x.next;});\n state.splice.apply(state, args);\n i--;\n }\n \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function(className) {\n var a = map[className];\n if (ignoreCase)\n a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--; )\n keywords[list[i]] = className;\n });\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n : function(value) {return keywords[value] || defaultToken; };\n };\n\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n \n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.stepForward = function() {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.getCurrentTokenColumn = function() {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n this.getCurrentTokenRange = function() {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n\n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar Behaviour = acequire(\"../behaviour\").Behaviour;\nvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\nvar lang = acequire(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = {rangeCount: editor.multiSelect.rangeCount};\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\n\nvar CstyleBehaviour = function(options) {\n this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n\n this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n\n this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column-1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n } else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1,1]\n };\n }\n }\n });\n\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n\n};\n\n\nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.packages = {};\n\naddUnicodePackage({\n L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n Z: \"002000A01680180E2000-200A20282029202F205F3000\",\n Zs: \"002000A01680180E2000-200A202F205F3000\",\n Zl: \"2028\",\n Zp: \"2029\",\n C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n Cc: \"0000-001F007F-009F\",\n Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n Co: \"E000-F8FF\",\n Cs: \"D800-DFFF\",\n Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n});\n\nfunction addUnicodePackage (pack) {\n var codePoint = /\\w{4}/g;\n for (var name in pack)\n exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n}\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = acequire(\"../unicode\");\nvar lang = acequire(\"../lib/lang\");\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\n );\n\n this.nonTokenRe = new RegExp(\"^(?:[^\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\n );\n\n this.getTokenizer = function() {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function(line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n\n var uncomment = function(line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function(line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n else\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n var testRemove = function(line, i) {\n return regexpStart.test(line);\n };\n \n var shouldInsertSpace = function(line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n return true;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\n\n var minEmptyLength = Infinity;\n iter(function(line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function(state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n this.$embeds.push(i);\n this.$modes[i] = new mapping[i]();\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function() {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n\n this.$delegator = function(method, args, defaultHandler) {\n var state = args[0];\n if (typeof state != \"string\")\n state = state[0];\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function(state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n \n this.getKeywords = function(append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function(word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n \n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.removeEventListener(\"change\", this.$onChange);\n };\n this.attach = function(doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar applyDelta = acequire(\"./apply_delta\").applyDelta;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Anchor = acequire(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setValue = function(text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({row: 0, column: 0}, text);\n };\n this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function() {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function(range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function(row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function(firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function(position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {row: row, column: column};\n };\n \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$clipPosition = function(position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function(row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.insertMergedLines = function(position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.remove = function(range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n });\n return this.clonePos(start);\n };\n this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.removeFullLines = function(firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\n var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\n var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\n var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n \n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function(row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function(range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i<deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n this.revertDeltas = function(deltas) {\n for (var i=deltas.length-1; i>=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function(delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n \n if (isInsert && delta.lines.length > 20000)\n this.$splitAndapplyLargeDelta(delta, 20000);\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n };\n \n this.$splitAndapplyLargeDelta = function(delta, MAX) {\n var lines = delta.lines;\n var l = lines.length;\n var row = delta.start.row; \n var column = delta.start.column;\n var from = 0, to = 0;\n do {\n from = to;\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n if (to > l) {\n delta.lines = chunk;\n delta.start.row = row + from;\n delta.start.column = column;\n break;\n }\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n } while(true);\n };\n this.revertDelta = function(delta) {\n this.applyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n this.indexToPosition = function(index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return {row: i, column: index + lines[i].length + newlineLength};\n }\n return {row: l-1, column: lines[l-1].length};\n };\n this.positionToIndex = function(pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines ++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n \n if (endLine == -1)\n endLine = currentLine;\n\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.start = function(startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function(match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.shiftRow = function(shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function(fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function(row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row)\n {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function(foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar Range = acequire(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n\n return -i-1;\n }\n return -i - 1;\n };\n\n this.add = function(range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function(list) {\n var removed = [];\n for (var i = list.length; i--; ) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\n \n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.clipRows = function(startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n\n var startIndex = this.pointIndex({row: startRow, column: 0});\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function(delta) {\n if (delta.action == \"insert\"){\n var start = delta.start;\n var end = delta.end;\n } else {\n var end = delta.start;\n var start = delta.end;\n }\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n\n var colDiff = -start.column + end.column;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row < startRow)\n continue;\n if (r.start.row > startRow)\n break;\n\n if (r.start.row == startRow && r.start.column >= start.column ) {\n if (r.start.column == start.column && this.$insertRight) {\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$insertRight) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \n if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar RangeList = acequire(\"../range_list\").RangeList;\nvar oop = acequire(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function() {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function(subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n\n if (!this.range.containsRange(fold))\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n consumeRange(fold, this.start);\n\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n\n if (cmp == 0)\n return afterStart.addSubFold(fold);\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterEnd = this.subFolds[j];\n\n if (cmp == 0)\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar FoldLine = acequire(\"./fold_line\").FoldLine;\nvar Fold = acequire(\"./fold\").Fold;\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var fold = folds[i];\n if (fold.range.contains(row, column)) {\n if (side == 1 && fold.range.isEnd(row, column)) {\n continue;\n } else if (side == -1 && fold.range.isStart(row, column)) {\n continue;\n }\n return fold;\n }\n }\n };\n this.getFoldsInRange = function(range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function(ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function(range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function() {\n var folds = [];\n var foldLines = this.$foldData;\n \n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n\n return folds;\n };\n this.getFoldStringAt = function(row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n\n this.getFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n\n this.getFoldedRowCount = function(first, last) {\n var foldData = this.$foldData, rowCount = last-first+1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last-start;\n else\n rowCount = 0; // in one fold\n }\n break;\n } else if (end >= first){\n if (start >= first) // fold inside range\n rowCount -= end-start;\n else\n rowCount -= end-first+1;\n }\n }\n return rowCount;\n };\n\n this.$addFoldLine = function(foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function(a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function(placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n \n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n if (!(startRow < endRow || \n startRow == endRow && startColumn <= endColumn - 2))\n throw new Error(\"The range has to be at least 2 characters width\");\n\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function(subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else\n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else\n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else\n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function(fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function(subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n }\n fold.subFolds = [];\n };\n\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function(location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\")\n range = new Range(location, 0, location, this.getLine(location).length);\n else if (\"row\" in location)\n range = Range.fromPoints(location, location);\n else\n range = location;\n \n folds = this.getFoldsInRangeList(range);\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n if (folds.length)\n return folds;\n };\n this.isRowFolded = function(docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function() {\n var fd = [];\n fd = this.$foldData.map(function(foldLine) {\n var folds = foldLine.folds.map(function(fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function(row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function(startRow, endRow, depth) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n try {\n var fold = this.addFold(\"...\", range);\n if (fold)\n fold.collapseChildren = depth;\n } catch(e) {}\n }\n }\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function(style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n \n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n \n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n \n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n \n this.$toggleFoldWidget = function(row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n \n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \n \n this.toggleFoldWidget = function(toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function(e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\n var chr = line.charAt(pos.column-1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n \n return range;\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\"\n };\n\n this.$findOpeningBracket = function(bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar BidiHandler = acequire(\"./bidihandler\").BidiHandler;\nvar config = acequire(\"./config\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Selection = acequire(\"./selection\").Selection;\nvar TextMode = acequire(\"./mode/text\").Mode;\nvar Range = acequire(\"./range\").Range;\nvar Document = acequire(\"./document\").Document;\nvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.$bidiHandler = new BidiHandler(this);\n this.setDocument(text);\n this.selection = new Selection(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.removeListener(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$resetRowCache = function(docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\n this.$deltasDoc.push(delta);\n if (removedFolds && removedFolds.length != 0) {\n this.$deltasFold.push({\n action: \"removeFolds\",\n folds: removedFolds\n });\n }\n\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function(row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n\n this.$syncInformUndoManager = function() {\n self.$informUndoManager.cancel();\n\n if (self.$deltasFold.length) {\n self.$deltas.push({\n group: \"fold\",\n deltas: self.$deltasFold\n });\n self.$deltasFold = [];\n }\n\n if (self.$deltasDoc.length) {\n self.$deltas.push({\n group: \"doc\",\n deltas: self.$deltasDoc\n });\n self.$deltasDoc = [];\n }\n\n if (self.$deltas.length > 0) {\n undoManager.execute({\n action: \"aceupdate\",\n args: [self.$deltas, self],\n merge: self.mergeUndoDeltas\n });\n }\n self.mergeUndoDeltas = false;\n self.$deltas = [];\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n };\n this.markUndoGroup = function() {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n \n this.$defaultUndoManager = {\n undo: function() {},\n redo: function() {},\n reset: function() {}\n };\n this.getUndoManager = function() {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function() {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function(val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function() {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function() {\n return this.$tabSize;\n };\n this.isTabStop = function(position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function() {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.setBreakpoints = function(rows) {\n this.$breakpoints = [];\n for (var i=0; i<rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoints = function() {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n this.setBreakpoint = function(row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoint = function(row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.addMarker = function(range, clazz, type, inFront) {\n var id = this.$markerId++;\n\n var marker = {\n range : range,\n type : type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz : clazz,\n inFront: !!inFront,\n id: id\n };\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n this.addDynamicMarker = function(marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n this.removeMarker = function(markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n if (marker) {\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n }\n };\n this.getMarkers = function(inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.highlight = function(re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n this.highlightLines = function(startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n this.setAnnotations = function(annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n this.getAnnotations = function() {\n return this.$annotations || [];\n };\n this.clearAnnotations = function() {\n this.setAnnotations([]);\n };\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n this.getWordRange = function(row, column) {\n var line = this.getLine(row);\n\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = {};\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function(mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function(m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.addEventListener(\"update\", function(e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\");\n }\n };\n\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function(w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.revertDeltas(delta.deltas);\n lastUndoRange =\n this.$getUndoSelection(delta.deltas, true, lastUndoRange);\n } else {\n delta.deltas.forEach(function(foldDelta) {\n this.addFolds(foldDelta.folds);\n }, this);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.applyDeltas(delta.deltas);\n lastUndoRange =\n this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var delta = deltas[0];\n var range, point;\n var lastDeltaIsInsert = false;\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n lastDeltaIsInsert = false;\n }\n\n for (var i = 1; i < deltas.length; i++) {\n delta = deltas[i];\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n lastDeltaIsInsert = true;\n } else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n lastDeltaIsInsert = false;\n }\n }\n if (lastUndoRange != null) {\n if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\n lastUndoRange.start.column += range.end.column - range.start.column;\n lastUndoRange.end.column += range.end.column - range.start.column;\n }\n\n var cmp = lastUndoRange.compareRange(range);\n if (cmp == 1) {\n range.setStart(lastUndoRange.start);\n } else if (cmp == -1) {\n range.setEnd(lastUndoRange.end);\n }\n }\n\n return range;\n };\n this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function(x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n this.indentRows = function(startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row=startRow; row<=endRow; row++)\n this.doc.insertInLine({row: row, column: 0}, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function(firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function(x){\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n \n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow+diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len-1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\n\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.setUseWrapMode = function(useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = {min: $printMargin, max: $printMargin};\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function(delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else\n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function(firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n var len = displayed.length;\n displayed.join(\"\")\n .replace(/12/g, function() {\n len -= 1;\n })\n .replace(/2/g, function() {\n len -= 1;\n });\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split --;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split --;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n if (this.lineWidgets)\n var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function(screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - screenColumn % this.$tabSize;\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row+1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if(splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.documentToScreenPosition = function(docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n\n docRow = pos.row;\n docColumn = pos.column;\n\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd, row = 0;\n\n\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ?foldLine.start.row :Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow ++;\n screenRowOffset++;\n }\n textLine = textLine.substring(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function() {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row :Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row ++;\n if (row > foldStart) {\n row = fold.end.row+1;\n fold = this.$foldData[i++];\n foldStart = fold ?fold.start.row :Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) return;\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n \n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n };\n\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n\n}).call(EditSession.prototype);\n\nacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function(value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n }, \n wrapMethod: {\n set: function(val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$modified = true;\n this.$resetRowCache(0);\n this.$updateWrapData(0, this.getLength() - 1);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: { initialValue: true },\n firstLineNumber: {\n set: function() {this._signal(\"changeBreakpoint\");},\n initialValue: 1\n },\n useWorker: {\n set: function(useWorker) {\n this.$useWorker = useWorker;\n\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {initialValue: true},\n tabSize: {\n set: function(tabSize) {\n if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {initialValue: false},\n overwrite: {\n set: function(val) {this._signal(\"changeOverwrite\");},\n initialValue: false\n },\n newLineMode: {\n set: function(val) {this.doc.setNewLineMode(val);},\n get: function() {return this.doc.getNewLineMode();},\n handlesSet: true\n },\n mode: {\n set: function(val) { this.setMode(val); },\n get: function() { return this.$modeId; }\n }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\n var firstRange = null;\n iterator.forEach(function(sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)\n ) {\n firstRange = null;\n return false;\n }\n\n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n \n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function(needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n return re;\n };\n\n this.$matchIterator = function(session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n if (backwards) {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n \n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function(row, startIndex, callback) {\n var line = session.getLine(row);\n var m;\n var last = startIndex;\n re.lastIndex = startIndex;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row,last + length))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keyUtil = acequire(\"../lib/keys\");\nvar useragent = acequire(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.removeCommand = function(command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function(key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n \n key.split(\"|\").forEach(function(keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n var key = parts.pop();\n\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return {key: key, hashId: -1};\n else if (parts.length == 1 && parts[0] == \"shift\")\n return {key: key.toUpperCase(), hashId: -1};\n\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {key: key, hashId: hashId};\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n \n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {command: \"null\"};\n }\n }\n \n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return {command: command};\n };\n \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.exec = function(command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--; ) {\n if (this.exec(command[i], editor, args)) return true;\n }\n return false;\n }\n\n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n if (command.isAvailable && !command.isAvailable(editor))\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function(e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function(x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function(m) {\n return m.map(function(x){\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\nvar config = acequire(\"../config\");\nvar Range = acequire(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n return {win: win, mac: mac};\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function(module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n}, {\n name: \"goToNextError\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/error_marker\", function(module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/error_marker\", function(module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selectall\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function(editor) { editor.selectAll(); },\n readOnly: true\n}, {\n name: \"centerselection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function(editor) { editor.centerSelection(); },\n readOnly: true\n}, {\n name: \"gotoline\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function(editor) {\n var line = parseInt(prompt(\"Enter line number:\"), 10);\n if (!isNaN(line)) {\n editor.gotoLine(line);\n }\n },\n readOnly: true\n}, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function(editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function(editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldall\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldOther\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function(editor) { \n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfoldall\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function(editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findnext\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function(editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findprevious\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function(editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"selectOrFindNext\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function(editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext(); \n },\n readOnly: true\n}, {\n name: \"selectOrFindPrevious\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function(editor) { \n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n}, {\n name: \"find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n },\n readOnly: true\n}, {\n name: \"overwrite\",\n bindKey: \"Insert\",\n exec: function(editor) { editor.toggleOverwrite(); },\n readOnly: true\n}, {\n name: \"selecttostart\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotostart\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectup\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function(editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golineup\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function(editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttoend\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotoend\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectdown\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function(editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golinedown\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function(editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordleft\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function(editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordleft\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function(editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolinestart\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolinestart\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function(editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectleft\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function(editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoleft\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function(editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordright\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordright\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function(editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolineend\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolineend\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function(editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectright\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoright\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function(editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectpagedown\",\n bindKey: \"Shift-PageDown\",\n exec: function(editor) { editor.selectPageDown(); },\n readOnly: true\n}, {\n name: \"pagedown\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function(editor) { editor.scrollPageDown(); },\n readOnly: true\n}, {\n name: \"gotopagedown\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function(editor) { editor.gotoPageDown(); },\n readOnly: true\n}, {\n name: \"selectpageup\",\n bindKey: \"Shift-PageUp\",\n exec: function(editor) { editor.selectPageUp(); },\n readOnly: true\n}, {\n name: \"pageup\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function(editor) { editor.scrollPageUp(); },\n readOnly: true\n}, {\n name: \"gotopageup\",\n bindKey: \"PageUp\",\n exec: function(editor) { editor.gotoPageUp(); },\n readOnly: true\n}, {\n name: \"scrollup\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"scrolldown\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"selectlinestart\",\n bindKey: \"Shift-Home\",\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectlineend\",\n bindKey: \"Shift-End\",\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"togglerecording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function(editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n}, {\n name: \"replaymacro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function(editor) { editor.commands.replay(editor); },\n readOnly: true\n}, {\n name: \"jumptomatching\",\n bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n exec: function(editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selecttomatching\",\n bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n exec: function(editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"expandToMatching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function(editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"passKeysToBrowser\",\n bindKey: bindKey(null, null),\n exec: function() {},\n passEvent: true,\n readOnly: true\n}, {\n name: \"copy\",\n exec: function(editor) {\n },\n readOnly: true\n},\n{\n name: \"cut\",\n exec: function(editor) {\n var range = editor.getSelectionRange();\n editor._emit(\"cut\", range);\n\n if (!editor.selection.isEmpty()) {\n editor.session.remove(range);\n editor.clearSelection();\n }\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"paste\",\n exec: function(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n}, {\n name: \"removeline\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function(editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"duplicateSelection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function(editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"sortlines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function(editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"togglecomment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function(editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"toggleBlockComment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function(editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"modifyNumberUp\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function(editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"modifyNumberDown\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function(editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n }\n}, {\n name: \"undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function(editor) { editor.undo(); }\n}, {\n name: \"redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function(editor) { editor.redo(); }\n}, {\n name: \"copylinesup\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function(editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesup\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function(editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"copylinesdown\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function(editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesdown\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function(editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"del\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function(editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"backspace\",\n bindKey: bindKey(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\n exec: function(editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"cut_or_delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function(editor) { \n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestart\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function(editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineend\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function(editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestarthard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineendhard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordleft\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function(editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordright\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function(editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function(editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockoutdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockindent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function(editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"insertstring\",\n exec: function(editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"inserttext\",\n exec: function(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"splitline\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function(editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"transposeletters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function(editor) { editor.transposeLetters(); },\n multiSelectAction: function(editor) {editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"touppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function(editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"tolowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function(editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"expandtoline\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function(editor) {\n var range = editor.selection.getRange();\n\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"joinlines\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n}, {\n name: \"invertSelection\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for(var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n}];\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar Search = acequire(\"./search\").Search;\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = acequire(\"./commands/default_commands\").commands;\nvar config = acequire(\"./config\");\nvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\nvar Editor = function(renderer, session) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n\n this.$blockScrolling = 0;\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n\n this.setSession(session || new EditSession(\"\"));\n config.resetOptions(this);\n config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n function last(a) {return a[a.length - 1];}\n\n this.selections = [];\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n\n this.on(\"change\", function() {\n this.curOp || this.startOperation();\n this.curOp.docChanged = true;\n }.bind(this), true);\n\n this.on(\"changeSelection\", function() {\n this.curOp || this.startOperation();\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function(commadEvent) {\n if (this.curOp) {\n if (!commadEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commadEvent) {\n this.previousCommand = null;\n commadEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = {\n command: commadEvent.command || {},\n args: commadEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\n this.$blockScrolling++;\n };\n\n this.endOperation = function(e) {\n if (this.curOp) {\n if (e && e.returnValue === false)\n return this.curOp = null;\n this._signal(\"beforeEndOperation\");\n var command = this.curOp.command;\n if (command.name && this.$blockScrolling > 0)\n this.$blockScrolling--;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n \n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function(e) {\n if (!this.$mergeUndoDeltas)\n return;\n\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function(keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.$blockScrolling += 1;\n this.onCursorChange();\n this.$blockScrolling -= 1;\n \n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n\n if (session && session.bgTokenizer)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container, \"fontSize\");\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function() {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\n\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function() {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = session.findMatchingBracket(self.getCursorPosition());\n if (pos) {\n var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n } else if (session.$mode.getMatching) {\n var range = session.$mode.getMatching(self.session);\n }\n if (range)\n session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value == '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<'){\n depth++;\n } else if (prevToken.value === '</'){\n depth--;\n }\n }\n \n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\n }\n }\n } while (prevToken && depth <= 0);\n iterator.stepForward();\n }\n \n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column+token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n \n if (range && !session.$tagHighlight)\n session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.focus = function() {\n var _self = this;\n setTimeout(function() {\n _self.textInput.focus();\n });\n this.textInput.focus();\n };\n this.isFocused = function() {\n return this.textInput.isFocused();\n };\n this.blur = function() {\n this.textInput.blur();\n };\n this.onFocus = function(e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n this.onBlur = function(e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function() {\n this.renderer.updateCursor();\n };\n this.onDocumentChange = function(delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n this.$cursorChange();\n this.$updateHighlightActiveLine();\n };\n\n this.onTokenizerUpdate = function(e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n\n this.onScrollTopChange = function() {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function() {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n this.onCursorChange = function() {\n this.$cursorChange();\n\n if (!this.$blockScrolling) {\n config.warn(\"Automatically scrolling cursor into view after selection change\",\n \"this will be disabled in the next version\",\n \"set editor.$blockScrolling = Infinity to disable this message\"\n );\n this.renderer.scrollCursorIntoView();\n }\n\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function() {\n var session = this.getSession();\n\n var highlight;\n if (this.$highlightActiveLine) {\n if ((this.$selectionStyle != \"line\" || !this.selection.isMultiLine()))\n highlight = this.getCursorPosition();\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var startOuter = selection.start.column - 1;\n var endOuter = selection.end.column + 1;\n var line = session.getLine(selection.start.row);\n var lineCols = line.length;\n var needle = line.substring(Math.max(startOuter, 0),\n Math.min(endOuter, lineCols));\n if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\n (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\n return;\n\n needle = line.substring(selection.start.column, selection.end.column);\n if (!/^[\\w\\d]+$/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n\n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function() {\n var text = this.getSelectedText();\n this._signal(\"copy\", text);\n return text;\n };\n this.onCopy = function() {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function() {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function(text, event) {\n var e = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n this.insert(text);\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n \n if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n return this.commands.exec(\"insertstring\", this, text);\n \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n this.session.remove(range);\n \n this.session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n this.session.mergeUndoDeltas = false;\n this.$mergeNextCommand = false;\n }\n text = transform.text;\n\n }\n }\n \n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n var end = session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n transform.selection[3]));\n }\n }\n\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n };\n\n this.onTextInput = function(text) {\n this.keyBinding.onTextInput(text);\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function(overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function() {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function() {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function(speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function() {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function(dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function() {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function(val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function() {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function(shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function() {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column-1);\n range = new Range(cursor.row, column-1, cursor.row, column+1);\n }\n else {\n swap = line.charAt(column-1) + line.charAt(column-2);\n range = new Range(cursor.row, column-2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n \n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i-rows.first]);\n }\n };\n this.toggleCommentLines = function() {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function() {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if(m.index <= column && m.index+m[0].length >= column){\n var number = {\n value: m[0],\n start: m.index,\n end: m.index+m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function(amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column-1, row, column);\n\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n }\n }\n };\n this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function() {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$moveLines = function(dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(text) {\n this.renderer.showComposition(this.getCursorPosition());\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function(dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n this.$blockScrolling++;\n if (select === true) {\n this.selection.$moveSelection(function(){\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n this.$blockScrolling--;\n\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function() {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.$blockScrolling += 1;\n this.selection.selectAll();\n this.$blockScrolling -= 1;\n };\n this.clearSelection = function() {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function(row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function(pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function(select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n \n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token && token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n \n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n\n if (!found) {\n prevToken = token;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1\n );\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (token && token.type.indexOf('tag-name') !== -1) \n var tag = token.value;\n else\n return;\n\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2\n );\n if (range.compare(cursor.row, cursor.column) === 0) {\n found = false;\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (prevToken) {\n if (prevToken.type.indexOf('tag-close') !== -1) {\n range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n }\n\n if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth[tag]++;\n }\n else if (prevToken.value === '</') {\n depth[tag]--;\n }\n \n if (depth[tag] === 0)\n found = true;\n }\n }\n } while (prevToken && !found);\n }\n if (token && token.type.indexOf('tag-name')) {\n pos = range.start;\n if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n pos = range.end;\n }\n }\n\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n } else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n } else {\n this.selection.selectTo(pos.row, pos.column);\n }\n } else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n this.gotoLine = function(lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({row: lineNumber - 1, column: column || 0});\n\n this.$blockScrolling += 1;\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n this.$blockScrolling -= 1;\n\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n this.navigateTo = function(row, column) {\n this.selection.moveTo(row, column);\n };\n this.navigateUp = function(times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n this.navigateDown = function(times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n this.navigateLeft = function(times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n this.navigateRight = function(times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n this.navigateLineStart = function() {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n this.navigateLineEnd = function() {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n this.navigateFileEnd = function() {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n this.navigateFileStart = function() {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n this.navigateWordRight = function() {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n this.navigateWordLeft = function() {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n this.replace = function(replacement, options) {\n if (options)\n this.$search.set(options);\n\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n if (range !== null) {\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n }\n\n return replaced;\n };\n this.replaceAll = function(replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n\n this.$blockScrolling += 1;\n\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n\n for (var i = ranges.length - 1; i >= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n this.$blockScrolling -= 1;\n\n return replaced;\n };\n\n this.$tryReplace = function(range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({needle: needle});\n }\n\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.$blockScrolling += 1;\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n this.$blockScrolling -= 1;\n\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function() {\n this.$blockScrolling++;\n this.session.getUndoManager().undo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function() {\n this.$blockScrolling++;\n this.session.getUndoManager().redo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function() {\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session) {\n this.session.destroy();\n }\n };\n this.setAutoScrollEditorIntoView = function(enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function() {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function() {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())\n ) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function(enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n\n this.$resetCursorStyle = function() {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function(style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {data: style});\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function() {this.$updateHighlightActiveLine();},\n initialValue: true\n },\n highlightSelectedWord: {\n set: function(shouldHighlight) {this.$onSelectionChange();},\n initialValue: true\n },\n readOnly: {\n set: function(readOnly) {\n this.$resetCursorStyle(); \n },\n initialValue: false\n },\n cursorStyle: {\n set: function(val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n autoScrollEditorIntoView: {\n set: function(val) {this.setAutoScrollEditorIntoView(val);}\n },\n keyboardHandler: {\n set: function(val) { this.setKeyboardHandler(val); },\n get: function() { return this.keybindingId; },\n handlesSet: true\n },\n\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n showLineNumbers: \"renderer\",\n showGutter: \"renderer\",\n displayIndentGuides: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.reset();\n};\n\n(function() {\n this.execute = function(options) {\n var deltaSets = options.args[0];\n this.$doc = options.args[1];\n if (options.merge && this.hasUndo()){\n this.dirtyCounter--;\n deltaSets = this.$undoStack.pop().concat(deltaSets);\n }\n this.$undoStack.push(deltaSets);\n this.$redoStack = [];\n if (this.dirtyCounter < 0) {\n this.dirtyCounter = NaN;\n }\n this.dirtyCounter++;\n };\n this.undo = function(dontSelect) {\n var deltaSets = this.$undoStack.pop();\n var undoSelectionRange = null;\n if (deltaSets) {\n undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\n this.$redoStack.push(deltaSets);\n this.dirtyCounter--;\n }\n\n return undoSelectionRange;\n };\n this.redo = function(dontSelect) {\n var deltaSets = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSets) {\n redoSelectionRange =\n this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\n this.$undoStack.push(deltaSets);\n this.dirtyCounter++;\n }\n return redoSelectionRange;\n };\n this.reset = function() {\n this.$undoStack = [];\n this.$redoStack = [];\n this.dirtyCounter = 0;\n };\n this.hasUndo = function() {\n return this.$undoStack.length > 0;\n };\n this.hasRedo = function() {\n return this.$redoStack.length > 0;\n };\n this.markClean = function() {\n this.dirtyCounter = 0;\n };\n this.isClean = function() {\n return this.dirtyCounter === 0;\n };\n this.$serializeDeltas = function(deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $serializeDelta);\n };\n this.$deserializeDeltas = function(deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\n };\n \n function $serializeDelta(delta){\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines.length == 1 ? null : delta.lines,\n text: delta.lines.length == 1 ? delta.lines[0] : null\n };\n }\n \n function $deserializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines || [delta.text]\n };\n }\n \n function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\n var deltaSets_new = new Array(deltaSets_old.length);\n for (var i = 0; i < deltaSets_old.length; i++) {\n var deltaSet_old = deltaSets_old[i];\n var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\n \n for (var j = 0; j < deltaSet_old.deltas.length; j++) {\n var delta_old = deltaSet_old.deltas[j];\n deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\n }\n \n deltaSets_new[i] = deltaSet_new;\n }\n return deltaSets_new;\n }\n \n}).call(UndoManager.prototype);\n\nexports.UndoManager = UndoManager;\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar Gutter = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n \n this.gutterWidth = 0;\n\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n\n this.$cells = [];\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.setSession = function(session) {\n if (this.session)\n this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n\n this.setAnnotations = function(annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = {text: []};\n \n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n if (rowInfo.text.indexOf(annoText) === -1)\n rowInfo.text.push(annoText);\n\n var type = annotation.type;\n if (type == \"error\")\n rowInfo.className = \" ace_error\";\n else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (type == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n } else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n\n this.update = function(config) {\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineNumber = 0;\n \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$cells.length > index + 1) {\n cell = this.$cells.pop();\n this.element.removeChild(cell.element);\n }\n break;\n }\n\n cell = this.$cells[++index];\n if (!cell) {\n cell = {element: null, textNode: null, foldWidget: null};\n cell.element = dom.createElement(\"div\");\n cell.textNode = document.createTextNode('');\n cell.element.appendChild(cell.textNode);\n this.element.appendChild(cell.element);\n this.$cells[index] = cell;\n }\n\n var className = \"ace_gutter-cell \";\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (cell.element.className != className)\n cell.element.className = className;\n\n var height = session.getRowLength(row) * config.lineHeight + \"px\";\n if (height != cell.element.style.height)\n cell.element.style.height = height;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n if (!cell.foldWidget) {\n cell.foldWidget = dom.createElement(\"span\");\n cell.element.appendChild(cell.foldWidget);\n }\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (cell.foldWidget.className != className)\n cell.foldWidget.className = className;\n\n var height = config.lineHeight + \"px\";\n if (cell.foldWidget.style.height != height)\n cell.foldWidget.style.height = height;\n } else {\n if (cell.foldWidget) {\n cell.element.removeChild(cell.foldWidget);\n cell.foldWidget = null;\n }\n }\n \n var text = lastLineNumber = gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber;\n if (text !== cell.textNode.data)\n cell.textNode.data = text;\n\n row++;\n }\n\n this.element.style.height = config.minHeight + \"px\";\n\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineNumber = session.getLength() + firstLineNumber;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineNumber, config)\n : lastLineNumber.toString().length * config.characterWidth;\n \n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._emit(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$fixedWidth = false;\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return \"\";},\n getText: function() {return \"\";}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function() {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\n };\n\n this.getRegion = function(point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n\n}).call(Gutter.prototype);\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar dom = acequire(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n\n this.update = function(config) {\n if (!config) return;\n\n this.config = config;\n\n\n var html = [];\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + (this.session.$bidiHandler.isBidiRow(range.start.row)\n ? this.session.$bidiHandler.getPosLeft(range.start.column)\n : range.start.column * config.characterWidth);\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n this.drawBidiSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0; \n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var clazzModified = null;\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n clazzModified = clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end);\n\n if (this.session.$bidiHandler.isBidiRow(row)) {\n this.drawBidiSingleLineMarker(stringBuilder, lineRange, clazzModified,\n layerConfig, row == end ? 0 : 1, extraStyle);\n } else {\n this.drawSingleLineMarker(stringBuilder, lineRange, clazzModified,\n layerConfig, row == end ? 0 : 1, extraStyle);\n }\n }\n };\n this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height, top, left;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n height = config.lineHeight;\n top = this.$getTop(range.start.row, config);\n left = padding + range.start.column * config.characterWidth;\n stringBuilder.push(\n \"<div class='\", clazz, \" ace_br1 ace_start' style='\",\n \"height:\", height, \"px;\",\n \"right:0;\",\n \"top:\", top, \"px;\",\n \"left:\", left, \"px;\", extraStyle, \"'></div>\"\n );\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n } else {\n var width = range.end.column * config.characterWidth;\n height = config.lineHeight;\n top = this.$getTop(range.end.row, config);\n stringBuilder.push(\n \"<div class='\", clazz, \" ace_br12' style='\",\n \"height:\", height, \"px;\",\n \"width:\", width, \"px;\",\n \"top:\", top, \"px;\",\n \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n );\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n stringBuilder.push(\n \"<div class='\", clazz, (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"' style='\",\n \"height:\", height, \"px;\",\n \"right:0;\",\n \"top:\", top, \"px;\",\n \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n );\n };\n this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"width:\", width, \"px;\",\n \"top:\", top, \"px;\",\n \"left:\", left, \"px;\", extraStyle || \"\", \"'></div>\"\n );\n };\n this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n selections.forEach(function(selection) {\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"width:\", selection.width + (extraLength || 0), \"px;\",\n \"top:\", top, \"px;\",\n \"left:\", padding + selection.left, \"px;\", extraStyle || \"\", \"'></div>\"\n );\n });\n };\n\n this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"top:\", top, \"px;\",\n \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"top:\", top, \"px;\",\n \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n );\n };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n\n this.$updateEolChar = function() {\n var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\n ? this.EOL_CHAR_LF\n : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.padding = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$setFontMetrics = function(measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\n this.showInvisibles = showInvisibles;\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function() {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showInvisibles) {\n tabStr.push(\"<span class='ace_invisible ace_invisible_tab'>\"\n + lang.stringRepeat(this.TAB_CHAR, i)\n + \"</span>\");\n } else {\n tabStr.push(lang.stringRepeat(\" \", i));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = \"\";\n var tabClass = \"\";\n if (this.showInvisibles) {\n className += \" ace_invisible\";\n spaceClass = \" ace_invisible_space\";\n tabClass = \" ace_invisible_tab\";\n var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n } else{\n var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n var tabContent = spaceContent;\n }\n\n this.$tabStrings[\" \"] = \"<span class='\" + className + spaceClass + \"'>\" + spaceContent + \"</span>\";\n this.$tabStrings[\"\\t\"] = \"<span class='\" + className + tabClass + \"'>\" + tabContent + \"</span>\";\n }\n };\n\n this.updateLines = function(config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n this.scrollLines(config);\n }\n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\n\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > last)\n break;\n\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n var html = [];\n this.$renderLine(\n html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\n );\n lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n lineElement.innerHTML = html.join(\"\");\n }\n row++;\n }\n };\n\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\n var el = this.element;\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n el.removeChild(el.firstChild);\n\n if (oldConfig.lastRow > config.lastRow)\n for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n el.removeChild(el.lastChild);\n\n if (config.firstRow < oldConfig.firstRow) {\n var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\n if (el.firstChild)\n el.insertBefore(fragment, el.firstChild);\n else\n el.appendChild(fragment);\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\n el.appendChild(fragment);\n }\n };\n\n this.$renderLinesFragment = function(config, firstRow, lastRow) {\n var fragment = this.element.ownerDocument.createDocumentFragment();\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var container = dom.createElement(\"div\");\n\n var html = [];\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n container.innerHTML = html.join(\"\");\n if (this.$useLineGroups()) {\n container.className = 'ace_line_group';\n fragment.appendChild(container);\n container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n\n } else {\n while(container.firstChild)\n fragment.appendChild(container.firstChild);\n }\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var html = [];\n var firstRow = config.firstRow, lastRow = config.lastRow;\n\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > lastRow)\n break;\n\n if (this.$useLineGroups())\n html.push(\"<div class='ace_line_group' style='height:\", config.lineHeight*this.session.getRowLength(row), \"px'>\");\n\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups())\n html.push(\"</div>\"); // end the line group\n\n row++;\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function(stringBuilder, screenColumn, token, value) {\n var self = this;\n var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var replaceFunc = function(c, a, b, tabIdx, idx4) {\n if (a) {\n return self.showInvisibles\n ? \"<span class='ace_invisible ace_invisible_space'>\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"</span>\"\n : c;\n } else if (c == \"&\") {\n return \"&#38;\";\n } else if (c == \"<\") {\n return \"&#60;\";\n } else if (c == \">\") {\n return \"&#62;\";\n } else if (c == \"\\t\") {\n var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\n screenColumn += tabSize - 1;\n return self.$tabStrings[tabSize];\n } else if (c == \"\\u3000\") {\n var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n screenColumn += 1;\n return \"<span class='\" + classToUse + \"' style='width:\" +\n (self.config.characterWidth * 2) +\n \"px'>\" + space + \"</span>\";\n } else if (b) {\n return \"<span class='ace_invisible ace_invisible_space ace_invalid'>\" + self.SPACE_CHAR + \"</span>\";\n } else {\n screenColumn += 1;\n return \"<span class='ace_cjk' style='width:\" +\n (self.config.characterWidth * 2) +\n \"px'>\" + c + \"</span>\";\n }\n };\n\n var output = value.replace(replaceReg, replaceFunc);\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var style = \"\";\n if (token.type == \"fold\")\n style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\n stringBuilder.push(\"<span class='\", classes, \"'\", style, \">\", output, \"</span>\");\n }\n else {\n stringBuilder.push(output);\n }\n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function(stringBuilder, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\n return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\n return value.substr(cols);\n }\n return value;\n };\n\n this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(stringBuilder, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n if (!onlyContents) {\n stringBuilder.push(\"</div>\",\n \"<div class='ace_line' style='height:\",\n this.config.lineHeight, \"px'>\"\n );\n }\n\n stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\n\n split ++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn, token, value\n );\n }\n }\n }\n };\n\n this.$renderSimpleLine = function(stringBuilder, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides)\n value = this.renderIndentGuide(stringBuilder, value);\n if (value)\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n }\n };\n this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\n\n if (!onlyContents) {\n stringBuilder.push(\n \"<div class='ace_line' style='height:\", \n this.config.lineHeight * (\n this.$useLineGroups() ? 1 :this.session.getRowLength(row)\n ), \"px'>\"\n );\n }\n\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length)\n this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\n else\n this.$renderSimpleLine(stringBuilder, tokens);\n }\n\n if (this.showInvisibles) {\n if (foldLine)\n row = foldLine.end.row;\n\n stringBuilder.push(\n \"<span class='ace_invisible ace_invisible_eol'>\",\n row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\n \"</span>\"\n );\n }\n if (!onlyContents)\n stringBuilder.push(\"</div>\");\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$measureNode)\n this.$measureNode.parentNode.removeChild(this.$measureNode);\n delete this.$measureNode;\n };\n\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar isIE8;\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n if (isIE8 === undefined)\n isIE8 = !(\"opacity\" in this.element.style);\n\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = (isIE8\n ? this.$updateVisibility\n : this.$updateOpacity).bind(this);\n};\n\n(function() {\n \n this.$updateVisibility = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.visibility = val ? \"\" : \"hidden\";\n };\n this.$updateOpacity = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.opacity = val ? \"\" : \"0\";\n };\n \n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking){\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval){\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function(smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking && !isIE8) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.$updateCursors = (this.$updateOpacity).bind(this);\n this.restartTimer();\n }\n };\n\n this.addCursor = function() {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function() {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n if (this.smoothBlinking) {\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\n return;\n\n if (this.smoothBlinking) {\n setTimeout(function(){\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this));\n }\n \n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n\n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n\n blink();\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\n \n if (!this.drawCursor) {\n style.left = pixelPos.left + \"px\";\n style.top = pixelPos.top + \"px\";\n style.width = config.characterWidth + \"px\";\n style.height = config.lineHeight + \"px\";\n } else {\n this.drawCursor(style, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$setOverwrite = function(overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.element.appendChild(this.inner);\n\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n this.getWidth = function() {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight =\n this.setScrollHeight = function(height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {data: this.scrollLeft});\n }\n this.skipEvent = false;\n };\n this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.window = win || window;\n};\n\n(function() {\n\n\n this.schedule = function(change) {\n this.changes = this.changes | change;\n if (!this.pending && this.changes) {\n this.pending = true;\n var _self = this;\n event.nextFrame(function() {\n _self.pending = false;\n var changes;\n while (changes = _self.changes) {\n _self.changes = 0;\n _self.onRender(changes);\n }\n }, this.window);\n }\n };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 0;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n if (!CHAR_COUNT)\n this.$testFractionalRect();\n this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, height: 0};\n \n this.$testFractionalRect = function() {\n var el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(el.style);\n el.style.width = \"0.2px\";\n document.documentElement.appendChild(el);\n var w = el.getBoundingClientRect().width;\n if (w > 0 && w < 1)\n CHAR_COUNT = 50;\n else\n CHAR_COUNT = 100;\n el.parentNode.removeChild(el);\n };\n \n this.$setMeasureNodeStyles = function(style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function() {\n var size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", {data: size});\n }\n };\n\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = setInterval(function() {\n self.checkForSizeChanges();\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function() {\n if (CHAR_COUNT === 50) {\n var rect = null;\n try { \n rect = this.$measureNode.getBoundingClientRect();\n } catch(e) {\n rect = {width: 0, height:0 };\n }\n var size = {\n height: rect.height,\n width: rect.width / CHAR_COUNT\n };\n } else {\n var size = {\n height: this.$measureNode.clientHeight,\n width: this.$measureNode.clientWidth / CHAR_COUNT\n };\n }\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n\n this.$measureCharWidth = function(ch) {\n this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n \n this.getCharacterWidth = function(ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n\n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar config = acequire(\"./config\");\nvar useragent = acequire(\"./lib/useragent\");\nvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\nvar MarkerLayer = acequire(\"./layer/marker\").Marker;\nvar TextLayer = acequire(\"./layer/text\").Text;\nvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\nvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\nvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\nvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\nvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \".ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ntext-indent: -1em;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: inherit;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\ntext-indent: 0;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\n-webkit-transition: opacity 0.18s;\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\n-webkit-transition: opacity 0.4s ease 0.05s;\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\n-webkit-transition: opacity 0.05s ease 0.05s;\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_text-input-ios {\\\nposition: absolute !important;\\\ntop: -100000px !important;\\\nleft: -100000px !important;\\\n}\\\n\";\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n this.$keepTextAreaAtCursor = !useragent.isOldIE;\n\n dom.addCssClass(this.container, \"ace_editor\");\n\n this.setTheme(theme);\n\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\n this.scrollBar = \n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\n\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n\n this.layerConfig = {\n width : 1,\n padding : 0,\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n lineHeight : 0,\n characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1,\n gutterOffset: 1\n };\n \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._emit(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n };\n this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$updateCachedSize = function(force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \n this.scrollBarH.element.style.left = \n this.scroller.style.left = gutterWidth + \"px\";\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \n \n this.scrollBarH.element.style.right = \n this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\n this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\n changes |= this.CHANGE_FULL;\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.onGutterResize = function() {\n var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n this.$loop.schedule(this.CHANGE_MARKER);\n }\n };\n this.adjustWrapLimit = function() {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n this.setAnimatedScroll = function(shouldAnimate){\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function() {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function() {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updateGutterLineHighlight = function() {\n var pos = this.$cursorLayer.$pixelPos;\n var height = this.layerConfig.lineHeight;\n if (this.session.getUseWrapMode()) {\n var cursor = this.session.selection.getCursor();\n cursor.column = 0;\n pos = this.$cursorLayer.getPixelPosition(cursor, true);\n height *= this.session.getRowLength(cursor.row);\n }\n this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\n this.$gutterLineHighlight.style.height = height + \"px\";\n };\n\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (!this.$keepTextAreaAtCursor)\n return;\n var config = this.layerConfig;\n var posTop = this.$cursorLayer.$pixelPos.top;\n var posLeft = this.$cursorLayer.$pixelPos.left;\n posTop -= config.offset;\n\n var style = this.textarea.style;\n var h = this.lineHeight;\n if (posTop < 0 || posTop > config.height - h) {\n style.top = style.left = \"0\";\n return;\n }\n\n var w = this.characterWidth;\n if (this.$composition) {\n var val = this.textarea.value.replace(/^\\x01+/, \"\");\n w *= (this.session.$getStringScreenWidth(val)[0]+2);\n h += 2;\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n\n posLeft += this.gutterWidth;\n style.height = h + \"px\";\n style.width = w + \"px\";\n style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\n style.top = Math.min(posTop, this.$size.height - h) + \"px\";\n };\n this.getFirstVisibleRow = function() {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function() {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.getLastFullyVisibleRow = function() {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n \n this.setScrollMargin = function(top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function() {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function() {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$renderChanges = function(changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return; \n } \n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n \n this._signal(\"beforeRender\");\n\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL\n ) {\n changes |= this.$computeLayerConfig();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\n this.content.style.marginTop = (-config.offset) + \"px\";\n this.content.style.width = config.width + 2 * this.$padding + \"px\";\n this.content.style.height = config.minHeight + \"px\";\n }\n if (changes & this.CHANGE_H_SCROLL) {\n this.content.style.marginLeft = -this.scrollLeft + \"px\";\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this._signal(\"afterRender\");\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\");\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\");\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight,\n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var vScroll = height > maxHeight;\n \n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n \n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n\n var offset = this.scrollTop % this.lineHeight;\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\n var changes = 0;\n if (this.layerConfig.width != longestLine) \n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n firstRow : firstRow,\n firstRowScreen: firstRowScreen,\n lastRow : lastRow,\n lineHeight : lineHeight,\n characterWidth : this.characterWidth,\n minHeight : minHeight,\n maxHeight : maxHeight,\n offset : offset,\n gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height : this.$size.scrollerHeight\n };\n\n return changes;\n };\n\n this.$updateLines = function() {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.scrollToLine = function(line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(y);\n };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function(deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n\n this.pixelToScreenCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = Math.round(offset);\n\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX};\n };\n\n this.screenToTextCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n\n var col = Math.round(offsetX / this.characterWidth);\n\n var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n\n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function(position) {\n if (!this.$composition)\n this.$composition = {\n keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\n cssText: this.textarea.style.cssText\n };\n\n this.$keepTextAreaAtCursor = true;\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n };\n this.setCompositionText = function(text) {\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function() {\n if (!this.$composition)\n return;\n\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n this.textarea.style.cssText = this.$composition.cssText;\n this.$composition = null;\n };\n this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n dom.importCssString(\n module.cssText,\n module.cssClass,\n _self.container.ownerDocument\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n var padding = \"padding\" in module ? module.padding \n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n if (this.scroller.style.cursor != style)\n this.scroller.style.cursor = style;\n };\n this.setMouseCursor = function(cursorStyle) {\n this.scroller.style.cursor = cursorStyle;\n };\n this.destroy = function() {\n this.$textLayer.destroy();\n this.$cursorLayer.destroy();\n };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {initialValue: false},\n showInvisibles: {\n set: function(value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function(val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function() {\n return this.$showPrintMargin && this.$printMarginColumn; \n }\n },\n showGutter: {\n set: function(show){\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function(show) {this.$gutterLayer.setShowFoldWidgets(show);},\n initialValue: true\n },\n showLineNumbers: {\n set: function(show) {\n this.$gutterLayer.setShowLineNumbers(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function(show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function(shouldHighlight) {\n if (!this.$gutterLineHighlight) {\n this.$gutterLineHighlight = dom.createElement(\"div\");\n this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\n this.$gutter.appendChild(this.$gutterLineHighlight);\n return;\n }\n\n this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\n if (this.$cursorLayer.$pixelPos)\n this.$updateGutterLineHighlight();\n },\n initialValue: false,\n value: true\n },\n hScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function(size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function(val) { this.setTheme(val); },\n get: function() { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar net = acequire(\"../lib/net\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\nvar config = acequire(\"../config\");\n\nfunction $workerBlob(workerUrl, mod) {\n var script = mod.src;\"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl, mod) {\n var blob = $workerBlob(workerUrl, mod);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n}\n\nvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n if (acequire.nameToUrl && !acequire.toUrl)\n acequire.toUrl = acequire.nameToUrl;\n \n if (config.get(\"packaged\") || !acequire.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl, mod);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod.id,\n classname : classname\n });\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.callbackId = 1;\n this.callbacks = {};\n this.messageBuffer = [];\n\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n var _self = this;\n\n this.$worker = {};\n this.$worker.terminate = function() {};\n this.$worker.postMessage = function(e) {\n _self.messageBuffer.push(e);\n if (main) {\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n };\n this.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = _self.messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n _self.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (_self.messageBuffer.length)\n processNext();\n });\n};\n\nUIWorkerClient.prototype = WorkerClient.prototype;\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar oop = acequire(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\n };\n \n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n this.$undoStackDepth = undoStack.length;\n this.setup();\n\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function(other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function() {\n if (this.othersActive) return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function(anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function() {\n if (!this.othersActive) return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.updateAnchors = function(delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n \n this.updateMarkers = function() {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.detach = function() {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.removeEventListener(\"change\", this.$onUpdate);\n this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function() {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n \n editor.$blockScrolling++;\n editor.inVirtualSelectionMode = true;\n \n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function() {\n var tmpSel = selection.toOrientedRange();\n\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.$blockScrolling--;\n editor.inVirtualSelectionMode = false;\n });\n\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true; \n var initialRange;\n var rectSel = [];\n var blockSelect = function() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.$blockScrolling++;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n editor.$blockScrolling--;\n };\n editor.$blockScrolling++;\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n editor.$blockScrolling--;\n \n screenCursor = {row: -1, column: -1};\n\n var onMouseSelectionEnd = function(e) {\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n editor.$blockScrolling++;\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n editor.$blockScrolling--;\n };\n\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n exec: function(editor) { editor.selectMoreLines(-1); },\n bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelow\",\n exec: function(editor) { editor.selectMoreLines(1); },\n bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorAboveSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelowSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreBefore\",\n exec: function(editor) { editor.selectMore(-1); },\n bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreAfter\",\n exec: function(editor) { editor.selectMore(1); },\n bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextBefore\",\n exec: function(editor) { editor.selectMore(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextAfter\",\n exec: function(editor) { editor.selectMore(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"splitIntoLines\",\n exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n readOnly: true\n}, {\n name: \"alignCursors\",\n exec: function(editor) { editor.alignCursors(); },\n bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n scrollIntoView: \"cursor\"\n}, {\n name: \"findAll\",\n exec: function(editor) { editor.findAll(); },\n bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n bindKey: \"esc\",\n exec: function(editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\n\nvar RangeList = acequire(\"./range_list\").RangeList;\nvar Range = acequire(\"./range\").Range;\nvar Selection = acequire(\"./selection\").Selection;\nvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = acequire(\"./lib/event\");\nvar lang = acequire(\"./lib/lang\");\nvar commands = acequire(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = acequire(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = acequire(\"./edit_session\").EditSession;\n(function() {\n this.getSelectionMarkers = function() {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function() {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function(range, $blockChangeEvents) {\n if (!range)\n return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n\n this.toSingleRange = function(range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function(pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function() {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n else if(this.ranges[0])\n this.fromOrientedRange(this.ranges[0]);\n };\n\n this.$onAddRange = function(range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {range: range});\n };\n\n this.$onRemoveRange = function(removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function() {\n if (this.rangeList)\n return;\n\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n\n this.splitIntoLines = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var range = this.getRange();\n var isBackwards = this.isBackwards();\n var startRow = range.start.row;\n var endRow = range.end.row;\n if (startRow == endRow) {\n if (isBackwards)\n var start = range.end, end = range.start;\n else\n var start = range.start, end = range.end;\n \n this.addRange(Range.fromPoints(end, end));\n this.addRange(Range.fromPoints(start, start));\n return;\n }\n\n var rectSel = [];\n var r = this.getLineRange(startRow, true);\n r.start.column = range.start.column;\n rectSel.push(r);\n\n for (var i = startRow + 1; i < endRow; i++)\n rectSel.push(this.getLineRange(i, true));\n\n r = this.getLineRange(endRow, true);\n r.end.column = range.end.column;\n rectSel.push(r);\n\n rectSel.forEach(this.addRange, this);\n }\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.selectionLead);\n var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\n\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n );\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n var docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards)\n rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = acequire(\"./editor\").Editor;\n(function() {\n this.updateSelectionMarkers = function() {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function(orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function(range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function(ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--; ) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function(e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n }; \n this.forEachSelection = function(cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n \n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function() {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n \n this.$checkMultiselectChange = function(e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row \n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n }\n };\n this.findAll = function(needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n } \n this.$search.set(options);\n \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n this.$blockScrolling += 1;\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--; )\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n \n this.$blockScrolling -= 1;\n\n return ranges.length;\n };\n this.selectMoreLines = function(dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function(dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n };\n this.selectMore = function(dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.$blockScrolling += 1;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.$blockScrolling -= 1;\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function() {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function(r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n \n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n \n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\n\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function(r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function(r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW, \" \")\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function(e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n });\n\n event.addListener(el, \"keyup\", reset);\n event.addListener(el, \"blur\", reset);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function(session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel)\n break;\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n var start = {row: row, column: column + 1};\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row --;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar Range = acequire(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.getRowLength = function(row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function() {\n var screenRows = 0;\n this.lineWidgets.forEach(function(w){\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n }; \n \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function(w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function(e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n } else if (delta.action == 'remove') {\n var removed = lineWidgets.splice(startRow + 1, len);\n removed.forEach(function(w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function(w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n\n this.addLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n \n this.session.lineWidgets[w.row] = w;\n \n w.session = this.session;\n \n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n }\n \n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n \n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.removeLineWidget = function(w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch(e){}\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n this.$updateRows();\n };\n \n this.getWidgetsAtRow = function(row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n \n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n \n this.renderWidgets = function(e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\nvar dom = acequire(\"../lib/dom\");\nvar Range = acequire(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n \n \n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n \n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \n var w = {\n row: pos.row, \n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"<br>\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\n };\n \n w.destroy = function() {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n \n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"\");\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\n\nvar Editor = acequire(\"./editor\").Editor;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar UndoManager = acequire(\"./undomanager\").UndoManager;\nvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\nacequire(\"./worker/worker_client\");\nacequire(\"./keyboard/hash_handler\");\nacequire(\"./placeholder\");\nacequire(\"./multi_select\");\nacequire(\"./mode/folding/fold_mode\");\nacequire(\"./theme/textmate\");\nacequire(\"./ext/error_marker\");\n\nexports.config = acequire(\"./config\");\nexports.acequire = acequire;\n\nif (typeof define === \"function\")\n exports.define = define;\nexports.edit = function(el) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = dom.getInnerText(el);\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el));\n editor.setSession(doc);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function(text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.version = \"1.2.9\";\n});\n (function() {\n ace.acequire([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n });\n })();\n \nmodule.exports = window.ace.acequire(\"ace/ace\");","!function(e){function t(n){if(o[n])return o[n].exports;var r=o[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var o={};t.m=e,t.c=o,t.d=function(e,o,n){t.o(e,o)||Object.defineProperty(e,o,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,\"a\",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=0)}([function(e,t,o){\"use strict\";var n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r=o(1),u={passive:!0,capture:!1},i=[\"scroll\",\"wheel\",\"touchstart\",\"touchmove\",\"touchenter\",\"touchend\",\"touchleave\",\"mouseout\",\"mouseleave\",\"mouseup\",\"mousedown\",\"mousemove\",\"mouseenter\",\"mousewheel\",\"mouseover\"],s=function(e,t){return void 0!==e?e:-1!==i.indexOf(t)&&u.passive},c=function(e){var t=Object.getOwnPropertyDescriptor(e,\"passive\");return t&&!0!==t.writable&&void 0===t.set?Object.assign({},e):e};if((0,r.eventListenerOptionsSupported)()){var p=EventTarget.prototype.addEventListener;!function(e){EventTarget.prototype.addEventListener=function(t,o,r){var i=\"object\"===(void 0===r?\"undefined\":n(r))&&null!==r,p=i?r.capture:r;r=i?c(r):{},r.passive=s(r.passive,t),r.capture=void 0===p?u.capture:p,e.call(this,t,o,r)},EventTarget.prototype.addEventListener._original=e}(p)}},function(e,t,o){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});t.eventListenerOptionsSupported=function(){var e=!1;try{var t=Object.defineProperty({},\"passive\",{get:function(){e=!0}});window.addEventListener(\"test\",null,t),window.removeEventListener(\"test\",null,t)}catch(e){}return e}}]);\n//# sourceMappingURL=index.js.map","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;","var ace = require('brace');\n\nmodule.exports = {\n render: function (h) {\n var height = this.height ? this.px(this.height) : '100%'\n var width = this.width ? this.px(this.width) : '100%'\n return h('div',{\n attrs: {\n style: \"height: \" + height + '; width: ' + width,\n }\n })\n },\n props:{\n value:{\n type:String,\n required:true\n },\n lang:String,\n theme:String,\n height:true,\n width:true,\n options:Object\n },\n data: function () {\n return {\n editor:null,\n contentBackup:\"\"\n }\n },\n methods: {\n px:function (n) {\n if( /^\\d*$/.test(n) ){\n return n+\"px\";\n }\n return n;\n }\n },\n watch:{\n value:function (val) {\n if(this.contentBackup !== val){\n this.editor.session.setValue(val,1);\n this.contentBackup = val;\n }\n },\n theme:function (newTheme) {\n this.editor.setTheme('ace/theme/'+newTheme);\n },\n lang:function (newLang) {\n this.editor.getSession().setMode('ace/mode/'+newLang);\n },\n options:function(newOption){\n this.editor.setOptions(newOption);\n },\n height:function(){\n this.$nextTick(function(){\n this.editor.resize()\n })\n },\n width:function(){\n this.$nextTick(function(){\n this.editor.resize()\n })\n }\n },\n beforeDestroy: function() {\n this.editor.destroy();\n this.editor.container.remove();\n },\n mounted: function () {\n var vm = this;\n var lang = this.lang||'text';\n var theme = this.theme||'chrome';\n\n require('brace/ext/emmet');\n\n var editor = vm.editor = ace.edit(this.$el);\n\n this.$emit('init',editor);\n \n editor.$blockScrolling = Infinity;\n //editor.setOption(\"enableEmmet\", true);\n editor.getSession().setMode('ace/mode/'+lang);\n editor.setTheme('ace/theme/'+theme);\n editor.setValue(this.value,1);\n this.contentBackup = this.value;\n\n editor.on('change',function () {\n var content = editor.getValue();\n vm.$emit('input',content);\n vm.contentBackup = content;\n });\n if(vm.options)\n editor.setOptions(vm.options);\n }\n}\n","ace.define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElixirHighlightRules = function() {\n\n this.$rules = { start: \n [ { token: \n [ 'meta.module.elixir',\n 'keyword.control.module.elixir',\n 'meta.module.elixir',\n 'entity.name.type.module.elixir' ],\n regex: '^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)' },\n { token: 'comment.documentation.heredoc',\n regex: '@(?:module|type)?doc (?:~[a-z])?\"\"\"',\n push: \n [ { token: 'comment.documentation.heredoc',\n regex: '\\\\s*\"\"\"',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'comment.documentation.heredoc' } ],\n comment: '@doc with heredocs is treated as documentation' },\n { token: 'comment.documentation.heredoc',\n regex: '@(?:module|type)?doc ~[A-Z]\"\"\"',\n push: \n [ { token: 'comment.documentation.heredoc',\n regex: '\\\\s*\"\"\"',\n next: 'pop' },\n { defaultToken: 'comment.documentation.heredoc' } ],\n comment: '@doc with heredocs is treated as documentation' },\n { token: 'comment.documentation.heredoc',\n regex: '@(?:module|type)?doc (?:~[a-z])?\\'\\'\\'',\n push: \n [ { token: 'comment.documentation.heredoc',\n regex: '\\\\s*\\'\\'\\'',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'comment.documentation.heredoc' } ],\n comment: '@doc with heredocs is treated as documentation' },\n { token: 'comment.documentation.heredoc',\n regex: '@(?:module|type)?doc ~[A-Z]\\'\\'\\'',\n push: \n [ { token: 'comment.documentation.heredoc',\n regex: '\\\\s*\\'\\'\\'',\n next: 'pop' },\n { defaultToken: 'comment.documentation.heredoc' } ],\n comment: '@doc with heredocs is treated as documentation' },\n { token: 'comment.documentation.false',\n regex: '@(?:module|type)?doc false',\n comment: '@doc false is treated as documentation' },\n { token: 'comment.documentation.string',\n regex: '@(?:module|type)?doc \"',\n push: \n [ { token: 'comment.documentation.string',\n regex: '\"',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'comment.documentation.string' } ],\n comment: '@doc with string is treated as documentation' },\n { token: 'keyword.control.elixir',\n regex: '\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|acequire|alias|use|quote|unquote|super)\\\\b(?![?!])',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|acequire|alias|use|quote|unquote|super)\\\\b(?![?!])' },\n { token: 'keyword.operator.elixir',\n regex: '\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b',\n comment: ' as above, just doesn\\'t need a \\'end\\' and does a logic operation' },\n { token: 'constant.language.elixir',\n regex: '\\\\b(?:nil|true|false)\\\\b(?![?!])' },\n { token: 'variable.language.elixir',\n regex: '\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])' },\n { token: \n [ 'punctuation.definition.variable.elixir',\n 'variable.other.readwrite.module.elixir' ],\n regex: '(@)([a-zA-Z_]\\\\w*)' },\n { token: \n [ 'punctuation.definition.variable.elixir',\n 'variable.other.anonymous.elixir' ],\n regex: '(&)(\\\\d*)' },\n { token: 'variable.other.constant.elixir',\n regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n { token: 'constant.numeric.elixir',\n regex: '\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b' },\n { token: 'punctuation.definition.constant.elixir',\n regex: ':\\'',\n push: \n [ { token: 'punctuation.definition.constant.elixir',\n regex: '\\'',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'constant.other.symbol.single-quoted.elixir' } ] },\n { token: 'punctuation.definition.constant.elixir',\n regex: ':\"',\n push: \n [ { token: 'punctuation.definition.constant.elixir',\n regex: '\"',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'constant.other.symbol.double-quoted.elixir' } ] },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '(?:\\'\\'\\')',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '(?>\\'\\'\\')',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '^\\\\s*\\'\\'\\'',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' } ],\n comment: 'Single-quoted heredocs' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '\\'',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\'',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'support.function.variable.quoted.single.elixir' } ],\n comment: 'single quoted string (allows for interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '(?:\"\"\")',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '(?>\"\"\")',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '^\\\\s*\"\"\"',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n comment: 'Double-quoted heredocs' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '\"',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\"',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'string.quoted.double.elixir' } ],\n comment: 'double quoted string (allows for interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[a-z](?:\"\"\")',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '~[a-z](?>\"\"\")',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '^\\\\s*\"\"\"',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n comment: 'Double-quoted heredocs sigils' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[a-z]\\\\{',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\\\}[a-z]*',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'string.interpolated.elixir' } ],\n comment: 'sigil (allow for interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[a-z]\\\\[',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\\\][a-z]*',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'string.interpolated.elixir' } ],\n comment: 'sigil (allow for interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[a-z]\\\\<',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\\\>[a-z]*',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'string.interpolated.elixir' } ],\n comment: 'sigil (allow for interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[a-z]\\\\(',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\\\)[a-z]*',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { defaultToken: 'string.interpolated.elixir' } ],\n comment: 'sigil (allow for interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[a-z][^\\\\w]',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '[^\\\\w][a-z]*',\n next: 'pop' },\n { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { include: '#escaped_char' },\n { defaultToken: 'string.interpolated.elixir' } ],\n comment: 'sigil (allow for interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[A-Z](?:\"\"\")',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '~[A-Z](?>\"\"\")',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '^\\\\s*\"\"\"',\n next: 'pop' },\n { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n comment: 'Double-quoted heredocs sigils' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[A-Z]\\\\{',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\\\}[a-z]*',\n next: 'pop' },\n { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n comment: 'sigil (without interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[A-Z]\\\\[',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\\\][a-z]*',\n next: 'pop' },\n { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n comment: 'sigil (without interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[A-Z]\\\\<',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\\\>[a-z]*',\n next: 'pop' },\n { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n comment: 'sigil (without interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[A-Z]\\\\(',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '\\\\)[a-z]*',\n next: 'pop' },\n { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n comment: 'sigil (without interpolation)' },\n { token: 'punctuation.definition.string.begin.elixir',\n regex: '~[A-Z][^\\\\w]',\n push: \n [ { token: 'punctuation.definition.string.end.elixir',\n regex: '[^\\\\w][a-z]*',\n next: 'pop' },\n { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n comment: 'sigil (without interpolation)' },\n { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],\n regex: '(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)',\n comment: 'symbols' },\n { token: 'punctuation.definition.constant.elixir',\n regex: '(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)',\n comment: 'symbols' },\n { token: \n [ 'punctuation.definition.comment.elixir',\n 'comment.line.number-sign.elixir' ],\n regex: '(#)(.*)' },\n { token: 'constant.numeric.elixir',\n regex: '\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n originalRegex: '(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n comment: '\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1 ?\\\\x61\\n\\n\\t\\t\\texamples (2rd alternation = escaped):\\n\\t\\t\\t?\\\\n ?\\\\b\\n\\n\\t\\t\\texamples (3rd alternation = normal):\\n\\t\\t\\t?a ?A ?0 \\n\\t\\t\\t?* ?\" ?( \\n\\t\\t\\t?. ?#\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t' },\n { token: 'keyword.operator.assignment.augmented.elixir',\n regex: '\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=' },\n { token: 'keyword.operator.comparison.elixir',\n regex: '===?|!==?|<=?|>=?' },\n { token: 'keyword.operator.bitwise.elixir',\n regex: '\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}' },\n { token: 'keyword.operator.logical.elixir',\n regex: '!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b',\n originalRegex: '(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b' },\n { token: 'keyword.operator.arithmetic.elixir',\n regex: '\\\\*|\\\\+|\\\\-|/' },\n { token: 'keyword.operator.other.elixir',\n regex: '\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>' },\n { token: 'keyword.operator.assignment.elixir', regex: '=' },\n { token: 'punctuation.separator.other.elixir', regex: ':' },\n { token: 'punctuation.separator.statement.elixir',\n regex: '\\\\;' },\n { token: 'punctuation.separator.object.elixir', regex: ',' },\n { token: 'punctuation.separator.method.elixir', regex: '\\\\.' },\n { token: 'punctuation.section.scope.elixir', regex: '\\\\{|\\\\}' },\n { token: 'punctuation.section.array.elixir', regex: '\\\\[|\\\\]' },\n { token: 'punctuation.section.function.elixir',\n regex: '\\\\(|\\\\)' } ],\n '#escaped_char': \n [ { token: 'constant.character.escape.elixir',\n regex: '\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)' } ],\n '#interpolated_elixir': \n [ { token: \n [ 'source.elixir.embedded.source',\n 'source.elixir.embedded.source.empty' ],\n regex: '(#\\\\{)(\\\\})' },\n { todo: \n { token: 'punctuation.section.embedded.elixir',\n regex: '#\\\\{',\n push: \n [ { token: 'punctuation.section.embedded.elixir',\n regex: '\\\\}',\n next: 'pop' },\n { include: '#nest_curly_and_self' },\n { include: '$self' },\n { defaultToken: 'source.elixir.embedded.source' } ] } } ],\n '#nest_curly_and_self': \n [ { token: 'punctuation.section.scope.elixir',\n regex: '\\\\{',\n push: \n [ { token: 'punctuation.section.scope.elixir',\n regex: '\\\\}',\n next: 'pop' },\n { include: '#nest_curly_and_self' } ] },\n { include: '$self' } ],\n '#regex_sub': \n [ { include: '#interpolated_elixir' },\n { include: '#escaped_char' },\n { token: \n [ 'punctuation.definition.arbitrary-repitition.elixir',\n 'string.regexp.arbitrary-repitition.elixir',\n 'string.regexp.arbitrary-repitition.elixir',\n 'punctuation.definition.arbitrary-repitition.elixir' ],\n regex: '(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})' },\n { token: 'punctuation.definition.character-class.elixir',\n regex: '\\\\[(?:\\\\^?\\\\])?',\n push: \n [ { token: 'punctuation.definition.character-class.elixir',\n regex: '\\\\]',\n next: 'pop' },\n { include: '#escaped_char' },\n { defaultToken: 'string.regexp.character-class.elixir' } ] },\n { token: 'punctuation.definition.group.elixir',\n regex: '\\\\(',\n push: \n [ { token: 'punctuation.definition.group.elixir',\n regex: '\\\\)',\n next: 'pop' },\n { include: '#regex_sub' },\n { defaultToken: 'string.regexp.group.elixir' } ] },\n { token: \n [ 'punctuation.definition.comment.elixir',\n 'comment.line.number-sign.elixir' ],\n regex: '(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)',\n originalRegex: '(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$',\n comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' } ] };\n \n this.normalizeRules();\n};\n\nElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',\n fileTypes: [ 'ex', 'exs' ],\n firstLineMatch: '^#!/.*\\\\belixir',\n foldingStartMarker: '(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$',\n foldingStopMarker: '^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)',\n keyEquivalent: '^~E',\n name: 'Elixir',\n scopeName: 'source.elixir' };\n\n\noop.inherits(ElixirHighlightRules, TextHighlightRules);\n\nexports.ElixirHighlightRules = ElixirHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\nvar Range = acequire(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n var range = this.indentationBlock(session, row);\n if (range)\n return range;\n\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1 || line[startLevel] != \"#\")\n return;\n\n var startColumn = line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var level = line.search(re);\n\n if (level == -1)\n continue;\n\n if (line[level] != \"#\")\n break;\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n var indent = line.search(/\\S/);\n var next = session.getLine(row + 1);\n var prev = session.getLine(row - 1);\n var prevIndent = prev.search(/\\S/);\n var nextIndent = next.search(/\\S/);\n\n if (indent == -1) {\n session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n return \"\";\n }\n if (prevIndent == -1) {\n if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n session.foldWidgets[row - 1] = \"\";\n session.foldWidgets[row + 1] = \"\";\n return \"start\";\n }\n } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n if (session.getLine(row - 2).search(/\\S/) == -1) {\n session.foldWidgets[row - 1] = \"start\";\n session.foldWidgets[row + 1] = \"\";\n return \"\";\n }\n }\n\n if (prevIndent!= -1 && prevIndent < indent)\n session.foldWidgets[row - 1] = \"start\";\n else\n session.foldWidgets[row - 1] = \"\";\n\n if (indent < nextIndent)\n return \"start\";\n else\n return \"\";\n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextMode = acequire(\"./text\").Mode;\nvar ElixirHighlightRules = acequire(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar FoldMode = acequire(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n this.HighlightRules = ElixirHighlightRules;\n this.foldingRules = new FoldMode();\n this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n this.lineCommentStart = \"#\";\n this.$id = \"ace/mode/elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n","ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(acequire, exports, module) {\n\"use strict\";\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar lang = acequire(\"./lib/lang\");\nvar Range = acequire(\"./range\").Range;\nvar Anchor = acequire(\"./anchor\").Anchor;\nvar HashHandler = acequire(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = acequire(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n \n this.getTokenizer = function() {\n function TabstopToken(str, _, stack) {\n str = str.substr(1);\n if (/^\\d+$/.test(str) && !stack.inFormatString)\n return [{tabstopId: parseInt(str, 10)}];\n return [{text: str}];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n SnippetManager.$tokenizer = new Tokenizer({\n start: [\n {regex: /:/, onMatch: function(val, state, stack) {\n if (stack.length && stack[0].expectIf) {\n stack[0].expectIf = false;\n stack[0].elseBranch = stack[0];\n return [stack[0]];\n }\n return \":\";\n }},\n {regex: /\\\\./, onMatch: function(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n }else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n } else if (stack.inFormatString) {\n if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\n\";\n else if (\"ulULE\".indexOf(ch) != -1) {\n val = {changeCase: ch, local: ch > \"a\"};\n }\n }\n\n return [val];\n }},\n {regex: /}/, onMatch: function(val, state, stack) {\n return [stack.length ? stack.shift() : val];\n }},\n {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n var t = TabstopToken(str.substr(1), state, stack);\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\"},\n {regex: /\\n/, token: \"newline\", merge: false}\n ],\n snippetVar: [\n {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n stack[0].choices = val.slice(1, -1).split(\",\");\n }, next: \"start\"},\n {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n onMatch: function(val, state, stack) {\n var ts = stack[0];\n ts.fmtString = val;\n\n val = this.splitRegex.exec(val);\n ts.guard = val[1];\n ts.fmt = val[2];\n ts.flag = val[3];\n return \"\";\n }, next: \"start\"},\n {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n stack[0].code = val.splice(1, -1);\n return \"\";\n }, next: \"start\"},\n {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n if (stack[0])\n stack[0].expectIf = true;\n }, next: \"start\"},\n {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n ],\n formatString: [\n {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n {regex: \"\", onMatch: function(val, state, stack) {\n stack.inFormatString = true;\n }, next: \"start\"}\n ]\n });\n SnippetManager.prototype.getTokenizer = function() {\n return SnippetManager.$tokenizer;\n };\n return SnippetManager.$tokenizer;\n };\n\n this.tokenizeTmSnippet = function(str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n return x.value || x;\n });\n };\n\n this.$getDefaultValue = function(editor, name) {\n if (/^[A-Z]\\d+$/.test(name)) {\n var i = name.substr(1);\n return (this.variables[name[0] + \"__\"] || {})[i];\n }\n if (/^\\d+$/.test(name)) {\n return (this.variables.__ || {})[name];\n }\n name = name.replace(/^TM_/, \"\");\n\n if (!editor)\n return;\n var s = editor.session;\n switch(name) {\n case \"CURRENT_WORD\":\n var r = s.getWordRange();\n case \"SELECTION\":\n case \"SELECTED_TEXT\":\n return s.getTextRange(r);\n case \"CURRENT_LINE\":\n return s.getLine(editor.getCursorPosition().row);\n case \"PREV_LINE\": // not possible in textmate\n return s.getLine(editor.getCursorPosition().row - 1);\n case \"LINE_INDEX\":\n return editor.getCursorPosition().column;\n case \"LINE_NUMBER\":\n return editor.getCursorPosition().row + 1;\n case \"SOFT_TABS\":\n return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n case \"TAB_SIZE\":\n return s.getTabSize();\n case \"FILENAME\":\n case \"FILEPATH\":\n return \"\";\n case \"FULLNAME\":\n return \"Ace\";\n }\n };\n this.variables = {};\n this.getVariableValue = function(editor, varName) {\n if (this.variables.hasOwnProperty(varName))\n return this.variables[varName](editor, varName) || \"\";\n return this.$getDefaultValue(editor, varName) || \"\";\n };\n this.tmStrFormat = function(str, ch, editor) {\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n var _self = this;\n var formatted = str.replace(re, function() {\n _self.variables.__ = arguments;\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n } else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n } else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n } else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n return fmtParts.join(\"\");\n });\n this.variables.__ = null;\n return formatted;\n };\n\n this.resolveVariables = function(snippet, editor) {\n var result = [];\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n } else if (typeof ch != \"object\") {\n continue;\n } else if (ch.skip) {\n gotoNext(ch);\n } else if (ch.processed < i) {\n continue;\n } else if (ch.text) {\n var value = this.getVariableValue(editor, ch.text);\n if (value && ch.fmtString)\n value = this.tmStrFormat(value, ch);\n ch.processed = i;\n if (ch.expectIf == null) {\n if (value) {\n result.push(value);\n gotoNext(ch);\n }\n } else {\n if (value) {\n ch.skip = ch.elseBranch;\n } else\n gotoNext(ch);\n }\n } else if (ch.tabstopId != null) {\n result.push(ch);\n } else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n\n this.insertSnippetForSelection = function(editor, snippetText) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n \n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function(x) {\n if (x == \"\\n\")\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function(p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n }\n if (ts.indexOf(p) !== -1)\n return;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function(t) {return typeof t === \"object\";});\n if (isNested && !ts.value) {\n ts.value = value;\n } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function(ts) {ts.length = 0;});\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || {tabstopId: p.tabstopId};\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p)\n expanding[id] = null;\n continue;\n }\n \n var ts = tabstops[id];\n var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n arg.unshift(i + 1, Math.max(0, i1 - i));\n arg.push(p);\n expanding[id] = p;\n tokens.splice.apply(tokens, arg);\n\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function(t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1){\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n } else\n column += t.length;\n text += t;\n } else {\n if (!t.start)\n t.start = {row: row, column: column};\n else\n t.end = {row: row, column: column};\n }\n });\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, text);\n\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n };\n \n this.insertSnippet = function(editor, snippetText) {\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText);\n \n editor.forEachSelection(function() {\n self.insertSnippetForSelection(editor, snippetText);\n }, null, {keepOrder: true});\n \n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n\n this.$getScope = function(editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n \n return scope;\n };\n\n this.getActiveScopes = function(editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n\n this.expandWithTab = function(editor, options) {\n var self = this;\n var result = editor.forEachSelection(function() {\n return self.expandSnippetForSelection(editor, options);\n }, null, {keepOrder: true});\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n \n this.expandSnippetForSelection = function(editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row,\n cursor.column - snippet.replaceBefore.length,\n cursor.column + snippet.replaceAfter.length\n );\n\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n\n this.findMatchingSnippet = function(snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.register = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n \n if (!snippets) \n snippets = [];\n \n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n } else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n \n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n \n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger, \"\", true);\n\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger, \"\", true);\n }\n\n if (snippets && snippets.content)\n addSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(addSnippet);\n \n this._signal(\"registerSnippets\", {scope: scope});\n };\n this.unregister = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope||scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope||scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n this.parseSnippetFile = function(str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n } catch (e) {}\n } if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n } else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n } else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n } else {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n this.getSnippetByName = function(name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n};\n(function() {\n this.attach = function(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n this.$openTabstops = null;\n this.selectedTabstop = null;\n\n this.editor = editor;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n this.detach = function() {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges = null;\n this.tabstops = null;\n this.selectedTabstop = null;\n this.editor.removeListener(\"change\", this.$onChange);\n this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.editor = null;\n };\n\n this.onChange = function(delta) {\n var changeRange = delta;\n var isRemove = delta.action[0] == \"r\";\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n var colDiff = end.column - start.column;\n\n if (isRemove) {\n lineDif = -lineDif;\n colDiff = -colDiff;\n }\n if (!this.$inChange && isRemove) {\n var ts = this.selectedTabstop;\n var changedOutside = ts && !ts.some(function(r) {\n return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n });\n if (changedOutside)\n return this.detach();\n }\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var r = ranges[i];\n if (r.end.row < start.row)\n continue;\n\n if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n this.removeRange(r);\n i--;\n continue;\n }\n\n if (r.start.row == startRow && r.start.column > start.column)\n r.start.column += colDiff;\n if (r.end.row == startRow && r.end.column >= start.column)\n r.end.column += colDiff;\n if (r.start.row >= startRow)\n r.start.row += lineDif;\n if (r.end.row >= startRow)\n r.end.row += lineDif;\n\n if (comparePoints(r.start, r.end) > 0)\n this.removeRange(r);\n }\n if (!ranges.length)\n this.detach();\n };\n this.updateLinkedFields = function() {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges)\n return;\n this.$inChange = true;\n var session = this.editor.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = ts.length; i--;) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n this.onAfterExec = function(e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n this.onChangeSelection = function() {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = this.ranges.length; i--;) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n this.onChangeSession = function() {\n this.detach();\n };\n this.tabNext = function(dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n if (index === 0)\n this.detach();\n };\n this.selectTabstop = function(index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n \n this.selectedTabstop = ts;\n if (!this.editor.inVirtualSelectionMode) { \n var sel = this.editor.multiSelect;\n sel.toSingleRange(ts.firstNonLinked.clone());\n for (var i = ts.length; i--;) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n if (sel.ranges[0])\n sel.addRange(sel.ranges[0].clone());\n } else {\n this.editor.selection.setRange(ts.firstNonLinked);\n }\n \n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n this.addTabstops = function(tabstops, start, end) {\n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n tabstops.forEach(function(ts, index) {\n var dest = this.$openTabstops[index] || ts;\n \n for (var i = ts.length; i--;) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n } else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n }, this);\n \n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n\n this.addTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n this.removeTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n this.removeRange = function(range) {\n var i = range.tabstop.indexOf(range);\n range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n this.ranges.splice(i, 1);\n this.editor.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys({\n \"Tab\": function(ed) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n return;\n }\n\n ed.tabstopManager.tabNext(1);\n },\n \"Shift-Tab\": function(ed) {\n ed.tabstopManager.tabNext(-1);\n },\n \"Esc\": function(ed) {\n ed.tabstopManager.detach();\n },\n \"Return\": function(ed) {\n return false;\n }\n });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n this.pos.row = row;\n this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n this.$insertRight = $insertRight;\n this.pos = pos; \n this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\n\n\nacequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n -moz-box-sizing: border-box;\\\n box-sizing: border-box;\\\n background: rgba(194, 193, 208, 0.09);\\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\\n position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = acequire(\"./editor\").Editor;\n(function() {\n this.insertSnippet = function(content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function(options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\nvar HashHandler = acequire(\"ace/keyboard/hash_handler\").HashHandler;\nvar Editor = acequire(\"ace/editor\").Editor;\nvar snippetManager = acequire(\"ace/snippets\").snippetManager;\nvar Range = acequire(\"ace/range\").Range;\nvar emmet, emmetPath;\nfunction AceEmmetEditor() {}\n\nAceEmmetEditor.prototype = {\n setupContext: function(editor) {\n this.ace = editor;\n this.indentation = editor.session.getTabString();\n if (!emmet)\n emmet = window.emmet;\n var resources = emmet.resources || emmet.require(\"resources\");\n resources.setVariable(\"indentation\", this.indentation);\n this.$syntax = null;\n this.$syntax = this.getSyntax();\n },\n getSelectionRange: function() {\n var range = this.ace.getSelectionRange();\n var doc = this.ace.session.doc;\n return {\n start: doc.positionToIndex(range.start),\n end: doc.positionToIndex(range.end)\n };\n },\n createSelection: function(start, end) {\n var doc = this.ace.session.doc;\n this.ace.selection.setRange({\n start: doc.indexToPosition(start),\n end: doc.indexToPosition(end)\n });\n },\n getCurrentLineRange: function() {\n var ace = this.ace;\n var row = ace.getCursorPosition().row;\n var lineLength = ace.session.getLine(row).length;\n var index = ace.session.doc.positionToIndex({row: row, column: 0});\n return {\n start: index,\n end: index + lineLength\n };\n },\n getCaretPos: function(){\n var pos = this.ace.getCursorPosition();\n return this.ace.session.doc.positionToIndex(pos);\n },\n setCaretPos: function(index){\n var pos = this.ace.session.doc.indexToPosition(index);\n this.ace.selection.moveToPosition(pos);\n },\n getCurrentLine: function() {\n var row = this.ace.getCursorPosition().row;\n return this.ace.session.getLine(row);\n },\n replaceContent: function(value, start, end, noIndent) {\n if (end == null)\n end = start == null ? this.getContent().length : start;\n if (start == null)\n start = 0; \n \n var editor = this.ace;\n var doc = editor.session.doc;\n var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end));\n editor.session.remove(range);\n \n range.end = range.start;\n \n value = this.$updateTabstops(value);\n snippetManager.insertSnippet(editor, value);\n },\n getContent: function(){\n return this.ace.getValue();\n },\n getSyntax: function() {\n if (this.$syntax)\n return this.$syntax;\n var syntax = this.ace.session.$modeId.split(\"/\").pop();\n if (syntax == \"html\" || syntax == \"php\") {\n var cursor = this.ace.getCursorPosition();\n var state = this.ace.session.getState(cursor.row);\n if (typeof state != \"string\")\n state = state[0];\n if (state) {\n state = state.split(\"-\");\n if (state.length > 1)\n syntax = state[0];\n else if (syntax == \"php\")\n syntax = \"html\";\n }\n }\n return syntax;\n },\n getProfileName: function() {\n var resources = emmet.resources || emmet.require(\"resources\");\n switch (this.getSyntax()) {\n case \"css\": return \"css\";\n case \"xml\":\n case \"xsl\":\n return \"xml\";\n case \"html\":\n var profile = resources.getVariable(\"profile\");\n if (!profile)\n profile = this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? \"xhtml\": \"html\";\n return profile;\n default:\n var mode = this.ace.session.$mode;\n return mode.emmetConfig && mode.emmetConfig.profile || \"xhtml\";\n }\n },\n prompt: function(title) {\n return prompt(title);\n },\n getSelection: function() {\n return this.ace.session.getTextRange();\n },\n getFilePath: function() {\n return \"\";\n },\n $updateTabstops: function(value) {\n var base = 1000;\n var zeroBase = 0;\n var lastZero = null;\n var ts = emmet.tabStops || emmet.require('tabStops');\n var resources = emmet.resources || emmet.require(\"resources\");\n var settings = resources.getVocabulary(\"user\");\n var tabstopOptions = {\n tabstop: function(data) {\n var group = parseInt(data.group, 10);\n var isZero = group === 0;\n if (isZero)\n group = ++zeroBase;\n else\n group += base;\n\n var placeholder = data.placeholder;\n if (placeholder) {\n placeholder = ts.processText(placeholder, tabstopOptions);\n }\n\n var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}';\n\n if (isZero) {\n lastZero = [data.start, result];\n }\n\n return result;\n },\n escape: function(ch) {\n if (ch == '$') return '\\\\$';\n if (ch == '\\\\') return '\\\\\\\\';\n return ch;\n }\n };\n\n value = ts.processText(value, tabstopOptions);\n\n if (settings.variables['insert_final_tabstop'] && !/\\$\\{0\\}$/.test(value)) {\n value += '${0}';\n } else if (lastZero) {\n var common = emmet.utils ? emmet.utils.common : emmet.require('utils');\n value = common.replaceSubstring(value, '${0}', lastZero[0], lastZero[1]);\n }\n \n return value;\n }\n};\n\n\nvar keymap = {\n expand_abbreviation: {\"mac\": \"ctrl+alt+e\", \"win\": \"alt+e\"},\n match_pair_outward: {\"mac\": \"ctrl+d\", \"win\": \"ctrl+,\"},\n match_pair_inward: {\"mac\": \"ctrl+j\", \"win\": \"ctrl+shift+0\"},\n matching_pair: {\"mac\": \"ctrl+alt+j\", \"win\": \"alt+j\"},\n next_edit_point: \"alt+right\",\n prev_edit_point: \"alt+left\",\n toggle_comment: {\"mac\": \"command+/\", \"win\": \"ctrl+/\"},\n split_join_tag: {\"mac\": \"shift+command+'\", \"win\": \"shift+ctrl+`\"},\n remove_tag: {\"mac\": \"command+'\", \"win\": \"shift+ctrl+;\"},\n evaluate_math_expression: {\"mac\": \"shift+command+y\", \"win\": \"shift+ctrl+y\"},\n increment_number_by_1: \"ctrl+up\",\n decrement_number_by_1: \"ctrl+down\",\n increment_number_by_01: \"alt+up\",\n decrement_number_by_01: \"alt+down\",\n increment_number_by_10: {\"mac\": \"alt+command+up\", \"win\": \"shift+alt+up\"},\n decrement_number_by_10: {\"mac\": \"alt+command+down\", \"win\": \"shift+alt+down\"},\n select_next_item: {\"mac\": \"shift+command+.\", \"win\": \"shift+ctrl+.\"},\n select_previous_item: {\"mac\": \"shift+command+,\", \"win\": \"shift+ctrl+,\"},\n reflect_css_value: {\"mac\": \"shift+command+r\", \"win\": \"shift+ctrl+r\"},\n\n encode_decode_data_url: {\"mac\": \"shift+ctrl+d\", \"win\": \"ctrl+'\"},\n expand_abbreviation_with_tab: \"Tab\",\n wrap_with_abbreviation: {\"mac\": \"shift+ctrl+a\", \"win\": \"shift+ctrl+a\"}\n};\n\nvar editorProxy = new AceEmmetEditor();\nexports.commands = new HashHandler();\nexports.runEmmetCommand = function runEmmetCommand(editor) {\n try {\n editorProxy.setupContext(editor);\n var actions = emmet.actions || emmet.require(\"actions\");\n \n if (this.action == \"expand_abbreviation_with_tab\") {\n if (!editor.selection.isEmpty())\n return false;\n var pos = editor.selection.lead;\n var token = editor.session.getTokenAt(pos.row, pos.column);\n if (token && /\\btag\\b/.test(token.type))\n return false;\n }\n \n if (this.action == \"wrap_with_abbreviation\") {\n return setTimeout(function() {\n actions.run(\"wrap_with_abbreviation\", editorProxy);\n }, 0);\n }\n \n var result = actions.run(this.action, editorProxy);\n } catch(e) {\n if (!emmet) {\n load(runEmmetCommand.bind(this, editor));\n return true;\n }\n editor._signal(\"changeStatus\", typeof e == \"string\" ? e : e.message);\n console.log(e);\n result = false;\n }\n return result;\n};\n\nfor (var command in keymap) {\n exports.commands.addCommand({\n name: \"emmet:\" + command,\n action: command,\n bindKey: keymap[command],\n exec: exports.runEmmetCommand,\n multiSelectAction: \"forEach\"\n });\n}\n\nexports.updateCommands = function(editor, enabled) {\n if (enabled) {\n editor.keyBinding.addKeyboardHandler(exports.commands);\n } else {\n editor.keyBinding.removeKeyboardHandler(exports.commands);\n }\n};\n\nexports.isSupportedMode = function(mode) {\n if (!mode) return false;\n if (mode.emmetConfig) return true;\n var id = mode.$id || mode;\n return /css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(id);\n};\n\nexports.isAvailable = function(editor, command) {\n if (/(evaluate_math_expression|expand_abbreviation)$/.test(command))\n return true;\n var mode = editor.session.$mode;\n var isSupported = exports.isSupportedMode(mode);\n if (isSupported && mode.$modes) {\n try {\n editorProxy.setupContext(editor);\n if (/js|php/.test(editorProxy.getSyntax()))\n isSupported = false;\n } catch(e) {}\n }\n return isSupported;\n};\n\nvar onChangeMode = function(e, target) {\n var editor = target;\n if (!editor)\n return;\n var enabled = exports.isSupportedMode(editor.session.$mode);\n if (e.enableEmmet === false)\n enabled = false;\n if (enabled)\n load();\n exports.updateCommands(editor, enabled);\n};\n\nvar load = function(cb) {\n if (typeof emmetPath == \"string\") {\n acequire(\"ace/config\").loadModule(emmetPath, function() {\n emmetPath = null;\n cb && cb();\n });\n }\n};\n\nexports.AceEmmetEditor = AceEmmetEditor;\nacequire(\"ace/config\").defineOptions(Editor.prototype, \"editor\", {\n enableEmmet: {\n set: function(val) {\n this[val ? \"on\" : \"removeListener\"](\"changeMode\", onChangeMode);\n onChangeMode({enableEmmet: !!val}, this);\n },\n value: true\n }\n});\n\nexports.setCore = function(e) {\n if (typeof e == \"string\")\n emmetPath = e;\n else\n emmet = e;\n};\n});\n (function() {\n ace.acequire([\"ace/ext/emmet\"], function() {});\n })();\n "],"sourceRoot":""}